📓 Структура Модуля
Введение
Модуль - это, как правило, пакет Python (директория, содержащая файл _init__.py), расположенный в главной директории бота modules/. Он имеет определенную структуру для интеграции с фреймворком PBModular.
Пример структуры модуля:.
my_module/
├── extensions/ # Дополнительно: Каталог для ModuleExtensions
│ ├── __init__.py
│ └── extra_handlers.py
├── strings/ # Дополнительно: Каталог для переводов
│ ├── en.yaml
│ └── ru.yaml
├── __init__.py # Требуется: Импортирует класс главного модуля
├── config.yaml # Требуется: Метаданные модуля, разрешения, конфигурация
├── main.py # Типичное расположение основного класса BaseModule
└── requirements.txt # Дополнительно: Зависимости пакета PythonWARNING
info.yaml устарел. Рассмотрите возможность использования config.yaml.
Основные компоненты
init.py: Делает каталог пакетом Python. Очень важно, чтобы он импортировал класс главного модуля (например,
from .main import MyModule), чтобыModuleLoaderмог найти и инстанцировать его.config.yaml: (Рекомендуется) Основной файл конфигурации. Содержит:
info: Основные сведения о модуле (имя,автор,версия,описание,src_url, подсказка версииpython, флагauto_load).permissions: Список необходимых разрешений (например,use_db,require_db,use_loader). См. ☑️ Разрешения модуля.config: Словарь для значений конфигурации модуля, доступный черезself.module_config.INFO
Fallback: Если отсутствует, то
info.yaml(содержащий только info и permissions) проверяется на обратную совместимость.
Файл основного класса (например, main.py): Содержит определение класса, который наследуется от
base.module.BaseModule. Этот класс содержит основную логику, состояние и методы обработчика модуля.
# main.py
from base.module import BaseModule
class MyModule(BaseModule):
# ... свойства, методы, обработчики...
pass- Хандлеры: Методы внутри
BaseModule(или егоModuleExtensions), украшенные@command,@callback_query,@messageили@inline_queryдля реагирования на события Telegram. Они получаютselfи опциональноclient(клиент Pyrogram),update(Message/CallbackQuery/InlineQuery) иsm_controller(контроллер FSM, если FSM настроен). Смотрите 🚦 Finite State Machine (FSM). - requirements.txt (Необязательно): Перечисляет все сторонние Python-пакеты, необходимые модулю, используя стандартный формат pip. Они автоматически устанавливаются/обновляются
ModuleManager. - strings/ (Необязательно): Содержит файлы YAML для локализации/перевода (например,
en.yaml,ru.yaml). Фреймворк автоматически загружает их вself.rawS(все языки) иself.S(текущий/обратный язык). См. 🌎 Переводы. - extensions/ (Необязательно): Предполагаемое местоположение для файлов
ModuleExtension(base.mod_ext.ModuleExtension). Они позволяют разделить код модуля на несколько файлов для лучшей организации, при этом разделяя контекст основного модуля (например,self.S,self.db). См. 📁 Мультифайловость.