You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Discord Bot 无法正确读取.json数据库导致重复写入用户名故障

问题原因与修复方案

核心错误

你的判断逻辑调用关系完全错误:Array.includes()是数组提供的方法,作用是判断指定元素是否存在于数组内。你原代码写的!message.author.username.includes(db.recognizedusers)是检查「用户用户名字符串是否包含整个数组对象」,这个判断永远为假,所以每次都会触发写入逻辑。

把if条件里的判断改成如下内容即可解决重复写入的问题:

!db.recognizedusers.includes(message.author.username)

其他可优化点

  • 多余导入删除:你导入的const { json } = require('stream/consumers');全程没有用到,可以直接删掉,减少不必要的依赖加载。
  • 重复读取冗余:你开头已经通过require('./database.json')加载了数据库内容,后面又用fs.readFileSync重复读取是多余操作,可以删掉后面的读取逻辑,直接用require加载的对象操作即可。
  • 事件名适配:如果你用的是discord.js v13及以上版本,message事件已经被废弃,改成messageCreate事件才能正常接收消息。
  • 标识更可靠:不推荐用用户名当做用户唯一标识,Discord用户名允许修改,同一个人换名字就会被识别成新用户,建议改用message.author.id(用户永久唯一ID)存储和判断。

修复后的核心逻辑示例

client.on('messageCreate', message => {
    let msg_content = message.content.toLowerCase()

    if (msg_content.includes('test 1') && msg_content.includes('test 2')) {
        message.channel.send('test 2: electric boogaloo')
    }

    if (msg_content.includes('test') && !db.recognizedusers.includes(message.author.id)) {
        message.channel.send('unrecognized name')
        db.recognizedusers.push(message.author.id)
        fs.writeFileSync('./database.json', JSON.stringify(db));
    }
});

内容的提问来源于stack exchange,提问作者Infinite_Bed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 10:48:00