radio-t / super-bot

radio-t bot слушает чат telegram и реагирует на определенные команды и фрагменты текста.
MIT License
63 stars 31 forks source link

Multi-text bot responses #109

Open ufian opened 1 year ago

ufian commented 1 year ago

Генерация превью тем слушателей генерирует большое количество сообщений в чате (одна тема = одно сообщение), что трудно использовать и весьма шумно.

Обзор

Для решения этой проблемы предлагается использовать мульти-текст сообщения с возможностью листания их туда-сюда

Пример использования клавиатуры image

Кнопки реагируют только на super user, остальных можно игнорировать или выписывать бан.

Реализация

С точки зрения релизации в коде, я предлагаю расширить структуру Response добавив слайс AltText[]

type Response struct {
    Text        string
    AltText     []string
    Send        bool          // status
    Pin         bool          // enable pin
    Unpin       bool          // enable unpin
    Preview     bool          // enable web preview
    BanInterval time. Duration // bots banning user set the interval
    User        User          // user to ban
    ChannelID   int64         // channel to ban, if set then User and BanInterval are ignored
    ReplyTo     int           // message to reply to, if 0 then no reply but common message
    ParseMode   ParseMode     // parse mode for message in Telegram (we use Markdown by default)
}

Если этот слайс задан, тогда superbot кеширует все Text + AltText в LRU cache. В параметрах inline кнопок клавиатуры сохраняется ключ и номер предыдущей/следующей старницы.

Когда из телеграма приходит callback нажатия на кнопку, то из кеша берется список возможных текстов сообщения и обновляется на нужный согласно параметру страницы в data.

Таким образом можно посылать мульти-текстовый ответ бота и дальше не беспокоиться о перелистывании страниц, всё будет поддержано на уровне telegram.go/bot.go

ufian commented 1 year ago

Пример работы решения собранного на коленке

https://user-images.githubusercontent.com/1496873/232170500-4dbd1720-b349-4dbc-ac9e-1a4591b67960.mp4