Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

like image 939
AbeeCrombie Avatar asked Jun 21 '18 18:06

AbeeCrombie


3 Answers

The accepted answer is good, but recent versions of Telethon let you achieve the same more easily. This will iterate over all messages in chat (for this example we use telethon.sync to avoid typing out async):

from telethon.sync import TelegramClient

with TelegramClient(name, api_id, api_hash) as client:
    for message in client.iter_messages(chat):
        print(message.sender_id, ':', message.text)

Where the variables should be obvious, for example (note these API values won't work, you need your own):

name = 'anon'
api_id = 123
api_hash = 'abcdefgh'
chat = 'me'

More examples using async are available in client.iter_messages documentation.

like image 133
Lonami Avatar answered Nov 15 '22 19:11

Lonami


update :

in the new version of Telethon, @Lonami answer is best and use it.

############################################################

you can use this code for 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 in `posts.messages`
like image 42
Alihossein shahabi Avatar answered Nov 15 '22 18:11

Alihossein shahabi


that work for me!

api_hash from https://my.telegram.org, under API Development.

from telethon import TelegramClient, events, sync

api_id = 'your api_id'
api_hash = 'your api_hash'

client = TelegramClient('session_name', api_id, api_hash)
client.start()
channel_username = 'username'# your channel
for message in client.get_messages(channel_username, limit=10):
    print(message.message)
like image 4
Mad Javad Avatar answered Nov 15 '22 19:11

Mad Javad