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