使用Telethon将消息转发给超级组

时间:2018-11-16 22:27:39

标签: python python-3.x telegram python-telegram-bot telethon

最近,我编写了代码,该代码应该将来自特定用户的每条消息转发给我加入的所有组,但事实并非如此。 这是我的代码:

        for message in client.iter_messages('aliakhtari78'):
        try:
            dialogs = client.get_dialogs()
            for dialog in dialogs:
                id_chat = dialog.message.to_id.channel_id
                entity = client.get_entity(id_chat)
                client.forward_messages(
                    entity,  # to which entity you are forwarding the messages
                    message.id,  # the IDs of the messages (or message) to forward
                    'somebody'  # who sent the messages?
                )

        except:
            pass

在此代码中,我首先接收通过'aliakhtari78'发送给我的每条消息,然后获取我加入的组的实体,最后它应将消息转发给所有组,但否,我检查了代码并用用户实体替换了实体,并且它起作用了,并且我知道问题是由于实体引起的,但是我无法找出问题所在。   此外,很抱歉在我的问题中写错了。

1 个答案:

答案 0 :(得分:3)

要向Telegram中的任何实体发送消息,您需要两条信息:

  1. 实体的常量唯一ID(是整数。不是用户名字符串)
  2. 每个实体的每个用户的access_hash

您只能将@username传递给client.get_entity,Telethon会自动将@username解析为具有idaccess_hash的实体。这就是当您像这样更改代码时它起作用的原因。但是,在您的代码中,您已经将channel_id(这是实体的恒定唯一ID)传递给了client.get_entity,而不是username

请注意,client.get_dialogs返回entitiesdialogs。您只是忽略了实体!这是获取所有实体的数组的方法:

dialogs, entities = client.get_dialogs()

然后只需将相应的实体从entities数组传递到client.forward_messages