Telegram Bot Api - Как прицепить реакции к сообщению?
Всем привет!
Использую данную библиотеку: https://github.com/php-telegram-bot/core
Есть задача к каждому сообщению цеплять реакции, по типу, как это можно сделать с помощью @ControllerBot.
Собственно с отправкой сообщений проблем не возникло:
А вот как заставить работать реакции?
Если я правильно понял, то алгоритм работы реакций нужно реализовывать самостоятельно используя базу данных, хук и собственную логику инкрементации?
Или есть способ попроще?
Ответы (1 шт):
Автор решения: PunyFlash
→ Ссылка
- Должна быть создана таблица в БД
likesс полямиuser_id(int),message_id(int),like_button(int). Пара значенийuser_idиmessage_idдолжна быть уникальной (но не значения по отдельности, т.к. пользователи могут лайкать разные сообщения; и так же - одно и то же сообщение могут лайкать разные пользователи):
ALTER table `message_id` add [constraint `unique_user_message`] unique index(`user_id`, `message_id`)
При нажатии на реакцию:
- Получаем
user_idиmessage_idиз Update-обьекта Telegram (вы получаетеUpdateсcallback_query, как найти ID пользователя и сообщение можете прочесть в документации). - Получаем индекс кнопки -
like_buttonв массиве клавиатуры с полученного вUpdateили сcallback_data- как вам удобнее. - Обновляем (или создаем) реакцию пользователя в БД:
REPLACE into `likes`(`user_id`, `message_id`, `like_button`) values(123456, 654321, 0)- Получаем массив данных со значениями
like_button- индекс кнопки,num- колличество лайков:
SELECT `like_button`, COUNT(*) AS `num` FROM `likes` WHERE `message_id` = 654321 GROUP BY `like_button`- На основе полученных данных обновляем кнопки на сообщении используя
editMessageReplyMarkup()(как обрабатывать строки расписывать уже не буду)
- Получаем
Если вам не принципиально, сколько раз может пользователь нажать кнопку, то можно и обойтись без БД, просто каждый раз обновляя клавиатуру и добавляя +1 к числу лайков.

