Здравствуйте!
Получаю 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. В чем может быть проблема?