如何获取加入服务器的新成员及其邀请人的User ID?
服务器邀请积分系统实现方案
核心流程逻辑
- 监听新成员加入服务器的触发事件,拉取本次加入的关联邀请链路数据,提取两个核心字段:新加入成员的User ID、对应邀请人的User ID
- 执行积分发放前置校验:查询永久存储的已发放标记库,确认当前新成员的User ID未被标记过,避免该用户退服后重新加入重复发放积分
- 校验通过后同步执行两个操作:① 给对应邀请人的账户增加1个货币积分;② 将该新成员的User ID写入已发放标记库,永久生效不再触发重复发放
存储结构设计
建议设置两个独立的存储集合:
- 积分账户表:核心字段为
user_id(用户ID,主键)、point_balance(货币积分余额) - 已发放标记表:核心字段为
new_user_id(已发放过积分的新成员ID,主键)、inviter_user_id(对应邀请人ID,留作数据溯源)、grant_time(发放时间戳)
核心逻辑伪代码示例
// 新成员加入事件回调 async function handleNewMemberJoin(newMemberInfo) { // 1. 获取本次加入对应的邀请人ID const inviterUserId = await getRelatedInviterId(newMemberInfo.id); // 无对应邀请人(如官方渠道加入)直接跳过流程 if (!inviterUserId) return; // 2. 校验该新成员是否已经发放过积分 const hasGranted = await queryGrantedList(newMemberInfo.id); if (hasGranted) return; // 3. 给邀请人发放1个货币积分 await updateUserPoint(inviterUserId, 1); // 4. 标记该新成员已完成积分发放,永久生效 await addToGrantedList(newMemberInfo.id, inviterUserId); }
边界注意事项
- 已发放标记库需做持久化存储,不要使用临时缓存、会话存储承载,避免数据清空后出现重复发放的问题
- 若多个邀请链路同时关联到同一个新成员,可按「最早生效的邀请」规则匹配邀请人即可
内容的提问来源于stack exchange,提问作者Vector
相关产品推荐
相关产品推荐

