18 Commits

Author SHA1 Message Date
deadzilla
4027b7df6c feat: ротация логов по размеру (RotatingFileHandler, 5 МБ, 5 бэкапов) 2026-06-12 21:43:00 +05:00
deadzilla
9c7909bde5 fix: автоматическое создание директории logs при запуске бота 2026-06-12 21:11:23 +05:00
deadzilla
29f2836cea feat: добавлено логирование во все модули
- utils/news.py: добавлен logger, логирование ошибок RSS
- utils/cat.py: добавлен logger, логирование ошибок TheCatAPI
- utils/pogoda.py: улучшены логи fallback/warning при ошибках API
- utils/rate_limiter.py: debug-логи при ожидании токенов
- commands/pg.py, news.py, cat.py, morning.py, status.py, stats.py: logger + логи ошибок и успешного выполнения команд
- console_commands/pogoda.py, news.py, cat.py, morning.py, status.py, stats.py: logger + логи выполнения
- bot.py: логи запуска/остановки, проверки конфигурации, маршрутизации консольных команд, f-строки -> %s формат
- ISSUES.md: снят флаг задачи по логированию
- все 243 теста пройдены
2026-06-12 18:58:33 +05:00
deadzilla
a52bb94224 feat: настроить логирование (stdout + файл, LOG_LEVEL) 2026-06-11 23:43:01 +05:00
deadzilla
26666550ac feat: добавить rate-limiting для всех внешних API-вызовов 2026-06-11 22:42:23 +05:00
deadzilla
52fdbc3778 refactor: заменил print() на logging для системных сообщений
- bot.py: startup, shutdown, ошибки авторизации → logger.info/error/critical
- utils/pogoda.py: retry и ошибки API → logger.warning/error
- console_commands/stop.py: ошибка остановки → logger.error
- commands/help.py: удалён артефакт print("Cog loaded!")
- Интерактивное меню и пользовательский вывод console_commands/ оставлены как print()
2026-06-09 21:16:13 +05:00
deadzilla
560dc558a9 refactor: убрал дублирование логики получения данных
- utils/pogoda.py: добавлена API_URL_WEATHER, format_weather_for_embed(),
  проверка None в format_weather_data_for_console()
- utils/morning_runner.py: вынесен MorningData (dataclass) и gather_morning();
  run_morning() использует их вместо ручного asyncio.gather
- utils/__init__.py: экспортирован публичный API (__all__)
- commands/pg.py: убран ручной парсинг погоды, используется
  format_weather_data_for_console()
- console_commands/morning.py: дубликат asyncio.gather заменён на gather_morning()
- console_commands/pogoda.py: хардкод URL заменён на API_URL_WEATHER
- console_commands/cat.py: заглушка заменена на рабочий вызов fetch_cat()
- tests/test_commands_pg.py: обновлён тест fetch_returns_none (бот теперь
  отправляет сообщение об ошибке вместо молчаливого возврата)
2026-06-09 17:37:18 +05:00
deadzilla
71bcd66794 feat: закрываю Sprint 1 — все 3 задачи выполнены
Задачи Sprint 1 (Critical Fixes):
- [1.1] Fallback в пустом embed (!morning) — добавлена проверка has_real_data и fallback сообщение при отключении внешних API
- [1.2] Обработка ошибок токена/сети в bot.run() — raise_exception=True + логирование LoginFailure, HTTPException, Exception
- [1.3] Рефакторинг парсинга погоды — вынесено в format_weather_data_for_console(), убран дублирующий код из 2 файлов

Изменения:
• utils/morning_runner.py — добавлена проверка has_real_data после формирования description_lines
• bot.py — обработчики исключений для запуска бота с детализированным логированием и пользовательскими сообщениями
• utils/pogoda.py — новая функция format_weather_data_for_console() для центрального форматирования погодных данных
• console_commands/pogoda.py — замена 15 строк дублирующейся логики на вызов единой функции (24→8 строк)
• console_commands/morning.py — аналогичные изменения для команды morning (19→13 строк с погодой)
• tests/test_morning_runner.py — +2 теста для fallback сценариев empty embed и only weather data
• tests/test_bot.py — новый файл с 2 тестами на проверку кода обработки ошибок
• tests/test_pogoda.py — +6 тестов для format_weather_data_for_console()

