如何修复Discord机器人使用simpl.db时用户信息无法正常入库的问题
问题核心原因
你的代码存在查询路径和写入路径不一致的低级错误:判断是否存在用户数据时,你给用户ID拼接了多余的@前缀,但实际写入时没有加这个前缀,两者指向的是数据库中完全不同的两个路径,自然无法匹配逻辑预期。
错误位置
// 这里的@前缀是多余的,和写入路径不匹配 if (db.has(`@${message.author.id}.Inventory`)) {
修正后的代码
client.on('message', message => { // 可选:过滤机器人自身发送的消息,避免无效入库 if (message.author.bot) return; // 移除@前缀,和写入路径保持一致 if (db.has(`${message.author.id}.Inventory`)) { // DO STUFF } else { db.push(`${message.author.id}.Inventory`, `Bread`) // 可选:手动触发数据库保存,避免缓存未同步 db.save() } });
如果你使用的是v14及以上版本的Discord.js,事件名已从message改为messageCreate,需要对应修改事件监听名。
异常复现逻辑说明
你遇到的触发异常是路径不匹配的连锁反应:
- 启动后第一个发消息的是新用户:带@的查询路径不存在,触发else分支写入不带@的正确路径,所以看起来功能正常。
- 启动后第一个发消息的是已入库用户:已入库用户的路径不带@,所以带@的查询路径依然不存在,触发else分支重复写入已有用户的库存,触发simpl.db的内部缓存逻辑异常,导致后续新用户的写入操作被阻塞。
修正路径不一致的问题后即可正常运行。
内容的提问来源于stack exchange,提问作者MysteeriMikitin
相关产品推荐
相关产品推荐

