BlogArticles/2024-03/转向Lagrange.Core 解决Sign服务问题.md

3.8 KiB
Raw Blame History

title description draft type created_at published_at updated_at category tags tech_stack tech_stack_percent tech_stack_icon_names tech_stack_theme_colors
转向Lagrange.Core 解决Sign服务问题 作者放弃ChronoCat转向Lagrange.Core但在发送消息时遇到阻塞。发现未配置Sign服务器导致登录异常。通过阅读源码自定义SignProvider并硬编码URL后解决问题成功实现消息发送。 false article 2024-03-29T09:50:00+08:00 2024-03-29T10:19:00+08:00
2024-03-29T10:19:00+08:00
Uni
QQBot
LagrangeCore
C#
50
50
mynaui:letter-l
mdi:language-csharp
#8f71b0
#a179dc

!!!warning Legacy Article 过时的文章 此文章从旧博客迁移而来,编写时技术水平有限,仅供参考 !!!

事件记录

在群U的劝说下放弃了ChronoCat转向了Lagrange.Core 初步了解后我发现这东西竟然有Nuget开发包我直呼还有这好事直接对着Api文档开写。 写到发送单对单信息后,开始测试,发现发不出去,就阻塞了,卡在那了,没报错,没异常。 在反复对照调试了30min后向Rosemoe求助。 他一开始也觉得没问题,突然问我,你配Sign了吗 我一下子就不懂了 然后他丢给我一个sign的链接 这里就不丢出来了需要的去telegram找 我就愣住了然后就开始看文档看ReadMe 我就发现只有一个地方提到了sign的事 Lagrange.OneBot Appsettings.json里面有一个要求用户填入。 然后我就把链接填到Docker Contianer里的Appsettings.json 重启 但是没用 更不会了突然想起来Docker也有log 我决定对比一下我的请求和Docker log 看看有没有什么报错信息。 然后我就发现一个奇怪的事好像我的请求和log没什么关系

而且log里也有用于登录的二维码 这不扫一下 然后我发现我的电脑qq被顶下去了我立刻意识到它成功登录了而我的Api调用登录是不成功的。 这时我才意识到Lagrange.Core 和 Lagrange.OneBot是两个东西关于Lagrange.Core的sign服务配置只在ReadMe.md有提到

暂不提供签名 API您可能需要在某个地方找到它并在 BotConfig 继承 SignProvider 类的CustomSignProviderBotConfig

之前ChronoCat使用vnc直接显示qq界面登了就顶符合直觉。 在调用Lagrange.Core时如果没有正确配置sign服务器登录时手机会显示有其他设备登录但是电脑上不顶号。获取到了BotContext甚至有uin字段但是实际是没有登录成功的。 这也解释了为什么Online事件没有正常触发。

#正题 Lagrange.Core sign配置 没办法了,只能试着看源代码了 在这个过程中Rosemoe给了我OneBot sign 服务实现的代码,位置是

Lagrange.OneBot.Utility.OneBotSigner

大致的读了一下代码关键在于从AppSettings获取了Sign链接然后配合其他的变量发送了一条请求最后返回了一个byte[] Core下也有类似的代码

Lagrange.Core.Utility.Sign.LinuxSigner //这里只考虑Linux

但是该文件中 Url是空的并且没有函数给它赋值LinuxSigner继承自SignProvider SignProvider是BotConfig的一个属性 而BotConfig是Create一个Bot时需要的变量。 看到这,你可能已经明了了 LinuxSigner只有在BotConfig的SignProvider为null时才会被构建所以需要写一个自己的Signer,然后把里面的url填上。 由于LinuxSigner的url是 private const 我不太确定继承能不能使用新的url,我这里直接继承SignProvider为Sign,然后 copy LinuxSigner,修改url,后面可能改成从AppSettings读取。这里先直接硬写了。 然后使用新的SignProvider初始化BotConfig,重新测试,没有问题。