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

Discord.js v12中Discord.EvaluatedPermissions替代方案咨询

嘿,我来帮你搞定Discord.js v12的权限替换问题!

Discord.js v12确实彻底移除了EvaluatedPermissions,官方推荐用更灵活的Permissions类来替代,刚好能完美适配你原来的业务逻辑,分两种常见场景给你解决方案:


1. 最常见:从OAuth2接口获取的用户公会数据

因为是dashboard场景,大概率你是通过OAuth授权拿到的用户公会列表,这里的guild.permissions是数值类型(权限位的总和),不是现成的Permissions实例,需要手动包装:

第一步:修改dashboard.js

删掉原来的Discord.EvaluatedPermissions相关代码,改成传递Discord.Permissions给模板:

// 移除 const perms = Discord.EvaluatedPermissions;
renderTemplate(res, req, "dashboard.ejs", { Permissions: Discord.Permissions });

第二步:修改dashboard.ejs的逻辑

把原来实例化perms的代码换成Permissions类,判断逻辑和原来完全一致:

user.guilds.forEach(guild => {
  // 用Permissions类包装数值权限,替代原来的EvaluatedPermissions
  const permsOnGuild = new Permissions(guild.permissions);
  // 和原来一样用字符串权限名判断
  if (!permsOnGuild.has("MANAGE_GUILD")) return;
  // 你的后续业务逻辑...
})

2. 特殊情况:user.guilds是完整的Discord.js Guild实例

如果你的公会数据是直接从Discord.js客户端获取的完整Guild对象,那guild.permissions本身就是Permissions实例,无需额外包装:

第一步:修改dashboard.js

直接移除perms相关代码,不需要传递额外变量:

// 删掉 const perms = Discord.EvaluatedPermissions;
renderTemplate(res, req, "dashboard.ejs", {});

第二步:修改dashboard.ejs

直接用公会自带的permissions对象判断:

user.guilds.forEach(guild => {
  // 直接调用has方法,无需实例化
  if (!guild.permissions.has("MANAGE_GUILD")) return;
  // 你的后续业务逻辑...
})

额外实用小技巧

  • 一次性判断多个权限:has方法支持传入数组
    // 同时检查管理服务器和踢人权限
    if (!permsOnGuild.has(["MANAGE_GUILD", "KICK_MEMBERS"])) return;
    
  • 用权限常量替代字符串(更严谨,避免拼写错误)
    if (!permsOnGuild.has(Permissions.FLAGS.MANAGE_GUILD)) return;
    

内容的提问来源于stack exchange,提问作者HeaveN.ejs

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 11:43:16