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

标签 telegram telethon

我收到TypeError:“MessageService”对象不可迭代

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

但是,这里的 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)

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

最佳答案

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

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

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

关于telegram - 如何从 Telethon 中的 MessageService 对象获取 Message 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53467988/

相关文章:

Python Telethon 获取组的所有管理员

proxy - 如何让两个 Telethon 客户端分别使用不同的 IP

python-3.x - python telegram telethon 如何发送表情符号

python - pyTelegramBotAPI - 如何发送消息

c# - 如何在 WtelegramClient 库中保存和加载其他名称的 session 文件,c#?

Telegram:如何查找群聊 ID?

python - Telethon,如何获得实体?

python - 如何让 Telegram 机器人与动画表情符号一起使用?

telegram - 是否可以在我自己的服务器上托管 Telegram ?

python - 将 StringSession 转换为 SQLiteSession 电视马拉松