npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

koishi-plugin-prism

v0.1.34

Published

PRiSM Next 计费与设备管理系统的 Koishi 机器人集成插件

Readme

koishi-plugin-prism

npm

koishi-plugin-prism 是用于连接 PRiSM Next 计费与设备管理系统的 Koishi 机器人插件。它可以替代旧版 plugin-prism-neo-koishi,为玩家和店员提供便捷的群内与私聊机器人交互指令。

🌟 功能特性

  • 🎮 玩家入场与结算:通过 /login/logout 指令开启或结算计费场次,支持 /入场 别名;命令回复会引用触发消息,结账账单可私聊通知管理员与指定用户。
  • 💳 账户钱包与资产管理:支持查询钱包余额(/wallet)和持有的道具资产(/items)。
  • 🀄 麻将桌位集成:包含 /mahjong <tableId>/上桌 <桌号>、自动识别当前桌位的 /下桌,以及用于查看桌名、别名和状态的 /麻将列表上桌 仅允许已通过 login/入场 开启默认入场会话的玩家使用。支持在桌位未满但已开局时进行中途补位(直接开始计费上桌),且玩家下桌时会自动显示剩余游玩人数。list 按 session 标签分组:有非音乐游戏 session 的玩家归入最新的非音乐标签,纯音乐玩家归入音乐标签;麻将桌额外显示当前人数和容量。已开局桌位会从后端活跃 session 自动恢复,未满桌候座仍由机器人进程暂存,重启后不会保留。
  • 🔌 硬件设备状态与电源管理:可直接在聊天中查看设备状态(/show)、远程开启/关闭电源(/on/off)、远程投币(/coin)和模拟刷卡(/scan)。
  • 🎟️ 礼物兑换码:使用 /redeem <code> 兑换系统发放的福利礼包。
  • 🛠️ 管理员快捷指令:允许管理员为指定平台用户增加或扣除余额,并覆盖结账金额后立即结账。

⚙️ 配置说明

在 Koishi WebUI 的插件配置页面中,填入以下选项:

