电报api中有API方法messages.getReplies,在Telethon中也有相同的API方法functions.messages.GetRepliesRequest。但是,此方法没有将预期的答复/注释返回给帖子。相反,它返回多条消息,包括对请求的message_id的答复和其他消息,这些消息甚至不是对请求的message_id的答复。
for conv in client.iter_messages(channel.id):
if conv.reply_to:
# get parent message this message reply to
original_message = conv.get_reply_message()
try:
#iterate all the replies for the parent message
for reply in client.iter_messages(channel.id,
reply_to=original_message.id):
print('\tReply message -> ', reply.to_dict())
except telethon.errors.rpcerrorlist.MsgIdInvalidError:
print('exception ***************')在这里,它在参数message.id中返回对输入message.id的答复,包括不是对输入message.id的答复的消息。
(我检查了方法调用(内部for循环)的响应,它们的reply_to_msg_id与我请求的结果不同)。
我不明白这些答复的结果是什么。
此外,电报API文档是不好的形式,通过实例和解释。
reply?发布于 2022-09-20 12:08:32
给定一个已启用注释的广播频道(假设频道的用户名为username),以及消息ID为1001的频道帖子开始讨论的帖子(注释),下面的代码将在username频道中打印post 1001的所有注释
async for m in client.iter_messages('username', reply_to=1001):
print(m.text)这相当于点击电报桌面上的“评论”按钮。不幸的是,我无法复制你在这里提到的内容:
但是,此方法没有将预期的答复/注释返回给帖子。相反,它返回多条消息,包括对请求的message_id的答复和其他消息,这些消息甚至不是对请求的message_id的答复。
现在,关于其他问题:
什么样的信息被认为是对电报中的信息的回复?
让我们从另一个角度来看这个问题:send_message和comment_to。
首先,必须使用源消息ID在源广播频道上使用messages.getDiscussionMessage,这将在链接的“讨论巨型频道”中返回相应的“讨论消息”。
现在,可以使用messages.sendMessage在链接的讨论巨组通道中发送消息到对的回复--相应的讨论消息。
正如您所看到的,“注释”只是讨论组的相应消息的“回复”。因此名为reply_to,在iter_messages期间。
电报是如何决定消息的,是回复还是普通消息?
在给定的聊天中,消息可以在相同的聊天中(在Telethon,message.reply_to中)回复以前的其他消息。但是,对于通道注释,它们也是以某种方式(只是在不同的聊天中)的答复,因此是参数名。我试着坚持Telegram的命名惯例,通过记录参数来解决困惑,但这可能是错误的选择。
如果一条消息是回复,那么对哪条消息这是一个回复?
这可以通过message.reply_to找到。
https://stackoverflow.com/questions/72396273
复制相似问题