私聊是骚扰的高发区:广告号群发、情感纠缠、代充推销。私聊的防护是双闸设计:频率的闸(频控)管节奏,关系的闸(黑名单)管对象,两道闸独立工作又互相补位。
---私聊触发:频率与黑名单双重校验
function privatechat(actor, target, sMsg)
local key = actor:GetUserId() .. ":" .. target:GetUserId()
if blacklist[key] or blacklist[actor:GetUserId()] then
return false
end
local rec = chatRate[key] or { count = 0, windowAt = os.time() }
if os.time() - rec.windowAt > 60 then
rec.count, rec.windowAt = 0, os.time()
end
rec.count = rec.count + 1
chatRate[key] = rec
if rec.count > 10 then
sendmsg(actor, 1, "发送过于频繁,请稍后再试")
return false
end
return true
end
频控按发送者与接收者的组合键统计:60 秒窗口内对同一目标最多 10 条,超出的消息拦截并提示。窗口的滑动设计让频控不卡整点,骚扰者无法通过掐点绕过。
---黑名单:被拉黑后单向静默
function BlackList.block(userId, blockedId)
blacklist[userId .. "->" .. blockedId] = os.time()
sendmsg(userId, 1, "已拉黑对方,将不再收到其私聊")
end
黑名单是单向静默:拉黑后对方的私聊不再送达,但对方不知道自己被拉黑,骚扰者得不到拉黑的反馈就少一轮纠缠。黑名单的上限 50 人,支持批量导入旧号的拉黑记录。私聊的内容审计与频道同源:敏感词在私聊同样拦截,证据留存 7 天供举报取证。
拦截率与拉黑量的日报监控,某个发送者的拦截率接近百分之百即为广告号实锤。
频控的窗口曾经按整分钟计算,骚扰者掐整分边界卡出双倍额度,窗口改为滑动时间后封死。黑名单的上限溢出时最旧的记录被自动挤出,被挤出的正好是最需要的,上限溢出改为拒绝新拉黑并提示清理。
双闸的顺序:黑名单先判(零成本拦截),频控后判(有计费成本),顺序颠倒浪费计算。拉黑的反馈文案克制:只说不再收到,不说对方被拉黑,避免挑衅升级。骚扰的处罚升级链:频控限速、临时禁言、账号禁言三档,每档的触发条件量化公示。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
实战应用:用在哪里 玩家客户端闪退,开发者却毫不知情——这是没有崩溃上报的常态。Lua 层的错误自动收集:每个报错打包成事件…
实战应用:用在哪里 玩家举报外挂与骗子,客服处理的难点不是判断而是取证:说了什么、什么时间、有没有交易记录。举报取证链把玩家…
实战应用:用在哪里 老玩家的邮箱里躺着上千封邮件,列表控件如果真的创建一千个条目,滚动直接掉到个位数帧率。列表虚拟化只创建可…
实战应用:用在哪里 天赋树给满级玩家继续投入的理由:攻击系、防御系、通用系三条支线各 20 层,加点消耗天赋点,洗点返还点数…
实战应用:用在哪里 一把攻击上限 28 的修罗挂进拍卖行,起拍 800 万,两个行会的土豪从晚上八点掐到十一点。三小时的拉锯…
实战应用:用在哪里 邮件的正文是文本,附件是资产:一把裁决放在附件里,附件的数据安全等级必须对标装备本体。附件与正文分离存储…