2024-07-10 11:28:42 +03:00
# Спецификация модулей
2024-07-10 11:56:52 +03:00
> **Внимание!**
>
> Данная спецификация еще не закончена и активно разрабатывается.
> Могут быть значительные изменения (breaking changes).
Каждый модуль представлен в виде папки, содержащей два обязательных файла: info.json и `__init__.py` .
## Метаинформация о модуле (info.json)
Этот файл содержит метаинформацию о модуле в формате JSON. Пример структуры info.json приведён ниже:
```json
{
"id": "standard.info",
"name": "Info",
"description": "Модуль с информацией",
"author": "OCAB Team",
2024-07-10 12:36:56 +03:00
"version": "1.0.0",
2024-07-10 11:56:52 +03:00
"privileged": false,
"dependencies": {
2024-07-10 12:36:56 +03:00
"standard.roles": "^1.0.0",
"standard.database": "^1.0.0"
2024-07-10 11:56:52 +03:00
}
}
```
- `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` (если она есть)
## Взаимодействие между модулями
2024-07-10 12:36:56 +03:00
Модули могут взаимодействовать друг с другом через [API ](../src/ocab_core/modules_system/public_api/__init__.py ), предоставляемое системой управления модулями.
2024-07-10 11:56:52 +03:00
2024-07-10 12:36:56 +03:00
Например, есть функция `get_module` . Она позволяет получить модуль или предоставляемые им объекты по е г о идентификатору.