如何从 Telethon 中的 MessageService 对象获取 Message 对象

Ant*_*ton 2 telegram telethon

我越来越TypeError: 'MessageService' object is not iterable

首先,我使用iter_messages client返回生成器对象的方法保存来自通道的最后 10 条消息telethon.sync._SyncGen。然后我迭代这个生成器,并尝试通过的方法将每条消息 ( msg) 发送给用户 ( ) ,该方法可以采用或 telethon对象作为消息参数。usernameclientsend_messagestrMessage

然而,我msg这里的对象不是Message类的实例,而是MessageService类(https://lonamiwebs.github.io/Telethon/constructors/message_service.html),我认为这就是我收到错误的原因。

message_objects = client.iter_messages(channel_name, limit=10)

for msg in message_objects:
    client.send_message(username, msg)
Run Code Online (Sandbox Code Playgroud)

我的问题是如何获取Message对象而不是MessageService为了避免错误并使client.send_message()工作正常?

Ali*_*emi 5

MessageService对象是 Telegram 的消息,例如“有人加入了这个群组”或“频道照片已更改”。iter_messages将这些消息与其他消息一起返回,但您无法发送这些消息。正如您在自己链接的文档中看到的,对象内部没有真正的消息MessageService。只有一个MessageAction.

type()您可以通过检查或通过在循环中跳过此类消息hasattr(msg, 'message')。普通消息具有message您要发送的文本字段。如果你想send_message(而不是转发),我认为你的代码应该更改为:

client.send_message(username, getattr(msg, 'message', '...'))
Run Code Online (Sandbox Code Playgroud)