118 Commits

Author SHA1 Message Date
deadzilla
a8e9be09c7 Добавлен tzdata и установлен часовой пояс Asia/Yekaterinburg для корректной работы планировщика 2026-07-09 00:14:49 +05:00
deadzilla
b98c696498 Исправлена версия defusedxml: 7.0.0 -> 0.7.0 (версии 7.0.0 не существует) 2026-07-09 00:07:01 +05:00
deadzilla
7ade3147cf форматирование: применён ruff format ко всем файлам проекта (21 файл) 2026-07-08 00:44:22 +05:00
deadzilla
d20957ac5f исправлено: добавлены noqa: E402 для импортов после monkey-patch в bot.py 2026-07-08 00:40:37 +05:00
deadzilla
4b61909ebc исправлено: убраны неиспользуемые импорты и переменные из tests/test_morning_runner.py 2026-07-08 00:40:08 +05:00
deadzilla
4e816d5998 исправлено: перемещён import contextlib в начало файла 2026-07-08 00:39:43 +05:00
deadzilla
b21237b042 исправлено: убран неиспользуемый import requests из tests/test_integration.py 2026-07-08 00:39:27 +05:00
deadzilla
0fa467d40e исправлено: переименована неоднозначная переменная l в line 2026-07-08 00:39:12 +05:00
deadzilla
a1b72ecbcf исправлено: убрана неиспользуемая переменная mock_fallback в test_fetch_open_meteo_ssl_error 2026-07-08 00:38:59 +05:00
deadzilla
00ec2eac0e исправлено: убран неиспользуемый import pytest из tests/test_fetch_rss.py 2026-07-08 00:38:16 +05:00
deadzilla
ab0039661a исправлено: убраны неиспользуемые импорты json и pytest из tests/test_fetch_cat.py 2026-07-08 00:37:35 +05:00
deadzilla
5a2ff483a1 исправлено: убраны неиспользуемые импорты pytest и patch из tests/test_commands_status.py 2026-07-08 00:37:16 +05:00
deadzilla
cd25d63f5b исправлено: убран неиспользуемый import pytest из tests/test_commands_stats.py 2026-07-08 00:37:04 +05:00
deadzilla
be0aa5211a исправлено: убран неиспользуемый import discord из commands/morning.py 2026-07-08 00:36:50 +05:00
deadzilla
02b6b10ea3 исправлено: убран неиспользуемый import discord из commands/help.py 2026-07-08 00:36:41 +05:00
deadzilla
dda5753f8c Обновление ISSUES.md: все задачи закрыты 2026-07-08 00:28:09 +05:00
deadzilla
a063abcd17 Добавлены интеграционные тесты: загрузка когов, команды !cat и !stats, утилиты (9 тестов, итого 239) 2026-07-08 00:27:56 +05:00
deadzilla
a5ea2086cd Исправление: добавил pre-commit хуки (ruff + ruff-format) 2026-07-08 00:17:01 +05:00
deadzilla
a9a2d40e5c Обновление ISSUES.md: отмечен исправленный LOW-приоритет 2026-07-08 00:15:47 +05:00
deadzilla
a8d2bdb579 Исправление: вынес import из тел функций тестов наверх модулей (35 вхождений) 2026-07-08 00:15:34 +05:00
deadzilla
beae42fdc8 Исправление: добавил -> None ко всем 140 test-функциям 2026-07-08 00:10:27 +05:00
deadzilla
ea40400a65 Обновление ISSUES.md: все MEDIUM задачи исправлены 2026-07-08 00:08:02 +05:00
deadzilla
ff2b9bb8d7 Исправление: factory-функции для RateLimiter (make_cat_limiter, make_weather_limiter и т.д.) 2026-07-08 00:07:55 +05:00
deadzilla
77c5f5a3a6 Исправление: graceful shutdown через on_shutdown + context manager (SIGTERM на Docker/K8s) 2026-07-08 00:05:47 +05:00
deadzilla
f6f5b96563 Исправление: убрал пустой __init__ из Morning cog 2026-07-07 23:33:51 +05:00
deadzilla
41102a9d3d Исправление: убрал утечку корутин Scheduler в тестах — mock _start_scheduler вместо create_task 2026-07-07 23:32:46 +05:00
deadzilla
faad12a0a6 Исправление: monkey-patch asyncio.iscoroutinefunction для устранения 53 deprecation warnings 2026-07-07 23:20:26 +05:00
deadzilla
65e01f0091 Исправление: добавил type hints ко всем 20 production-функциям 2026-07-07 23:17:25 +05:00
deadzilla
613dea55cf docs: обновил ISSUES.md — отметил исправленные HIGH-проблемы 2026-07-07 23:12:08 +05:00
deadzilla
57d7792755 Исправление: перенос import time из __init__ на уровень модуля 2026-07-07 23:11:38 +05:00
deadzilla
aa40f2b7ff Исправление: замена f-string на %-формат в logger.error 2026-07-07 23:10:21 +05:00
deadzilla
ec0cee6c68 Исправление: удаление эмодзи из сообщений и логов morning_runner 2026-07-07 23:08:58 +05:00
deadzilla
5a11fb2b5d Исправление: замена signal handler на on_shutdown (устранён race condition event loop) 2026-07-07 22:51:23 +05:00
deadzilla
07af928654 Исправление: обрезка embed-полей до лимитов Discord (description 4096, field 1024) 2026-07-07 22:47:56 +05:00
deadzilla
5a2f1630f6 Безопасность: замена xml.etree.ElementTree на defusedxml (защита от XXE-инъекций) 2026-07-07 22:46:02 +05:00
deadzilla
2d890bea98 docs: актуализировал README.md — тесты, зависимости, .env.example 2026-07-07 22:27:02 +05:00
deadzilla
d1c64a5a2b feat: форматирование времени ожидания в дни/часы/минуты/секунды 2026-07-07 22:19:04 +05:00
deadzilla
d62fac7718 Удалён файл CODE_REVIEW.md 2026-07-07 21:57:49 +05:00
deadzilla
6e2a092548 fix: H5 — 50 тестов asyncio.run() заменены на async def
- test_fetch_cat.py: 10 тестов (def → async def, asyncio.run → await)
- test_fetch_rss.py: 21 тест (def → async def, asyncio.run → await)
- test_fetch_weather.py: 19 тест (def → async def, asyncio.run → await)
- Удалён лишний import asyncio из тестовых файлов
- Больше не создаётся новый event loop на каждый тест
- RateLimiter (asyncio.Lock) теперь корректно работает в одном loop

