#python #chat #typeerror #telegram #telethon
#python #Чат #ошибка типа #telegram #телемарафон
Вопрос:
Когда мне приходится иметь дело с такого рода ссылками: https://t.me/channelName Обычно я получаю сообщения от канала, подобные этому :
async def main():
channel = await client.get_entity('channelName')
messages = await client.get_messages(channel, limit = N )
#...Code etc..
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
Как вы получаете сообщение, если у вас такая ссылка?
https://t.me/joinchat/DDDDDxxxxAAAA
Я знаю, что ‘DDDDDxxxxAAAA’ — это channel_hash, поэтому я присоединился к каналу с помощью клиента telegram и попытался получить идентификатор канала и объект сообщения :
channel_hash = "DDDDDxxxxAAAA"
channel = await client(functions.messages.CheckChatInviteRequest(hash=channel_hash))
Теперь объект канала содержит идентификатор канала и многие другие поля.
пример : (чат = Канал(id = 123456789, … etcc
Итак, я попробовал так:
messages = await client.get_messages(channel, limit = N )
но он возвращает :
Traceback (most recent call last):
File "C:Users****AppDataLocalPackagesPythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0LocalCachelocal-packagesPython39site-packagestelethonsessionsmemory.py", line 192, in get_input_entity
return utils.get_input_peer(key)
File "C:Users****AppDataLocalPackagesPythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0LocalCachelocal-packagesPython39site-packagestelethonutils.py", line 235, in get_input_peer
_raise_cast_fail(entity, 'InputPeer')
File "C:Users****AppDataLocalPackagesPythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0LocalCachelocal-packagesPython39site-packagestelethonutils.py", line 138, in _raise_cast_fail
raise TypeError('Cannot cast {} to any kind of {}.'.format(
TypeError: Cannot cast ChatInviteAlready to any kind of InputPeer.
TypeError: Cannot cast ChatInviteAlready to any kind of InputPeer.
Как получать сообщения, если вы знаете только хэш канала?
Спасибо за помощь
Комментарии:
1.
channel
в данном случае это экземплярChatInviteAlready
, который нельзя использовать как объект.ChatInviteAlready
имеетchat
свойство, которое должно содержатьid
. Используйте это для выполнения вашегоget_messages
запроса.2. Спасибо, Ватзон, это работает.
messages = await client.get_messages(channel.chat, limit = N )
Решаемая