使用WTelegramClient统计消息反应数时遇400 MSG_ID_INVALID错误求助
解决Telegram API调用
Messages_GetMessageReactionsList返回400 MSG_ID_INVALID错误的问题 错误核心原因
返回MSG_ID_INVALID是因为Peer类型不匹配:你从频道(channel)拉取消息,但调用反应统计接口时传入的是InputPeerUser(自身用户Peer),频道消息对应的Peer必须是InputPeerChannel。
修复方案
- 替换正确的Peer类型:用频道的
InputPeerChannel替代InputPeerUser,传入频道的ID和access_hash。 - 补全未定义变量:代码中
list、history初始值未声明,messages字典未使用,需补充或清理冗余代码。 - 优化循环逻辑:增加消息列表非空判断,避免空索引异常。
修改后的代码示例
// 初始化频道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
相关产品推荐
相关产品推荐

