转向Lagrange.Core 解决Sign服务问题

在群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,重新测试,没有问题。

ChronoCat使用遇到亿点困难 3.28开发小记

ChronoCat 配置小结

最近一直在弄qq框架 ChronoCat
首先这东西一定得弄在Docker里,我没有精力在原系统做一个vnc,然后再装一个QQ,想想就感觉太地狱了。
但是Docker好像没有足够新的版本,倒是找到了能用的Compose文件,但是好多Api都搞不通,我怀疑是版本问题。
另一方面,有一些消息表明使用早期版本的QQ会导致冻号,虽然我的号还没出问题。
问题落在了完成一份新的Dockerfile上。
但是我没能成功,目前仍然卡在这一步。根据错误消息,我怀疑是vnc和QQ不对付,vnc可以启动,但是看不到QQ的画面。
感觉只要涉及到Linux图形化,最后都会变成一场噩梦。
不过也有好消息,从已经成功测试的部分Api来看,调用Api并不困难,基于Satori协议,还是比较方便的。
可以假设我将在一段时间后解决上述配环境的问题,现在考虑一下后端框架。
首先,我需要提供一批Api,供其他Container使用。
以一个报错信息为例子
需要以下信息:(来自谁,发送到谁(人/组/多组),信息内容(string))

{
    "from": "string?",
    "to": ["people","groupA","groupB"],
    "info": "string?"
}

还有很多要考虑的事 要下课了

欢迎使用 Typecho

如果您看到这篇文章,表示您的 blog 已经安装成功.