3.8 KiB
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 |
|
Uni |
|
|
|
|
|
!!!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,重新测试,没有问题。