discordBot/ISSUES.md

33 lines
3.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] ~~Эмодзи в embed-сообщениях~~ — удалены `🌅`, `✅`, `❌` из `utils/morning_runner.py`
- [x] ~~f-string в logger~~ — замена на `%`-формат в `bot.py`
- [x] ~~`import time` внутри `__init__`~~ — перенесён на уровень модуля в `bot.py`
- [x] ~~Проверка наличия `.env`~~`.env` в `.gitignore`, есть `.env.example`
- [x] ~~Команда `!msg` в BotRunner~~ — удалена из проекта
- [x] ~~Отсутствует `.gitignore`~~ — файл существует
- [x] ~~Отсутствует Dockerfile~~ — файл существует
- [x] ~~Отсутствует `.env.example`~~ — файл существует
## Средний приоритет
- [ ] **Type hints в production-коде** — 17 функций без аннотаций:
- `commands/`: `cat()`, `hp()`, `morning()`, `nw()`, `pg()`, `stats()`, `status()` — все методы Cog
- `utils/pogoda.py`: `fetch_weather()`, `fetch_open_meteo()`, `wmo_to_russian()`, `translate_weather()`, `format_weather_data_for_console()`, `format_weather_for_embed()`, `pressure_to_mmhg()`
- `utils/news.py`: `fetch_rss()`, `truncate_title()`, `format_articles()`
- `utils/morning_runner.py`: `run_morning()`, `start()`, `stop()`
- [ ] **`asyncio.iscoroutinefunction` deprecated** — 53 warnings при запуске тестов, функция удалена в Python 3.16; причина — discord.py использует deprecated API (решение: обновление discord.py или monkey-patch в `bot.py`)
- [ ] **Утечка корутины Scheduler в тестах**`RuntimeWarning: coroutine 'Scheduler._scheduler_loop' was never awaited` в `test_morning_runner.py` (строки 105, 137, 166 — моки не останавливают task)
- [ ] **Graceful shutdown (SIGTERM)** — нет обработки `SIGTERM`, бот завершается резко в Docker/K8s без закрытия handler-ов и cleanup
- [ ] **Пустой `__init__` в Morning**`commands/morning.py` (строка 13): `def __init__(self): pass` можно убрать
- [ ] **Global RateLimiter на модульном уровне**`utils/rate_limiter.py` (строки 70-75): экземпляры создаются при импорте, нельзя подменить в тестах
## Низкий приоритет
- [ ] **Type hints в тестах** — 144 функции `test_*()` без `-> None` (не влияет на работу, но зашумляет warnings)
- [ ] **`import` внутри функций в тестах** — 23 вхождения в `tests/` (приемлемо, но лучше вынести наверх)
- [ ] **Добавить pre-commit хуки** — lint (ruff), форматирование (black)
- [ ] **Интеграционные тесты** — сейчас только unit-тесты с моками