230 тестов проходят.
2026-07-07 21:52:18 +05:00
deadzilla
e1ab1e3a61 fix: H4 — защита от дублирования cogs при reconnect в on_ready
- Добавлена проверка if self.bot.cogs: return перед добавлением cogs
- on_ready может сработать несколько раз при reconnect gateway
- Без защиты команды регистрировались бы заново каждый раз

230 тестов проходят.
2026-07-07 21:47:02 +05:00
deadzilla
ea0d50df4f fix: H3 — pressure_to_mmhg(0) возвращает 0.0 вместо '—'
- Заменён 'not mb' на 'mb is None or mb == ""' (0 — валидное значение)
- Обновлён тест test_pressure_zero: ожидание 0.0 вместо '—'

230 тестов проходят.
2026-07-07 21:44:48 +05:00
deadzilla
3aebda1114 fix: H2 — translate_weather сортировка ключей по убыванию длины
- Заменён dict на _WEATHER_MAPPING (list of tuples, отсортирован по длине ключей)
- Длинные фразы проверяются первыми, исключая ложные подстроочные совпадения
- "Moderate or heavy rain at times" теперь корректно -> "Дождь" вместо "Сильный дождь"
- Обновлены тесты: test_translate_known и test_translate_longer_key_priority

230 тестов проходят.
2026-07-07 21:28:29 +05:00
deadzilla
5d9c33a12c fix: H1 — IndexError в format_weather_data_for_console при пустом current_condition
- Защита от пустого списка [] и пустого dict [{}] в current_condition
- Возврат None вместо краша, команда !pg показывает fallback-сообщение
- Обновлён тест test_pg_empty_current_condition (graceful fallback вместо IndexError)

230 тестов проходят.
2026-07-07 21:24:04 +05:00
deadzilla
900128fbd4 удаление консольных команд 2026-07-07 20:52:11 +05:00
deadzilla
cc2808fb40 fix: graceful shutdown — заменить bot.run() на async with + signal handlers (C2)
- Удалён dead code except KeyboardInterrupt (никогда не срабатывал в bot.run())
- Добавлен _signal_handler() для SIGINT/SIGTERM с остановкой scheduler и bot.close()
- Заменён bot.run(token) на asyncio.run(main()) с async with self.bot:
- Добавлен reconnect=True для устойчивости к разрывам gateway
- Тесты: string-matching заменены на поведенческие mock-тесты (5 тестов, все OK)
- Добавлен CODE_REVIEW.md с результатами ревью
2026-07-07 20:51:32 +05:00
deadzilla
8ee5ed669f Исправление планировщика morning: tasks.loop → asyncio.sleep
- Scheduler больше не опрашивает каждую секунду (tasks.loop мог пропустить
  момент срабатывания из-за неточности тайминга). Теперь спит ровно до
  целевого времени через asyncio.sleep, затем запускает morning и повторяет.
- Добавлено логирование ожидания и срабатывания расписания.
- Перенес инициализацию планировщика из on_ready в on_guild_available —
  гарантирует, что кэш гильдии загружен до запуска Scheduler.
- Обновлены тесты под новый Scheduler (asyncio.create_task вместо tasks.loop).
- README.md: исправлены пути admin.py → console_commands/admin.py для docker exec.
- docker-compose.yml: добавлены переменные LOG_LEVEL и rate-limit конфиги.
- console_commands/__init__.py: переименованы help → console_help,
  reload → reload_cogs (избежал конфликта с built-in и уточнил имена).
2026-06-16 22:10:40 +05:00
deadzilla
4f48471564 docs: обновлён ISSUES.md (актуализированы задачи, добавлены 3 новых) 2026-06-12 23:03:11 +05:00
deadzilla
8e209bca00 chore: удалены выполненные задачи из ISSUES.md 2026-06-12 22:49:18 +05:00
deadzilla
1a4169fbe9 docs: добавлена секция логирования в README (ротация, конфиг) 2026-06-12 21:49:18 +05:00
deadzilla
4027b7df6c feat: ротация логов по размеру (RotatingFileHandler, 5 МБ, 5 бэкапов) 2026-06-12 21:43:00 +05:00