Статистика тестирования:
• Общее количество тестов: 200 (было 190)
• Новые тесты: 10
• Все тесты проходят успешно

Примечания:
- Сообщения без восклицательных знаков согласно preferencem
2026-06-01 16:32:02 +05:00
deadzilla
1a7f2d75b8 Добавить MORNING_CHANNEL_ID для утреннего дайджеста 2026-05-31 23:42:03 +05:00
deadzilla
d12579b73c fix: исправить импорт discord.ext.commands в morning_runner.py
- Заменить 'from discord import commands' на 'from discord.ext import commands'
- Исправлена ошибка ImportError, из-за которой не запускались тесты
- Обновлена документация AGENTS.md
2026-05-31 12:28:29 +05:00
deadzilla
05722c05ec fix: добавить импорт commands в morning_runner 2026-05-29 23:05:59 +05:00
deadzilla
66d188c1cd Добавить планировщик утреннего дайджеста
- utils/morning_runner.py: Scheduler + run_morning()
- bot.py: автоматический запуск планировщика при старте
- commands/morning.py: использовать run_morning() вместо дублирования
- .env.example: добавить MORNING_TIME=07:00
- AGENTS.md: обновить документацию
- tests/test_morning_runner.py: 10 тестов для Scheduler
2026-05-29 17:48:26 +05:00
deadzilla
4b9bb7e97a Добавить pytest-тесты и конфигурацию
- pytest.ini для конфигурации тестов
- tests/test_pogoda.py — тесты translate_weather, pressure_to_mmhg, wmo_to_russian (93 теста)
- tests/test_fetch_cat.py — тесты fetch_cat (10 тестов)
- tests/test_fetch_rss.py — тесты fetch_rss (20 тестов)
- tests/test_format_articles.py — тесты truncate_title, parse_date, format_articles (24 теста)
- tests/test_fetch_weather.py — тесты fetch_weather, fetch_open_meteo (20 тестов)
- tests/test_commands_pogoda.py — тесты команды !pogoda (13 тестов)
- Обновить AGENTS.md и requirements.txt
2026-05-29 15:45:56 +05:00
deadzilla
bc8b664d7d refactor: вынести fetch_cat в utils, добавить повторный вывод списка команд 2026-05-26 18:56:11 +05:00
deadzilla
25a8e77fb0 fix: использовать requests.Session для переиспользования соединений (ISSUE #8) 2026-05-26 18:17:17 +05:00
deadzilla
55a07e2a3c fix: вынести импорт datetime на уровень модуля (ISSUE #4) 2026-05-26 17:55:28 +05:00
deadzilla
4a40f705d4 fix: resolve issue #3 (deduplication) and fix coroutine handling
- Create utils/news.py with shared RSS parsing and formatting logic
- Refactor commands/news.py and console_commands/news.py to use utils/news.py
- Fix bot.py to handle async console commands (news, pogoda)
- Fix utils/pogoda.py to fall back to Open-Meteo on requests.RequestException
- Mark issue #3 as resolved in ISSUES.md
2026-05-26 13:58:35 +05:00
deadzilla
e1a0f6d2b6 refactor: вынести логику погоды в utils/pogoda.py (проблема 3)
- Создать utils/pogoda.py с общими функциями:
  - fetch_weather, fetch_open_meteo, wmo_to_russian, translate_weather, pressure_to_mmhg
- Обновить commands/pogoda.py: убрать дубликаты, импортировать из utils
- Обновить console_commands/pogoda.py: убрать дубликаты, импортировать из utils
- Сделать console_commands/pogoda.py async (требует fetch_weather)
- Обновить AGENTS.md и ISSUES.md (проблема 7 решена)
2026-05-26 12:32:15 +05:00