Skip to content

Commit

Permalink
Add readme (#29)
Browse files Browse the repository at this point in the history
* Add readme

* fix review
  • Loading branch information
malkoas authored Sep 13, 2023
1 parent 85f4320 commit e6ba2ab
Show file tree
Hide file tree
Showing 2 changed files with 99 additions and 1 deletion.
100 changes: 99 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,99 @@
# alert-tg-bot
# alert-tg-bot

Телеграм бот, представляющий собой интерфейс для взаимодействия пользователя с [mayday](https://github.com/valitydev/mayday).
Позволяет добавлять пользователям необходимые алерты и получать нотификации от mayday.

## Описание работы сервиса

Бот работает взаимодействуя с [Telegram Bot Api.](https://core.telegram.org/bots/api)
Для взаимодествия с Telegram Bot Api используется [polling](https://core.telegram.org/bots/api#getupdates).
Взаимодействие с ботом разрешается только для пользователей, состоящих в общем приватном чате.

Для работы бота необходимо указать параметры:

```
bot:
token: ${botToken}
name: botName
chatId: ${chatId}
```

- Для получения _botToken_ и _botName_ необходимо использовать телеграм бота @BotFather,
там же ему необходимо ***установить инлайн-режим командой /setinline***.
- _chatId_ - приватный чат, пользователи которого смогут иметь доступ к боту.
Бота необходимо добавить в приватный чат и ***дать ему права администратора***.
Узнать _chatId_ можно, например, отправив любое сообщение в чат и посмотрев пришедшее событие.

[При старте бота либо отправки любого сообщения в бот пользователем](src/main/java/dev/vality/alert/tg/bot/service/AlertBot.java)
в первую очередь проверяется, есть ли у пользователя доступ к боту,
для чего проверяется является ли пользователь участником в приватном чате.
В случае если участник не состоит в чате либо у него изменился статус (например, пользователь был удален из чата),
доступ к боту не разрешается, ранее созданные алерты удаляются.

## Хендлеры

Каждый раз когда пользователь взаимодействует с ботом приходит событие с набором параметров,
на основе которых выбирается обработчик сообщений:

- [MessageHandler](src/main/java/dev/vality/alert/tg/bot/handler/MessageHandler.java) -
при получении команды /start либо при отправке любого сообщения в бот формирует главное меню.
При формировании главного меню к клавиатуре добавляется callbackData,
которая возвращается в событиях боту при нажатии кнопок пользователем.


- [CallbackHandler](src/main/java/dev/vality/alert/tg/bot/handler/CallbackHandler.java) -
обрабатывает сообщения, содержащие callbackData.
В обработчике маппятся коллбэки каждой кнопки с действиями, которые необходимо выполнить
[при нажатии кнопок главного меню](src/main/java/dev/vality/alert/tg/bot/mapper/MenuCallbackMapper.java),
либо после выбора [параметра, для которого будет конфигурироваться алерт.](src/main/java/dev/vality/alert/tg/bot/mapper/ParametersCallbackMapper.java)


- [InlineHandler](src/main/java/dev/vality/alert/tg/bot/handler/InlineHandler.java) -
обрабатывает события, которые приходят когда пользователь вводит данные для быстрого поиска из списка. Обработчик
формирует список для поиска по введенным символам и показывает список пользователю.


- [ViaBotReplyHandler](src/main/java/dev/vality/alert/tg/bot/handler/ViaBotReplyHandler.java) -
обрабатывает событие, которое происходит после того как пользователь выбрал значение из списка.


- [ForceReplyHandler](src/main/java/dev/vality/alert/tg/bot/handler/ForceReplyHandler.java) -
обрабатывает сообщение, являющееся ответом на вопрос при создании алерта, которое пользователь вводит с клавиатуры вручную.

- **ViaBotReplyHandler** и **ForceReplyHandler** после получения значения от пользователя
[проверяют](src/main/java/dev/vality/alert/tg/bot/mapper/CreateParamsRequestMapper.java)
корректно ли введено значение пользователем и все ли значения конфигурации алерта заполнены.
В случае если заполнены все, то формируется запрос в mayday на создание алерта,
иначе запрашивается следующее значение для заполнения.


- [MyChatMemberHandler](src/main/java/dev/vality/alert/tg/bot/handler/MyChatMemberHandler.java) -
обрабатывает событие, которое приходит, если пользователь самостоятельно заблокировал бота.
В таком случае все алерты, ранее созданные пользователем, удаляются.


- [MainMenuHandler](src/main/java/dev/vality/alert/tg/bot/handler/MainMenuHandler.java) -
дополнительный обработчик, который пропускает обработку сообщений в приватном чате,
т.к. боту приходят и события из приватного чата, но на них реагировать не надо. Также формирует главное меню,
если в бот пользователь просто отправит любое сообщение, не являющееся ответом на вопросы при заведении алерта.


## [Mayday](https://github.com/valitydev/mayday)

[Обращение к mayday](src/main/java/dev/vality/alert/tg/bot/service/MayDayService.java)
происходит в случае, когда необходимо сконфигурировать новые алерты, проверить существующие,
либо удалить существующие алерты по [протоколу](https://github.com/valitydev/mayday-proto)

Mayday также обращается к alert-tg-bot по [протоколу](https://github.com/valitydev/alert-tg-bot-proto),
когда необходимо отправить юзеру нотификацию в случае срабатывания алерта.
Бот [отправит нотификацию в чат с пользователем](src/main/java/dev/vality/alert/tg/bot/service/NotifierService.java).

##Postgres

![db](resource/db.png)

База используется для сохранения текущих параметров алерта и
стейта пользователя, когда пользователь заполняет данные для создания алерта.
- в parameters_data сохраняется конфигурация алерта, который создает пользователь.
- в state_data сохраняется текущий стейт пользователя, маппятся параметры,
которые ввел пользователь, для дальнейшей отправки в mayday сконфигурированного алерта.
Binary file added resource/db.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit e6ba2ab

Please sign in to comment.