LagrangeDev / Lagrange.Core

An Implementation of NTQQ Protocol, with Pure C#, Derived from Konata.Core
GNU General Public License v3.0
1.75k stars 219 forks source link

[Bug?]: 获取群组历史消息记录 参数 count 存在问题 #376

Open KomeiDiSanXian opened 2 months ago

KomeiDiSanXian commented 2 months ago

请确保您已阅读以上注意事项,并勾选下方的确认框。

Lagrange项目

OneBot

所使用/依赖的Lagrange项目对应的commit

4de8ac2b76d56d5237777b297c4b6e91a91cb5e4

运行环境

Windows

运行架构

x64

连接方式

正向 WebSocket

重现步骤

我想要获取某一群聊的历史消息记录来做词云, 有如下的发现

如果bot刚加入群聊,群聊中没有大于count条消息的话,则会报错 请求如下

{
    "action": "get_group_msg_history",
    "params": {
        "group_id": 812312345,
        "count": 30,
        "message_id": 563047330
    }
}

日志

trce: Lagrange.Core.BotContext[0]
      [2024-05-17 08:58:54] [ServiceContext] [DEBUG]: Outgoing SSOFrame: trpc.msg.register_proxy.RegisterProxy.SsoGetGroupMsg
trce: Lagrange.Core.BotContext[0]
      [2024-05-17 08:58:54] [ServiceContext] [DEBUG]: Incoming SSOFrame: trpc.msg.register_proxy.RegisterProxy.SsoGetGroupMsg
warn: Lagrange.OneBot.Core.Operation.OperationService[0]
      Unexpected error encountered while handling message.
      System.Exception: Group member not found
         at Lagrange.OneBot.Message.MessageService.ConvertToGroupMsg(UInt32 uin, MessageChain chain)
         at System.Linq.Enumerable.SelectListIterator`2.Fill(ReadOnlySpan`1 source, Span`1 destination, Func`2 func)
         at System.Linq.Enumerable.SelectListIterator`2.ToList()
         at Lagrange.OneBot.Core.Operation.Message.GetGroupMessageHistoryOperation.HandleOperation(BotContext context, JsonNode payload)
         at Lagrange.OneBot.Core.Operation.OperationService.HandleOperation(MsgRecvEventArgs e)
trce: Lagrange.OneBot.Core.Network.Service.ForwardWSService[13]
      Send(6bfe055a-a0a9-4cc9-87d2-a25f7f25d3c5) {"status":"failed","retcode":200,"data":null,"echo":null}
trce: Lagrange.Core.BotContext[0]
      [2024-05-17 08:58:55] [ServiceContext] [DEBUG]: Outgoing SSOFrame: Heartbeat.Alive

但如果将count修改为18, 则刚好能获取 18 条, 大于18就会出现如上报错

将bot账号踢出群聊不附带消息记录拉入后, 使用同一参数就不能获取聊天记录了, 报错相同

我认为对于这种情况应报错消息记录获取失败而不是报错找不到群成员


如果bot在一个待了很久且活跃的群聊中, 我想要获取上千条消息, 但有如下发现 请求如下

{
    "action": "get_group_msg_history",
    "params": {
        "group_id": 81231230,
        "count": 3000,
        "message_id": -1333010792
    }
}

虽然能够正常拉取到消息, 但是最多只能获取到30条, 小于30能符合预期获取.

文档中并没有对count这一参数能获取的消息数量进行说明.

因此, 我认为需要对此进行提示或者使get_group_msg_history这一api能获取大于30条历史消息记录

看了一下代码感觉这个问题是修不了了, 应该是tx的问题, 但是希望能够对此添加一个说明

期望的结果是什么?

get_group_msg_history 能够获取更多的历史消息

实际的结果是什么?

重现步骤中已经说明

简单的复现代码/链接(可选)

No response

日志记录(可选)

No response

补充说明(可选)

我觉得是修不了了, 所以希望能够在文档添加对此的相关的说明

ghost commented 2 months ago

这玩意一次性最多只能拉30条所有都是循环拉取的

KomeiDiSanXian commented 2 months ago

这玩意一次性最多只能拉30条所有都是循环拉取的

理解了,也就是说我需要迭代来拉取是吧,每次只能拿30条 晚上写个小脚本测试一下