kuchuluk
@kuchuluk

Как получить данные автора сообщения канала телеграм на telethon?

Здравствуйте!
Получаю 5 последних сообщений из канала, в котором публикуются не от имени канала, а от имени пользователя. И по каждому пользователю есть только id. Пытаюсь получить по id остальные его данные, например username, но выдает ошибку.
Вот код моего скрипта:
from telethon.sync import TelegramClient
from telethon.tl.functions.contacts import SearchRequest
from telethon.tl.types import PeerUser, PeerChat, PeerChannel
from telethon.tl.types import InputPeerChat
from telethon import functions

import asyncio
from asyncio import new_event_loop, set_event_loop
import time

from db.users_db import getAllUsersForSend
from db.channels_db import getAllTrChannels

api_id = 'api_id'
api_hash = 'api_hash'

async def bot_auth(client, tg_id):
    # Авторизация бота
    if not await client.is_user_authorized():
        await client.start(bot_token='my_bot_token')
    dialogs = await client.get_dialogs()
    for dialog in dialogs:
        if isinstance(dialog.message.peer_id, PeerChannel):
            tr_channels = getAllTrChannels()
            for channel in tr_channels:
                if channel['channel_id'] == dialog.message.peer_id.channel_id:
                    print(dialog.name)
                    print(dialog.message.peer_id.channel_id)
                    messages = client.iter_messages(dialog, limit=5)
                    async for message in messages:
                        print(message.from_id.user_id)
                        from_user = await client.get_entity(message.from_id.user_id)
                        print(from_user)
                        await asyncio.sleep(10)

    # Завершение сессии
    await client.disconnect()

def lets_go():
    users_for_send = getAllUsersForSend()

    for user in users_for_send:
        print(user['tg_id'])

        loop = new_event_loop()
        set_event_loop(loop)

        # Создание клиента Telegram
        client = TelegramClient('session_name_testbot', api_id, api_hash)

        # Запуск асинхронной функции
        with client:
            client.loop.run_until_complete(bot_auth(client, user['tg_id']))

Выводит ошибку:
Job "lets_go (trigger: interval[0:01:00], next run at: 2024-01-24 14:55:32 +06)" raised an exception
Traceback (most recent call last):
  File "E:\work\2024\get_vacancy_bot\venv\Lib\site-packages\apscheduler\executors\base.py", line 125, in run_job
    retval = job.func(*job.args, **job.kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "E:\work\2024\get_vacancy_bot\handlers\get_chat_messages.py", line 67, in lets_go
    client.loop.run_until_complete(bot_auth(client, user['tg_id']))
  File "C:\Program Files\Python311\Lib\asyncio\base_events.py", line 653, in run_until_complete
    return future.result()
           ^^^^^^^^^^^^^^^
  File "E:\work\2024\get_vacancy_bot\handlers\get_chat_messages.py", line 37, in bot_auth
    from_user = await client.get_entity(message.from_id.user_id)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "E:\work\2024\get_vacancy_bot\venv\Lib\site-packages\telethon\client\users.py", line 292, in get_entity
    inputs.append(await self.get_input_entity(x))
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "E:\work\2024\get_vacancy_bot\venv\Lib\site-packages\telethon\client\users.py", line 468, in get_input_entity
    raise ValueError(
ValueError: Could not find the input entity for PeerUser(user_id=5919601160) (PeerUser). Please read https://docs.telethon.dev/en/stable/concepts/entities.html to find out more details.

В документации вроде сказано, что client.get_entity должен получать данные по id. В чем может быть проблема?
  • Вопрос задан
  • 151 просмотр
Пригласить эксперта
Ответы на вопрос 1
@maksimdriuchin55
Я тоже столкнулся с такой проблемой. Но сразу понял: вы не можете получить данные пользователя или чата, с которым вы не имеете связи (не писали ему или не входите в данный чат). Автор контента никогда не писал Вам, поэтому происходит ошибка!
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы