Skip to content

Более точные погодные данные за счёт сравнения нескольких метеослужб.

License

Notifications You must be signed in to change notification settings

EgorOnishchuk/Meteobot

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Метеобот — легко масштабируемая погода в Телеграме

Python Postgres Docker Ruff

Пример использования

Из этого руководства Вы узнаете:

  1. Как быстро начать работу — запустить проект «из коробки»
  2. Как использовать продвинутую конфигурацию (требуются знания из ч. 1)

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

Установка предельно проста:

git clone https://github.com/EgorOnishchuk/Meteobot

После клонирования репозитория Вам необходимо создать файл .env в корне проекта по шаблону из .env.template. Далее — проверьте наличие актуальной версии Docker (настоятельно рекомендую воспользоваться официальной инструкцией).

И, наконец, выполните самую важную команду:

docker compose up

Теперь Ваш бот должен быть доступен в Телеграме. Журналы событий пишутся в /var/lib/docker/containers/<ID контейнера>/*.log, откуда могут быть собраны централизованными системами (например, ELK).

Продвинутая конфигурация

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

  • полностью соответствует идеологии MVP
  • разделён на слои репозиторий — сервис — презентер — представление, общающиеся через DTO
  • совместим с различными СУБД, ORM (её использование необязательно) и валидаторами
  • не перегружен абстракциями: присутствует только то, в чём действительно есть необходимость

Рассмотрим три основных сценария написания собственной функциональности для нашего погодного агрегатора.

Как перейти на другое хранилище данных?

Перейдём к repositories.py, расположенному в model: здесь находится репозиторий Asyncpg (но Вы можете называть его DAO или как-то ещё — разница между ними весьма условная). Для максимальной производительности был выбран чистый SQL, но при появление новых сущностей, особенно CRUD, может потребоваться внедрение SQLAlchemy.

Сервис следует принципу инверсии зависимостей, а это значит, что для перехода на другое хранилище данных (и даже необязательно БД: при необходимости всё можно хранить в файлах) достаточно:

  1. Создать новый репозиторий
  2. Изменить конфигурацию сервиса через инъекцию зависимости Aiogram
  3. По необходимости добавить промежуточное ПО (middleware), например, для внедрения сессии

Как перейти на другого поставщика схем (Attrs, Marshmallow и т.д.)?

  1. Создать новую схему — наследника Schema в schemas.py
  2. Применить её к выходным и/или входным данным репозитория через соответствующие декораторы

Как изменить формат представления?

Просто создать и подменить в презентере (в контексте фреймворка он называется «диспетчером») новый подкласс View. Это может понадобиться, если Вы хотите отказаться от форматирования сообщений через Markdown или поддерживать два разных представления.

Авторы

  • Егор Онищук — разработка, тестирование и документирование

About

Более точные погодные данные за счёт сравнения нескольких метеослужб.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published