[英]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
對象。 對於私人聊天,這是使用GetFullUserRequest
的UserFull
:
chat = 'me'
full = client(functions.users.GetFullUserRequest(chat))
message = client.get_messages(chat, ids=full.pinned_msg_id)
您可以使用GetFullChannelRequest
和GetHistoryRequest
方法從一個頻道中提取固定消息
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.