Skip to content

Repository files navigation

桌边助手微信小程序码,请使用微信扫码打开

桌边助手 · ShadowTable

线下讨论,线上发牌。

面向阿瓦隆聚会的微信小程序,提供私密身份与视野、投票、任务及技能结算辅助。

使用微信扫描上方小程序码,即可创建或加入牌桌。

快速上手 · 功能亮点 · 支持的玩法 · 本地开发 · 部署与发布 · 项目文档

快速上手

  1. 创建或加入:房主选择人数和板子,朋友通过邀请或 6 位房间码加入。
  2. 入座与发牌:选择座位并准备,满座且全员准备后由房主发牌;每人在自己的手机上查看身份和初始视野。
  3. 讨论与操作:面对面讨论,房主按现场进度发起投票、任务或技能操作,提交收齐后自动结算。
  4. 结束与再开:线下完成最终结算,由房主登记胜方或选择“不计战绩”后结束本局;同一牌桌可重新准备、再开一局。

支持 5–12 人,具体人数和可用能力随板子变化,见下方玩法表。准备阶段可以换座或站起围观,满座时加入会先围观。

功能亮点

  • 私密身份与视野:身份默认遮盖,主动查看;小程序切到后台会清除私密展示内容。
  • 按现场节奏推进:投票、任务和技能按需发起;任务可选择队员及一张/两张失败票门槛。
  • 秘密提交、自动结算:房主可查看提交进度,不能查看秘密票型或目标;最近公开结果可持续回看。
  • 多种扩展玩法:涵盖经典基础、逆仆、影中执刃、混沌契约和十二骑士。
  • 多桌切换与恢复:支持个人备注、房间恢复和同房重开,切换牌桌不会退出当前对局。
  • 我的战绩与对局记录:小程序个人页展示有效局数、胜场和胜率;战绩页按阵营、角色逐层展开。独立的对局记录页按时间列出每场的板子、本人身份、同桌成员与胜负;结算时的最终阵营决定个人胜负。
  • 积分与积分榜:经典基础 5–8、10、12 人新对局支持按结束原因计分;“我的”显示总积分和本月积分,对局记录可展开每项得分,战绩页展示场均与连胜,排行榜增加积分榜。分值及奖励说明由服务端配置,规则调整只需部署服务端;详情见 积分系统。
  • 可选头像:编辑资料时可按风格选择 160 款内置头像,经典线稿、彩色蜡笔、黑白简笔、极简几何、像素风各 32 款。除奇幻角色外,还可选择月亮、药水、盾牌、王冠、动物等头像;选择后点击“保存资料”生效。服务端启用自定义头像后,小程序可上传自己的图片,审核通过并保存后同步展示到牌桌、排行榜与网页版。
  • 玩家昵称:尚未设置个人昵称的用户在首次创建或加入牌桌时确认昵称,同时用于个人资料和排行榜;支持快捷填写微信昵称或自由输入。已有个人昵称会默认带入,临时修改本桌昵称只影响当前牌桌。历史默认“新朋友”会在下次进桌时确认,已有主动设置的昵称保留。
  • 排行榜:在“我的 → 排行榜”查看有效局数、总胜率、好人胜率和坏人胜率,支持全部/本月切换、并列排名及本人上榜进度。未上榜但已有成绩可分享,图片显示未上榜及所差样本;暂无本人成绩时点击会提示原因,无有效机会可切换次数榜。微信和开发账号默认公开展示,可在排行榜底栏关闭,游客仍可查看榜单。
  • 成绩图片分享:战绩、单项趣味成绩、完整趣味记录和排名可生成图片,预览后直接发给微信好友或保存到相册。趣味记录页顶部分享完整记录,单项入口保留;刀客刀法展示出刀与三种结果。战绩展示阵营表现和四个常玩角色;排名展示本人附近最多五位公开玩家,突出本人和同周期样本。图片高度随内容调整,标明统计时间和范围,接收者无需进入小程序即可阅读。已发送的图片无法随公开设置撤回。
  • 开发与自部署:原生微信小程序 + Node.js + SQLite,附网页版玩家入口、陪测面板和可选管理平台。
牌桌管理与等待处理
  • 我的牌桌:显示房主、公共状态、人数、座位和最近活动,支持仅自己可见的 30 字备注。进行中的牌桌优先,同状态按最近进入排序;达到 6 桌时显示状态筛选。
  • 移除记录:仅隐藏自己的列表条目,8 秒内可撤销,重新进入后恢复;隐藏状态和备注保存在服务端。
  • 离开与解散:离开房间按游戏规则退出并释放座位;解散房间仅房主可执行,需二次确认,会影响所有成员并删除房间内的过程记录;已归档的个人战绩仍保留。
  • 房主管理:可转交管理权,在准备阶段或对局结束后移出玩家;失效房间的列表条目可自行清理。
  • 结束等待:房主确认后可结束等待。投票未提交记弃权,技能按本次不使用处理,任务或必选目标操作作废。

胜率仅统计有明确胜负的有效参赛局。测试房间及有陪测参与的有效对局中,真实玩家和开发账号正常计入;陪测账号(test:)不保存个人战绩、积分及趣味记录,纯陪测对局不归档;终止局、未登记胜负和身份不完整的局不计入;旁观者没有参赛战绩。人工登记与系统判定会标记来源;管理员可更正有完整依据的结算结果。战绩从功能启用后的结算开始归档;已有归档中仅因测试标记被排除、且依据完整的胜负与趣味记录,会在服务启动时恢复。小程序沿用微信身份;网页版默认游客,启用扫码登录后可在“我的”使用小程序账号,共用资料、战绩、积分与座位。游客历史不自动合并,原游客凭证失效后无法自动找回。

支持的玩法

玩法 人数 当前支持范围
经典基础 5、6、7、8、10、12 按人数配置身份与初始视野,支持投票、任务;12 人含双奥伯伦
逆仆 9、11 经典操作及刀逆仆,阵营变化私密呈现;匪队在线下决策
影中执刃 12 身份与初始互认视野、投票、任务;特殊盘刀和最终胜负在线下完成
混沌契约 12 身份与初始互认视野、魔法票与盗贼失败票结算;首夜绑定、特殊盘刀与排名在线下完成
十二骑士 10、11、12 秘密技能提交与同时生效、守护/换号/替死、猎人预选开枪、圣骑士反伤、石像鬼查验、B 牌复活、身份转换、仙女与先知视野

所有板子共用湖中仙女设置:5、6 人不支持,7 人默认关闭,8 人及以上默认开启;房主可在房间设置中切换。公共座位显示「湖仙」,查验结果仅本人可见。

所有板子均以按需工具、操作收齐自动结算、房主手动结束整局为主:不会因为三次任务成功/失败、连续否决或单次操作结果自动结束整局。当前小程序不提供刀梅林入口,最终刀梅林在线下进行。影中执刃的完全自动胜负模式未开放。

十二骑士换牌后会向本人提示新身份,主动技能在下一技能周期启用,先知视野自动更新。房主可在「房间设置」开启已结算技能过程的公开展示,默认隐藏;最终出局与复活座位仍会公示,新牌身份仅本人可见。

详细角色、技能和操作约定见 规则说明。该文档保留了规则演进记录,同一事项以靠后的最新补充为准。

本地开发

使用原生微信小程序、单体 Node.js HTTP 服务和 SQLite。图片上传使用 busboy 解析与 sharp 重编码,无需 Redis 或消息队列。

启动服务

需要 Node.js ≥ 22.13.0(使用内置 node:sqlite;生产镜像使用 Node 24)及 npm。

npm ci
npm run dev

默认服务地址为 http://127.0.0.1:8787,数据库位于 data/shadowtable.sqlite。开发命令同时启用匿名开发登录、本地陪测和网页版入口:

