- Создать 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 решена)
4.0 KiB
4.0 KiB
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 команды
- Создать файл
commands/имя.pyс классом, наследующимcommands.Cog - Добавить импорт в
commands/__init__.py - Добавить класс в
ALL_COMMANDS
Добавление консольной команды
- Создать файл
console_commands/имя.pyс функциейfunc(stop_event, bot) - Добавить импорт в
console_commands/__init__.py - Добавить функцию в
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как шаблон.