🖥️ Структура Бота
Бот основан на фреймворке 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, проверку/применение обновлений (включая резервное копирование, откат и миграцию БД), управление зависимостями и удаление модулей.