入口 地址 用途
网页版 http://127.0.0.1:8787/ 浏览器玩家入口
本地陪测 http://127.0.0.1:8787/dev 添加独立测试玩家、准备、投票与技能操作
健康检查 http://127.0.0.1:8787/health 检查服务状态

开发登录每次新登录生成独立身份;清除会话后无法恢复原开发身份。测试多名玩家时使用独立设备、独立存储环境或陪测面板。

运行微信小程序

  1. 在微信开发者工具中导入项目根目录,工具会读取 project.config.json。
  2. 使用自己的小程序 AppID;仓库已配置项目 AppID,自行部署时需要替换。
  3. 本地联调使用 miniprogram/config.js 中的 baseUrl: "http://127.0.0.1:8787" 和 devAuth: true,与 npm run dev 配套。
  4. 在开发者工具的本地设置中关闭 request 合法域名校验,然后编译运行。
  5. 创建牌桌后,可在 /dev 输入房间码、补齐测试玩家并全部准备,再回到小程序开局。

真机访问本地服务时,不能使用手机上的 127.0.0.1。同网调试需将 baseUrl 改为电脑的局域网地址,并以 HOST=0.0.0.0 npm run dev 启动服务;正式环境使用 HTTPS 和微信 request 合法域名。

本地陪测

在 /dev 中添加独立测试玩家,可快速验证发牌、投票、任务和技能流程。面板仅允许本机访问,必须同时启用 DEV_AUTH=1、DEV_PANEL=1,生产环境不可用。

陪测账号与房间管理
  • 陪测面板仅操作独立测试账号,不代替真人提交;测试玩家身份默认隐藏,可手动展开。
  • 清空陪测玩家会保留真人和牌桌。陪测担任房主时,可发起投票、任务、技能、查验、结算及转交房主。
  • 管理房间列表提供带房间号的陪测入口;面板按房间保存当前标签页的账号和未确认请求,切换无需先清空旧房间。
  • 房间或凭据失效时可移除本地记录,但不会删除服务器座位;残留座位由管理平台在准备阶段清理。

检查与测试

npm test
npm run check

npm test 运行 Node.js 测试,npm run check 检查主要服务端和客户端脚本语法。真机与人工验收范围见 验证记录。

目录结构

miniprogram/       原生微信小程序页面与接口调用
server/           HTTP API、规则引擎与 SQLite 存储
  web/            网页版玩家入口
  dev-panel/      本地陪测面板
  admin/          正式管理平台
tests/            自动化测试
deploy/cloud/     容器部署、预检与回退脚本
docs/             规则、架构、部署说明与 README 图片

部署与发布

服务端采用单实例 Node.js + SQLite,使用 Docker Compose 部署;独立 Caddy 网关提供 HTTPS。仓库已提供 GitHub Actions 流程:推送 main 后执行验证并构建镜像,再手动选择已验证的镜像通过 SSH 发布,健康检查失败时回退应用镜像。

完整的服务器初始化、镜像仓库、Secrets、网关和备份配置见 部署文档。环境变量示例见 .env.example 和 容器部署配置。Node 不会自动加载 .env,需由运行环境或 Compose 注入。

配置 用途
WECHAT_APP_ID / WECHAT_APP_SECRET 小程序服务端微信登录凭据
HOST / PORT 监听地址与端口,默认 127.0.0.1:8787
DB_PATH SQLite 文件路径,默认 data/shadowtable.sqlite
WEB_ORIGIN 启用网页版与访客登录,生产环境使用完整 HTTPS 源地址
WECHAT_WEB_LOGIN 默认关闭;小程序确认页发布后设 1 开启网页扫码登录,还需配置小程序微信凭据
ADMIN_ORIGIN / ADMIN_KEY 两项同时配置后启用 /admin,详见部署文档
DEV_AUTH / DEV_PANEL 开发登录与本地陪测开关,生产环境设为 0

