如何创建仅购买对应Patreon等级的用户可使用的指令?
JavaScript 实现 Patreon 等级专属指令权限方案
核心实现逻辑为:建立订阅等级与指令权限的映射关系,在所有指令执行前插入权限校验环节,权限不足直接拦截执行流程。
1. 基础配置定义
首先定义通用的等级枚举和指令权限映射,后续修改等级/指令权限只需要调整这部分配置即可:
// Patreon 订阅等级枚举,数值越大对应权限越高 const PATREON_TIERS = Object.freeze({ NONE: 0, // 未订阅 BASIC: 1, // 基础订阅档 PREMIUM: 2, // 进阶订阅档 PRO: 3 // 高级订阅档 }); // 指令权限映射表:key 为指令唯一标识,value 为使用该指令所需的最低等级 const COMMAND_PERMISSIONS = Object.freeze({ "help": PATREON_TIERS.NONE, "custom-sticker": PATREON_TIERS.BASIC, "hd-export": PATREON_TIERS.PREMIUM, "batch-process": PATREON_TIERS.PRO });
用Object.freeze是为了避免配置被意外修改。
2. 用户等级存储
你需要将用户的 Patreon 订阅等级同步存储到自有用户体系中,可通过 Patreon 提供的 Webhook 实现用户订阅、升级、退订时自动更新等级字段,示例用户结构:
const sampleUser = { userId: "u_123456", userName: "example_user", patreonTier: PATREON_TIERS.PREMIUM, // 用户当前生效的订阅等级 // 其余用户字段 };
3. 权限校验逻辑
在指令触发入口处增加校验逻辑,校验不通过直接返回提示,不执行后续指令代码:
/** * 校验用户是否有指定指令的使用权限 * @param {string} command 指令名 * @param {object} user 用户对象 * @returns {boolean} 权限校验结果 */ function validateCommandPermission(command, user) { // 未知指令默认无权限 if (!COMMAND_PERMISSIONS.hasOwnProperty(command)) return false; // 用户等级大于等于指令要求的最低等级即校验通过 return user.patreonTier >= COMMAND_PERMISSIONS[command]; } // 指令执行入口调用示例 function onCommandReceived(command, user) { const hasPermission = validateCommandPermission(command, user); if (!hasPermission) { return "该功能需要升级 Patreon 订阅等级后使用"; } // 权限校验通过,执行对应指令业务逻辑 // runCommand(command, user); }
4. 可选优化
- 同等级的批量指令可以用循环批量写入
COMMAND_PERMISSIONS,无需逐个配置 - 权限不足时可返回对应需要解锁的等级名称,引导用户升级
- 建议每日全量同步一次用户订阅状态,避免 Webhook 漏触发导致的权限异常
内容的提问来源于stack exchange,提问作者Hunter W
相关产品推荐
相关产品推荐

