Skip to content

🖥️ Структура Бота

Бот основан на фреймворке pyrogram, документацию по которому вы можете прочитать здесь..

Важнейшим компонентом бота является класс ModuleLoader (base.loader.ModuleLoader), который загружает модули и управляет ими, взаимодействует с ModuleManager для их установки, обновления и удаления, а также распределяет события между модулями. При запуске ModuleLoader сканирует каталог modules/directory в корне исходного кода и пытается загрузить найденные там модули, соблюдая их настройку auto_load (задается в config.yaml или info.yaml).

Загрузка модуля происходит в несколько этапов в рамках метода load_module:

  1. Подготовка: Изменяет каталог модуля, проверяет/устанавливает зависимости (requirements.txt) через ModuleManager, читает метаданные модуля.

  2. Инстанцирование: Импортирует код модуля и создает экземпляр класса BaseModule.

  3. Проверка и настройка: Проверяет совместимость с версией Python (необязательно), проверяет разрешения (например, требования к базе данных по сравнению с конфигурацией бота), устанавливает соединение с базой данных (set_db), если оно запрошено и включено, и предоставляет экземпляр загрузчика (loader), если он запрошен.

  4. Приложение расширения: Итерация загруженных экземпляров BaseExtension и вызов их метода on_module, что позволяет расширениям изменять экземпляр модуля до окончательной инициализации.

  5. Стадия 2 Инициализация: Вызывает метод stage2 модуля, который регистрирует обработчики Pyrogram (команды, обратные вызовы, сообщения) и загружает любые ModuleExtensions, определенные в модуле.

  6. Окончательные шаги: Вызывает метод 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, проверку/применение обновлений (включая резервное копирование, откат и миграцию БД), управление зависимостями и удаление модулей.