WTelegramClient如何捕获消息新增评论事件?附现有实现代码
识别Telegram消息新增评论的方法
一、直接监听特定更新事件
Telegram API提供了专门的更新类型来捕获评论新增,无需每次调用Messages_GetReplies,你可以在监听逻辑里新增以下判断分支:
- UpdateNewMessage:当评论作为新消息发送时,这条消息的
reply_to字段会指向对应的主消息,通过这个字段可判定为新增评论。 - UpdateNewChannelMessage:针对频道内的评论,会触发该更新类型,同样通过
reply_to字段关联到主消息。
修改后的监听函数示例:
private async Task ListenUpdate(IObject arg) { if (arg is not UpdatesBase updates) { _logger.LogWarning($"received not UpdatesBase event: {arg.GetType()}"); return; } foreach (var update in updates.UpdateList) switch (update) { case UpdateNewMessage unm: if (unm.message.ReplyTo != null) { // 这是关联主消息的评论,主消息ID为unm.message.ReplyTo.ReplyToMsgId await ProcessCommentMessage(unm.message); } else { await ProcessEventMessage(unm.message); } break; case UpdateNewChannelMessage uncm: if (uncm.message.ReplyTo != null) { // 频道内的评论消息 await ProcessChannelCommentMessage(uncm.message); } else { await ProcessEventMessage(uncm.message); } break; case UpdateEditMessage uem: await ProcessEventMessage(uem.message); break; default: _logger.LogInformation($"handle a type message type: {update.GetType().Name}"); break; } }
二、UpdateEditMessage与Messages_GetReplies的适用场景
UpdateEditMessage仅用于捕获已有消息被编辑的场景,不是新增评论的触发事件,不需要在此事件中调用Messages_GetReplies获取新增评论。Messages_GetReplies仅适用于两种情况:一是初始化拉取某条消息的历史评论;二是极端情况下更新事件丢失,需要主动同步评论列表。
核心判断逻辑
所有评论消息都会携带reply_to字段,该字段包含了所回复的主消息ID及对应对话/频道信息,通过这个字段可以精准区分普通消息和评论消息。
内容的提问来源于stack exchange,提问作者Dmitry
相关产品推荐
相关产品推荐

