Discord.js 如何新增频道独立用户权限且不清除原有配置
Discord.js 频道单用户权限覆写的新增实现
结论:可以完全实现你要的效果,而且不需要额外的自定义方法,updateOverwrite()本身就支持自动新增条目
对现有API的认知纠偏
- 你对
updateOverwrite()的使用场景判断存在误差:这个方法的底层实现是权限条目upsert(存在即更新,不存在则自动新建),根本不需要单独预留一个“新增空权限条目”的前置步骤。 - 你对
overwritePermissions()的问题判断是准确的:这个方法的设计是全量覆盖频道的整个权限覆写集合,一旦调用就会清空所有已配置的用户、角色权限规则,完全不适合用来做单条目的新增或修改。
实际操作流程
你之前拆分的「先调用自定义方法新增空条目,再调用updateOverwrite修改权限」的两步操作,完全可以合并成单步调用:
- 初始状态下频道保留User1的「允许:发送消息」配置,无任何改动
- 直接执行调用:
await channel.updateOverwrite(User2.id, { VIEW_MESSAGES: true }) - 调用的实际执行逻辑:
- 自动检查频道内是否存在User2对应的权限覆写条目
- 不存在则自动创建该条目,同时写入传入的
VIEW_MESSAGES: true配置 - 存在则在原有条目的基础上,仅更新你指定的权限位值
- 全程不对频道内其他已存在的用户、角色权限条目做任何修改
常见误区提醒
如果之前你调用updateOverwrite()时遇到过“条目不存在”的报错,通常和方法本身的能力无关,一般是两类原因:
- 传入的目标参数不是合法的用户/角色ID(比如传了用户名、tag字符串而不是纯数字ID)
- 调用方身份没有频道级的「管理权限」,不满足修改权限覆写的前置要求
最终得到的频道权限状态和你预期的完全一致:
频道权限
User1:允许:发送消息
User2:允许:查看消息
内容的提问来源于stack exchange,提问作者Arda Yılmaz
相关产品推荐
相关产品推荐

