如何在Discord.js中使用角色ID与用户ID配置say命令权限
修改后的Discord.js Say命令代码
核心修改说明
- 用常量数组统一管理允许使用命令的角色ID和用户ID,便于后续维护
- 替换原角色名称查找逻辑,直接通过角色ID校验权限
- 添加指定用户ID的权限校验,支持「用户ID匹配」或「角色ID匹配」任一条件即可使用命令
- 优化模块引入,避免重复导入Discord.js组件
const { Client, Attachment, Message, MessageEmbed, DiscordAPIError } = require("discord.js"); const { newInMsgEvtInterceptor } = require("fix/handlers/inMsgEvtInterceptor"); // 权限常量定义:可直接修改数组内容添加/移除权限对象 const ALLOWED_ROLES = ['1044399351742611516']; // 允许使用命令的角色ID列表 const ALLOWED_USERS = ['927305865428611172']; // 允许使用命令的用户ID列表 module.exports = { name: `say`, aliases: ['send'], cooldown: 10, description: "sends a message through the bot", execute(client, message, args) { const { member, channel, author } = message; // 权限校验:用户ID在允许列表 或 拥有允许列表中的任一角色 const hasPermission = ALLOWED_USERS.includes(author.id) || member.roles.cache.some(role => ALLOWED_ROLES.includes(role.id)); if (hasPermission) { message.delete({ timeout: 100 }); channel.send(args.join(" ")); } else { channel.send(`你无法使用此命令`); } } };
关键细节解释
- 权限常量:将角色ID和用户ID单独抽离为数组,后续新增/删除权限只需修改数组,无需改动核心逻辑
- 权限判断逻辑:使用
Array.includes()检查用户ID,用RoleManager.some()检查是否拥有任一允许角色,逻辑更简洁高效 - 模块导入优化:合并Discord.js的组件导入,避免重复引用同一模块
- 代码简化:解构赋值提取需要的对象属性,移除无用变量(如原代码中的
timeout、content)
内容的提问来源于stack exchange,提问作者Icebreaker
相关产品推荐
相关产品推荐

