【XIUNOX插件】回帖际遇 v2.1.1

一级用户组

回帖际遇 (navgcn_replyevent)

用户回帖时随机触发奖励或惩罚事件,支持金币、积分、经验值等多种资产类型,提升社区活跃度。


功能概述

  • 概率触发引擎:依据后台配置的触发概率、奖励/惩罚权重判定事件类型,从资产池中按权重随机抽取具体事件

  • 奖励执行:支持金币、积分、经验值 3 种资产类型,每种可独立配置发放数量

  • 惩罚执行:支持扣除金币、积分、经验值,可设置随机范围(如 1-50 金币)

  • 楼层卡片展示:触发后帖子楼层下方展示事件卡片,含图标、文案、资产变动数值

  • 删帖撤回机制:帖子被删除时自动撤回该楼层触发的资产变动(奖励追回、惩罚补偿)

  • 事件日志:后台记录所有事件详情,支持筛选、分页、CSV 导出

  • 个人际遇历史:用户中心可查看自己的际遇记录

  • 际遇大厅:前台公开页面展示今日概览、奖励/惩罚池、最近触发记录

  • 发现页集成:支持接入 DiscoverService 发现页入口

  • 多语言:zh-cn / zh-tw / en-us 三语言完整覆盖


安装步骤

  1. navgcn_replyevent 目录上传至 plugin/ 目录

  2. 在 Xiuno X 后台「插件管理」中点击「安装」

  3. 安装程序自动创建数据表 {tablepre}navgcn_replyevent_log 并写入默认配置

