CHUAN2 DEV ENGINE
996 正版授权研发中心 · 360 授权合作教学中心 · 抖音传奇直播合作授权 · 快手推广运营商授权
OFFICIAL LICENSED ACADEMY 查验官方授权证书 →
// 威海旷世互娱教学基地 · 技术文章
进阶实战996引擎行会公告定时发布

【进阶实战】行会公告定时发布:排期发布的后端实现封装

2026-09-25 08:47 作者:996 技术组 996引擎Lua教程传奇脚本进阶实战996引擎Lua行会公告定时发布

业务场景

行会公告全靠会长手动发布:深夜活动公告忘发、重复发同一公告、公告文案被误改——公告管理缺乏排期与审批流程。定时发布封装:公告预设发布时间与内容,到点自动推送,发布前走内容过滤(敏感词检查),支持定时撤销。

核心实现

定时发布与内容过滤:排期队列、敏感词检查、自动推送。示例代码如下:

lua
local publishQueue = {}
local function scheduleNotice(guildName, text, publishTs)
    local filtered = contentFilter(text)
    if filtered == nil then
        sendmsg(getplayerbyname(guildName), 1, "公告含敏感内容,请修改。")
        return false
    end
    publishQueue[#publishQueue + 1] =
        { guild = guildName, text = filtered, ts = publishTs }
    return true
end
local function contentFilter(text)
    local BAD = { "代充", "外挂", "线下交易" }
    for _, w in ipairs(BAD) do
        if string.find(text, w, 1, true) then
            return nil
        end
    end
    return text
end
local function processQueue()
    local now = os.time()
    local remaining = {}
    for _, item in ipairs(publishQueue) do
        if now >= item.ts then
            sendmsg(nil, 1, "[" .. item.guild .. "] " .. item.text)
        else
            remaining[#remaining + 1] = item
        end
    end
    publishQueue = remaining
end

撤销已排期的公告示例代码如下:

lua
local function cancelNotice(guildName)
    local remaining = {}
    for _, item in ipairs(publishQueue) do
        if item.guild ~= guildName then
            remaining[#remaining + 1] = item
        end
    end
    publishQueue = remaining
end

接口拆解

schedulePress 的 contentFilter 在入队前过滤敏感词(代充、外挂、线下交易),命中的公告不入队。processQueue 每分钟由定时器调用,到期的公告推送至世界频道后从队列移除。cancelNotice 按行会名清除该行会全部待发公告。

踩坑记录

公告排期踩过三个坑:一是同一行会重复排期导致同一公告发多次,排期前查重(同行会同时段去重);二是进程重启后内存队列丢失,排期数据需落库并在启动时恢复;三是敏感词库只过滤了精确匹配,变体(加空格、拆字)绕过检测——复用聊天频道的变体归一逻辑。

作者履历与出处

本文由 996 技术组基于 996 引擎官方知识库与浮生梦老师课程体系整理。团队长期从事传奇类引擎 Lua 后端逻辑、客户端界面与商业版本交付,内容以官方知识库与真实项目为出处,按版本持续修订。

← 返回文章地图返回研学路径

最新技术文章 · 实战干货

LATEST ARTICLES

全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →