mirror of
https://gitflic.ru/project/maks1ms/ocab.git
synced 2024-12-23 16:23:01 +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
. Она позволяет получить модуль или предоставляемые им объекты по его идентификатору.