Skip to content

Hey, this is a telegram bot, created for tinkoff competition!

Notifications You must be signed in to change notification settings

Proff3/hornOfUnicorn

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

27 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

@hornOfUnicorn_bot - telegram bot.

The bot uses Typescript for the programming language and Node.js for the backend platform. Libraries:

  • Telegraf - Telegram framework link;
  • MongoDB NodeJS Driver link;
  • Node Schedule - agile scheduler link.

The work with MongoDB is depend on interfaces, that are described in ./dist/db/dbInterfaces. Thus any request to external API is satisfied to the interfaces. If external API is not avaliable, then the last data will be taken from DB. There are 3 collections in DB:

  • MessageItems - the last data of movies and phrases;
  • WeatherData - the last data of the weather, identified by user id;
  • Users - configs of users.

The cofiguration set ups used by scenes, which are located in ./dist/scenes/. The information, that user enter in each scene, is collected in the state. Then the state tranform in cofiguration and is send to db and to scheduler. After that according to the cofig of the user the notification is created by scheduling the call of method of the User class.

The command of the bot:

  • /changeConfig;
  • /getConfig;
  • /deleteNotification;
  • /pushNotification;
  • /checkNotification - check is the notification set.

Packages:

  • classes - dto, pay attention to the absract class ExternalAPI;
  • db - entities;
  • enums;
  • interfaces;
  • scenes;
  • schedule.

Бот написан на TypeScript и работает на Node.js. Используемые инструменты:

  • Telegraf - Telegram фреймворк link;
  • MongoDB NodeJS Driver link;
  • Node Schedule - гибкий планировщик заданий link.

При использовании MongoDB работа с данными в боте осуществляется с помощью интерфейсов, которые находятся в ./dist/db/dbInterfaces. Таким образм, при любом запросе к внешним API или базе данных данные всегда соответсвуют интерфейсам. Если API стороннего сервиса не доступно, тогда берется последняя запись из бд. Всего в базе данных 3 коллекции:

  • MessageItems - содержит последние данные о запросах к API сервисов погоды, фильмов, фраз;
  • WeatherData - содержит последние данные о погоде, идентификатором является id пользователя;
  • Users - содержит конфигурации пользователей.

Конфигурация пользователей собирается при помощи сцен, которые находятся в ./dist/scenes/. Последовательный ввод данных происходит при помощи пробрасывания состояния текущей сцены (имплементит интерфейс конфигурации пользователя) в следующую, пока пользователь не дойдет до финальной сцены, откуда данные уходят в бд и в планировщик задач. Далее соответсвенно конфигурации пользователя планиурется вызов метода объета класса User, отвечающего за формирования оповещения. При вызове данного метода объекта запросы отправляются к API сторонних сервисов, результаты кешируются и выводится уведомление с данными. Сцены являются изолированными частями программы, где можно релизовать локальную логику (команды, обработчики и т.д.) недоступную извне.

В боте присутствую команды:

  • /changeConfig - изменение настроек профиля, пользовтаель направляется в первую сцену;
  • /getConfig - просмотр настройки профиля, возвращается отформатированный результат запроса к коллекции Users;
  • /deleteNotification - удаление уведомлений, удаляется задача из планироващика при использовании id пользователя;
  • /pushNotification - рассылка уведомлений, добавляется задача в планировщик задач в соответствие с конфигом пользователя из бд;
  • /checkNotification - проверить рассылку уведомлений, проверяется нахождение задачи в планировщике задач.

Описание областей:

  • classes - содержит классы для работы с данными, отдельно нужно выделить абстрактный класс ExternalAPI, от которого наследуются все классы сторонных API;
  • db - содержит API для работы с бд Mongo, возвращающий экземпляр класса, методы которого используются для работы с бд, также содержит интерфейсы для работы с данными в папке dbInterfaces;
  • enums;
  • interfaces - содержит интерфейсы валют и контекста бота;
  • scenes - содержит сцены, для последовательного сбора данных;
  • schedule - предоставляет экземпляр класса UsersSchedule, методы которого требуются для работы с планировщиком задач.

About

Hey, this is a telegram bot, created for tinkoff competition!

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published