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

How to get Message object from MessageService object in Telethon

我得到 TypeError: 'MessageService' object is not iterable

Fist 我正在使用 iter_messages client 生成器对象的 returns telethon.sync._SyncGen 方法从频道保存最后 10 条消息。 然后我迭代这个生成器并尝试通过 clientsend_message 方法将每条消息 (msg) 发送给用户 (username),该方法可以采用 str 或 telethon Message 对象作为消息参数。

但是我的 msg 对象不是 Message class 的实例,而是 MessageService class (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)

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

MessageService 对象是 Telegram 的消息,例如"somebody joined this group" 或 "channel photo changed"。 iter_messages returns 这些消息与其他消息一起发送,但您无法发送这些消息。正如您在自己链接的文档中看到的那样, MessageService 对象中没有真正的消息。只有一个MessageAction

您可以在循环中跳过此类消息,我检查它们 type()hasattr(msg, 'message')。普通消息有 message 字段,这是您要发送的文本。如果要send_message(不是转发),我觉得你的代码应该改成:

client.send_message(username, getattr(msg, 'message', '...'))