Анализ архитектуры запуска ботов и решение проблем
Рассмотрим текущую реализацию запуска системы ботов и возникающие проблемы.
Текущая реализация запуска
Основной бот запускается следующим образом:
def main():
logger.info(f"Starting bot...")
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
loop.run_until_complete(group_manager.setup_group_clones())
loop.create_task(check_old_tokens())
loop.create_task(periodic_check())
loop.create_task(periodic_refresh_groups())
try:
bot.run_forever()
except KeyboardInterrupt:
logger.info("Shutting down")Класс управления групповыми ботами
Класс GroupCloneManager отвечает за управление привязанными ботами:
- Хранит словари активных ботов и их задач
- Обеспечивает добавление и удаление групповых клонов
- Управляет жизненным циклом ботов через асинхронные задачи
Ключевые методы класса:
setup_group_clones()- первоначальная настройка всех подключенных группadd_group_clone()- создание и запуск бота для конкретной группы_run_group_bot()- основной цикл работы группового ботаremove_group_clone()- корректное удаление ботаrefresh_group_clones()- синхронизация с актуальным состоянием БД
Возникающие проблемы
В консоли наблюдаются следующие предупреждения:
DEBUG | 2025-11-15 14:51:44 | bot.control_groups:add_group_clone:46 > Group |id| added and successfully started
DEBUG | 2025-11-15 14:51:44 | bot.control_groups:_run_group_bot:64 > Group |id| stopped: Cannot close a running event loopОсновные симптомы:
- Боты успешно запускаются и реагируют на команды
- Каждая команда обрабатывается дважды
- Возникает ошибка при попытке закрыть работающий event loop
Архитектурная схема
Текущая архитектура представляет собой следующую структуру:
- Основной бот выполняет роль оркестратора
- Для каждой группы пользователей запускается отдельный привязанный бот
- Все боты работают параллельно в рамках одного event loop
- Состояние синхронизируется с базой данных через периодические проверки
Проблема дублирования команд, вероятно, связана с тем, что обработчики событий регистрируются несколько раз или несколько экземпляров ботов реагируют на одни и те же события.