koishi-plugin-mai-queue 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +165 -0
- package/lib/index.d.ts +40 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +351 -0
- package/lib/index.js.map +1 -0
- package/package.json +32 -0
package/README.md
ADDED
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
# koishi-plugin-mai-queue
|
|
2
|
+
|
|
3
|
+
舞萌DX排卡状态报告插件,支持在QQ群内上报和查询机厅的排队状态。
|
|
4
|
+
|
|
5
|
+
## 功能特性
|
|
6
|
+
|
|
7
|
+
- ✅ 支持机厅别名系统,一个机厅可以设置多个别名
|
|
8
|
+
- ✅ 灵活的人数上报格式(别名数字、别名+数字、别名-数字、别名=数字)
|
|
9
|
+
- ✅ 自动计算排队时间和上机时间
|
|
10
|
+
- ✅ 支持自定义消息模板
|
|
11
|
+
- ✅ 群白名单机制,防止串号
|
|
12
|
+
- ✅ 店铺通知功能
|
|
13
|
+
|
|
14
|
+
## 安装
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
npm install koishi-plugin-mai-queue
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## 配置
|
|
21
|
+
|
|
22
|
+
在 Koishi 配置文件中添加插件配置:
|
|
23
|
+
|
|
24
|
+
```yaml
|
|
25
|
+
plugins:
|
|
26
|
+
mai-queue:
|
|
27
|
+
defaultMachineCount: 5 # 默认机台数量
|
|
28
|
+
defaultPlayTimePerPerson: 15 # 平均每人游玩时间(分钟)
|
|
29
|
+
playersPerMachine: 2 # 每台机器可同时游玩人数
|
|
30
|
+
arcades:
|
|
31
|
+
wujiaochang: # 机厅ID
|
|
32
|
+
config:
|
|
33
|
+
name: 上海五角场百联 ZX 造趣场 AKIBAGO
|
|
34
|
+
aliases: # 别名列表
|
|
35
|
+
- wjc
|
|
36
|
+
- 五角场
|
|
37
|
+
machineCount: 5 # 机台数量
|
|
38
|
+
notice: 冬暖夏暖,记得备短袖。最近已改良通风! # 店铺通知
|
|
39
|
+
groupWhitelist: # 群白名单(为空则允许所有群)
|
|
40
|
+
- "123456789"
|
|
41
|
+
status:
|
|
42
|
+
currentCount: 0 # 当前人数
|
|
43
|
+
updateTime: "" # 更新时间
|
|
44
|
+
updaterName: "" # 更新玩家昵称
|
|
45
|
+
updaterId: "" # 更新玩家QQ号
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## 使用方法
|
|
49
|
+
|
|
50
|
+
### 人数上报
|
|
51
|
+
|
|
52
|
+
支持以下格式:
|
|
53
|
+
|
|
54
|
+
- `别名数字` - 设置人数,例如:`机厅1` 表示设置机厅为1人
|
|
55
|
+
- `别名+数字` - 增加人数,例如:`机厅+1` 表示机厅加1人
|
|
56
|
+
- `别名-数字` - 减少人数,例如:`机厅-1` 表示机厅减1人
|
|
57
|
+
- `别名=数字` - 设置人数(等同于别名数字),例如:`机厅=5` 表示设置机厅为5人
|
|
58
|
+
|
|
59
|
+
**命令示例:**
|
|
60
|
+
```
|
|
61
|
+
排卡 机厅1
|
|
62
|
+
排卡 机厅+1
|
|
63
|
+
排卡 机厅-1
|
|
64
|
+
排卡 机厅=5
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### 查询状态
|
|
68
|
+
|
|
69
|
+
支持以下格式:
|
|
70
|
+
|
|
71
|
+
1. 使用查询命令(不在白名单的群也可以使用):
|
|
72
|
+
```
|
|
73
|
+
查询 机厅
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
2. 使用别名几或别名j格式(需要在白名单中):
|
|
77
|
+
```
|
|
78
|
+
机厅几
|
|
79
|
+
机厅j
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
**注意**:使用 `别名几` 或 `别名j` 格式时,如果群不在白名单中,消息会被忽略(不会回复)。
|
|
83
|
+
|
|
84
|
+
### 管理命令
|
|
85
|
+
|
|
86
|
+
#### 标记刚下机
|
|
87
|
+
```
|
|
88
|
+
arcade.finish <别名>
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
标记刚下机后,查询时会显示从上次上机到下次大约需要的时间。
|
|
92
|
+
|
|
93
|
+
**注意**:机厅配置(名称、别名、机台数量、店铺通知、白名单、消息模板等)需要通过配置文件管理,修改配置后需要重启插件才能生效。命令只能用于查询和上报状态,不能修改配置。
|
|
94
|
+
|
|
95
|
+
## 消息格式
|
|
96
|
+
|
|
97
|
+
默认消息格式:
|
|
98
|
+
|
|
99
|
+
```
|
|
100
|
+
→ OK!查到了!
|
|
101
|
+
|
|
102
|
+
- 上海五角场百联 ZX 造趣场 AKIBAGO //店铺名字
|
|
103
|
+
目前人数: 99 人 (12 分钟前)
|
|
104
|
+
机台数量: 5 台
|
|
105
|
+
更新时间: 2025-12-06 11:55:48
|
|
106
|
+
更新玩家: 用户昵称(QQ号)
|
|
107
|
+
店铺通知:
|
|
108
|
+
冬暖夏暖,记得备短袖。最近已改良通风!
|
|
109
|
+
|
|
110
|
+
现在出勤大约需要 148 分钟才能上机
|
|
111
|
+
|
|
112
|
+
若是刚刚下机,
|
|
113
|
+
从上次上机到下次大约需要 164 分钟
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
每个机厅可以自定义消息模板,在配置文件的 `messageTemplate` 字段中设置。
|
|
117
|
+
|
|
118
|
+
可用变量:
|
|
119
|
+
- `{name}` - 机厅名称
|
|
120
|
+
- `{currentCount}` - 当前人数
|
|
121
|
+
- `{machineCount}` - 机台数量
|
|
122
|
+
- `{updateTime}` - 更新时间
|
|
123
|
+
- `{updaterName}` - 更新玩家昵称
|
|
124
|
+
- `{updaterId}` - 更新玩家QQ号
|
|
125
|
+
- `{notice}` - 店铺通知
|
|
126
|
+
- `{waitTime}` - 排队时间(分钟)
|
|
127
|
+
- `{nextPlayTime}` - 从上次上机到下次的时间(分钟)
|
|
128
|
+
|
|
129
|
+
## 时间计算说明
|
|
130
|
+
|
|
131
|
+
- **平均每人游玩时间**:默认15分钟(可在配置中修改)
|
|
132
|
+
- **每台机器可同时游玩人数**:默认2人(可在配置中修改)
|
|
133
|
+
- **排队时间计算**:基于机台数量和当前人数计算
|
|
134
|
+
- **上机时间计算**:如果标记了刚下机,会在排队时间基础上加上游玩时间
|
|
135
|
+
|
|
136
|
+
## 配置管理
|
|
137
|
+
|
|
138
|
+
**重要**:所有机厅配置(名称、别名、机台数量、店铺通知、白名单、消息模板等)需要通过配置文件管理:
|
|
139
|
+
|
|
140
|
+
1. 在配置文件的 `arcades` 字段中添加或修改机厅配置
|
|
141
|
+
2. 修改配置后需要重启插件才能生效
|
|
142
|
+
3. 状态数据(当前人数、更新时间等)仅保存在内存中,重启后会重置
|
|
143
|
+
|
|
144
|
+
## 注意事项
|
|
145
|
+
|
|
146
|
+
1. **配置管理**:机厅配置必须通过配置文件设置,命令只能用于查询和上报状态
|
|
147
|
+
2. **群白名单**:白名单为空时,所有群都可以使用该机厅的功能;不为空时,只有白名单中的群才能使用
|
|
148
|
+
3. **别名**:不区分大小写
|
|
149
|
+
4. **人数**:不能为负数(减少时会自动限制为0)
|
|
150
|
+
5. **自动重置**:每天凌晨12点自动将所有机厅人数重置为0
|
|
151
|
+
|
|
152
|
+
## 开发
|
|
153
|
+
|
|
154
|
+
```bash
|
|
155
|
+
# 构建
|
|
156
|
+
npm run build
|
|
157
|
+
|
|
158
|
+
# 开发模式(监听文件变化)
|
|
159
|
+
npm run dev
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
## License
|
|
163
|
+
|
|
164
|
+
MIT
|
|
165
|
+
|
package/lib/index.d.ts
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { Context, Schema } from 'koishi';
|
|
2
|
+
export declare const name = "mai-queue";
|
|
3
|
+
export interface ArcadeConfig {
|
|
4
|
+
/** 机厅名称 */
|
|
5
|
+
name: string;
|
|
6
|
+
/** 机厅别名列表 */
|
|
7
|
+
aliases: string[];
|
|
8
|
+
/** 机台数量 */
|
|
9
|
+
machineCount: number;
|
|
10
|
+
/** 店铺通知内容 */
|
|
11
|
+
notice: string;
|
|
12
|
+
/** 允许使用的群列表(白名单) */
|
|
13
|
+
groupWhitelist: string[];
|
|
14
|
+
/** 自定义消息模板(可选) */
|
|
15
|
+
messageTemplate?: string;
|
|
16
|
+
}
|
|
17
|
+
export interface ArcadeStatus {
|
|
18
|
+
/** 当前人数 */
|
|
19
|
+
currentCount: number;
|
|
20
|
+
/** 更新时间 */
|
|
21
|
+
updateTime: string;
|
|
22
|
+
/** 更新玩家昵称 */
|
|
23
|
+
updaterName: string;
|
|
24
|
+
/** 更新玩家QQ号 */
|
|
25
|
+
updaterId: string;
|
|
26
|
+
/** 上次上机时间(如果刚下机) */
|
|
27
|
+
lastPlayTime?: string;
|
|
28
|
+
}
|
|
29
|
+
export interface ArcadeData {
|
|
30
|
+
config: ArcadeConfig;
|
|
31
|
+
status: ArcadeStatus;
|
|
32
|
+
}
|
|
33
|
+
export declare const Config: Schema<{
|
|
34
|
+
arcades: Record<string, ArcadeData>;
|
|
35
|
+
defaultMachineCount: number;
|
|
36
|
+
defaultPlayTimePerPerson: number;
|
|
37
|
+
playersPerMachine: number;
|
|
38
|
+
}>;
|
|
39
|
+
export declare function apply(ctx: Context, config: any): void;
|
|
40
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAExC,eAAO,MAAM,IAAI,cAAc,CAAA;AAE/B,MAAM,WAAW,YAAY;IAC3B,WAAW;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,aAAa;IACb,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,WAAW;IACX,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa;IACb,MAAM,EAAE,MAAM,CAAA;IACd,oBAAoB;IACpB,cAAc,EAAE,MAAM,EAAE,CAAA;IACxB,kBAAkB;IAClB,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW;IACX,YAAY,EAAE,MAAM,CAAA;IACpB,WAAW;IACX,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa;IACb,WAAW,EAAE,MAAM,CAAA;IACnB,cAAc;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,oBAAoB;IACpB,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,YAAY,CAAA;IACpB,MAAM,EAAE,YAAY,CAAA;CACrB;AAED,eAAO,MAAM,MAAM,EAAE,MAAM,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;IACnC,mBAAmB,EAAE,MAAM,CAAA;IAC3B,wBAAwB,EAAE,MAAM,CAAA;IAChC,iBAAiB,EAAE,MAAM,CAAA;CAC1B,CAqB+B,CAAA;AAEhC,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,QAwX9C"}
|
package/lib/index.js
ADDED
|
@@ -0,0 +1,351 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Config = exports.name = void 0;
|
|
4
|
+
exports.apply = apply;
|
|
5
|
+
const koishi_1 = require("koishi");
|
|
6
|
+
exports.name = 'mai-queue';
|
|
7
|
+
exports.Config = koishi_1.Schema.object({
|
|
8
|
+
arcades: koishi_1.Schema.dict(koishi_1.Schema.object({
|
|
9
|
+
config: koishi_1.Schema.object({
|
|
10
|
+
name: koishi_1.Schema.string().required().description('机厅名称'),
|
|
11
|
+
aliases: koishi_1.Schema.array(koishi_1.Schema.string()).default([]).description('机厅别名列表(支持多个别名,例如:["wjc", "五角场"])'),
|
|
12
|
+
machineCount: koishi_1.Schema.number().default(5).description('机台数量'),
|
|
13
|
+
notice: koishi_1.Schema.string().default('').description('店铺通知内容(可选,例如:冬暖夏暖,记得备短袖)'),
|
|
14
|
+
groupWhitelist: koishi_1.Schema.array(koishi_1.Schema.string()).default([]).description('群白名单(为空则允许所有群使用,例如:["123456789", "987654321"])'),
|
|
15
|
+
messageTemplate: koishi_1.Schema.string().default('').description('自定义消息模板(留空使用默认模板。可用变量:{name}, {currentCount}, {machineCount}, {updateTime}, {updaterName}, {updaterId}, {notice}, {waitTime}, {nextPlayTime})'),
|
|
16
|
+
}).description('机厅配置'),
|
|
17
|
+
status: koishi_1.Schema.object({
|
|
18
|
+
currentCount: koishi_1.Schema.number().default(0).description('当前人数(运行时数据,会自动更新)'),
|
|
19
|
+
updateTime: koishi_1.Schema.string().default('').description('更新时间(运行时数据,会自动更新)'),
|
|
20
|
+
updaterName: koishi_1.Schema.string().default('').description('更新玩家昵称(运行时数据,会自动更新)'),
|
|
21
|
+
updaterId: koishi_1.Schema.string().default('').description('更新玩家QQ号(运行时数据,会自动更新)'),
|
|
22
|
+
lastPlayTime: koishi_1.Schema.string().default('').description('上次上机时间(运行时数据,会自动更新)'),
|
|
23
|
+
}).description('机厅状态(运行时数据,通常不需要手动配置)'),
|
|
24
|
+
})).description('机厅数据(键名为机厅ID,例如:wujiaochang)'),
|
|
25
|
+
defaultMachineCount: koishi_1.Schema.number().default(5).description('默认机台数量(新机厅的默认值)'),
|
|
26
|
+
defaultPlayTimePerPerson: koishi_1.Schema.number().default(15).description('平均每人游玩时间(分钟,用于计算排队时间)'),
|
|
27
|
+
playersPerMachine: koishi_1.Schema.number().default(2).description('每台机器可同时游玩人数'),
|
|
28
|
+
}).description('舞萌DX排卡状态报告插件配置');
|
|
29
|
+
function apply(ctx, config) {
|
|
30
|
+
let { arcades, defaultMachineCount, defaultPlayTimePerPerson, playersPerMachine } = config;
|
|
31
|
+
// 构建别名到机厅ID的映射
|
|
32
|
+
function rebuildAliasMap() {
|
|
33
|
+
const map = new Map();
|
|
34
|
+
for (const [id, data] of Object.entries(arcades)) {
|
|
35
|
+
const arcade = data;
|
|
36
|
+
for (const alias of arcade.config.aliases) {
|
|
37
|
+
map.set(alias.toLowerCase(), id);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return map;
|
|
41
|
+
}
|
|
42
|
+
let aliasMap = rebuildAliasMap();
|
|
43
|
+
// 更新状态(内部使用)
|
|
44
|
+
// 注意:机厅配置(名称、别名、机台数量等)需要通过配置文件管理,修改后需重启插件
|
|
45
|
+
// 状态数据(当前人数、更新时间等)仅保存在内存中,重启后会丢失
|
|
46
|
+
async function updateConfig() {
|
|
47
|
+
// 状态数据仅保存在内存中(当前人数、更新时间等)
|
|
48
|
+
// 配置数据(机厅信息)通过配置文件管理,重启插件时会重新加载
|
|
49
|
+
}
|
|
50
|
+
// 检查群是否在白名单中
|
|
51
|
+
function checkGroupWhitelist(arcadeId, groupId) {
|
|
52
|
+
const arcade = arcades[arcadeId];
|
|
53
|
+
if (!arcade)
|
|
54
|
+
return false;
|
|
55
|
+
if (arcade.config.groupWhitelist.length === 0)
|
|
56
|
+
return true; // 如果没有设置白名单,则允许所有群
|
|
57
|
+
return arcade.config.groupWhitelist.includes(groupId);
|
|
58
|
+
}
|
|
59
|
+
// 获取机厅ID(通过别名)
|
|
60
|
+
function getArcadeId(alias) {
|
|
61
|
+
const normalizedAlias = alias.toLowerCase();
|
|
62
|
+
return aliasMap.get(normalizedAlias) || null;
|
|
63
|
+
}
|
|
64
|
+
// 计算出勤时间(分钟)
|
|
65
|
+
function calculateWaitTime(arcade) {
|
|
66
|
+
const currentCount = arcade.status.currentCount;
|
|
67
|
+
const machineCount = arcade.config.machineCount || defaultMachineCount;
|
|
68
|
+
const totalCapacity = machineCount * playersPerMachine;
|
|
69
|
+
// 如果当前人数小于等于总容量,不需要等待
|
|
70
|
+
if (currentCount <= totalCapacity)
|
|
71
|
+
return 0;
|
|
72
|
+
// 计算排队人数(当前人数减去正在玩的人数)
|
|
73
|
+
const queueLength = currentCount - totalCapacity;
|
|
74
|
+
// 计算需要等待的轮数(向上取整)
|
|
75
|
+
const roundsNeeded = Math.ceil(queueLength / totalCapacity);
|
|
76
|
+
// 等待时间 = 轮数 * 每轮时间(平均每人游玩时间)
|
|
77
|
+
return roundsNeeded * defaultPlayTimePerPerson;
|
|
78
|
+
}
|
|
79
|
+
// 计算从上次上机到下次的时间(分钟)
|
|
80
|
+
function calculateNextPlayTime(arcade) {
|
|
81
|
+
if (!arcade.status.lastPlayTime)
|
|
82
|
+
return null;
|
|
83
|
+
const waitTime = calculateWaitTime(arcade);
|
|
84
|
+
return waitTime + defaultPlayTimePerPerson;
|
|
85
|
+
}
|
|
86
|
+
// 格式化时间
|
|
87
|
+
function formatDateTime(date) {
|
|
88
|
+
const year = date.getFullYear();
|
|
89
|
+
const month = String(date.getMonth() + 1).padStart(2, '0');
|
|
90
|
+
const day = String(date.getDate()).padStart(2, '0');
|
|
91
|
+
const hours = String(date.getHours()).padStart(2, '0');
|
|
92
|
+
const minutes = String(date.getMinutes()).padStart(2, '0');
|
|
93
|
+
const seconds = String(date.getSeconds()).padStart(2, '0');
|
|
94
|
+
return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
|
|
95
|
+
}
|
|
96
|
+
// 生成默认消息模板
|
|
97
|
+
function generateDefaultMessage(arcadeId, arcade) {
|
|
98
|
+
const { config, status } = arcade;
|
|
99
|
+
const waitTime = calculateWaitTime(arcade);
|
|
100
|
+
const nextPlayTime = calculateNextPlayTime(arcade);
|
|
101
|
+
let updateTimeStr = '未知';
|
|
102
|
+
let minutesAgo = 0;
|
|
103
|
+
if (status.updateTime) {
|
|
104
|
+
const updateTime = new Date(status.updateTime);
|
|
105
|
+
const now = new Date();
|
|
106
|
+
updateTimeStr = formatDateTime(updateTime);
|
|
107
|
+
minutesAgo = Math.floor((now.getTime() - updateTime.getTime()) / 60000);
|
|
108
|
+
}
|
|
109
|
+
const updaterInfo = status.updaterName
|
|
110
|
+
? `${status.updaterName}(${status.updaterId})`
|
|
111
|
+
: '未知';
|
|
112
|
+
let message = `→ OK!查到了!\n\n`;
|
|
113
|
+
message += `- ${config.name} //店铺名字\n`;
|
|
114
|
+
message += `目前人数: ${status.currentCount} 人`;
|
|
115
|
+
if (status.updateTime) {
|
|
116
|
+
message += ` (${minutesAgo} 分钟前)`;
|
|
117
|
+
}
|
|
118
|
+
message += `\n机台数量: ${config.machineCount || defaultMachineCount} 台\n`;
|
|
119
|
+
message += `更新时间: ${updateTimeStr}\n`;
|
|
120
|
+
message += `更新玩家: ${updaterInfo}\n`;
|
|
121
|
+
if (config.notice) {
|
|
122
|
+
message += `店铺通知: \n ${config.notice}\n`;
|
|
123
|
+
}
|
|
124
|
+
message += `\n现在出勤大约需要 ${waitTime} 分钟才能上机`;
|
|
125
|
+
if (nextPlayTime !== null) {
|
|
126
|
+
message += `\n\n若是刚刚下机,\n从上次上机到下次大约需要 ${nextPlayTime} 分钟`;
|
|
127
|
+
}
|
|
128
|
+
return message;
|
|
129
|
+
}
|
|
130
|
+
// 生成消息(支持自定义模板)
|
|
131
|
+
function generateMessage(arcadeId, arcade) {
|
|
132
|
+
if (arcade.config.messageTemplate) {
|
|
133
|
+
// 简单的模板替换
|
|
134
|
+
const { config, status } = arcade;
|
|
135
|
+
const waitTime = calculateWaitTime(arcade);
|
|
136
|
+
const nextPlayTime = calculateNextPlayTime(arcade);
|
|
137
|
+
let message = arcade.config.messageTemplate;
|
|
138
|
+
const updateTimeStr = status.updateTime ? formatDateTime(new Date(status.updateTime)) : '未知';
|
|
139
|
+
message = message.replace(/\{name\}/g, config.name);
|
|
140
|
+
message = message.replace(/\{currentCount\}/g, status.currentCount.toString());
|
|
141
|
+
message = message.replace(/\{machineCount\}/g, (config.machineCount || defaultMachineCount).toString());
|
|
142
|
+
message = message.replace(/\{updateTime\}/g, updateTimeStr);
|
|
143
|
+
message = message.replace(/\{updaterName\}/g, status.updaterName || '未知');
|
|
144
|
+
message = message.replace(/\{updaterId\}/g, status.updaterId || '未知');
|
|
145
|
+
message = message.replace(/\{notice\}/g, config.notice || '');
|
|
146
|
+
message = message.replace(/\{waitTime\}/g, waitTime.toString());
|
|
147
|
+
message = message.replace(/\{nextPlayTime\}/g, nextPlayTime?.toString() || '未知');
|
|
148
|
+
return message;
|
|
149
|
+
}
|
|
150
|
+
return generateDefaultMessage(arcadeId, arcade);
|
|
151
|
+
}
|
|
152
|
+
// 解析人数上报命令
|
|
153
|
+
function parseReportCommand(text) {
|
|
154
|
+
// 匹配格式:别名数字、别名=数字、别名+数字、别名-数字
|
|
155
|
+
// 先匹配带操作符的格式(别名+数字、别名-数字、别名=数字)
|
|
156
|
+
const withOpMatch = text.match(/^([a-zA-Z\u4e00-\u9fa5]+)([+\-=])(\d+)$/);
|
|
157
|
+
if (withOpMatch) {
|
|
158
|
+
const alias = withOpMatch[1];
|
|
159
|
+
const op = withOpMatch[2];
|
|
160
|
+
const value = parseInt(withOpMatch[3], 10);
|
|
161
|
+
let operation = 'set';
|
|
162
|
+
if (op === '+')
|
|
163
|
+
operation = 'add';
|
|
164
|
+
else if (op === '-')
|
|
165
|
+
operation = 'subtract';
|
|
166
|
+
else if (op === '=')
|
|
167
|
+
operation = 'set';
|
|
168
|
+
return { alias, operation, value };
|
|
169
|
+
}
|
|
170
|
+
// 匹配不带操作符的格式(别名数字)
|
|
171
|
+
const withoutOpMatch = text.match(/^([a-zA-Z\u4e00-\u9fa5]+)(\d+)$/);
|
|
172
|
+
if (withoutOpMatch) {
|
|
173
|
+
const alias = withoutOpMatch[1];
|
|
174
|
+
const value = parseInt(withoutOpMatch[2], 10);
|
|
175
|
+
return { alias, operation: 'set', value };
|
|
176
|
+
}
|
|
177
|
+
return null;
|
|
178
|
+
}
|
|
179
|
+
// 人数上报命令
|
|
180
|
+
ctx.command('arcade.report <text>', '上报机厅人数')
|
|
181
|
+
.alias('排卡')
|
|
182
|
+
.example('机厅1 - 设置机厅为1人')
|
|
183
|
+
.example('机厅+1 - 机厅加1人')
|
|
184
|
+
.example('机厅-1 - 机厅减1人')
|
|
185
|
+
.example('机厅=5 - 设置机厅为5人')
|
|
186
|
+
.action(async ({ session }, text) => {
|
|
187
|
+
if (!text) {
|
|
188
|
+
return '请输入上报格式,例如:机厅1 或 机厅+1 或 机厅-1 或 机厅=1';
|
|
189
|
+
}
|
|
190
|
+
const parsed = parseReportCommand(text);
|
|
191
|
+
if (!parsed) {
|
|
192
|
+
return '格式错误!请使用:别名数字、别名+数字、别名-数字、别名=数字,例如:机厅1 或 机厅+1';
|
|
193
|
+
}
|
|
194
|
+
const arcadeId = getArcadeId(parsed.alias);
|
|
195
|
+
if (!arcadeId) {
|
|
196
|
+
return `未找到别名 "${parsed.alias}" 对应的机厅!请先添加机厅别名。`;
|
|
197
|
+
}
|
|
198
|
+
// 检查群白名单
|
|
199
|
+
if (session?.event.channel && !checkGroupWhitelist(arcadeId, session.event.channel.id)) {
|
|
200
|
+
return '此群不在该机厅的白名单中,无法使用此功能!';
|
|
201
|
+
}
|
|
202
|
+
const arcade = arcades[arcadeId];
|
|
203
|
+
if (!arcade) {
|
|
204
|
+
return '机厅数据不存在!';
|
|
205
|
+
}
|
|
206
|
+
// 更新人数
|
|
207
|
+
let newCount = arcade.status.currentCount;
|
|
208
|
+
if (parsed.operation === 'set') {
|
|
209
|
+
newCount = parsed.value;
|
|
210
|
+
}
|
|
211
|
+
else if (parsed.operation === 'add') {
|
|
212
|
+
newCount += parsed.value;
|
|
213
|
+
}
|
|
214
|
+
else if (parsed.operation === 'subtract') {
|
|
215
|
+
newCount = Math.max(0, newCount - parsed.value);
|
|
216
|
+
}
|
|
217
|
+
arcade.status.currentCount = newCount;
|
|
218
|
+
arcade.status.updateTime = new Date().toISOString();
|
|
219
|
+
arcade.status.updaterName = session?.event.user?.name || session?.event.user?.id || '';
|
|
220
|
+
arcade.status.updaterId = session?.event.user?.id || '';
|
|
221
|
+
// 更新配置(实际部署时应该使用数据库或配置服务)
|
|
222
|
+
await updateConfig();
|
|
223
|
+
return generateMessage(arcadeId, arcade);
|
|
224
|
+
});
|
|
225
|
+
// 解析查询命令(支持 别名几、别名j 格式)
|
|
226
|
+
function parseQueryCommand(text) {
|
|
227
|
+
// 匹配 别名几 或 别名j
|
|
228
|
+
const match = text.match(/^([a-zA-Z\u4e00-\u9fa5]+)([几j])$/);
|
|
229
|
+
if (match) {
|
|
230
|
+
return match[1];
|
|
231
|
+
}
|
|
232
|
+
return null;
|
|
233
|
+
}
|
|
234
|
+
// 查询机厅状态(使用命令格式)
|
|
235
|
+
ctx.command('arcade.query <alias>', '查询机厅状态')
|
|
236
|
+
.alias('查询')
|
|
237
|
+
.example('查询 机厅 - 查询机厅状态')
|
|
238
|
+
.action(async ({ session }, alias) => {
|
|
239
|
+
if (!alias) {
|
|
240
|
+
return '请输入机厅别名!';
|
|
241
|
+
}
|
|
242
|
+
const arcadeId = getArcadeId(alias);
|
|
243
|
+
if (!arcadeId) {
|
|
244
|
+
return `未找到别名 "${alias}" 对应的机厅!`;
|
|
245
|
+
}
|
|
246
|
+
// 使用查询命令时,不在白名单的群也允许查询(不检查白名单)
|
|
247
|
+
const arcade = arcades[arcadeId];
|
|
248
|
+
if (!arcade) {
|
|
249
|
+
return '机厅数据不存在!';
|
|
250
|
+
}
|
|
251
|
+
return generateMessage(arcadeId, arcade);
|
|
252
|
+
});
|
|
253
|
+
// 查询机厅状态(使用别名几/别名j格式)
|
|
254
|
+
ctx.middleware(async (session, next) => {
|
|
255
|
+
const text = session.content?.trim() || '';
|
|
256
|
+
// 解析 别名几 或 别名j 格式
|
|
257
|
+
const alias = parseQueryCommand(text);
|
|
258
|
+
if (!alias) {
|
|
259
|
+
return next();
|
|
260
|
+
}
|
|
261
|
+
const arcadeId = getArcadeId(alias);
|
|
262
|
+
if (!arcadeId) {
|
|
263
|
+
// 如果找不到机厅,不处理(让其他插件处理)
|
|
264
|
+
return next();
|
|
265
|
+
}
|
|
266
|
+
// 检查群白名单:如果不在白名单,直接忽略消息(不回复)
|
|
267
|
+
// 只有群聊才检查白名单,私聊不检查
|
|
268
|
+
const channel = session.event.channel;
|
|
269
|
+
if (channel && String(channel.type) === 'group' && !checkGroupWhitelist(arcadeId, channel.id)) {
|
|
270
|
+
// 不在白名单,直接返回,不回复消息
|
|
271
|
+
return;
|
|
272
|
+
}
|
|
273
|
+
const arcade = arcades[arcadeId];
|
|
274
|
+
if (!arcade) {
|
|
275
|
+
return next();
|
|
276
|
+
}
|
|
277
|
+
// 返回查询结果
|
|
278
|
+
return generateMessage(arcadeId, arcade);
|
|
279
|
+
});
|
|
280
|
+
// 注意:机厅配置(名称、别名、机台数量、店铺通知、白名单等)需要通过配置文件管理
|
|
281
|
+
// 修改配置后需要重启插件才能生效
|
|
282
|
+
// 以下命令仅用于运行时状态查询和上报,不用于修改配置
|
|
283
|
+
// 标记刚下机(管理员命令)
|
|
284
|
+
ctx.command('arcade.finish <alias>', '标记刚下机')
|
|
285
|
+
.action(async ({ session }, alias) => {
|
|
286
|
+
if (!alias) {
|
|
287
|
+
return '请输入机厅别名!';
|
|
288
|
+
}
|
|
289
|
+
const arcadeId = getArcadeId(alias);
|
|
290
|
+
if (!arcadeId) {
|
|
291
|
+
return `未找到别名 "${alias}" 对应的机厅!`;
|
|
292
|
+
}
|
|
293
|
+
// 检查群白名单
|
|
294
|
+
if (session?.event.channel && !checkGroupWhitelist(arcadeId, session.event.channel.id)) {
|
|
295
|
+
return '此群不在该机厅的白名单中,无法使用此功能!';
|
|
296
|
+
}
|
|
297
|
+
const arcade = arcades[arcadeId];
|
|
298
|
+
if (!arcade) {
|
|
299
|
+
return '机厅数据不存在!';
|
|
300
|
+
}
|
|
301
|
+
arcade.status.lastPlayTime = new Date().toISOString();
|
|
302
|
+
// 状态数据仅保存在内存中
|
|
303
|
+
await updateConfig();
|
|
304
|
+
return generateMessage(arcadeId, arcade);
|
|
305
|
+
});
|
|
306
|
+
// 重置所有机厅人数为0
|
|
307
|
+
async function resetAllArcadesCount() {
|
|
308
|
+
const resetTime = new Date().toISOString();
|
|
309
|
+
for (const [arcadeId, arcade] of Object.entries(arcades)) {
|
|
310
|
+
const arcadeData = arcade;
|
|
311
|
+
arcadeData.status.currentCount = 0;
|
|
312
|
+
arcadeData.status.updateTime = resetTime;
|
|
313
|
+
arcadeData.status.updaterName = '系统';
|
|
314
|
+
arcadeData.status.updaterId = 'system';
|
|
315
|
+
arcadeData.status.lastPlayTime = undefined; // 清除上次上机时间
|
|
316
|
+
}
|
|
317
|
+
await updateConfig();
|
|
318
|
+
}
|
|
319
|
+
// 存储当前定时器ID,以便在插件卸载时清理
|
|
320
|
+
let resetTimerId = null;
|
|
321
|
+
// 设置定时任务:每天凌晨12点重置所有机厅人数
|
|
322
|
+
// 计算到下一个凌晨12点的时间
|
|
323
|
+
function scheduleMidnightReset() {
|
|
324
|
+
const now = new Date();
|
|
325
|
+
const midnight = new Date();
|
|
326
|
+
midnight.setHours(0, 0, 0, 0);
|
|
327
|
+
// 如果已经过了今天的凌晨12点,设置为明天的凌晨12点
|
|
328
|
+
if (now >= midnight) {
|
|
329
|
+
midnight.setDate(midnight.getDate() + 1);
|
|
330
|
+
}
|
|
331
|
+
const msUntilMidnight = midnight.getTime() - now.getTime();
|
|
332
|
+
// 设置定时器
|
|
333
|
+
resetTimerId = setTimeout(() => {
|
|
334
|
+
resetAllArcadesCount().catch(err => {
|
|
335
|
+
ctx.logger('mai-queue').error('重置机厅人数失败:', err);
|
|
336
|
+
});
|
|
337
|
+
// 递归调用,设置下一个凌晨12点的重置任务
|
|
338
|
+
scheduleMidnightReset();
|
|
339
|
+
}, msUntilMidnight);
|
|
340
|
+
}
|
|
341
|
+
// 启动定时任务
|
|
342
|
+
scheduleMidnightReset();
|
|
343
|
+
// 插件卸载时清理定时器
|
|
344
|
+
ctx.on('dispose', () => {
|
|
345
|
+
if (resetTimerId) {
|
|
346
|
+
clearTimeout(resetTimerId);
|
|
347
|
+
resetTimerId = null;
|
|
348
|
+
}
|
|
349
|
+
});
|
|
350
|
+
}
|
|
351
|
+
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "koishi-plugin-mai-queue",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "舞萌DX排卡状态报告插件",
|
|
5
|
+
"main": "lib/index.js",
|
|
6
|
+
"typings": "lib/index.d.ts",
|
|
7
|
+
"files": [
|
|
8
|
+
"lib",
|
|
9
|
+
"README.md"
|
|
10
|
+
],
|
|
11
|
+
"scripts": {
|
|
12
|
+
"build": "tsc -b",
|
|
13
|
+
"dev": "tsc -b --watch"
|
|
14
|
+
},
|
|
15
|
+
"keywords": [
|
|
16
|
+
"koishi",
|
|
17
|
+
"plugin",
|
|
18
|
+
"maimai",
|
|
19
|
+
"queue"
|
|
20
|
+
],
|
|
21
|
+
"author": "",
|
|
22
|
+
"license": "MIT",
|
|
23
|
+
"peerDependencies": {
|
|
24
|
+
"koishi": "^4.0.0"
|
|
25
|
+
},
|
|
26
|
+
"devDependencies": {
|
|
27
|
+
"@types/node": "^20.0.0",
|
|
28
|
+
"typescript": "^5.0.0",
|
|
29
|
+
"koishi": "^4.0.0"
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|