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

求助:基于discord.js的Discord机器人命令在服务器内无响应

机器人无响应问题修复方案

核心问题是你的机器人未监听用户消息,导致命令无法被触发。以下是分步修复:

1. 添加消息监听事件(必做)

修改index.js,在client.once("ready")后添加messageCreate事件,用于捕获并解析用户命令:

const { Client, Intents, MessageEmbed } = require("discord.js");
const db = require("quick.db");
const config = require("./config.json");

const client = new Client({ intents: 32767, });

client.once("ready", () => {
  console.log("Bot is online!");
});

// 新增:监听用户消息
client.on('messageCreate', async (message) => {
  // 忽略机器人自身消息和非服务器消息
  if (message.author.bot || !message.guild) return;

  const prefix = config.prefix;
  // 判断消息是否以命令前缀开头
  if (!message.content.startsWith(prefix)) return;

  // 拆分命令与参数
  const args = message.content.slice(prefix.length).trim().split(/ +/);
  const commandName = args.shift().toLowerCase();

  // 匹配autorole命令(含别名)
  const command = require(`./commands/autorole`);
  if (command.name === commandName || command.aliases.includes(commandName)) {
    try {
      await command.execute(client, message, args, prefix);
    } catch (err) {
      console.error('命令执行错误:', err);
      message.reply('命令执行出错了,请检查控制台日志!');
    }
  }
});

client.login(config.token);

删除原来的client.execute函数,该函数从未被调用,无实际作用。

2. 开启MESSAGE_CONTENT特权Intent

Discord v14+ 读取消息内容需要开启特权Intent:

  • 进入Discord开发者门户,找到你的机器人应用
  • 进入「Bot」页面,在「Privileged Gateway Intents」下开启「Message Content Intent」
  • 重启机器人

3. 可选:优化命令加载逻辑

若后续需添加更多命令,可改为动态加载所有命令文件,避免硬编码:

在index.js顶部添加文件加载逻辑:

const fs = require('fs');
const path = require('path');

// 加载commands文件夹下所有命令
const commands = new Map();
const commandFiles = fs.readdirSync(path.join(__dirname, 'commands'))
  .filter(file => file.endsWith('.js'));

for (const file of commandFiles) {
  const command = require(`./commands/${file}`);
  commands.set(command.name, command);
}

然后修改messageCreate里的命令匹配部分:

// 匹配命令(含别名)
let targetCommand = commands.get(commandName);
if (!targetCommand) {
  targetCommand = Array.from(commands.values())
    .find(cmd => cmd.aliases?.includes(commandName));
}

if (targetCommand) {
  try {
    await targetCommand.execute(client, message, args, prefix);
  } catch (err) {
    console.error('命令执行错误:', err);
    message.reply('命令执行出错了!');
  }
} else {
  message.reply('不存在该命令!');
}

4. 额外检查

  • 确保机器人在服务器中的角色位置高于要设置的自动分配角色(你的代码已包含该判断,但需实际配置正确)
  • 验证config.json中的前缀prefix是否与你使用的命令前缀一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 04:20:19