如何修改Discord机器人Kick.js模块,仅允许Mod角色使用踢人命令
限制Discord踢人命令仅Mod角色可执行的修改方案
你的当前Kick.js命令对所有用户开放,要实现仅拥有Mod角色的用户才能使用,只需要在代码开头添加角色权限检查逻辑即可,以下是具体的修改后的代码和细节说明:
修改后的完整代码
module.exports = { name: 'kick', //command name run : async(client, message, args) => { // 第一步:查找服务器中的Mod角色(请替换成你实际的角色名称) const modRole = message.guild.roles.cache.find(role => role.name === 'Mod'); // 如果服务器里没找到这个角色,直接提示 if (!modRole) return message.channel.send('服务器中未找到「Mod」角色,请先创建该角色或修改代码中的角色名称!'); // 第二步:检查执行命令的用户是否拥有Mod角色 if (!message.member.roles.cache.has(modRole.id)) { return message.channel.send('你没有权限执行这个命令!只有拥有Mod角色的成员才能使用踢人功能。'); } // 原有的机器人权限检查逻辑 if (!message.guild.me.hasPermission('KICK_MEMBER')) return message.channel.send('I do not have permission to use this command :joy: '); // 原有的目标成员检查与踢人逻辑 const Member = message.mentions.members.first() if (!Member) return message.channel.send('Please specify a member to kick.....'); await Member.kick({ reason: args.slice(1).join(" ")}) message.channel.send(`${ Member.user.tag} was kicked from the server!`) } }
关键修改点说明
- 角色查找逻辑:通过
message.guild.roles.cache.find定位你的Mod角色,这里用角色名称匹配,如果你担心角色名称被修改导致失效,建议换成角色ID匹配(更稳定),比如把查找条件改成role.id === '123456789012345678'(替换成你实际的Mod角色ID)。 - 用户权限检查:通过
message.member.roles.cache.has(modRole.id)判断当前执行命令的用户是否持有Mod角色,没有的话直接返回权限不足提示,拦截后续操作。 - 检查顺序:把角色权限检查放在最前面,这样无权限用户会被第一时间拦截,避免不必要的逻辑执行。
内容的提问来源于stack exchange,提问作者28_ShahmeerKhan
相关产品推荐
相关产品推荐

