You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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(`你无法使用此命令`);
        }
    }
};

关键细节解释

  1. 权限常量:将角色ID和用户ID单独抽离为数组,后续新增/删除权限只需修改数组,无需改动核心逻辑
  2. 权限判断逻辑:使用Array.includes()检查用户ID,用RoleManager.some()检查是否拥有任一允许角色,逻辑更简洁高效
  3. 模块导入优化:合并Discord.js的组件导入,避免重复引用同一模块
  4. 代码简化:解构赋值提取需要的对象属性,移除无用变量(如原代码中的timeout、content)

内容的提问来源于stack exchange,提问作者Icebreaker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 08:45:32