卸载步骤

  1. 在后台「插件管理」中点击「卸载」

  2. 卸载时将删除数据表 {tablepre}navgcn_replyevent_log 和所有配置(setting_delete


使用说明

后台入口

  • 安装后在后台左侧栏「回帖际遇」进入设置页

  • 或通过后台「插件管理」→ 点击「回帖际遇」插件旁的「设置」按钮

配置项

Tab

说明

基础设置

启用开关、触发概率、奖励/惩罚概率、侧栏显示、用户中心显示、发现页开关

奖励池

管理奖励事件(金币/积分/经验值 + 权重),支持增删改

惩罚池

管理惩罚事件(支持随机范围 1-50 格式),支持增删改

文案与展示

奖励/惩罚卡片文案(支持 {username} {assets} 变量)、卡片背景色、图标、效果预览

安全限制

每日用户上限、每日全局上限、允许的版块、允许的用户组

事件日志

筛选(类型/用户/日期)、分页浏览、CSV 导出

前台入口

  • 际遇大厅/navgcn_replyevent_hall(或在发现页点击入口)

  • 个人际遇历史:用户中心侧栏「际遇历史」→ /navgcn_replyevent


插件架构

文件结构

navgcn_replyevent/
├── conf.json                          # 插件元信息 + hooks_rank
├── install.php                        # 安装脚本(建表 + 默认配置)
├── uninstall.php                      # 卸载脚本(删表 + 删配置)
├── upgrade.php                        # 升级脚本(幂等迁移)
├── setting.php                        # 插件设置入口(重定向到后台)
├── discover_register.php              # 发现页注册
├── icon.png                           # 插件图标
├── model/
│   └── NavgcnReplyeventService.php    # 核心 Service 类(静态方法)
├── hook/
│   ├── model_inc_file.php             # 注册 Service 到 model 加载列表
│   ├── model_route_table_end.php      # 注册路由表
│   ├── admin_index_route_case_end.php # 注册后台路由
│   ├── index_route_case_end.php       # 注册前台路由
│   ├── post_post_end.php              # 回帖后触发际遇事件
│   ├── post_list_inc_message_after.htm# 楼层消息后展示事件卡片
│   ├── model_post_delete_end.php      # 删帖时撤回资产变动
│   ├── footer_js_after.htm            # 加载 CSS/JS(仅帖子详情页)
│   ├── admin_sidebar_end.htm          # 后台侧栏菜单入口
│   ├── my_sidebar_nav_threads_before.htm       # 用户中心 PC 侧栏入口
│   ├── my_sidebar_nav_threads_before_mobile.htm# 用户中心移动端侧栏入口
│   ├── lang_zh_cn_bbs.php             # 前台语言包(zh-cn)
│   ├── lang_zh_tw_bbs.php             # 前台语言包(zh-tw)
│   └── lang_en_us_bbs.php             # 前台语言包(en-us)
├── route/
│   ├── navgcn_replyevent.php          # 个人际遇历史路由
│   ├── navgcn_replyevent_hall.php     # 际遇大厅路由
│   └── admin/
│       └── navgcn_replyevent.php      # 后台设置路由
├── view/htm/
│   ├── navgcn_replyevent.htm          # 个人际遇历史模板
│   ├── navgcn_replyevent_hall.htm     # 际遇大厅模板
│   └── navgcn_replyevent_admin.htm    # 后台设置模板
├── static/
│   ├── css/
│   │   └── navgcn_replyevent.css      # 插件样式
│   └── js/
│       └── navgcn_replyevent.js       # 插件 JS(纯 IIFE,无 PHP 代码)
├── lang/
│   ├── zh-cn/bbs_admin.php            # 后台语言包(zh-cn,单一来源)
│   ├── zh-tw/bbs_admin.php            # 后台语言包(zh-tw)
│   └── en-us/bbs_admin.php            # 后台语言包(en-us)
└── readme.md                          # 本文件

Hook 注入点

Hook

作用

model_inc_file.php

注册 NavgcnReplyeventService 到 model 加载列表

model_route_table_end.php

注册 navgcn_replyevent / navgcn_replyevent_hall / navgcn_replyevent_admin 路由

admin_index_route_case_end.php

后台路由 case 'navgcn_replyevent'

index_route_case_end.php

前台路由 case 'navgcn_replyevent' / case 'navgcn_replyevent_hall'

post_post_end.php

回帖后触发际遇事件,组装积分变动描述

post_list_inc_message_after.htm

楼层消息后渲染事件卡片

model_post_delete_end.php

删帖时撤回资产变动

footer_js_after.htm

线程详情页加载 CSS/JS

admin_sidebar_end.htm

后台侧栏菜单入口

my_sidebar_nav_threads_before.htm

用户中心 PC 侧栏「际遇历史」入口

my_sidebar_nav_threads_before_mobile.htm

用户中心移动端侧栏入口

lang_zh_cn_bbs.php

前台语言扩展

lang_zh_tw_bbs.php

前台语言扩展(繁体)

lang_en_us_bbs.php

前台语言扩展(英文)


自检报告

自检日期:2026-08-01 | 对照规范:xiunox-plugin-dev Skill 交付检查表

一、Grep 审计结果

审计项

范围

结果

esc_textarea 禁用函数

plugin/navgcn_replyevent/

PASSED — 0 匹配

jQuery 残留

plugin/navgcn_replyevent/

PASSED — 0 匹配

Alpine.js 残留

plugin/navgcn_replyevent/

PASSED — 0 匹配

htmx 2.x 旧事件名

plugin/navgcn_replyevent/

PASSED — 0 匹配

htmlspecialchars

plugin/navgcn_replyevent/

PASSED — 0 匹配

return; 在 hook 文件中

plugin/navgcn_replyevent/hook/

PASSED — 0 匹配

<?php 在 static/*.js 中

plugin/navgcn_replyevent/static/

PASSED — 0 匹配

二、交付检查表

#

检查项

状态

说明

1

conf.json 必填字段完整,不含 id/installed/enable

name/brief/version/bbs_version/type/author/license 齐全

2

install.phpIF NOT EXISTS 幂等;uninstall.php 标准拼写

CREATE TABLE IF NOT EXISTS + DROP TABLE IF EXISTS + setting_delete

3

数据库结构变更走 upgrade.php 幂等迁移

v2.0→v2.1 补齐 show_in_sidebar 字段

4

hook 文件头正确

非内联 PHP hook 以 <?php exit; 开头;.htm hook 以 <?php 开头;内联 hook 以 <?php 开头

5

hook 文件无 return;

Grep 审计 0 匹配

6

POST 表单含 CsrfService::input()

后台模板中所有 <form method="post"> 均包含 CsrfService::input();admin 框架层集中化 CSRF 校验,路由层无重复调用

7

输出转义正确

esc_textarea;文本内容用 esc_html(),HTML 属性用 esc_attr(),JS 上下文用 esc_js()

8

无 jQuery / Alpine.js / htmx 2.x 旧事件

Grep 审计均 0 匹配

9

命名全带前缀

表名 navgcn_replyevent_log;setting 键 navgcn_replyevent;语言键 navgcn_replyevent_*;CSS class navgcn-replyevent-*;JS 全局 navgcnRe

10

JS/CSS 放 static/ 目录

static/css/navgcn_replyevent.css + static/js/navgcn_replyevent.js

11

静态资源引用用 $conf['view_url']

footer_js_after.htm 中正确使用 $conf['view_url']

12

static/*.js<?php 代码

navgcn_replyevent.js 为纯 IIFE,无 PHP 代码

13

数据库表用 utf8mb4

DEFAULT CHARSET=utf8mb4

14

db_* 函数传表名不含前缀

使用 $db->tablepre 拼接完整表名

15

用户信息显示正确

使用 user_find_by_uids()/user_read();模板取 display_name

16

URL 用 route_url()/url() 生成

无硬编码 .htm/.html 后缀

17

缓存用 CacheHelper

getTodayOverview() 使用 CacheHelper::remember() + pluginKey()

18

Service 调用核心类前 include_once 守卫

CreditsService/DiscoverService 调用前均有守卫

19

后台模板 include ADMIN_PATH header/footer

navgcn_replyevent_admin.htm 首尾正确 include

20

前台模板 include APP_PATH header/footer

navgcn_replyevent.htm / navgcn_replyevent_hall.htm 路由文件正确 include

21

Card 组件加 x-card class

所有 .card 均附加 .x-card

22

插件目录名符合 作者_功能标识 两段格式

navgcn_replyevent

23

多语言完整

zh-cn / zh-tw / en-us 三语言,lang/ 目录为单一来源,hook/lang_*_bbs.php 为同步副本

24

setting.php 有权限检查

$gid != 1 && $gid != 2 AND message(-1, ...)

25

bbs_version 与当前系统一致

"1.1"

三、测试场景

场景

状态

说明

后台设置页 GET 访问

正常渲染 6 个 Tab(基础设置/奖励池/惩罚池/文案与展示/安全限制/事件日志)

基础设置保存

开关、概率、文案等配置正常保存

奖励池 CRUD

添加/编辑/删除奖励项,Modal + fetch POST

惩罚池 CRUD

添加/编辑/删除惩罚项,支持随机范围

文案与展示保存

颜色选择器 + 图标输入 + 实时预览

安全限制保存

版块/用户组多选,每日上限

事件日志查询

AJAX 分页加载,筛选(类型/用户/日期)

CSV 导出

POST 导出含 BOM 的 UTF-8 CSV

回帖触发际遇

post_post_end.php hook 触发,概率判定 + 权重随机

楼层卡片展示

post_list_inc_message_after.htm hook 渲染卡片

删帖撤回

model_post_delete_end.php hook 撤回资产变动

个人际遇历史

分页列表,含资产变动、状态、PID 链接

际遇大厅

今日概览 + 奖励/惩罚池 + 最近触发列表

用户中心侧栏入口

PC + 移动端双模板,受开关控制

发现页集成

DiscoverService::register() + 后台开关控制

多语言切换

zh-cn/zh-tw/en-us 三语言完整


更新日志

  • v2.1.1(2026-08-01):修复 esc_htmlesc_attr 语义、usernamedisplay_name、统一代码缩进

  • v2.1.0(2026-08-01):修复 CSRF 双重校验、param() 索引;完善 README 自检报告

  • v2.0.0(2026-07-30):重构为 Bootstrap 5.3 + 原生 JS 架构;增加际遇大厅、发现页集成、多语言、事件日志筛选/导出、用户中心侧栏入口开关

  • v1.0.0(2026-07-30):初始版本,支持奖励/惩罚概率触发、多资产池、评论删除联动撤回、后台日志管理



回帖际遇 截图

回帖际遇 截图

回帖际遇 截图

回帖际遇 截图

回帖际遇 截图

回帖际遇 截图

回帖际遇 截图

回帖际遇 截图

回帖际遇 截图



版本:v2.1.1
适用版本:1.1
开发者:cywxmz

请登录后查看此内容
最新回复

请先登录后再回复 登录