Skip to content

Masynchin/CheWeatherBot

Folders and files

NameName
Last commit message
Last commit date

Latest commit

5608742 · May 10, 2024
Jul 20, 2023
May 10, 2024
Jul 17, 2023
Jan 7, 2022
Jul 15, 2023
Jul 15, 2023
May 10, 2024
May 10, 2024
Jul 20, 2023
Jul 20, 2023
Jul 15, 2023
Apr 16, 2021

Repository files navigation

Telegram бот погоды Череповца

Адрес бота: @weather35bot

Что позволяет бот

  • Узнать текущую погоду
  • Узнать прогноз на конкретный час (в пределах следующих двух дней)
  • Узнать прогноз на конкретный день (в пределах следующих семи дней)
  • Подписаться на ежедневную рассылку в удобное для вас время

Прогноз на конкретный час состоит из типа погоды, фактической и ощущаемой температур, скорости ветра (и порывов, если присутствуют), показателя влажности, показателя облачности, и предупреждений (если присутствуют).

Прогноз на конкретный день дополняется информацией о температуре каждого времени суток - утра, дня, вечера, и ночи.

Использование

Начните диалог с ботом @weather35bot.

Вся работа с ним будет происходить при помощи клавиатуры, которую бот выдаст вместе с его первым сообщением. В этом сообщении будет описано, за что отвечает каждая кнопка клавиатуры.

Теперь вы можете узнать текущую погоду, получить прогноз, и подписаться на рассылку.

Мотивация

  • Хочу без лишних усилий получать подробную информацию о текущей погоде.

Поэтому я выбрал Telegram. Простой интерфейс, автоматическая рассылка. Можно один раз настроить, и бот сам будет отправлять прогноз.

  • Хочу иметь небольшой проект для практикования.

Периодически я возвращаюсь к этому проекту с целью улучшения кода, структуры проекта, внешнего вида и т.д. Об этих рефакторингах можно прочитать здесь под заголовками, содержащими "CheWeatherBot".

Технологии

Бот

  • Для работы с telegram используется aiogram.
  • Для логирования используется loguru.

Погода

  • Для получения информации о погоде используется OpenWeatherMap с тарифом One Call API.
  • Для запросов к API используется aiohttp.
  • Для удобной работы с ответом API используется pydantic.

Хранение подписчиков рассылки

Используется SQLite. В качестве асинхронной обёртки используется aiosqlite.

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

Переменные окружения

  • BOT_TOKEN - токен telegram бота
  • WEATHER_API_KEY - ключ с сайта openweathermap.org (тариф One Call API)
  • DATABASE_URL - путь к базе данных (по умолчанию subscribers.db)
  • RUN_TYPE - режим работы бота (polling (по умолчанию) | webhook)

Запуск вручную

  • Основные зависимости:
pip install -r requirements.txt
  • Зависимости для разработки (включают основные):
pip install -r requirements-dev.txt

Запуск бота происходит через:

python -m app

Запуск Docker контейнера

Сборка контейнера:

docker build -t cwb .

Запуск контейнера:

docker run -d -it --rm \
    -e BOT_TOKEN=<token> \
    -e WEATHER_API_KEY=<key> \
    cwb

Или с переменными из файла:

docker run -d -it --rm --env-file ./.env cwb

Запуск через Docker Compose

Запуск через docker-compose:

docker compose up

Логирование

Логи выводятся в консоль, а также сохраняются в папку logs (еженедельная ротация). В файл undefined_weather_types.txt сохраняются типы погод, для которых нет стикера.