簡體   English   中英

如何使用 telethon 從鏈接的頻道討論組獲取消息

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM