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

Node.js开发Discord Bot报错:无法读取Intents.FLAGS属性

问题:Discord Bot 运行时抛出TypeError,无法读取undefined的FLAGS属性

执行node bot.js测试班级奖学金积分统计Bot时,出现以下错误:

name@name-machine discord % node bot.js
/Applications/XAMPP/xamppfiles/htdocs/discord/bot.js:5
        Intents.FLAGS.GUILDS,
                ^

TypeError: Cannot read properties of undefined (reading 'FLAGS')
    at Object.<anonymous> (/Applications/XAMPP/xamppfiles/htdocs/discord/bot.js:5:17)
    at Module._compile (node:internal/modules/cjs/loader:1376:14)
    at Module._extensions..js (node:internal/modules/cjs/loader:1435:10)
    at Module.load (node:internal/modules/cjs/loader:1207:32)
    at Module._load (node:internal/modules/cjs/loader:1023:12)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:135:12)
    at node:internal/main/run_main_module:28:49

Node.js v20.11.1

Bot代码如下(TOKEN为Discord机器人令牌):

const { Client, Intents } = require('discord.js');

const client = new Client({ 
    intents: [
        Intents.FLAGS.GUILDS,
        Intents.FLAGS.GUILD_MESSAGES
    ]
});

client.login('TOKEN');

const points = {};

client.on('ready', () => {
    console.log(`Logged in as ${client.user.tag}!`);
});

client.on('message', message => {
    if (message.author.bot) {
    return;
    } // Ignore messages from bots

    const args = message.content.trim().split(/ +/);
    const command = args.shift().toLowerCase();

    if (command.startsWith('/')) {
        const name = command.substring(1);
        if (!points.hasOwnProperty(name)) {
            points[name] = 0;
            message.channel.send(`Added ${name} to the scholarship points list.`);
        } else {
            const amount = parseInt(args[0]);
            if (!isNaN(amount)) {
                points[name] += amount;
                message.channel.send(`Added ${amount} points to ${name}. Total points: ${points[name]}`);
            } else {
                message.channel.send('Invalid points value. Please provide a valid number.');
            }
        }
    } else if (command === '/points') {
        let leaderboard = 'Scholarship Points Leaderboard:\n';
        Object.keys(points).forEach(name => {
            leaderboard += `${name}: ${points[name]} points\n`;
        });
        message.channel.send(leaderboard);
    }
});
解决方案

错误根源是discord.js版本不兼容:当前安装的是v14版本,但代码采用v13及更早版本的写法,v14对Intents结构和事件名称做了修改。

1. 修正Intents的导入与使用

v14中不再使用Intents.FLAGS,需要导入IntentsBitField,并通过IntentsBitField.Flags调用权限:

const { Client, IntentsBitField } = require('discord.js');

const client = new Client({ 
    intents: [
        IntentsBitField.Flags.Guilds,
        IntentsBitField.Flags.GuildMessages
    ]
});

2. 替换message事件为messageCreate

v14已移除message事件,改用messageCreate监听消息:

client.on('messageCreate', message => {
    // 原消息处理逻辑不变
});

3. 修复命令判断逻辑

原代码中else if (command === '/points')永远不会触发,因为前面的if (command.startsWith('/'))已拦截所有以/开头的命令,需调整顺序:

if (command === '/points') {
    let leaderboard = '奖学金积分排行榜:\n';
    Object.keys(points).forEach(name => {
        leaderboard += `${name}: ${points[name]} 分\n`;
    });
    message.channel.send(leaderboard);
} else if (command.startsWith('/')) {
    const name = command.substring(1);
    // 原添加/修改积分逻辑不变
}

修改后的完整代码

const { Client, IntentsBitField } = require('discord.js');

const client = new Client({ 
    intents: [
        IntentsBitField.Flags.Guilds,
        IntentsBitField.Flags.GuildMessages
    ]
});

const points = {};

client.on('ready', () => {
    console.log(`已登录为 ${client.user.tag}!`);
});

client.on('messageCreate', message => {
    if (message.author.bot) return; // 忽略机器人消息

    const args = message.content.trim().split(/ +/);
    const command = args.shift().toLowerCase();

    if (command === '/points') {
        let leaderboard = '奖学金积分排行榜:\n';
        Object.keys(points).forEach(name => {
            leaderboard += `${name}: ${points[name]} 分\n`;
        });
        message.channel.send(leaderboard);
    } else if (command.startsWith('/')) {
        const name = command.substring(1);
        if (!points.hasOwnProperty(name)) {
            points[name] = 0;
            message.channel.send(`已将 ${name} 添加到积分列表。`);
        } else {
            const amount = parseInt(args[0]);
            if (!isNaN(amount)) {
                points[name] += amount;
                message.channel.send(`已为 ${name} 增加 ${amount} 分,当前总积分: ${points[name]}`);
            } else {
                message.channel.send('无效的积分值,请输入合法数字。');
            }
        }
    }
});

client.login('TOKEN');

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 16:11:14