Телемарафон Telegram: как получать сообщения, если вы знаете хэш канала

#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 ) Решаемая