mirror of
https://gitflic.ru/project/maks1ms/ocab.git
synced 2025-10-25 19:27:41 +03:00
3.2 KiB
3.2 KiB
Спецификация модулей
Внимание!
Данная спецификация еще не закончена и активно разрабатывается. Могут быть значительные изменения (breaking changes).
Каждый модуль представлен в виде папки, содержащей два обязательных файла: info.json и __init__.py.
Метаинформация о модуле (info.json)
Этот файл содержит метаинформацию о модуле в формате JSON. Пример структуры info.json приведён ниже:
{
"id": "standard.info",
"name": "Info",
"description": "Модуль с информацией",
"author": "OCAB Team",
"version": "1.0.0",
"privileged": false,
"dependencies": {
"standard.roles": "^1.0.0",
"standard.database": "^1.0.0"
}
}
id: Уникальный идентификатор модуля.name: Название модуля.description: Описание функциональности модуля.author: Автор модуля.version: Версия модуля.privileged: Булево значение, указывающее, является ли модуль привилегированным.dependencies: Объект, описывающий зависимости модуля от других модулей с указанием версии.
Режимы выполнения модулей
Непривилегированный режим (privileged: false):
- Модуль выполняется в доверенной среде на основе RestrictedPython (это накладывает ряд ограничений);
- Может использовать только определенный набор разрешенных пакетов
- Имеет доступ к пакету
ocab_core.modules_system.public_apiдля взаимодействия с ботом.
Привилегированный режим (privileged: true):
- Модуль выполняется без ограничений.
- Имеет полный доступ ко всем пакетам.
- Должен использоваться с осторожностью и только для модулей, требующих расширенных прав.
Жизненный цикл модуля
- Загрузка метаданных из
info.json - Проверка зависимостей
- Загрузка кода модуля из
__init__.py - Вызов функции
module_init(если она есть)
Взаимодействие между модулями
Модули могут взаимодействовать друг с другом через API, предоставляемое системой управления модулями.
Например, есть функция get_module. Она позволяет получить модуль или предоставляемые им объекты по его идентификатору.