生产服务启动示例(其余配置由环境注入):

NODE_ENV=production DEV_AUTH=0 DEV_PANEL=0 PORT=8787 npm start

小程序需单独上传发布:配置自己的 AppID、HTTPS baseUrl 和 request 合法域名,将客户端 devAuth 改为 false。AppSecret 仅放在服务端。

资料编辑页及 160 张内置头像位于 pages/profile 普通分包,页面路由仍为 /pages/profile/profile;一级导航和其他页面留在主包。npm test 包含主包与各分包的源码体积检查,最终包体积需在微信开发者工具的代码包分析中确认。头像文件路径与服务端镜像共用,发布时先更新服务端镜像,再上传小程序;仅移动资源不改变头像编号、内容哈希或已有用户头像,无需数据库迁移。

正式管理平台支持房间概览、为准备阶段房间开启陪测、清理测试座位、终止/删除房间及操作审计。生产陪测不依赖开发登录开关。

SQLite 仅由一个服务实例写入;备份使用 SQLite 在线备份或停服备份完整数据目录,不要在运行时仅复制主文件而遗漏 WAL。发布失败时的自动回退只恢复应用镜像,不恢复数据库。main 只运行 CI 并构建镜像;通过 GitHub Actions 的 Deploy tested image 手动选择目标和构建编号发布。

服务已内置每日本机在线备份及日/周/月保留。准备牌桌默认 7 天无活动后进入 3 天宽限,结束牌桌保留 30 天,失效列表条目和操作回执保留 90 天;历史战绩、积分和进行中牌局保留。自动清理要求最近 48 小时内存在已校验备份。双端支持公共详情条件请求和空闲降频,网页补齐自动重连、未确认操作核对及恢复提示。配置、恢复与版本兼容要求见 维护说明。

个人页面

底部“对局 / 我的”分别管理牌桌和个人资料;进入牌桌后隐藏底部导航,返回大厅保留座位。“我的”支持头像、昵称、胜负积分及趣味记录。点趣味次数可回查本人对应对局;排行榜提供积分、局数、胜率与趣味四类,趣味榜支持玩法、角色、次数/成功率及全部/本月筛选。资料沿用当前登录账号保存;网页版可通过小程序扫码确认登录同一账号,游客历史暂不合并。发布顺序、会话恢复与退出规则见 扫码登录说明。

隐私与操作约定

  • 房主也是玩家,不拥有全员身份或秘密行动查询权限;完成进度不包含具体提交内容。
  • 小程序不持久化身份;私密接口按当前玩家返回角色、视野与合法动作。组队票在结算后公开,任务牌只展示汇总。
  • 十二骑士的技能过程公开属于房间设置,开启前需要确认;新抽取的身份牌面始终仅本人可见。
  • 切换未结算操作前需确认作废,已发身份和已结算记录保留;结束本局不会额外公开全员身份。
  • 网络结果不确定时使用原请求编号重试,避免重复操作;切到后台后不会自动重新揭示身份。

项目文档

文档 内容
规则说明 角色配置、线上操作与扩展板规则
规则待确认项 规则歧义与历史讨论,结合最新规则说明阅读
规则原文快照 自定义板子的参考原文
架构与接口 服务结构、数据模型与 API
部署指南 容器、CI/CD、网关、备份及运维
维护说明 数据保留、本机备份、恢复与连接稳定性
验证记录 测试记录与真机验收
趣味记录 指标口径、个人展示与荣誉榜

许可证

本项目原创代码采用 MIT License,允许商业使用、修改和分发,使用时须保留版权及许可声明。第三方依赖、引用的规则文档、图片及其他第三方素材的权利归各自权利人所有,不因本项目的 MIT 许可而重新授权。

About

桌边助手:线下讨论,线上发牌。面向阿瓦隆等聚会桌游的微信小程序。

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages