🖥️ Структура Бота
Бот основан на фреймворке pyrogram, документацию по которому вы можете прочитать здесь..
Важнейшим компонентом бота является класс ModuleLoader
(base.loader.ModuleLoader
), который загружает модули и управляет ими, взаимодействует с ModuleManager
для их установки, обновления и удаления, а также распределяет события между модулями. При запуске ModuleLoader
сканирует каталог modules/directory в корне исходного кода и пытается загрузить найденные там модули, соблюдая их настройку auto_load
(задается в config.yaml
или info.yaml
).
Загрузка модуля происходит в несколько этапов в рамках метода load_module:
Подготовка: Изменяет каталог модуля, проверяет/устанавливает зависимости (
requirements.txt
) черезModuleManager
, читает метаданные модуля.Инстанцирование: Импортирует код модуля и создает экземпляр класса
BaseModule
.Проверка и настройка: Проверяет совместимость с версией Python (необязательно), проверяет разрешения (например, требования к базе данных по сравнению с конфигурацией бота), устанавливает соединение с базой данных (
set_db
), если оно запрошено и включено, и предоставляет экземпляр загрузчика (loader
), если он запрошен.Приложение расширения: Итерация загруженных экземпляров
BaseExtension
и вызов их метода on_module, что позволяет расширениям изменять экземпляр модуля до окончательной инициализации.Стадия 2 Инициализация: Вызывает метод stage2 модуля, который регистрирует обработчики Pyrogram (команды, обратные вызовы, сообщения) и загружает любые
ModuleExtensions
, определенные в модуле.Окончательные шаги: Вызывает метод
on_init
модуля для пользовательской логики инициализации.
INFO
- BaseExtension (
base.base_ext.BaseExtension
): Они загружаются один раз при запуске бота из каталога extensions/. Они могут влиять на процесс загрузки всех модулей через хук on_module, работающий между Stage 1 (инстанцирование/настройка) и Stage 2 (регистрация обработчика). Полезно для добавления сквозных функций. - ModuleExtension (
base.mod_ext.ModuleExtension
): Они определяются в рамках конкретного модуля и загружаются во время его инициализации на Stage. Они позволяют разделить собственный код модуля на несколько файлов, при этом имея общий доступ к атрибутам основного модуля (например, bot, S, db).
ModuleLoader
также тесно сотрудничает с ModuleManager
(base.mod_manager.ModuleManager
) который выполняет операции: установку из Git, проверку/применение обновлений (включая резервное копирование, откат и миграцию БД), управление зависимостями и удаление модулей.