如何在Discord.js中限制命令仅指定用户ID可使用
实现Discord机器人say命令的权限限制
要实现仅特定用户可使用say命令,只需在处理命令逻辑前添加用户ID校验即可,具体修改如下:
核心修改步骤
- 在解析命令之前,检查消息发送者的ID是否在你定义的
adminIDs数组中 - 如果不在权限列表内,直接终止后续操作,可选发送权限不足提示
修改后的完整代码
const Discord = require("discord.js") const TOKEN = "---" prefix = "." // 替换为实际的管理员用户ID(纯数字字符串) const adminIDs = ["1234567890", "0987654321"] const client = new Discord.Client({ intents: [ "GUILDS", "GUILD_MESSAGES" ] }) client.on("ready", () => { console.log(`Logged in as ${client.user.tag}`) }) client.on("messageCreate", (message) => { if(!message.content.startsWith(prefix) || message.author.bot) return // 权限校验:仅adminIDs内的用户可执行命令 if (!adminIDs.includes(message.author.id)) { // 发送权限提示并自动删除(可选) message.reply("你没有使用该命令的权限!").then(msg => { setTimeout(() => msg.delete(), 3000) }) message.delete() return } const args = message.content.split(/\s+/) const commandName = args.shift().substring(prefix.length) if(commandName == "say"){ const messageContent = args.join(" ") message.channel.send(messageContent) message.delete() } }) client.login(TOKEN)
关键说明
- 确保
adminIDs中的用户ID是正确的Discord用户ID(开启开发者模式后右键用户即可复制ID) - 如果不需要权限提示,可直接删除
message.reply相关代码,仅保留message.delete()和return - 若只想限制say命令而非所有前缀命令,可将校验代码移到
if(commandName == "say")的代码块内
内容的提问来源于stack exchange,提问作者heart u
相关产品推荐
相关产品推荐

