[英]how to get messages from linked discussion group of channels with telethon
我已經成功地從頻道中檢索到消息。 我用 iter_messages function 做到這一點但是,消息 object 不包含評論,只有用戶寫了評論。 object里面有個channel_id,這個好像是聯動群。 但是群里沒有t.me/xxx這樣的URL。 有沒有人有解決方案?
這是 object 的摘錄,即 JSON。
"replies": {
"_": "MessageReplies",
"replies": 8,
"replies_pts": 17846,
"comments": true,
"recent_repliers": [
{
"_": "PeerUser",
"user_id": 57135752
},
{
"_": "PeerUser",
"user_id": 564589817
},
{
"_": "PeerUser",
"user_id": 888542547
}
],
"channel_id": 1484030956,
"max_id": 13402,
"read_max_id": null
},
如果您手動加入了該組,它可以工作。
async for message in client.iter_messages(peer):
if message.replies:
channel_peer = types.InputChannel(message.replies.channel_id, 0)
chat = await client.get_entity(channel_peer)
但更好的方法是獲得完整的頻道請求,這樣你就可以獲得一個頻道本身並作為一個實體聊天(並可能加入它?),然后查找他們中是否有任何人是對頻道帖子的回復。
chat_full = await client(functions.channels.GetFullChannelRequest(peer))
channel = chat_full.chats[0]
chat = channel_full.linked_chat_id
if chat:
chat = chat_full.chats[-1]
async for message in client.iter_messages(peer):
msg_data = {
"id": message.id,
"date": message.date,
"message": message.message,
}
if chat:
msg_data["replies"] = client.get_messages(chat, reply_to=message.id)
此代碼未經測試,但我正在處理它 o_0
最后我找到了一個工作正常的解決方案。 當您有特定的消息 ID 時,您可以設置標志 reply_to。 然后你會得到頻道帖子的評論。
def get_comments(client: TelegramClient, channel: str, message_id: int):
async def crawl_comments():
async for message in client.iter_messages(channel, reply_to=message_id):
print(message.text) # only comment
full_comment_obj = message.to_dict() # in JSON-Format
print(full_comment_obj)
with client:
client.loop.run_until_complete(crawl_comments())
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.