Современный Telegram бот для прогноза погоды с интуитивным интерфейсом и автоматическим управлением панелями.
- 🧹 Автоматическое удаление старых панелей - в чате остается только актуальная панель
- ⚡ Мгновенные обновления - старые кнопки исчезают при создании новых
- � Чистый интерфейс - никаких накопившихся сообщений с кнопками
- 📊 Интерактивные графики прогноза на неделю в формате 16:9
- 🎨 Кастомные погодные иконки с оптимизированным отображением
- 🖼️ Персонажи погоды - визуальные образы для каждого типа погоды
- 👕 Рекомендации одежды на основе температуры и ветра
- 📍 Геолокация и избранные города с быстрым доступом
- 📦 Полная модуляризация - каждая функция в отдельном модуле
- � Масштабируемость - легко добавлять новые функции
- 🛡️ Надежность - обработка ошибок на всех уровнях
- 📋 Менеджер панелей - централизованное управление UI
- Python 3.13+
- Telegram Bot Token (получите у @BotFather)
- Клонируйте репозиторий:
git clone https://github.com/bluvvis/weather-telegram-bot.git
cd weather-telegram-bot- Установите зависимости:
pip install -r requirements.txt- Настройте токен бота в
config/config.py:
BOT_TOKEN = "your_bot_token_here"- Запустите бота:
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 # 📖 Этот файл
- Автоматическое удаление старых панелей UI
- Отслеживание активных панелей по chat_id
- Двухуровневая система удаления (deleteMessage + editMessageText)
- Расширенные функции для работы с API
- Обработка ошибок и fallback механизмы
- Функции удаления сообщений для менеджера панелей
- Динамические inline клавиатуры
- Кодирование/декодирование данных в callback_data
- Адаптивные кнопки в зависимости от контекста
Одна из ключевых особенностей - автоматическое удаление старых панелей управления:
- При нажатии любой кнопки старые панели автоматически удаляются
- В чате остается только актуальная панель с кнопками
- Никаких накопившихся старых сообщений с неактивными кнопками
- Чистый и интуитивный интерфейс
- Inline клавиатуры для быстрого доступа к функциям
- Динамические кнопки в зависимости от контекста
- Быстрый выбор из недавних и избранных городов
- Управление избранным прямо в интерфейсе
- Горизонтальный формат 16:9 для оптимального просмотра на мобильных
- Плавные кривые температуры с сплайн-интерполяцией
- Кастомные PNG иконки для каждого типа погоды
- Градиентные фоны и стильное оформление
- Автоматическая очистка старых графиков
- Уникальные изображения для разных погодных условий
- Эмоциональная связь с прогнозом через визуальные образы
- Адаптивный выбор персонажа по параметрам погоды
- Всего городов: 315
- Стран: 66
- Российских городов: 142 (45.1% от общего числа)
- 🇷🇺 Россия: 142 города
- 🇺🇸 США: 22 города
- 🇨🇳 Китай: 16 городов
- 🇧🇷 Бразилия: 11 городов
- 🇮🇳 Индия: 9 городов
/start- Начало работы с ботом и главное меню/weather- Выбор города для прогноза из недавних/избранных/today [город]- Погода на сегодня с рекомендациями одежды/tomorrow [город]- Прогноз на завтра/week [город]- Прогноз на неделю с интерактивным графиком
- 📍 Геолокация - отправьте координаты для получения прогноза
- 🏙️ Текстовый ввод - просто напишите название города
- ⭐ Избранные города - добавляйте и управляйте избранными
- 🔄 Быстрый доступ - недавно запрошенные города в один клик
- 👕 Рекомендации одежды на основе температуры, ветра и осадков
- 🧹 Автоочистка интерфейса - старые панели удаляются автоматически
- 📈 Аналитика - статистика запросов и популярных городов
- 🌍 Мультиязычность - поддержка русских названий городов
- Python 3.13+ - современная версия языка с улучшенной производительностью
- Telegram Bot API - нативное взаимодействие с Telegram
- Open-Meteo API - бесплатный и надежный источник погодных данных
- Nominatim OSM - геокодирование и поиск городов
- Matplotlib + Seaborn - создание профессиональных графиков
- PIL/Pillow - обработка изображений и создание композиций
- NumPy + SciPy - математические вычисления и сплайн-интерполяция
- JSON + CSV - структурированное хранение данных
- Модульный дизайн - независимые модули для каждой функции
- Менеджер панелей - централизованное управление UI элементами
- Fallback системы - обработка ошибок на всех уровнях
- Асинхронная обработка - неблокирующие операции
- Open-Meteo - высококачественные метеорологические данные
- Nominatim - геокодирование на основе OpenStreetMap
- WMO Weather Codes - международные коды погоды
- 315+ городов по всему миру
- 66 стран с широким географическим покрытием
- 142 российских города (45.1% от общего числа)
- Автоматический перевод названий на русский язык
- 🇷🇺 Россия: 142 города
- 🇺🇸 США: 22 города
- 🇨🇳 Китай: 16 городов
- 🇧🇷 Бразилия: 11 городов
- 🇮🇳 Индия: 9 городов
- 🇫🇷 Франция: 8 городов
- 🇩🇪 Германия: 7 городов
- 🇬🇧 Великобритания: 6 городов
- 🇮🇹 Италия: 5 городов
- 🇯🇵 Япония: 5 городов
- PanelManager система - отслеживание активных панелей UI
- Умное удаление - старые панели исчезают при создании новых
- Чистый чат - никаких накопившихся неактивных кнопок
- Мгновенные обновления - интерфейс всегда актуален
- 17 специализированных модулей вместо монолитной структуры
- Разделение ответственности - каждый модуль решает свою задачу
- Легкая расширяемость - простое добавление новых функций
- Улучшенная поддержка - изолированные компоненты
- Интеллектуальные клавиатуры - кнопки адаптируются к контексту
- Персонажи погоды - эмоциональная связь с прогнозом
- Рекомендации одежды - практические советы на основе погоды
- Быстрый доступ - недавние и избранные города всегда под рукой
- Fork репозитория на GitHub
- Создайте feature branch:
git checkout -b feature/amazing-feature - Commit ваши изменения:
git commit -m 'Add amazing feature' - Push в branch:
git push origin feature/amazing-feature - Откройте 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
- 🐙 GitHub: @bluvvis
- 📧 Email: создайте issue для связи
- Open-Meteo за предоставление бесплатного API погоды
- OpenStreetMap за геоданные через Nominatim
- Telegram за отличную Bot API
- Python сообществу за замечательные библиотеки
⭐ Понравился проект? Поставьте звездочку на GitHub!
� Нашли баг? Создайте issue
💡 Есть идея? Предложите feature request
📚 Больше информации? Читайте ARCHITECTURE.md для технических деталей