📓 Структура Модуля
Введение
Модуль - это, как правило, пакет 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 # Дополнительно: Зависимости пакета Python
WARNING
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
для реагирования на события Telegram. Они принимают self и опционально client (Pyrogram client) и update (Message/CallbackQuery). Состояние FSM также может быть передано, если оно настроено (см. документацию по 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
). См. 📁 Мультифайловость.