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

Discord.js 如何新增频道独立用户权限且不清除原有配置

Discord.js 频道单用户权限覆写的新增实现

结论:可以完全实现你要的效果,而且不需要额外的自定义方法,updateOverwrite()本身就支持自动新增条目

对现有API的认知纠偏

  • 你对updateOverwrite()的使用场景判断存在误差:这个方法的底层实现是权限条目upsert(存在即更新,不存在则自动新建),根本不需要单独预留一个“新增空权限条目”的前置步骤。
  • 你对overwritePermissions()的问题判断是准确的:这个方法的设计是全量覆盖频道的整个权限覆写集合,一旦调用就会清空所有已配置的用户、角色权限规则,完全不适合用来做单条目的新增或修改。

实际操作流程

你之前拆分的「先调用自定义方法新增空条目,再调用updateOverwrite修改权限」的两步操作,完全可以合并成单步调用:

  1. 初始状态下频道保留User1的「允许:发送消息」配置,无任何改动
  2. 直接执行调用:
    await channel.updateOverwrite(User2.id, { VIEW_MESSAGES: true })
    
  3. 调用的实际执行逻辑:
    • 自动检查频道内是否存在User2对应的权限覆写条目
    • 不存在则自动创建该条目,同时写入传入的VIEW_MESSAGES: true配置
    • 存在则在原有条目的基础上,仅更新你指定的权限位值
    • 全程不对频道内其他已存在的用户、角色权限条目做任何修改

常见误区提醒

如果之前你调用updateOverwrite()时遇到过“条目不存在”的报错,通常和方法本身的能力无关,一般是两类原因:

  • 传入的目标参数不是合法的用户/角色ID(比如传了用户名、tag字符串而不是纯数字ID)
  • 调用方身份没有频道级的「管理权限」,不满足修改权限覆写的前置要求

最终得到的频道权限状态和你预期的完全一致:

频道权限
User1:允许:发送消息
User2:允许:查看消息

内容的提问来源于stack exchange,提问作者Arda Yılmaz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 22:36:02