- ISSUES.md: закрыто 7 задач с ссылками на коммиты (on_command_error, !hp харкод, харкод URL, utils/__init__.py, print→logging, автогенерация !hp, дублирование команд, healthcheck) - AGENTS.md: удалена пустая секция 'Структура проекта' (есть в README.md) - README.md: обновлена архитектура (добавлены utils/__init__.py, utils/morning_runner.py, console_commands/help.py, Docker-файлы), исправлено кол-во тестов (262→204), добавлена секция 'Запуск в Docker', убрана ссылка на AGENTS.md как основной документ, добавлена консольная команда help, обновлены таблицы утилит
51 lines
4.5 KiB
Markdown
51 lines
4.5 KiB
Markdown
# 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`
|
||
- [ ] **Валидация конфигурации** — проверить формат `MORNING_TIME` (`ЧЧ:ММ`) и наличие `MORNING_CHANNEL_ID` при запуске
|
||
|
||
### Средний приоритет
|
||
|
||
- [ ] **Инкапсулировать глобальные переменные** — `stop_event`, `bot_ready`, `scheduler` завернуть в класс `BotRunner`
|
||
- [ ] **Добавить 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 сборка
|
||
- [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`)
|