ES模块加载问题解决及Discord.js斜杠命令排查求助
问题解决指南
一、ES模块加载警告修复
- 方案1:修改
package.json
在项目根目录的package.json中添加"type": "module"字段,示例:
保存后重启项目即可消除警告。{ "name": "your-discord-bot", "version": "1.0.0", "type": "module", "dependencies": { "discord.js": "^14.14.1" } } - 方案2:修改文件后缀
将所有使用ES模块语法(import/export)的.js文件重命名为.mjs,Node.js会自动按ES模块规则加载。
二、Discord.js依赖包安装
确保安装适配ES模块的Discord.js版本(v13及以上默认支持),执行命令:
npm install discord.js
若需指定最新稳定版:
npm install discord.js@latest
注:Discord.js v14已内置@discordjs/builders(用于Slash Command构建),v13版本需单独安装:
npm install @discordjs/builders
三、Slash Command(calin命令)配置检查
1. 命令定义规范
确保calin命令正确定义用户提及选项,示例代码:
import { SlashCommandBuilder } from 'discord.js'; export const data = new SlashCommandBuilder() .setName('calin') .setDescription('提及用户并发送互动消息') .addUserOption(option => option.setName('target') .setDescription('要提及的用户') .setRequired(true)); // 必填选项需设为true
2. 交互处理逻辑检查
处理命令时需正确获取用户选项并完成提及,示例代码:
import { Events } from 'discord.js'; client.on(Events.InteractionCreate, async interaction => { if (!interaction.isChatInputCommand()) return; if (interaction.commandName === 'calin') { const targetUser = interaction.options.getUser('target'); if (!targetUser) { await interaction.reply({ content: '未找到指定用户!', ephemeral: true }); return; } // 正确提及用户的写法 await interaction.reply(`你想给 ${targetUser} 一个抱抱!🥰`); } });
常见错误排查
- 确保命令已正确注册到服务器,可通过以下脚本重新部署更新:
import { REST, Routes } from 'discord.js'; import { config } from 'dotenv'; config(); const commands = [/* 你的命令数组 */]; const rest = new REST({ version: '10' }).setToken(process.env.DISCORD_TOKEN); (async () => { try { console.log('正在刷新应用程序命令...'); await rest.put( Routes.applicationGuildCommands(process.env.CLIENT_ID, process.env.GUILD_ID), { body: commands }, ); console.log('命令刷新成功!'); } catch (error) { console.error(error); } })(); - 若已设置
"type": "module",需确保所有代码统一使用ES模块语法(用import替代require,export替代module.exports)。
内容的提问来源于stack exchange,提问作者Speed Drake
相关产品推荐
相关产品推荐

