LagrangeDev / Lagrange.Core

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

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

Open RikaCelery opened 3 months ago

RikaCelery commented 3 months ago

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

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 commented 3 months ago

🤔是不是我不该这么改, 我现在是保存未失效的rkey然后在下载失败的时候替换一下

ghost commented 3 months ago

这个的话我觉得不应该由拉格兰来处理.png 但是其实已经在建立关于RKey的缓存了 NTQQ也是开了一个池来村Rkey