想要从 Telegram 上的 groups/channels 中提取固定消息,我正在使用 Telethon

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

我正在使用 Telethon API 想要提取我是会员的所有频道的固定消息。 请指导我的程序。

谢谢。

use 可以使用 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.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 对象。对于私聊,这是UserFull by using GetFullUserRequest:

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