Задать вопрос
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. В чем может быть проблема?
  • Вопрос задан
  • 526 просмотров
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Нетология
    Python-разработчик: расширенный курс + нейросети
    12 месяцев
    Далее
  • Яндекс Практикум
    Python-разработчик
    10 месяцев
    Далее
  • Skillbox
    Профессия Python-разработчик + ИИ
    10 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 1
maksimdriuchin55
@maksimdriuchin55
Я тоже столкнулся с такой проблемой. Но сразу понял: вы не можете получить данные пользователя или чата, с которым вы не имеете связи (не писали ему или не входите в данный чат). Автор контента никогда не писал Вам, поэтому происходит ошибка!
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы
ITK academy Краснодар
от 220 000 до 300 000 ₽
ITK academy Краснодар
от 75 000 ₽
DimaTech Ltd Краснодар
от 140 000 до 140 000 ₽