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

Discord机器人Noprefix命令TypeError错误排查求助

Discord机器人Noprefix命令报错排查与解决

错误日志

TypeError: Cannot read properties of undefined (reading 'get')
    at Object.run (/home/container/src/commands/Message/Utility/Noprefix.js:31:45)
    at module.exports.run (/home/container/src/events/botEvents/guild/messageCreate.js:66:17)
    at runMicrotasks (<anonymous>)
    at processTicksAndRejections (node:internal/process/task_queues:96:5)

相关代码

const { EmbedBuilder } = require("discord.js");

module.exports = {
    name: "Noprefix",
    description: "Add's No prefix.",
    category: "Utility",
    aliases: ["np"],
    owner: true,
    run: async(client, message, args) => {
        try{
        let ok = ['950068359213506580','995212517523603456','1075469143324770325','783661052738011176','768061935371419688'];
        if(!ok.includes(message.author.id)) return;

        
        if(!args[0])
        {
            return message.channel.send({embeds : [new EmbedBuilder().setColor(client.config.color).setDescription(`:x: | Usage : \`${prefix}noprefix <add/remove/show> <user/user_id> <server/all>\``)]})
        }

        let op = args[0].toLowerCase();
        
        if(op === `add`)
        {
            let us = message.mentions.members.first() || message.guild.members.cache.get(args[1]);
            if(!us){
                return message.channel.send({embeds : [new EmbedBuilder().setColor(client.config.color).setDescription(`:x: | Please provide me a valid user`)]})
            }
            let pk = args[2]
            if(pk === `all`)
            {
                let db = await client.data2.get(`noprefix_${client.user.id}`);
                if(!db || db === null) client.data.set(`noprefix_${client.user.id}`,[])
                let um = [];
                db.forEach(x => um.push(x));
                if(um.includes(us.id))
                {
                    return message.channel.send({embeds : [new EmbedBuilder().setColor(client.config.color).setDescription(`:white_check_mark: | This user is already in my all server's no prefix`)]})
                }
                else{
                    um.push(us.id);
                    await client.data2.set(`noprefix_${client.user.id}`,um);
                    return message.channel.send({embeds : [new EmbedBuilder().setColor(client.config.color).setDescription(`:white_check_mark: | Added ${us} to my all server's no prefix`)]})
                }
            }
            else{
                
                let guild = await client.guilds.fetch(args[2])
                if(!guild){
                    return message.channel.send({embeds : [new EmbedBuilder().setColor(client.config.color).setDescription(`:x: | Please provide me a valid server`)]})
                }
                let db2 = await client.data2.get(`noprefix_${guild.id}`);
                if(!db2 || db2 === null) client.data2.set(`noprefix_${guild.id}`,[])
                let oo =[];
                db2.forEach(x => oo.push(x));
                if(oo.includes(message.author.id))
                {
                    return message.channel.send({embeds : [new EmbedBuilder().setColor(client.config.color).setDescription(`:x: | This user is already in ${guild.name}'s no prefix`)]})
                }
                else{
                    oo.push(us.id);
                    await client.data2.set(`noprefix_${guild.id}`,oo);
                    return message.channel.send({embeds : [new EmbedBuilder().setColor(client.config.color).setDescription(`:white_check_mark: | Added ${us} to ${guild.name}'s no prefix`)]})
                }
            }
        }
        if(op === `remove`)
        {
            let us = message.mentions.members.first() || message.guild.members.cache.get(args[1]);
            if(!us){
                return message.channel.send({embeds : [new EmbedBuilder().setColor(client.config.color).setDescription(`:x: | Please provide me a valid user`)]})
            }
            let pk = args[2]
            if(pk === `all`)
            {
                let db = await client.data2.get(`noprefix_${client.user.id}`);
                if(!db || db === null) client.data.set(`noprefix_${client.user.id}`,[])
                let um = [];
                db.forEach(x => um.push(x));
                if(!um.includes(us.id))
                {
                    return message.channel.send({embeds : [new EmbedBuilder().setColor(client.config.color).setDescription(`:white_check_mark: | This user is not present in my all server's no prefix`)]})
                }
                else{
                    let bhai = um.filter(x => x !== us.id);
                    await client.data2.set(`noprefix_${client.user.id}`,bhai);
                    return message.channel.send({embeds : [new EmbedBuilder().setColor(client.config.color).setDescription(`:white_check_mark: | Removed ${us} from my all server's no prefix`)]})
                }
            }
            else{
                let guild = await client.guilds.fetch(args[2]);
                if(!guild){
                    return message.channel.send({embeds : [new EmbedBuilder().setColor(client.config.color).setDescription(`:x: | Please provide me a valid server`)]})
                }
                let db2 = await client.data2.get(`noprefix_${guild.id}`);
                if(!db2 || db2 === null) client.data2.set(`noprefix_${guild.id}`,[])
                let oo =[];
                db2.forEach(x => oo.push(x));
                if(!oo.includes(message.author.id))
                {
                    return message.channel.send({embeds : [new EmbedBuilder().setColor(client.config.color).setDescription(`:white_check_mark: | This user is not present in ${guild.name}'s no prefix`)]})
                }
                else{
                    let sh = oo.filter(x => x !== us.id);
                    await client.data2.set(`noprefix_${guild.id}`,sh);
                    return message.channel.send({embeds : [new EmbedBuilder().setColor(client.config.color).setDescription(`:white_check_mark: | Removed ${us} from ${guild.name}'s no prefix`)]})
                }
            }
        }
        if(op === `show` || op === `list`)
        {
            let pk = args[1]
            if(pk === `all`)
            {
                let db = await client.data2.get(`noprefix_${client.user.id}`);
                if(!db || db === null)
                {
                    return message.channel.send({embeds : [new EmbedBuilder().setColor(client.config.color).setDescription(`:white_check_mark: | No Users.`)]})
                }
                let lol = [];
                let index = 1;
                db.forEach(x => lol.push(`\`${index++}\` <@${x}>  |  ${x}`));

                let embed = new EmbedBuilder().setColor(client.config.color).setDescription(lol.sort().join('\n')).setAuthor({name : `| All Server's No prefix List`,iconURL : message.author.displayAvatarURL({dynamic:true})});
                return message.channel.send({embeds : [embed]});
            }
            else{
                let guild = await client.guilds.fetch(args[1])
                if(!guild)
                {
                    return message.channel.send({embeds : [new EmbedBuilder().setColor(client.config.color).setDescription(`:x: | Please provide me a valid server`)]})
                }
                let db = await client.data.get(`noprefix_${guild.id}`);
                if(!db || db === null)
                {
                    return message.channel.send({embeds : [new EmbedBuilder().setColor(client.config.color).setDescription(`:x: | No Users`)]})
                }
                let lu = [];
                let index = 1;
                db.forEach(x => lu.push(`\`${index++}\` <@${x}>  |  ${x}`));

                let eme = new EmbedBuilder().setColor(client.config.color).setDescription(lu.sort().join('\n')).setAuthor({name : `| ${guild.name}'s No prefix List`,iconURL : guild.iconURL({dynamic : true})});
                return message.channel.send({embeds : [eme]});
            }
        }
     } catch(e) { console.log(e) }
}}

