簡體   English   中英

想從 Telegram 上的組/頻道中提取固定消息,我是使用 Telethon 的一部分

[英]Want to extract pinned messages from the groups/channels on Telegram i am part of using Telethon

我正在使用 Telethon API 想要提取我是會員的所有頻道的固定消息。 請指導我的程序。

謝謝你。

從 Telethon 1.2 開始,代碼要簡單得多:

from telethon import TelegramClient, types, sync
with TelegramClient('name', api_id, api_hash) as client:
    message = client.get_messages('TelethonChat', ids=types.InputMessagePinned())

但是,這不適用於私人聊天(例如,自己獲取固定消息)。 為此,正如當前接受的答案提示,我們必須獲取Full對象。 對於私人聊天,這是使用GetFullUserRequestUserFull

chat = 'me'
full = client(functions.users.GetFullUserRequest(chat))
message = client.get_messages(chat, ids=full.pinned_msg_id)

您可以使用GetFullChannelRequestGetHistoryRequest方法從一個頻道中提取固定消息

from telethon import TelegramClient
from telethon.tl.functions.channels import GetFullChannelRequest
from telethon.tl.functions.messages import GetHistoryRequest
from telethon.tl.types import PeerChannel

api_id = XXXXX
api_hash = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
phone_number = '+98XXXXXXXX'
################################################

client = TelegramClient('session_name',
                    api_id,
                    api_hash
                    )

assert client.connect()
if not client.is_user_authorized():
    client.send_code_request(phone_number)
    me = client.sign_in(phone_number, input('Enter code: '))

channel_entity = client.get_entity(PeerChannel(channel_id))

channel_info = client(GetFullChannelRequest(channel_entity))

pinned_msg_id = channel_info.full_chat.pinned_msg_id

if pinned_msg_id is not None:
    posts = client(GetHistoryRequest(
        channel_entity,
        limit=1,
        offset_date=None,
        offset_id=pinned_msg_id + 1,
        max_id=0,
        min_id=0,
        add_offset=0,
        hash=0
    ))
    print(posts.messages[0].to_dict())

我使用的是Telethon V0.19 ,但以前的版本幾乎相同

要使用Telethon 1.19.5 (同步版本)及更高版本從頻道獲取所有固定消息,您可以

from telethon.tl.types import InputMessagesFilterPinned
from telethon import TelegramClient, sync  # noqa: F401

channel_id = -1009999999999

with TelegramClient("name", api_id, api_hash) as client:
    # we need to set limit
    # because otherwise it will return only first pinned message
    pinned_messages = client.get_messages(
        channel_id,
        filter=InputMessagesFilterPinned,
        limit=1000,
    )
    for message in pinned_messages:
        print(message.message)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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