- 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
5.0 KiB
5.0 KiB
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: хардкодил URLwttr.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/, оставить тонкие обёртки- Закрыто: коммит
560dc55—format_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
- Закрыто: healthcheck присутствует в Dockerfile (
- Добавить 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)