You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用WTelegramClient统计消息反应数时遇400 MSG_ID_INVALID错误求助

解决Telegram API调用Messages_GetMessageReactionsList返回400 MSG_ID_INVALID错误的问题

错误核心原因

返回MSG_ID_INVALID是因为Peer类型不匹配:你从频道(channel)拉取消息,但调用反应统计接口时传入的是InputPeerUser(自身用户Peer),频道消息对应的Peer必须是InputPeerChannel。

修复方案

  1. 替换正确的Peer类型:用频道的InputPeerChannel替代InputPeerUser,传入频道的ID和access_hash。
  2. 补全未定义变量:代码中list、history初始值未声明,messages字典未使用,需补充或清理冗余代码。
  3. 优化循环逻辑:增加消息列表非空判断,避免空索引异常。

修改后的代码示例

// 初始化频道Peer(需确保已正确获取频道的ID和access_hash)
var channelPeer = new InputPeerChannel(channel.ID, channel.access_hash);
List<MessageBase> targetMessages = new List<MessageBase>();
int step = 0;

// 先获取第一页历史消息
var history = await client.Messages_GetHistory(channel, 0, default, step, 20);

while (history.Messages.Any() && history.Messages[0].Date >= DateTime.Today.AddDays(-7))
{
    await Task.Delay(500);

    foreach (var message in history.Messages)
    {
        try
        {
            var reactionResult = await client.Messages_GetMessageReactionsList(channelPeer, message.ID);
            if (reactionResult.count >= 5)
                targetMessages.Add(message);
        }
        catch (Exception ex)
        {
            // 捕获异常用于调试,比如消息已被删除、API频率限制等情况
            Console.WriteLine($"处理消息ID {message.ID} 失败: {ex.Message}");
        }
    }

    step += 20;
    history = await client.Messages_GetHistory(channel, 0, default, step, 20);
}

额外注意事项

  • 频道的access_hash需通过Channels_GetChannels接口正确获取,确保与频道ID对应。
  • 加入异常捕获,处理消息已删除、API调用超限等边缘情况,避免脚本崩溃。
  • 确认使用的Telegram API客户端库版本兼容最新API规范,避免因版本差异导致的参数错误。

内容的提问来源于stack exchange,提问作者salakas607

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 03:21:08