Получение списка пользователей, поставивших реакцию в группе телеграма, используя pyrogram
Мне необходимо получить список пользователей, поставивших реакцию в группе телеграма. Библиотека pyrogram, не telethon. В документации нашел только GetMessagesReactions, но не могу понять, как это использовать.
async for message in client.get_chat_history(channel.id, limit=num_messages):
r_peer = await client.resolve_peer(channel.id)
reaction = GetMessagesReactions(peer=r_peer, id=[message.id])
print(reaction)
Код возвращает
{
"_": "functions.messages.GetMessagesReactions",
"peer": {
"_": "types.InputPeerChat",
"chat_id": 988547793
},
"id": [
25281
]
}
Подскажите, как это можно использовать правильно, или, возможно, есть какой-то другой способ получить информацию о том, кто ставит реакции.
Ответы (2 шт):
Протестить не могу, но примерно так
mess_id, mess_chat = message.id, message.chat.id
r_peer = await app.resolve_peer(mess_chat)
print(await app.invoke(GetMessageReactionsList(peer=r_peer, id=mess_id, limit=-1)))
Для использования метода GetMessagesReactions в pyrogram необходимо создать объект класса pyrogram.raw.functions.messages.GetReactions, который соответствует данному RPC-запросу. Для этого можно воспользоваться функцией pyrogram.raw.functions.messages.GetReactions и передать ей в качестве аргументов peer и id соответствующие значения.
from pyrogram import Client
from pyrogram.raw.functions.messages import GetReactions
from pyrogram.types import InputPeerChat
# создаем клиента
app = Client("my_account")
# получаем chat_id
chat_id = 100123456789
# получаем peer объект
peer = InputPeerChat(chat_id)
# идентификатор сообщения, для которого нужно получить реакции
message_id = 12345
# создаем объект запроса
request = GetReactions(peer=peer, msg_id=message_id, offset=0, limit=100)
# отправляем запрос
result = app.send(request)
# получаем список пользователей, которые поставили реакцию
users = result.users
print(users)
Также можно воспользоваться методом app.get_messages для получения сообщения, для которого необходимо получить реакции, и методом message.get_reactions для получения списка пользователей, которые поставили реакцию.
from pyrogram import Client
# создаем клиента
app = Client("my_account")
# получаем chat_id
chat_id = 100123456789
# получаем сообщение
message = app.get_messages(chat_id, message_id=12345)
# получаем список пользователей, которые поставили реакцию
users = message.get_reactions("?")
print(users)
Обратите внимание, что метод message.get_reactions возвращает список объектов класса pyrogram.types.User. Если нужно получить список ID пользователей, можно воспользоваться списковым выражением:
user_ids = [user.id for user in users]
print(user_ids)
Но, учитывая, что получение реакций для всех сообщений в группе может быть довольно ресурсоемкой операцией, рекомендую использовать официальный Telegram API и платный сервис Telegram Analytics.