如何从 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 条消息。
然后我迭代这个生成器并尝试通过 client
的 send_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', '...'))
我得到 TypeError: 'MessageService' object is not iterable
Fist 我正在使用 iter_messages
client
生成器对象的 returns telethon.sync._SyncGen
方法从频道保存最后 10 条消息。
然后我迭代这个生成器并尝试通过 client
的 send_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', '...'))