Search code examples
pythontelethon

Telegram get chat messages /posts - python Telethon


I am using Telethon and Python 3.6xx

Been able to retreive message from groups, no problem but when it comes to channels I am stuck.

dialogs = client(get_dialogs)
for chat in dialogs.chats:
   getmessage = client.get_messages(chat.id, limit=400)
   for message in getmessage:
        print(message.message)

I've searched the telethon documentation but most answers were in response to the old get_message_history.

When I'm trying with the following chat.id = 1097988869 (news.bitcoin.com) I'm getting an error below (for groups the chat.id works fine):

PeerIdInvalidError: An invalid Peer was used. Make sure to pass the right peer type


Solution

  • In the latest version of Telethon, @Lonami's answer is, by far, the best, so just use it.

    You may use the following code snippet to get messages:

    client = TelegramClient('session_name',
                        api_id,
                        api_hash,
                        update_workers=1,
                        spawn_read_thread=False)
    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_username='tehrandb' # your channel
    channel_entity=client.get_entity(channel_username)
    posts = client(GetHistoryRequest(
        peer=channel_entity,
        limit=100,
        offset_date=None,
        offset_id=0,
        max_id=0,
        min_id=0,
        add_offset=0,
        hash=0))
    
    # messages stored as `posts.messages`