Discord.js v13 如何将一个频道的权限设置为与另一频道完全一致
问题根因
discord.js v13 对权限覆盖相关的API做了不兼容升级:v12 中直接访问<channel>.permissionOverwrites即可拿到权限覆盖项的集合,可直接传入set()方法使用;但 v13 中permissionOverwrites本身是管理器实例,不是合法的参数类型,所以会抛出类型错误。
v13 兼容实现方案
你只需要从源频道的权限管理器中取出缓存的集合,再传入目标频道的set方法即可,最简写法如下:
// sourceChannel 为权限模板源频道,targetChannel 为要修改权限的目标频道 targetChannel.permissionOverwrites.set(sourceChannel.permissionOverwrites.cache)
如果需要更高的版本兼容性,也可以手动构造权限覆盖对象数组再传入:
const permissionOverwrites = sourceChannel.permissionOverwrites.cache.map(item => ({ id: item.id, allow: item.allow, deny: item.deny, type: item.type })) targetChannel.permissionOverwrites.set(permissionOverwrites)
补充注意
v13 中所有资源管理器类(角色、成员、消息管理器等)都需要通过.cache属性访问内部存储的集合数据,这是v12升v13的通用变更规则,其他场景遇到同类报错也可以优先排查是否漏加.cache。
内容的提问来源于stack exchange,提问作者779804
相关产品推荐
相关产品推荐

