抽奖插件

抽奖插件

帖子回复抽奖与首页侧边栏抽奖

插件 v1.3.4 Twelve 积分 安全 付费 20 金币

xnx_lottery 抽奖插件

功能

  • 两套抽奖系统:帖子回复抽奖 + 首页侧边栏抽奖,可分别开关
  • 帖子抽奖:发帖时在发布页配置奖品/中奖人数/开奖模式/允许用户组/排除作者;发起人按「奖品积分 × 中奖人数」预扣积分
  • 回帖自动参与帖子抽奖(含用户组限制、作者排除、重复参与校验)
  • 帖子手动开奖(发帖人或管理员),CAS 并发防护防止重复开奖;支持强制结束(不发奖)
  • 侧边栏抽奖:每个奖品为独立抽奖,配置概率(0-100)/库存(-1 不限)/消耗积分;htmx 抽奖返回 HTML 片段
  • 奖品类型:积分(credits)/ 自定义实物(custom)/ 勋章(medal,依赖 xnx_medal 插件)
  • 中奖通知(notify_create)、中奖榜滚动展示(最近中奖记录,5 分钟缓存)
  • 后台管理:基本设置、侧边栏奖品管理、帖子抽奖活动管理(按状态筛选)、中奖记录(按 uid/来源/奖品类型筛选,支持手动补发)、侧边栏抽奖记录
  • 接入发现页(DiscoverService)配置

文件结构

plugin/xnx_lottery/
├── conf.json
├── install.php / uninstall.php / upgrade.php
├── setting.php + view/htm/setting.htm
├── model/LotteryService.php
├── route/lottery.php
├── api/lottery.php + api_register.php
├── hook/
│   ├── model_inc_file.php
│   ├── model_route_table_end.php
│   ├── index_route_case_end.php
│   ├── post_ref_thread_after.htm
│   ├── post_js.htm
│   ├── post_post_end.php
│   ├── thread_message_after.htm
│   ├── thread_create_thread_end.php
│   ├── model_thread_delete_end.php
│   ├── index_site_brief_after.htm
│   ├── footer_js_after.htm
│   ├── lang_zh_cn_bbs.php
│   ├── lang_zh_tw_bbs.php
│   └── lang_en_us_bbs.php
├── view/htm/
│   ├── setting.htm
│   ├── lottery_card.htm
│   └── lottery_sidebar.htm
├── static/js/
│   ├── lottery.js
│   └── lottery_post.js
└── lang/
    ├── zh-cn.php
    ├── zh-tw.php
    └── en-us.php

配置流程

  1. 后台启用插件
  2. 进入「插件设置」→「基本设置」→ 开启帖子抽奖/侧边栏抽奖,配置允许发起的用户组、奖品积分类型与范围、中奖人数范围、中奖榜显示来源
  3. 切换到「侧边栏奖品」→ 添加奖品(类型/名称/概率/库存/消耗积分)
  4. 测试帖子抽奖:在允许用户组内发帖,发布页配置奖品并发布 → 其他用户回帖自动参与 → 发帖人或管理员在帖子详情页点「开奖」
  5. 测试侧边栏抽奖:前台首页侧边栏点抽奖按钮,htmx 返回中奖/未中奖结果

扩展说明

本插件提供事件型 hook,供其他插件监听中奖发奖事件:

  • hook 标记名xnx_lottery_grant_end.php(源码标记 // hook xnx_lottery_grant_end.php
  • 触发时机:在 LotteryService::grantPrizes()(帖子抽奖发奖)和 LotteryService::grantSidebarPrize()(侧边栏抽奖发奖)中,发送中奖通知之后触发。每个中奖者触发一次
  • 可用上下文变量
- $uid:中奖者 uid

- $prize:奖品数据数组(含 type = credits/custom/medal,及 credits_type/amount/medal_id/name 等) - $tid:帖子抽奖时为帖子 id,侧边栏抽奖时为 0 - $activity:帖子抽奖活动记录(侧边栏场景无此变量)

  • 监听示例:其他插件(如 xnx_feeds)在 plugin/<dir>/hook/xnx_lottery_grant_end.php 创建文件即可监听,编译时拼入发奖流程
  • LotteryService 关键公开方法
- createActivity($data):创建帖子抽奖活动

- drawThreadLottery($activity_id, $operator_uid):帖子开奖(CAS 并发防护) - drawSidebar($uid, $prize_id):侧边栏抽奖 - grantPrizes($activity, $winners) / grantSidebarPrize($uid, $prize, $creditsService):发奖(触发上述 hook) - regrantPrize($winner_id):手动补发奖品 - getRecentWinners($limit, $sources):最近中奖记录(缓存)

版本 1.3.0 | 兼容 Xiuno 1.1+

v1.3.4 2026-08-06
1. 后台3个Tab改为独立页面 ,每次只加载当前页所需数据,提升性能;

2. 修复侧边栏奖品添加/编辑时 4个参数未接收导致抽奖消耗配置和积分奖品数据未保存的问题,

3.setting.php 的 save_settings 分支缺失 6 个字段的接收与保存,导致用户修改这些设置后保存仍回退默认值;

4. 删除 5 个历史残留字段
v1.3.3 2026-08-05
1. 修复抽奖参数无法保存的问题
2. 优化插件设置 tab独立访问
v1.3.0 2026-08-03
作者信息
XiunoX 开发者,独立开发者 & 全栈工程师 DiscuzX 插件/模板、WordPress 主题/插件、XiunoX 框架二次开发、APP 与小程序自研项目。
开发者主页
38
应用
102
安装
2026-08
加入
应用详情
应用分类 插件
版本 v1.3.4
适用版本 1.1
开发者 Twelve
下载量 14
浏览 55
更新时间 2026-08-06
发布时间 2026-08-03
最新回复 4
查看全部
  • yaoys 一级用户组
    咦,图片发不出嘞
    18小时前
  • yaoys 一级用户组
    抽奖插件可以设置奖励类型为金币吗,还是只能是积分
    1天前
    贰先生 管理员组 作者 回复@yaoys
    3个积分类型都可以
    1天前
    yaoys 一级用户组 回复@贰先生
    image.png

    好像只有积分

    22小时前
    贰先生 管理员组 作者 回复@yaoys
    最下边设置
    22小时前
    yaoys 一级用户组 回复@贰先生
    image.png

    我这样设置的,但是抽奖提示中奖了,没有任何奖励,也发了站内通知,明天我也登录服务器看看

    18小时前
    yaoys 一级用户组 回复@贰先生
    image.png

    18小时前
    贰先生 管理员组 作者 回复@yaoys
    等我明天更新,修复了新版还没上传
    18小时前
  • yaoys 一级用户组
    插件越来越丰富了
    1天前
  • Laity 一级用户组
    侧边栏抽奖无法修改保存
    1天前
    贰先生 管理员组 作者 回复@Laity
    好的,我看下
    1天前
    Laity 一级用户组 回复@贰先生
    抽奖那个好像也保存不了
    1天前
    贰先生 管理员组 作者 回复@Laity
    是有问题,我优化下,最好单独发个帖子,可以奖励金币
    1天前
    Laity 一级用户组 回复@贰先生
    那你奖励我吧
    1天前
查看全部评论 / 发表评论
完整评论功能在讨论帖中,点击前往