问题分析与解决方法

1. 核心报错原因

报错指向第31行的client.data2.get(),说明client.data2对象未定义——机器人启动时没有正确初始化或挂载这个数据库实例。

2. 具体修复步骤

  • 检查数据库实例挂载:
    打开机器人主文件(如index.js),确认是否正确初始化了data2并赋值给client对象。以QuickDB为例,正确代码应类似:

    const { QuickDB } = require('quick.db');
    client.data = new QuickDB();
    client.data2 = new QuickDB({ table: 'noprefix' }); // 确保该行存在
    

    若仅初始化了client.data而无client.data2,就会触发报错。

  • 修正数据库调用混用问题:
    代码中多处出现client.data和client.data2混用的情况,需统一改为client.data2:

    • 第33行:client.data.set(noprefix_${client.user.id},[]) → client.data2.set(...)
    • 第93行:同上,改为client.data2.set(...)
    • 第138行:client.data.get(noprefix_${guild.id}) → client.data2.get(...)
  • 添加数据库实例存在性检查:
    在命令开头添加检查,避免未初始化时执行后续代码:

    if (!client.data2) {
      return message.channel.send({
        embeds: [new EmbedBuilder()
          .setColor(client.config.color)
          .setDescription(`:x: | 数据库服务未正常初始化,请联系管理员`)
        ]
      });
    }
    
  • 修复功能逻辑错误:
    代码中存在判断逻辑错误,第65行和第105行判断用户是否已存在时,错误使用了message.author.id(命令执行者ID),应改为目标用户的us.id:

    // 原代码
    if(oo.includes(message.author.id))
    // 修改后
    if(oo.includes(us.id))
    

3. 测试验证

修复后重启机器人,测试noprefix命令的所有子功能(add/remove/show),确认报错消失且功能正常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 07:39:53