Lagrange.Core icon indicating copy to clipboard operation
Lagrange.Core copied to clipboard

[Bug?]: 转发聊天中的rkey不正确(过期)

Open RikaCelery opened this issue 8 months ago • 2 comments

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

  • [X] 我已经仔细阅读上述内容
  • [X] 我已经使用 最新构建 测试过,问题依旧存在。
  • [X] 我已经在 Issue Tracker 中找过我要提出的问题,没有找到相同问题的ISSUE。
  • [X] 我已知晓并同意,此处仅用于汇报程序中存在的问题。若这个 Issue 是关于其他非程序本身问题,则我的 Issue 可能会被无条件自动关闭或/并锁定。(其它疑问请考虑加入TG群询问或在discussions中提问)

Lagrange项目

OneBot

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

b0b53a4e

运行环境

MacOS

运行架构

arm64

连接方式

None

重现步骤

又双叒来自于群友的抽象转发消息

Lagrange不会递归接受嵌套的转发消息 为了递归接收所有转发消息,我进行了以下修改 1. 修改 ResolveIncomingChain()参数Lagrange.Core/Internal/Context/Logic/Implementation/MessagingLogic.cs 使用转发消息内的uid和IsGroup好像会无法正确下载视频

private async Task ResolveIncomingChain(MessageChain chain,bool forwarding=false,string _uid="", bool isGroup=false)

2. 在 MultiMsgEntity 分支中递归调用ResolveIncomingChain()

case MultiMsgEntity { ResId: not null } multi:
    {
        var @event = MultiMsgDownloadEvent.Create(chain.Uid ?? "", multi.ResId);
        var results = await Collection.Business.SendEvent(@event);
        if (results.Count != 0)
        {
            var result = (MultiMsgDownloadEvent)results[0];
            multi.Chains.AddRange((IEnumerable<MessageChain>?)result.Chains ?? Array.Empty<MessageChain>());
            
            string uid = (chain.IsGroup
                ? await Collection.Business.CachingLogic.ResolveUid(chain.GroupUin, chain.FriendUin)
                : chain.Uid) ?? "";
            foreach (var messageChain in (IEnumerable<MessageChain>?)result.Chains ?? Array.Empty<MessageChain>())
            {
                   await ResolveIncomingChain(messageChain,true,uid,chain.IsGroup);
            }
        }
        
        break;
    }

期望的结果是什么?

正确获取到未失效的rkey

实际的结果是什么?

获取到了各种奇奇怪怪的rkey, 似乎是转发消息原始发送者的rkey, 和自己发送消息得到的rkey不一样

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

No response

Trace 级别日志记录(可选)

No response

补充说明(可选)

No response

RikaCelery avatar Jun 18 '24 16:06 RikaCelery