discord.js设置仅指定单个用户可使用的命令失败如何解决
问题原因及解决方案
常见失效原因
- 代码适配的是旧版本消息命令,当前使用的是v13+版本推荐的斜杠命令:现有代码基于
message事件编写,斜杠命令不会触发该事件,身份校验自然不会执行。 - 未开启消息内容意图:discord.js v13及以上版本需要在Discord开发者后台手动开启
Message Content Intent,同时在Client初始化时声明该意图,否则无法捕获普通消息内容,不会触发message相关事件。 - 校验代码位置错误:身份校验放在了命令执行逻辑之后,命令已经执行完成才做校验,没有起到限制作用。
- 用户ID填写错误:未开启Discord开发者模式复制的ID不正确,或者手敲ID时出现字符错误。
修复方案
场景1:使用前缀消息命令
- 先前往Discord开发者平台的机器人设置页,开启
Message Content Intent权限 - 初始化Client时声明必要的意图:
const { Client, GatewayIntentBits } = require('discord.js'); const client = new Client({ intents: [ GatewayIntentBits.Guilds, GatewayIntentBits.GuildMessages, GatewayIntentBits.MessageContent ] });
- 将身份校验放在命令逻辑最前面:
client.on('messageCreate', message => { // 优先校验身份,不符合直接终止执行 if (message.author.id !== '655427571831406634') return; // 后续写你的命令匹配逻辑 if (message.content === '!你的命令') { message.channel.send('命令执行成功'); } });
场景2:使用斜杠命令
直接从交互对象获取用户ID做校验,示例代码如下:
client.on('interactionCreate', async interaction => { if (!interaction.isChatInputCommand()) return; // 优先校验身份 if (interaction.user.id !== '655427571831406634') { return interaction.reply({ content: "Only the owner of the bot can use this command", ephemeral: true }); } // 后续写你的命令执行逻辑 if (interaction.commandName === '你的命令名') { await interaction.reply('命令执行成功'); } });
内容的提问来源于stack exchange,提问作者claire.png
相关产品推荐
相关产品推荐

