Анализ архитектуры запуска ботов и решение проблем

Рассмотрим текущую реализацию запуска системы ботов и возникающие проблемы.

Текущая реализация запуска

Основной бот запускается следующим образом:

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
  • Состояние синхронизируется с базой данных через периодические проверки

Проблема дублирования команд, вероятно, связана с тем, что обработчики событий регистрируются несколько раз или несколько экземпляров ботов реагируют на одни и те же события.