骗子的话术在升级:直接喊"加Q聊"会被词库秒拦,新话术改成"威 信""v x""绿色软件聊"——拆字、加空格、同音替换轮着来,固定词库拦截率从 92% 跌到 47%。话术识别封装:变体归一(去空白、同音映射、形近替换)后再匹配升级词库,配合行为维度(短时间向多个陌生人发相似文本)联合判定,让变体翻新的成本高于收益。
文本归一与升级匹配:先归一再查词库,行为维度加权。示例代码如下:
local NORM_MAP = { ["威信"] = "微信", ["vx"] = "微信", ["v x"] = "微信",
["绿色软件"] = "微信", ["扣扣"] = "QQ" }
local PATTERNS = { "微信", "QQ", "线下", "当面交易", "加我" }
local function normalize(text)
local t = string.gsub(text, "%s+", "")
for k, v in pairs(NORM_MAP) do
t = string.gsub(t, k, v)
end
return t
end
local function hitPattern(text)
local t = normalize(text)
for _, p in ipairs(PATTERNS) do
if string.find(t, p, 1, true) then
return p
end
end
return nil
end
local whispers = {}
local function onWhisper(actorName, toName, text)
local hit = hitPattern(text)
if hit == nil then
return true
end
local key = actorName .. "|" .. os.date("%H")
whispers[key] = (whispers[key] or 0) + 1
if whispers[key] >= 5 then
sendmsg(nil, 1, "[风控] " .. actorName .. " 私聊引导行为异常,进入复核。")
return false
end
return true
end
归一表扩容示例代码如下:
NORM_MAP["v信"] = "微信"
玩家举报的新变体经审核后进归一表,词库滚动生长。
normalize 先删全部空白(拆字与加空格一次失效)再查归一映射(同音与形近变体收编),归一后的文本对 PATTERNS 做纯文本匹配。行为维度独立于文本维度:10 分钟内向 5 个不同对象发命中文本的账号进复核——单条话术再隐晦也架不住广撒网的行为特征。onWhisper 返回 false 时该条私聊不投递,复核期间账号私聊限流。
话术识别踩过三个坑:一是归一表误伤正常聊天("威信"是某行会名),归一映射前先跑白名单(行会名、好友备注优先),白名单命中跳过识别;二是变体翻新速度超过维护速度,识别率回跌——玩家举报通道产变体样本,审核后入表,词库从"运营维护"变成"全员喂料";三是复核账号的处罚一刀切封号,误伤申诉成本极高,复核期先限流(私聊每日 10 条),确认后才升级处置,处罚与证据分级对齐。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
一、抛坑提问:40 张价目表进程启动全量加载,其中 33 张一天没人访问,白占 18MB——能不能首次访问才加载,访问过的驻…
一、一行代码拆解:local nxt = FSM[state][ev] —— 这一行把祖玛教主狂暴流程写进二维表:状态为行、…
一、一行代码拆解:v = a + (b - a) t —— 这一行是线性插值,t 从 0 走到 1,烈火剑法伤害从 800 …
一、隐蔽陷阱:sendmsg 直接拼 stock 表,屏上永远是 "table: 0x0064a2c0",排查库存差异只能靠…
一、线上事故:报名次数 getplayvar 取回 nil 被 or 0 兜成零,没报过名的与正好 0 次的混成一团,守城补…
一、线上事故:施放入口按装备类型写分支,新装备"弓"上线漏改 elseif,1200 次施放静默不触发,补偿 500 金元。…