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

Discord.js机器人斜杠命令已注册但无法响应求助

Discord.js机器人斜杠命令执行失败:提示“The application did not respond”

在Replit平台使用Node.js开发Discord.js机器人,参考官方示例代码完成开发后,斜杠命令已成功注册并在Discord中可见,但执行时提示“The application did not respond”,无法正常工作。以下是相关代码及截图:

命令代码(commands/hi.js)

const { SlashCommandBuilder } = require('discord.js');

module.exports = {
    data: new SlashCommandBuilder()
        .setName('hi')
        .setDescription('say hi'),
    async execute(interaction) {
        await interaction.reply('hi');
    },
};

主文件代码(index.js)

const { Client, Events, GatewayIntentBits } = require('discord.js');
const token = process.env['TOKEN']
const clientId = process.env['APID']
const guildId = process.env['SID']
const client = new Client({ intents: [GatewayIntentBits.Guilds] });

// 部署命令部分
const { REST, Routes } = require('discord.js');
const fs = require('node:fs');

const commands = [];
// 读取commands目录下的所有命令文件
const commandFiles = fs.readdirSync('./commands').filter(file => file.endsWith('.js'));

// 提取每个命令的data用于部署
for (const file of commandFiles) {
    const command = require(`./commands/${file}`);
    commands.push(command.data.toJSON());
}

// 初始化REST模块
const rest = new REST({ version: '10' }).setToken(token);

// 部署命令
(async () => {
    try {
        console.log(`开始刷新 ${commands.length} 个应用(/)命令。`);

        // 使用put方法全量更新服务器内的命令
        const data = await rest.put(
            Routes.applicationGuildCommands(clientId, guildId),
            { body: commands },
        );

        console.log(`成功重新加载 ${data.length} 个应用(/)命令。`);
    } catch (error) {
        // 捕获并记录错误
        console.error(error);
    }
})();

client.on("ready", () => {
  console.log("机器人已上线!");
})

client.login(process.env['TOKEN']);

相关截图

  • 项目结构:项目结构
  • 命令已注册:命令已注册
  • 机器人配置:机器人配置
  • 机器人权限范围:机器人权限范围
  • 机器人权限:机器人权限

问题原因

代码仅完成了斜杠命令的部署流程,但未监听Discord的交互事件。当用户触发斜杠命令时,Discord向机器人发送交互请求,但机器人没有对应的处理逻辑,导致超时提示“The application did not respond”。

解决方案

需要在index.js中补充两项核心逻辑:

  1. 将命令加载到客户端的命令集合中
  2. 监听interactionCreate事件处理用户的命令交互

修改后的完整index.js代码

const { Client, Events, GatewayIntentBits, Collection } = require('discord.js');
const token = process.env['TOKEN']
const clientId = process.env['APID']
const guildId = process.env['SID']
const client = new Client({ intents: [GatewayIntentBits.Guilds] });

// 初始化命令集合,用于存储已加载的命令
client.commands = new Collection();

const { REST, Routes } = require('discord.js');
const fs = require('node:fs');

const commands = [];
const commandFiles = fs.readdirSync('./commands').filter(file => file.endsWith('.js'));

for (const file of commandFiles) {
    const command = require(`./commands/${file}`);
    commands.push(command.data.toJSON());
    
    // 将合法命令添加到客户端集合
    if ('data' in command && 'execute' in command) {
        client.commands.set(command.data.name, command);
    } else {
        console.log(`[警告] ./commands/${file} 缺少必要的"data"或"execute"属性`);
    }
}

// 部署命令
const rest = new REST({ version: '10' }).setToken(token);

(async () => {
    try {
        console.log(`开始刷新 ${commands.length} 个应用(/)命令。`);

        const data = await rest.put(
            Routes.applicationGuildCommands(clientId, guildId),
            { body: commands },
        );

        console.log(`成功重新加载 ${data.length} 个应用(/)命令。`);
    } catch (error) {
        console.error(error);
    }
})();

client.on("ready", () => {
  console.log("机器人已上线!");
})

// 监听交互事件,处理用户触发的斜杠命令
client.on(Events.InteractionCreate, async interaction => {
    // 仅处理斜杠命令类型的交互
    if (!interaction.isChatInputCommand()) return;

    // 根据命令名称从集合中获取对应的处理逻辑
    const command = client.commands.get(interaction.commandName);

    if (!command) {
        console.error(`找不到名为 ${interaction.commandName} 的命令`);
        return;
    }

    try {
        // 执行命令的处理函数
        await command.execute(interaction);
    } catch (error) {
        console.error(error);
        // 向用户反馈错误
        await interaction.reply({ content: '执行命令时发生错误!', ephemeral: true });
    }
});

client.login(process.env['TOKEN']);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 21:15:34