Search code examples
pythonpython-3.xtelegramtelethon

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


I'm using Telethon API Want to extract pinned messages of all the channels i am member. Please guide me with the procedure.

Thank you.


Solution

  • You can use GetFullChannelRequest and GetHistoryRequest methods to extract pinned message from one channel

    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())
    

    I used Telethon V0.19, but the previous versions are pretty much the same