在使用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 个赞
Wled
4
插件作者来接受拷打了QwQ
很抱歉才看见issue,元旦玩嗨了…
我看日志中的两次请求都能正常获取到uid,因此购买流程正常进行。
发生“无法获取ID”的输出时应该不会有这两次的日志,可以烦请你再debug几次验证一下发生“无法获取ID”的输出时,会不会有pay开头的日志输出?
无论如何,下个测试版我会将id的验证进行修改,届时尝试解决这个问题。
2 个赞
骚瑞大佬,发送“无法获取ID”的输出时没有任何日志输出
日志图片里有两次请求是因为在沙盒测试了两次,忘记截掉力
2 个赞
这个BUG还能复现吗?
我看了一下代码
这个插件只是普通的指令,并且已经使用了.useFileds声明了id属性
如果你是首次与机器人交互,从未与机器人交互过,并且第一次就触发了这个插件
那么可能的确会遇到这个user.id不存在的问题(因为此时user表里根本没有你)
不出意外的话,如果你把数据库的user表删掉,然后重启koishi,立即触发这个指令,就能复现这个问题
但这应该不是这个插件的问题了
这应该是koishi内部的实现问题
2 个赞
Wled
7
2 个赞
Wled
8
新的测试版Alpha.11已经发布,增加了错误日志。
你可以更新后再次尝试,现在应该就有错误日志了 
2 个赞
我描述的那种情况,与适配器是无关的。
【userFields和数据库爆炸】不是爆炸,是user表还没来得及录入这个用户就开始寻找这个用户了,当然找不到这个用户的id
2 个赞
谢谢大佬捏,我更新到alpha.11又试了一下
现在会返回资金不足(但实际上是有的)
日志如下
感觉像是因为我的uid是0导致的(?)
2 个赞
Wled
11
抱歉我说夸张了点,这的确是另一种情况了,即userFields中间件失效或者数据库异常。
但如果是user还没记录的情况,我在沙盒测试的结果是session直接报错。第二次输入指令即可正常显示bourse的日志。
因此不会出现没有日志的情况。
@Qingchan 需要注意的是,不要贸然删除user表!
因为user表的id与monetary表的uid有关联,并且monetary银行和股票都有存储uid,直接删除user表会导致monetary表的uid错乱!
如果真的需要删除,一定要备份数据或备份相关表。并且删除user表的同时也需要将monetary相关表也删除,否则monetary会根据新user表的id重新匹配,出现用户之间的资产交叉的问题。
1 个赞
Wled
12
非常感谢你的测试 
你的直觉很正确,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 个赞
Wled
14
客气了,即使问题没出在股票插件上,你的提问也完善了插件
自动记录uid为0的情况理论上不能出现,你可以进一步溯源,检查user表、binding表以及QQ适配器关联的用户数据表(如果有的话),以便于判断是哪里出了问题。
不过我觉得大概率就是qq适配器出的问题,比较已经有拿不到用户名的问题了(bushi)
再次感谢你的使用和反馈!如果无误,我将在github中简要说明情况并关闭issue。如有需要可以再次提交issue,我勉力为之ε٩(๑> ₃ <)۶з
2 个赞
好的,其实问题并不大了,除了我自己的号(uid为0)用不了以外,其他群友使用过程中一切正常
大佬开发的银行和股票插件这种和monetary联动的插件我很喜欢,希望大佬继续开发呀 
1 个赞
Wled
16
谬赞了,我也是发现市场里没有这一类插件,脑门一热摸索出来的awa
monetary主表的uid是主键,因此没法直接修改,但是通过数据库管理器可以修改。koishi的数据库文件就在根目录/data/koishi.db,可以将你自己账号的所有表中的id、uid(monetary相关表)改为一个正整数应该就能用了。
也不排除QQ适配器默认把管理员账户的id设为0…如果是这样的话,你可以试试我最开始提到的onebot适配器,通过QQ插件实现 。不过这样应该不能用QQ官方机器人了,而是一个QQ账号。
1 个赞
Wled
18
测试已解决uid为0时无法使用的问题,已经推送正式版了,还有一些其他的更新,感谢你提交的错误 
1 个赞