Discord Bot
Discord-бот для Магнитогорска. Команды погоды, новостей и развлечений.
Установка
pip install -r requirements.txt
Запуск
python bot.py
Введите номер команды в терминале или !команда в Discord.
Настройка
-
Скопируйте
.env.exampleв.env:cp .env.example .env -
Вставьте токен бота в
.env:DISCORD_TOKEN=ваш_токен
Токен получите на Discord Developer Portal.
Команды Discord
| Команда | Описание |
|---|---|
!pogoda |
Прогноз погоды для Магнитогорска |
!news |
Топ-5 свежих статей по AI с Habr |
!cat |
Случайный котик |
!msg <текст> |
Повторить текст в чате |
Команды терминала
| Номер | Команда | Описание |
|---|---|---|
| 1 | news |
Топ-5 статей + топ-5 новостей с Habr |
| 2 | pogoda |
Прогноз погоды для Магнитогорска |
| 3 | cat |
Заглушка: тут должен быть котик |
| 0 | stop |
Остановка бота |
Архитектура
bot.py # Точка входа, инициализация бота, console_input()
commands/ # Discord команды (cogs)
__init__.py # ALL_COMMANDS — явные импорты
pogoda.py # !pogoda — погода с retry + fallback
news.py # !news — новости с Habr
cat.py # !cat — случайный котик
console_commands/ # Консольные команды
__init__.py # ALL_CONSOLE_COMMANDS — явные импорты
stop.py # stop — остановка бота
news.py # news — новости с Habr
pogoda.py # pogoda — погода в терминале
cat.py # cat — заглушка котика
Добавление 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())
Новости (!news)
- Articles:
https://habr.com/ru/rss/hubs/artificial_intelligence/articles/top/daily/?fl=ru - News:
https://habr.com/ru/rss/hubs/artificial_intelligence/news/top/daily/?fl=ru - Парсинг RSS 2.0 и Atom форматов
- Извлечение ссылок из
<guid isPermaLink="true">и авторов из<dc:creator> - Формат вывода: заголовок → дата → ссылка
Котики (!cat)
- API:
https://api.thecatapi.com/v1/images/search - Картинка встраивается в Discord Embed
Структура данных погоды
Команда !pogoda возвращает:
[TEMP] Температура: X°C (ощущается как Y°C)
[DESC] Описание: Z
[HUMID] Влажность: X%
[WIND] Ветер: X м/с
[PRESS] Давление: X мм рт. ст.
Формат дат
Даты форматируются как дд.мм.гггг через datetime.strptime с форматом %a, %d %b %Y %H:%M:%S %z.
Конфигурация
| Переменная | Описание | Где взять |
|---|---|---|
DISCORD_TOKEN |
Токен бота | Discord Developer Portal |
Зависимости
discord.py>=2.3.2
python-dotenv>=1.0.0
requests>=2.31.0
Безопасность
.envв.gitignore— токен никогда не должен попадать в репозиторий- Используйте
.env.exampleкак шаблон
Формат новостей
Каждая новость выводится в формате:
Заголовок статьи
дд.мм.гггг https://habr.com/ru/articles/...
Заголовки обрезаются до 60 символов с суффиксом ....
Ссылки отображаются без <> и https:// префикса для предотвращения embed-превью в Discord.
Description
Languages
Python
99.4%
Dockerfile
0.6%