discordBot/ISSUES.md
deadzilla 071e313015 refactor: инкапсулировать глобальные переменные в BotRunner + валидация конфига
- bot.py: создан класс BotRunner (bot, stop_event, bot_ready, scheduler)
- bot.py: добавлена _validate_config() — проверка MORNING_TIME (ЧЧ:ММ) и MORNING_CHANNEL_ID (int)
- bot.py: убраны все глобальные переменные
- Dockerfile: healthcheck через ps aux (проверка процесса python bot.py)
- docker-compose.yml: добавлен MORNING_CHANNEL_ID
- ISSUES.md: закрыто 3 задачи (валидация конфига, инкапсуляция, multi-stage)
- tests/test_bot.py: адаптирован тест под BotRunner
2026-06-09 23:09:02 +05:00

5.0 KiB
Raw Blame History

ISSUES — Задачи и баг-трекер

Баги

  • on_command_error: проверка ctx.interaction может падать — при текстовых командах (command_prefix) ctx.interaction может быть None
    • Закрыто: коммит d698380 — добавлен hasattr(ctx, 'interaction') и проверка ctx.command на None
  • commands/help.py: список команд хардкодился вручную — при добавлении новой команды !hp показывал устаревший список
    • Закрыто: коммит 2690ee7 — собирает команды автоматически из ctx.bot.commands
  • console_commands/pogoda.py: хардкодил URL wttr.in, дублируя логику из utils/pogoda.py
    • Закрыто: коммит 560dc55 — использует API_URL_WEATHER из utils.pogoda
  • utils/pogoda.py + utils/cat.py: нет отдельного модуля utils/__init__.py с публичным API — импорты разбросаны
    • Закрыто: коммит 560dc55 — создан utils/__init__.py с __all__ и явными импортами

Задачи к реализации

Высокий приоритет

  • Заменить все print() на logging — в utils/pogoda.py, utils/morning_runner.py, console_commands/, bot.py
    • Закрыто: коммит 52fdbc3 — системные сообщения (startup, shutdown, retry, ошибки API) переведены на logging; print() оставлены в console_commands/ как пользовательский вывод в терминал
  • Автоматическая генерация !hp — собирать список команд из bot.commands вместо хардкода
    • Закрыто: коммит 2690ee7
  • Убрать дублирование commands/ и console_commands/ — вынести общую логику в utils/, оставить тонкие обёртки
    • Закрыто: коммит 560dc55format_weather_data_for_console(), gather_morning(), utils/__init__.py
  • Валидация конфигурации — проверить формат MORNING_TIME (ЧЧ:ММ) и наличие MORNING_CHANNEL_ID при запуске
    • Закрыто: добавлена _validate_config() в bot.py — проверка формата MORNING_TIME и типа MORNING_CHANNEL_ID

Средний приоритет

  • Инкапсулировать глобальные переменныеstop_event, bot_ready, scheduler завернуть в класс BotRunner
    • Закрыто: создан класс BotRunner в bot.py — все глобальные состояния инкапсулированы
  • Добавить rate-limiting для API-вызовов (TheCatAPI, wttr.in, Habr RSS)
  • Настроить логирование — уровни, формат, вывод в файл/консоль
  • Добавить тесты для console_commands/ — есть только test_help_console.py, нужны test_pogoda_console.py, test_news_console.py, test_morning_console.py
  • Проверка наличия .env — добавить явную проверку с информативным сообщением

Низкий приоритет

  • Улучшить Dockerfile — multi-stage сборка
    • Закрыто: для чистого Python без компиляции выгода минимальная, не актуально
  • Добавить healthcheck — в Dockerfile
    • Закрыто: healthcheck присутствует в Dockerfile (CMD python -c "import discord; print('Bot is running')"), добавлен коммитом 7bfb96c
  • Добавить pre-commit хуки — lint (flake8/ruff), форматирование (black)
  • Добавить type hints повсеместно — не все функции имеют аннотации (отсутствуют в utils/pogoda.py, utils/news.py, присутствуют в utils/cat.py, utils/morning_runner.py)
  • Интеграционные тесты — сейчас только unit-тесты с моками

Замечания

  • README.md ссылается на AGENTS.md как основной документ проекта, но AGENTS.md — инструкции для AI-ассистента
  • В тестовых файлах используется asyncio.run() внутри синхронных тестов — может конфликтовать с event loop (подтверждено: 50+ вхождений в test_fetch_cat.py, test_fetch_rss.py, test_fetch_weather.py)