【XIUNOX插件】帖子红包插件 vv1.0.0 [复制链接]

一级用户组

帖子红包插件 (oulin_hongbao)

为 XIUNOX 论坛注入互动活力! 发帖人可在发布帖子时附带积分红包,回帖用户自动抢红包或点击按钮手动拆红包。红包卡片采用“见山论坛”风格设计,支持浮动动画与流光效果,完美适配移动端与桌面端。24 小时未抢完的金额将自动退回发送者。

核心功能亮点

  • ** 双模式红包**:支持「固定红包」(每人均分)与「拼手气红包」(二倍均值法随机分配),灵活满足各类互动场景。

  • ** 多积分体系**:无缝兼容 credits(积分)、golds(金币)、rmbs(人民币)三种积分类型,发帖时可自由选择。

  • ** 自动抢红包**:回帖后系统自动静默抢红包,无需手动点击,极大降低用户操作门槛,提升互动率。

  • ** 按钮拆红包**:帖子下方红包卡片提供「拆」按钮,支持访客登录后查看并参与抢红包。

  • ️ 24小时过期退回:红包超过 24 小时未被抢完,剩余金额自动原路退回发送者,并附带详细的积分日志。

  • ** 手气最佳展示**:卡片直观展示“手气最佳”得主,支持展开查看完整领取排名()。

  • ** 见山风格卡片**:红色渐变背景 + 浮动动画 + 流光文字效果,提供「可抢」「已抢完」「已过期」三种清晰的视觉状态。

  • ** 并发安全**:采用原子条件更新(UPDATE ... WHERE status=0),彻底防止多人同时抢红包导致的超发问题。

  • ** 发帖侧栏集成**:发帖页右侧栏提供红包设置面板,桌面端与手机端双端完美适配。

  • ️ 数据完整性:删帖时自动清理红包记录,编辑帖子时同步更新红包状态,拒绝脏数据。


️ 技术架构

层级

说明

数据表

bbs_oulin_hongbao(红包主表)、bbs_oulin_hongbao_log(领取记录)

业务函数

oulin_hongbao_get_by_tid() / oulin_hongbao_grab() / oulin_hongbao_expire_check()(共享函数,避免逻辑漂移)

路由

oulin_hongbao_grab(AJAX 抢红包接口,响应 htmx POST)

积分

CreditsService(积分扣除 + 过期退款,含积分日志)

前端

原生 HTML/CSS + htmx,无 jQuery/Alpine.js 依赖,极致轻量

Hook

8 个 hook 点覆盖发帖、回帖、路由、卡片展示等核心场景


安装与升级

  • 安装脚本install.php 使用 CREATE TABLE IF NOT EXISTS 幂等建表,包含 ALTER TABLE 升级逻辑以兼容旧表。

  • 卸载脚本uninstall.php 安全删除两张数据表。

  • 升级兼容:升级旧表时自动添加 credits_type 字段,自动忽略字段已存在的错误。





帖子红包插件 截图

帖子红包插件 截图



版本:vv1.0.0
适用版本:1.1
开发者:oulin

请登录后查看此内容
最新回复
  • xiunox 一级用户组

    插件设计很扎实,原子条件更新避免超发,双模式红包和多积分体系覆盖面广。想请教作者:自动抢红包场景下,是否有防刷机制(如回帖频率、同 IP/同设备限制)?另外,过期退回使用 CreditsService 时,积分日志是同时记录扣除和退回两条,还是只记录退回?开发 htmx 接口时,响应 JSON 还是 HTML 片段?期待更详细的实现说明。【 AI 自动回复,仅供参考】

    17天前
  • 贰先生 社区元老金冠神 管理员组

    根因

    帖子详情页 thread_js.inc.htm 中 3 处 document.getElementById('postlist').addEventListener 取到 null#postlist 未渲染,是因为 oulin_hongbao 插件的 thread_message_after.htm hook 在编译期内联进 thread_main.inc.htm 后,原代码含顶层 return

    PHP

    if (empty($tid)) return;
    $hongbao = oulin_hongbao_get_by_tid($tid);
    if (empty($hongbao)) return;   // thread-363 无红包 → 在此截断模板

    return 直接终止整份 thread_main 模板渲染,#postlist(thread_main.inc.htm 第 277 行)及后续内容全部不输出——这也解释了"右栏显示到主贴内容里"(布局 div 未闭合)。

    修复

    • thread_message_after.htm:顶层 return 改为嵌套 if 包裹,已通过 php -l(PHP 8.5.5 无语法错误)

    • 版本 1.0.0 → 1.0.1(conf.json)

    • 删除 tmp/view_htm_thread_main.inc.htm 编译缓存(当前已不存在,下次访问自动重编译)

    17天前
    oulin 一级用户组 作者 回复@贰先生
    已经修改。
    17天前

请先登录后再回复 登录