是否可以将频道权限存储到数据库,实现Join to Create系统的频道配置复用
这一需求完全可以实现,落地逻辑如下:
实现方案
1. 数据库表结构设计
你需要新增一张用户自定义频道权限存储表,推荐字段如下:
- 主键ID(可选)
- 用户ID:存储用户的平台唯一ID,作为核心查询索引
- 服务器ID:区分用户在不同服务器的权限配置,适配多服务器场景
- 自定义权限配置:使用JSON类型字段,直接存储完整的
overwritePermissions参数数组结构 - 更新时间:记录权限配置的最后修改时间,方便后续做过期清理等扩展逻辑
2. 存储触发逻辑
在用户执行权限修改命令、overwritePermissions调用生效后,将本次提交的完整权限覆写数组序列化后,写入/更新对应用户的数据库记录即可。如果用户触发了权限重置操作,直接删除对应数据库记录即可回退到默认权限逻辑。
3. 新频道权限复用逻辑
调整你原有创建频道后的权限赋值逻辑:
- 用户触发频道创建后,优先查询该用户在当前服务器是否存在存储的自定义权限配置
- 存在有效配置的情况下,直接调用
await channel.overwritePermissions(从数据库取出的权限数组)即可复用配置 - 不存在有效配置的情况下,走默认权限赋值逻辑,也就是你当前在用的代码:
await channel.overwritePermissions([ { id: user.id, allow: ["MANAGE_CHANNELS", "CONNECT"], }, { id: member.guild.id, deny: ["CONNECT"], }, ]);
注意事项
- 应用存储的权限前建议做合法性校验,过滤掉当前服务器不支持、或者用户没有分配资格的权限枚举值,避免调用接口时报错
- 如果存储的权限应用失败,可以直接降级使用默认权限,不影响基础功能使用
内容的提问来源于stack exchange,提问作者pxpcorn
相关产品推荐
相关产品推荐

