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

54 lines
5.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# ISSUES — Задачи и баг-трекер
## Баги
- [x] `on_command_error`: проверка `ctx.interaction` может падать — при текстовых командах (`command_prefix`) `ctx.interaction` может быть `None`
- **Закрыто:** коммит `d698380` — добавлен `hasattr(ctx, 'interaction')` и проверка `ctx.command` на `None`
- [x] `commands/help.py`: список команд хардкодился вручную — при добавлении новой команды `!hp` показывал устаревший список
- **Закрыто:** коммит `2690ee7` — собирает команды автоматически из `ctx.bot.commands`
- [x] `console_commands/pogoda.py`: хардкодил URL `wttr.in`, дублируя логику из `utils/pogoda.py`
- **Закрыто:** коммит `560dc55` — использует `API_URL_WEATHER` из `utils.pogoda`
- [x] `utils/pogoda.py` + `utils/cat.py`: нет отдельного модуля `utils/__init__.py` с публичным API — импорты разбросаны
- **Закрыто:** коммит `560dc55` — создан `utils/__init__.py` с `__all__` и явными импортами
---
## Задачи к реализации
### Высокий приоритет
- [x] **Заменить все `print()` на `logging`** — в `utils/pogoda.py`, `utils/morning_runner.py`, `console_commands/`, `bot.py`
- **Закрыто:** коммит `52fdbc3` — системные сообщения (startup, shutdown, retry, ошибки API) переведены на `logging`; `print()` оставлены в `console_commands/` как пользовательский вывод в терминал
- [x] **Автоматическая генерация `!hp`** — собирать список команд из `bot.commands` вместо хардкода
- **Закрыто:** коммит `2690ee7`
- [x] **Убрать дублирование `commands/` и `console_commands/`** — вынести общую логику в `utils/`, оставить тонкие обёртки
- **Закрыто:** коммит `560dc55``format_weather_data_for_console()`, `gather_morning()`, `utils/__init__.py`
- [x] **Валидация конфигурации** — проверить формат `MORNING_TIME` (`ЧЧ:ММ`) и наличие `MORNING_CHANNEL_ID` при запуске
- **Закрыто:** добавлена `_validate_config()` в `bot.py` — проверка формата `MORNING_TIME` и типа `MORNING_CHANNEL_ID`
### Средний приоритет
- [x] **Инкапсулировать глобальные переменные**`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`** — добавить явную проверку с информативным сообщением
### Низкий приоритет
- [x] **Улучшить Dockerfile** — multi-stage сборка
- **Закрыто:** для чистого Python без компиляции выгода минимальная, не актуально
- [x] **Добавить 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`)