Skip to content

bluvvis/weather-telegram-bot

Repository files navigation

🌤️ Weather Telegram Bot

Современный Telegram бот для прогноза погоды с интуитивным интерфейсом и автоматическим управлением панелями.

Version Python Architecture License

✨ Основные особенности

🎛️ Интеллектуальное управление интерфейсом

  • 🧹 Автоматическое удаление старых панелей - в чате остается только актуальная панель
  • ⚡ Мгновенные обновления - старые кнопки исчезают при создании новых
  • � Чистый интерфейс - никаких накопившихся сообщений с кнопками

🌍 Продвинутые возможности погоды

  • 📊 Интерактивные графики прогноза на неделю в формате 16:9
  • 🎨 Кастомные погодные иконки с оптимизированным отображением
  • 🖼️ Персонажи погоды - визуальные образы для каждого типа погоды
  • 👕 Рекомендации одежды на основе температуры и ветра
  • 📍 Геолокация и избранные города с быстрым доступом

🏗️ Модульная архитектура

  • 📦 Полная модуляризация - каждая функция в отдельном модуле
  • � Масштабируемость - легко добавлять новые функции
  • 🛡️ Надежность - обработка ошибок на всех уровнях
  • 📋 Менеджер панелей - централизованное управление UI

🚀 Быстрый старт

Предварительные требования

  • Python 3.13+
  • Telegram Bot Token (получите у @BotFather)

Установка и запуск

  1. Клонируйте репозиторий:
git clone https://github.com/bluvvis/weather-telegram-bot.git
cd weather-telegram-bot
  1. Установите зависимости:
pip install -r requirements.txt
  1. Настройте токен бота в config/config.py:
BOT_TOKEN = "your_bot_token_here"
  1. Запустите бота:
python main.py

🏗️ Архитектура проекта

Модульная структура

Проект полностью переработан с использованием модульной архитектуры для лучшей масштабируемости и поддержки:

weather-telegram-bot/
├── 📁 bot/                    # Основные модули бота (модульная архитектура)
│   ├── __init__.py           # Инициализация пакета
│   ├── handlers.py           # 🎛️ Обработчики команд и callback-ов
│   ├── panel_manager.py      # 🧹 Менеджер панелей UI (автоудаление)
│   ├── telegram_api.py       # 📡 API Telegram с функциями удаления
│   ├── keyboards.py          # ⌨️ Inline клавиатуры и кнопки
│   ├── weather_api.py        # 🌤️ API погоды Open-Meteo
│   ├── weather_charts.py     # 📊 Генерация графиков
│   ├── geocoding.py          # 🌍 Геокодирование городов
│   ├── city_utils.py         # 🏙️ Утилиты для работы с городами
│   ├── user_data.py          # 👤 Управление пользователями
│   ├── messages.py           # 💬 Форматирование сообщений
│   ├── message_formatters.py # 🎨 Продвинутое форматирование
│   ├── characters.py         # 🖼️ Персонажи погоды
│   ├── clothing.py           # 👕 Рекомендации одежды
│   ├── weather_advice.py     # 💡 Советы по погоде
│   └── city_logger.py        # 📝 Логирование запросов
├── 📁 config/                 # Конфигурация системы
│   ├── __init__.py           # Инициализация конфигурации
│   ├── config.py             # 🔑 API ключи и токены
│   └── settings.py           # ⚙️ Системные настройки
├── 📁 data/                   # Базы данных и пользовательские данные
│   ├── cities_database.csv   # 🌍 База городов (315+ записей)
│   ├── user_data.json        # 👥 Пользовательские данные
│   └── city_requests.csv     # 📈 Статистика запросов
├── 📁 assets/                 # Медиа-ресурсы
│   ├── weather_icons/        # 🎨 PNG иконки погоды
│   ├── characters/           # 🖼️ Изображения персонажей погоды
│   └── backgrounds/          # 🌈 Фоновые изображения
├── 📁 scripts/                # Утилиты разработки
│   ├── generate_cities_db_mega.py # Генератор базы городов
│   └── start.sh              # Скрипт автозапуска
├── 📁 docs/                   # 📚 Документация проекта
├── 📁 logs/                   # 📋 Логи работы системы
├── 📁 images/                 # 📊 Сгенерированные графики
├── main.py                    # 🚀 Точка входа приложения
├── requirements.txt           # 📦 Зависимости Python
├── ARCHITECTURE.md            # 🏗️ Документация архитектуры
└── README.md                  # 📖 Этот файл