| 配置项 | 类型 | 默认值 | 描述 | | :--- | :---: | :---: | :--- | | baseUrl | string | - | 必填。PRiSM Next Server 的访问基准 URL(如 https://prism-mmw.neri.moe)。 | | integrationToken | string | - | 必填。从 PRiSM 网页后台生成的 Integration API 令牌。 | | provider | string | "qq" | 当前绑定的账号提供商平台名称(如 "qq""discord")。 | | autoRegister | boolean | true | 当玩家未注册时,是否在首次操作(如入场/查钱包)时自动在 PRiSM 中创建新玩家。 | | loginPricingConfigIds | string[] | [] | 默认入场计费规则 ID 列表。 | | loginSessionLabel | string | "音游区间" | 默认入场会话的标签文本。后端会按该标签对同一玩家的活跃会话去重,重复入场会被拒绝并提示。留空则不启用去重。 | | defaultDoorDeviceId | string | - | 默认门锁设备的名称或别名,用于开门指令;配置项名称仅为兼容旧配置而保留。 | | defaultScanProvider | string | "aime" | 默认模拟刷卡时的读卡器协议提供商(如 "aime")。 | | currencyName | string | "金币" | 账户货币在显示时的自定义单位名称。 | | resolveDisplayName | function | - | 可选。自定义用于获取群内昵称作为玩家注册名的异步逻辑。 | | enableStaffCommands | boolean | false | 是否开启管理员快捷指令。 | | staffUserIds | string[] | [] | 允许执行管理员快捷指令的平台用户 ID(如 QQ 号)白名单。空列表不授予目标用户操作权限。 | | logoutNotifyUserIds | string[] | [] | 结账成功后额外私聊完整账单的平台用户 ID。通知收件人为该列表与 staffUserIds 的去重并集。 | | mahjongTableConfigs | object[] | [] | 推荐的结构化麻将桌列表。每项填写显示名称、命令别名列表与计费方案 ID 列表。显示名称同时作为内部桌位锚点与 session 标签。 |

麻将桌配置

在 Koishi 配置页的 mahjongTableConfigs 中新增桌位,每一项填写:

displayName: "🀄️ M.LEAGUE联名比赛专用机"
aliases: [a, 四麻A, 比赛机]
pricingConfigIds: [pricing-mahjong-a]

displayName 是该桌的稳定锚点和 session 标签;玩家输入的桌号、简称等均写入 aliases(至少一个)。麻将桌只读取这个结构化列表。

管理员快捷指令必须同时配置 enableStaffCommands: truestaffUserIds。它们使用现有 integrationToken 调用受限的余额调整和立即结账接口;目标用户参数使用 Koishi 的 user 选择器,只有白名单内的管理员可以操作其他用户。

📝 机器人指令列表

玩家指令

  • register - 绑定或注册当前平台账号到 PRiSM 账户。
  • login / 入场 - 开启当前玩家的计费场次。
  • logout - 结算当前玩家的计费场次。 玩家在未产生任何费用时退场,机器人会简洁显示“本次未产生费用”和当前余额;存在收费或优惠明细时仍显示完整结算账单。负单价 session 会在区间明细中保留真实的负数计费贡献,只有后端汇总全部 session 后的最终应付金额会限制为不低于 0。 结账成功回执中的余额为后端已经完成扣款后的余额;只有 /billing 预览会显示当前余额与预计结账后余额。 方案内区间封顶直接计入对应计时费用;全局封顶按后端返回的结构化日期和时段逐条列出,不合并、不截断,并直接形成计费总价,不作为优惠。只作用于整次结账的资产优惠直接列在计费总价下方,不显示额外标题或 emoji,也不会误归属到最后一个 session。 在玩家退场或管理员覆盖结账成功后,机器人会向 staffUserIdslogoutNotifyUserIds 中的用户私聊同一份账单,账单会明确显示结账玩家身份。 同一玩家在前一次退场结账尚未完成时重复发送 /logout/退场,机器人会复用同一次结账请求与账单,避免重复扣款。 账单和管理员代操作回执均使用“平台昵称(QQ:号码)”称呼玩家;平台暂时无法提供昵称时显示“未知昵称(QQ:号码)”,不会显示内部玩家 ID。 管理员 /add 增加免费余额;/del 按结账相同的顺序从可用免费余额、再从付费余额扣除,余额不足时会返回余额不足提示。
  • billing - 预览当前玩家本场计费的消费费用。
  • wallet - 查看当前玩家的钱包余额。
  • items - 查看当前玩家持有的道具或资产。
  • list - 查看当前在线/在店游玩玩家的列表,按 session 标签分组并对同一玩家去重;存在非音乐游戏 session 时取最新的非音乐标签,麻将桌显示当前人数和容量。已开局桌位由后端 session 恢复;未满桌候座由机器人进程暂存,机器人重启后不会保留。
  • show [deviceId] - 查看设备电源与连接状态。
  • history - 查看自己的历史游玩记录。
  • lock - 发送开门指令。
  • on <deviceRef> - 使用后台设备名称、别名或 all 请求启动电源;不接受 Home Assistant entity ID,成功回复使用后端返回的设备名称。
  • off <deviceRef> - 使用后台设备名称、别名或 all 请求关闭电源;不接受 Home Assistant entity ID,all 显示为“所有设备”。
  • coin <deviceId> [count] - 请求向指定设备投币指定枚数。
  • scan <deviceId> <subject> - 请求向设备发送模拟刷卡。
  • redeem <code> - 兑换礼物码。
  • mahjong <tableId> / 上桌 [tableId] - 加入指定麻将桌;/上桌 未提供桌号时会引导查看 /麻将列表。仅允许已通过 login/入场 开启默认入场会话的玩家使用。支持在桌位未满但已开局时进行中途补位(即直接开始计费上桌)。
  • 下桌 - 自动离开当前所在麻将桌,下桌后会停止计费,并显示该麻将桌的剩余游玩人数。
  • 麻将列表 - 查看已配置机器的桌名、命令别名,以及空闲、等位或游玩中状态。
  • api测速 [次数] - 连续查询自己的钱包,显示 Bot 到 PRiSM API 的最小、平均与最大延迟(默认 3 次,最多 10 次)。
  • versions - 显示当前 Bot npm 包版本和后端发布版本;后端不可达时仍会显示 Bot 版本。

Bot 版本直接读取本 npm 包的 package.json,后端版本读取无需认证的 GET /version。插件发布遵循 SemVer;修复使用 patch、兼容新增功能使用 minor、不兼容改动使用 major,发布前通过 npm version <patch|minor|major> 自动更新包版本。

管理员快捷指令

启用 enableStaffCommands、配置 staffUserIds 白名单与 staffSessionToken 后可使用:

  • add <target:user> <amount:number> - 为目标用户增加余额。
  • del <target:user> <amount:number> - 从目标用户扣除余额。
  • overwrite <target:user> <amount:number> [reason:text] - 覆盖目标用户本次结账金额,并立即执行结账;未填写原因时使用默认管理员调价原因。

🛠️ 本地开发与构建

  1. 确保已安装 Node.js 和 bun
  2. 克隆本仓库:
    git clone https://github.com/nerimoe/koishi-plugin-prism.git
    cd koishi-plugin-prism
  3. 安装依赖并执行编译:
    bun install
    bun run build
  4. 运行单元测试:
    bun run test

📄 开源协议

MIT License