一次行会改名(改为擦边名称)在论坛发酵 6 小时后运营才看到,处理时截图已传遍贴吧——舆情发现滞后是最大痛点。舆情响应封装:聊天与行会名的敏感变体监控、舆情分级(普通/关注/紧急)、分级响应时限(紧急 30 分钟内回应),把发现与响应的时效用机制锁死。
舆情监控与分级响应:关键词命中计数、分级计时。示例代码如下:
local LEVELS = { { name = "紧急", hits = 10, mins = 30 },
{ name = "关注", hits = 5, mins = 120 },
{ name = "普通", hits = 1, mins = 1440 } }
local buzz = {}
local function onKeywordHit(keyword, source)
local key = keyword .. "|" .. os.date("%Y%m%d%H")
buzz[key] = (buzz[key] or 0) + 1
for _, lv in ipairs(LEVELS) do
if buzz[key] >= lv.hits then
escalate(keyword, lv.name, lv.mins)
return
end
end
end
local function escalate(keyword, level, mins)
local doneKey = "Resp_" .. keyword .. "|" .. level
if getsysvar(doneKey) ~= "" and getsysvar(doneKey) ~= nil then
return
end
setsysvarex(doneKey, os.date("%Y%m%d%H"), 1)
sendmsg(nil, 1, "[舆情" .. level .. "] " .. keyword ..
" 相关讨论升温,需 " .. mins .. " 分钟内响应。")
end
响应时限的升级提醒示例代码如下:
local function checkResponseDeadlines()
local now = os.time()
for k, v in pairs(alerts or {}) do
if now - v.ts > v.mins * 60 and not v.responded then
print("舆情响应超时:" .. k)
end
end
end
buzz 按关键词加小时键计数,命中数逐级匹配 LEVELS 的分级线,达线即 escalate——同一关键词同一级别只告警一次(doneKey 幂等)。escalate 的 mins 是该级别的响应时限,checkResponseDeadlines 周期巡检超时未响应的舆情并发升级提醒。普通级时限 1 天、关注级 2 小时、紧急级 30 分钟,响应时限与级别严格挂钩。
舆情响应踩过三个坑:一是关键词命中把正常讨论也算进去(玩家讨论"这个行会名真搞笑"也命中行会名关键词),分级线放大了噪音,命中统计要剔除转发与引用;二是响应超时的提醒发进无人值班的时段,紧急级告警必须接入值班手机;三是同一次事件多关键词同时越线产生重复告警,同一事件的告警按事件 ID 合并。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
一、抛坑提问:封禁词 80 个,逐个替换要扫 80 遍正文,命中次数还全丢——一次遍历配合词表命中统计,命中几个词、各命中几…
一、一行代码拆解:if BAG = CAP then return false end —— 入包前先查空位的容量闸:格子满…
一、抛坑提问:掉落表 200 个物品权重排到眼花——先掷"掉不掉、掉哪个稀有度",再在该稀有度池里抽物品,两段判定让每张表都…
一、抛坑提问:两名队员 0.5 秒内先后命中才算"合击"触发额外伤害——命中时间戳各自独立,怎么判定够近?用后发命中时间减先…
一、线上事故:组队结算页开着时玩家掉线,内存里的待领奖数据直接蒸发,3 小时收到 170 条丢失反馈;登出钩子把未决数据统一…
一、抛坑提问:背包里 4 组"金创药×30"占 4 格,为什么不能叠成一格 120 瓶?按物品 id 归并计数,同 id 累…