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

Discord.js开发的MC服务器状态查询机器人触发messageCreate无响应如何解决

错误排查与修复方案

已识别的所有问题点

  • 缺少前缀判断逻辑:没有过滤非!开头的消息、机器人自己发送的消息,导致命令匹配失效
  • 未开启Message Content Intent:Discord.js v13及以上版本要求,必须在Discord开发者平台的机器人设置页面开启Message Content Intent权限,否则机器人无法读取用户发送的普通消息内容,messageCreate事件不会触发对应逻辑
  • minecraft-server-util调用逻辑错误:引入工具后错误重写了ping变量,没有实际执行服务器查询请求
  • 拼写错误:响应参数名误写为reponse,正确应为response
  • 使用废弃API:RichEmbed已在Discord.js v12+版本移除,需替换为MessageEmbed

修正后完整代码

// 所有依赖引入统一放在顶部
const { Client, Intents, MessageEmbed } = require('discord.js');
const ping = require('minecraft-server-util');
 
const bot = new Client({ intents: [Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES, Intents.FLAGS.MESSAGE_CONTENT] });
const token = '替换为你的机器人token';
const PREFIX = '!';
// 替换为你自己的MC服务器地址和端口
const MC_SERVER_IP = '你的MC服务器IP';
const MC_SERVER_PORT = 25565; // 默认Java版端口,基岩版自行修改
 
bot.on('ready', () =>{
    console.log('Bot has come online.');
});
 
bot.on('messageCreate', async message =>{
    // 新增:过滤非前缀消息、机器人自己的消息
    if (!message.content.startsWith(PREFIX) || message.author.bot) return;

    let args = message.content.substring(PREFIX.length).split(' ');

    switch(args[0]){
        case 'mc':
            try {
                // 用async/await写法避免回调嵌套问题
                const response = await ping(MC_SERVER_IP, MC_SERVER_PORT);
                const Embed = new MessageEmbed()
                    .setTitle('Server Status')
                    .addField('Server IP', response.host)
                    .addField('Server Version', response.version)
                    .addField('Online Players', response.onlinePlayers)
                    .addField('Max Players', response.maxPlayers);
                message.reply({ embeds: [Embed] });
            } catch (error) {
                console.error('查询MC服务器出错:', error);
                message.reply('查询服务器状态失败,请检查服务器是否正常运行。');
            }
        break;
    }
});
 
bot.login(token);

额外注意事项

  • 执行代码前请确保已经安装对应依赖:npm i discord.js@13 minecraft-server-util
  • 如果使用Discord.js v14版本,意图声明写法需要对应调整为GatewayIntentBits.Guilds、GatewayIntentBits.GuildMessages、GatewayIntentBits.MessageContent,同时需要引入GatewayIntentBits
  • 不要直接抛出未捕获的错误,否则会导致机器人进程直接崩溃

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 07:27:03