QQ官方机器人添加的monetary-bourse插件无法买入股票

在使用koishi-plugin-monetary-bourse插件时发现指令“stock.buy”无法正确买入股票
(适配器为adpter-qq)


经检查没有报错输出
但是在沙盒中测试正常

日志如下:

插件版本为2.0.0-Alpha.10

运行环境

System:
    OS: Windows 11 10.0.22631
    CPU: (6) x64 Intel(R) Core(TM) i5-9500F CPU @ 3.00GHz

Binaries:
    Node: 20.12.2
    Yarn: 4.1.1

Koishi:
    Core: 4.18.9
    Console: 5.29.3
    Koishi Desktop: 1.1.3
2 个赞

帮你提issue了咪


1 个赞

哇,谢谢大佬

2 个赞

插件作者来接受拷打了QwQ
很抱歉才看见issue,元旦玩嗨了

我看日志中的两次请求都能正常获取到uid,因此购买流程正常进行

发生“无法获取ID”的输出时应该不会有这两次的日志,可以烦请你再debug几次验证一下发生“无法获取ID”的输出时,会不会有pay开头的日志输出?

无论如何,下个测试版我会将id的验证进行修改,届时尝试解决这个问题。

2 个赞

骚瑞大佬,发送“无法获取ID”的输出时没有任何日志输出
日志图片里有两次请求是因为在沙盒测试了两次,忘记截掉力

2 个赞

这个BUG还能复现吗?

我看了一下代码

这个插件只是普通的指令,并且已经使用了.useFileds声明了id属性


如果你是首次与机器人交互,从未与机器人交互过,并且第一次就触发了这个插件

那么可能的确会遇到这个user.id不存在的问题(因为此时user表里根本没有你)


不出意外的话,如果你把数据库的user表删掉,然后重启koishi,立即触发这个指令,就能复现这个问题

但这应该不是这个插件的问题了

这应该是koishi内部的实现问题

2 个赞

感谢大佬帮忙 :pray: :pray: :pray:
出于完善的角度,我会在后续的更新完善报错的提示的,不然哪里出问题了都不知道QwQ
我自己也通过adapter-onebot部署了一个QQ机器人,目前使用没有该问题。因此其实还有可能是adpter-qq的问题,毕竟userFields和数据库爆炸的可能性还是很低的吧

2 个赞

新的测试版Alpha.11已经发布,增加了错误日志。
你可以更新后再次尝试,现在应该就有错误日志了 :wheelchair:

2 个赞

我描述的那种情况,与适配器是无关的。

【userFields和数据库爆炸】不是爆炸,是user表还没来得及录入这个用户就开始寻找这个用户了,当然找不到这个用户的id

2 个赞

谢谢大佬捏,我更新到alpha.11又试了一下
现在会返回资金不足(但实际上是有的)


日志如下

感觉像是因为我的uid是0导致的(?)

2 个赞

抱歉我说夸张了点,这的确是另一种情况了,即userFields中间件失效或者数据库异常。
但如果是user还没记录的情况,我在沙盒测试的结果是session直接报错。第二次输入指令即可正常显示bourse的日志。


因此不会出现没有日志的情况。


@Qingchan 需要注意的是,不要贸然删除user表!
因为user表的id与monetary表的uid有关联,并且monetary银行和股票都有存储uid,直接删除user表会导致monetary表的uid错乱
如果真的需要删除,一定要备份数据或备份相关表。并且删除user表的同时也需要将monetary相关表也删除,否则monetary会根据新user表的id重新匹配,出现用户之间的资产交叉的问题。

1 个赞

非常感谢你的测试 :kissing_heart:
你的直觉很正确,uid为0是因为插件没有从数据库中获取到uid,user表和monetary表的id与uid都是自增正整数。
我很抱歉这里有一个逻辑错误,uid=0也应该输出报错的(bushi)


不过没有直接报错也算好事,现在有了新的线索。从新的日志来看,user的名字是一串十六进制字符串,这并不符合常规用户名…
跑题了,既然银行插件可以正常使用,因此一定是插件的问题。


@Qingchan 久等了,以下是后编辑内容:
我很抱歉,一切问题的源头可能是一个?和一次粗心引起的。我尝试修复了这个问题,但由于我无法复现该bug,因此还需要你更新到Alpha.12版本再进行尝试。
届时若仍然无法使用,烦请你再拷打向我反馈。

2 个赞

谢谢大佬一直耐心的回复我——

我更新到了alpha.12版本后和alpha.11版本的报错和回复均相同

我去看了一下数据库里面的monetary表发现我的uid确实是0,我没有擅自更改表的内容,可能第一个使用monetary插件的用户的uid会被记作0(?)

另外,用户名这么奇怪好像是获取不到用户的昵称,qq官方机器人给每个用户都单独分配了一个标识当作用户名了

1 个赞

客气了,即使问题没出在股票插件上,你的提问也完善了插件:heart:

自动记录uid为0的情况理论上不能出现,你可以进一步溯源,检查user表、binding表以及QQ适配器关联的用户数据表(如果有的话),以便于判断是哪里出了问题。

不过我觉得大概率就是qq适配器出的问题,比较已经有拿不到用户名的问题了(bushi)

再次感谢你的使用和反馈!如果无误,我将在github中简要说明情况并关闭issue。如有需要可以再次提交issue,我勉力为之ε٩(๑> ₃ <)۶з

2 个赞

好的,其实问题并不大了,除了我自己的号(uid为0)用不了以外,其他群友使用过程中一切正常
大佬开发的银行和股票插件这种和monetary联动的插件我很喜欢,希望大佬继续开发呀 :smiling_face:

1 个赞

谬赞了,我也是发现市场里没有这一类插件,脑门一热摸索出来的awa
monetary主表的uid是主键,因此没法直接修改,但是通过数据库管理器可以修改。koishi的数据库文件就在根目录/data/koishi.db,可以将你自己账号的所有表中的id、uid(monetary相关表)改为一个正整数应该就能用了。
也不排除QQ适配器默认把管理员账户的id设为0…如果是这样的话,你可以试试我最开始提到的onebot适配器,通过QQ插件实现 。不过这样应该不能用QQ官方机器人了,而是一个QQ账号。

1 个赞

好的嘞,感谢大佬提供的方法,我去试试看

1 个赞

测试已解决uid为0时无法使用的问题,已经推送正式版了,还有一些其他的更新,感谢你提交的错误 :slightly_smiling_face:

1 个赞

好耶,谢谢大佬 :wink:
更新到2.1.0版本已没有问题

1 个赞