discordBot/AGENTS.md
deadzilla bf166735a6 fix: исправить блокировку event loop и добавить retry задержку
- Добавить экспоненциальную задержку между попытками retry (1с, 2с, 4с) в pogoda.py
- Заменить time.sleep на await asyncio.sleep для неблокирующих ожиданий
- Обернуть requests.get в asyncio.to_thread для предотвращения блокировки event loop (news.py, cat.py, pogoda.py)
- Добавить правило AGENTS.md: не использовать эмодзи
- Добавить ISSUES.md с фиксацией проблем проекта
2026-05-26 10:24:26 +05:00

3.7 KiB
Raw Blame History

AGENTS.md

Проект

Discord-бот на Python (discord.py) для Магнитогорска.

  • Команды Discord: !msg (повтор текста), !pogoda (прогноз погоды)
  • Консольные команды: stop (остановка бота)

Запуск

pip install -r requirements.txt
python bot.py

Введите stop в терминал для остановки бота.

Токен

Токен бота хранится в .env (переменная DISCORD_TOKEN). Получи токен на Discord Developer Portal. Шаблон в .env.example.

Конвенции

  • Используй TODO-списки для каждого запроса с несколькими шагами.
  • Пиши комментарии на русском.
  • Обработка ошибок: try/except для всех внешних вызовов (API, БД, файловая система).
  • Никогда не используй эмодзи в тексте или выводах.

Архитектура

bot.py                  # Точка входа, инициализация бота, console_input()
commands/               # Discord команды (cogs)
  __init__.py           # ALL_COMMANDS — явные импорты
  pogoda.py             # !pogoda — погода с retry + fallback (wttr.in → Open-Meteo)
console_commands/       # Консольные команды
  __init__.py           # ALL_CONSOLE_COMMANDS — явные импорты
  stop.py               # stop — остановка бота

Добавление Discord команды

  1. Создать файл commands/имя.py с классом, наследующим commands.Cog
  2. Добавить импорт в commands/__init__.py
  3. Добавить класс в ALL_COMMANDS

Добавление консольной команды

  1. Создать файл console_commands/имя.py с функцией func(stop_event, bot)
  2. Добавить импорт в console_commands/__init__.py
  3. Добавить функцию в ALL_CONSOLE_COMMANDS

API и внешние сервисы

Погода (!pogoda)

  • Основной: wttr.in (бесплатный, без ключа)
  • Fallback: api.open-meteo.com (бесплатный, без ключа)
  • Retry: 3 попытки с экспоненциальной задержкой при SSL/Connection/Timeout ошибках
  • Fallback срабатывает автоматически при неуспешных попытках
  • WMO weather codes → русский перевод в _wmo_to_russian()

Конвертации

  • Давление: hPa → мм рт. ст. (* 0.750062)
  • Ветер: км/ч → м/с (/ 3.6)
  • Погодные описания: английский → русский (_translate_weather())

Конфигурация

Переменная Описание Где взять
DISCORD_TOKEN Токен бота Discord Developer Portal

Зависимости

discord.py>=2.3.2
python-dotenv>=1.0.0
requests>=2.31.0

Структура данных погоды

Команда !pogoda возвращает:

[TEMP]   Температура: X°C (ощущается как Y°C)
[DESC]   Описание: Z
[HUMID]  Влажность: X%
[WIND]   Ветер: X м/с
[PRESS]  Давление: X мм рт. ст.

Безопасность

  • .env в .gitignore — токен никогда не должен попадать в репозиторий.
  • Используй .env.example как шаблон.