🧩 Ключевые модули

🎛️ Panel Manager (panel_manager.py)

  • Автоматическое удаление старых панелей UI
  • Отслеживание активных панелей по chat_id
  • Двухуровневая система удаления (deleteMessage + editMessageText)

📡 Telegram API (telegram_api.py)

  • Расширенные функции для работы с API
  • Обработка ошибок и fallback механизмы
  • Функции удаления сообщений для менеджера панелей

⌨️ Keyboards (keyboards.py)

  • Динамические inline клавиатуры
  • Кодирование/декодирование данных в callback_data
  • Адаптивные кнопки в зависимости от контекста

🎨 Пользовательский интерфейс

Автоматическое управление панелями

Одна из ключевых особенностей - автоматическое удаление старых панелей управления:

  • При нажатии любой кнопки старые панели автоматически удаляются
  • В чате остается только актуальная панель с кнопками
  • Никаких накопившихся старых сообщений с неактивными кнопками
  • Чистый и интуитивный интерфейс

Интерактивные элементы

  • Inline клавиатуры для быстрого доступа к функциям
  • Динамические кнопки в зависимости от контекста
  • Быстрый выбор из недавних и избранных городов
  • Управление избранным прямо в интерфейсе

📊 Визуализация данных

Графики прогноза погоды

  • Горизонтальный формат 16:9 для оптимального просмотра на мобильных
  • Плавные кривые температуры с сплайн-интерполяцией
  • Кастомные PNG иконки для каждого типа погоды
  • Градиентные фоны и стильное оформление
  • Автоматическая очистка старых графиков

Персонажи погоды

  • Уникальные изображения для разных погодных условий
  • Эмоциональная связь с прогнозом через визуальные образы
  • Адаптивный выбор персонажа по параметрам погоды

🌍 Поддерживаемые города

  • Всего городов: 315
  • Стран: 66
  • Российских городов: 142 (45.1% от общего числа)

Топ-5 стран по покрытию:

  1. 🇷🇺 Россия: 142 города
  2. 🇺🇸 США: 22 города
  3. 🇨🇳 Китай: 16 городов
  4. 🇧🇷 Бразилия: 11 городов
  5. 🇮🇳 Индия: 9 городов

🤖 Команды и возможности

Основные команды

  • /start - Начало работы с ботом и главное меню
  • /weather - Выбор города для прогноза из недавних/избранных
  • /today [город] - Погода на сегодня с рекомендациями одежды
  • /tomorrow [город] - Прогноз на завтра
  • /week [город] - Прогноз на неделю с интерактивным графиком

Интерактивные возможности

  • 📍 Геолокация - отправьте координаты для получения прогноза
  • 🏙️ Текстовый ввод - просто напишите название города
  • ⭐ Избранные города - добавляйте и управляйте избранными
  • 🔄 Быстрый доступ - недавно запрошенные города в один клик

Умные функции

  • 👕 Рекомендации одежды на основе температуры, ветра и осадков
  • 🧹 Автоочистка интерфейса - старые панели удаляются автоматически
  • 📈 Аналитика - статистика запросов и популярных городов
  • 🌍 Мультиязычность - поддержка русских названий городов

🛠️ Технологический стек

Backend и API

  • Python 3.13+ - современная версия языка с улучшенной производительностью
  • Telegram Bot API - нативное взаимодействие с Telegram
  • Open-Meteo API - бесплатный и надежный источник погодных данных
  • Nominatim OSM - геокодирование и поиск городов

Обработка данных и визуализация

  • Matplotlib + Seaborn - создание профессиональных графиков
  • PIL/Pillow - обработка изображений и создание композиций
  • NumPy + SciPy - математические вычисления и сплайн-интерполяция
  • JSON + CSV - структурированное хранение данных

Архитектурные решения

  • Модульный дизайн - независимые модули для каждой функции
  • Менеджер панелей - централизованное управление UI элементами
  • Fallback системы - обработка ошибок на всех уровнях
  • Асинхронная обработка - неблокирующие операции

📈 Данные и источники

API и сервисы

  • Open-Meteo - высококачественные метеорологические данные
  • Nominatim - геокодирование на основе OpenStreetMap
  • WMO Weather Codes - международные коды погоды

База городов

  • 315+ городов по всему миру
  • 66 стран с широким географическим покрытием
  • 142 российских города (45.1% от общего числа)
  • Автоматический перевод названий на русский язык

Топ-10 стран по покрытию:

  1. 🇷🇺 Россия: 142 города
  2. 🇺🇸 США: 22 города
  3. 🇨🇳 Китай: 16 городов
  4. 🇧🇷 Бразилия: 11 городов
  5. 🇮🇳 Индия: 9 городов
  6. 🇫🇷 Франция: 8 городов
  7. 🇩🇪 Германия: 7 городов
  8. 🇬🇧 Великобритания: 6 городов
  9. 🇮🇹 Италия: 5 городов
  10. 🇯🇵 Япония: 5 городов

🚀 Новые возможности версии 2.0

🧹 Автоматическое управление интерфейсом

  • PanelManager система - отслеживание активных панелей UI
  • Умное удаление - старые панели исчезают при создании новых
  • Чистый чат - никаких накопившихся неактивных кнопок
  • Мгновенные обновления - интерфейс всегда актуален

🏗️ Модульная архитектура

  • 17 специализированных модулей вместо монолитной структуры
  • Разделение ответственности - каждый модуль решает свою задачу
  • Легкая расширяемость - простое добавление новых функций
  • Улучшенная поддержка - изолированные компоненты

🎨 Улучшенный UX

  • Интеллектуальные клавиатуры - кнопки адаптируются к контексту
  • Персонажи погоды - эмоциональная связь с прогнозом
  • Рекомендации одежды - практические советы на основе погоды
  • Быстрый доступ - недавние и избранные города всегда под рукой

🤝 Разработка и участие

Внесение изменений

  1. Fork репозитория на GitHub
  2. Создайте feature branch: git checkout -b feature/amazing-feature
  3. Commit ваши изменения: git commit -m 'Add amazing feature'
  4. Push в branch: git push origin feature/amazing-feature
  5. Откройте Pull Request с подробным описанием изменений

Разработка локально

# Клонирование для разработки
git clone https://github.com/bluvvis/weather-telegram-bot.git
cd weather-telegram-bot

# Создание виртуального окружения
python -m venv venv
source venv/bin/activate  # Linux/Mac
# или venv\Scripts\activate  # Windows

# Установка зависимостей
pip install -r requirements.txt

# Настройка конфигурации
cp config/config.py.example config/config.py
# Добавьте ваш BOT_TOKEN

# Запуск в режиме разработки
python main.py

Структура для новых модулей

При добавлении нового модуля в bot/:

  • Следуйте принципу единственной ответственности
  • Используйте типизацию (Type Hints)
  • Добавляйте docstrings для функций и классов
  • Обеспечивайте обработку ошибок
  • Пишите логирование для отладки

📝 Лицензия

Этот проект распространяется под лицензией MIT. Смотрите файл LICENSE для подробной информации.

👨‍💻 Автор и контакты

bluvvis

🙏 Благодарности

  • Open-Meteo за предоставление бесплатного API погоды
  • OpenStreetMap за геоданные через Nominatim
  • Telegram за отличную Bot API
  • Python сообществу за замечательные библиотеки

📊 Статистика проекта

GitHub stars GitHub forks GitHub issues GitHub last commit

Понравился проект? Поставьте звездочку на GitHub!

Нашли баг? Создайте issue

💡 Есть идея? Предложите feature request

📚 Больше информации? Читайте ARCHITECTURE.md для технических деталей

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors