koishi-plugin-game-mini 0.2.4 → 0.2.6
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/lib/index.d.ts +116 -22
- package/lib/index.js +401 -764
- package/package.json +12 -15
- package/readme.md +112 -54
- package/lib/locales/locales/zh-CN.yml +0 -136
package/lib/index.js
CHANGED
|
@@ -13,195 +13,263 @@ const axios_1 = __importDefault(require("axios"));
|
|
|
13
13
|
exports.name = 'game-mini';
|
|
14
14
|
exports.using = ['i18n'];
|
|
15
15
|
exports.inject = ['console'];
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
.description('掷骰子显示排行榜')
|
|
107
|
-
.i18n({ 'zh-CN': '掷骰子显示排行榜' }),
|
|
108
|
-
botParticipate: koishi_1.Schema.boolean().default(true)
|
|
109
|
-
.description('机器人参与掷骰子')
|
|
110
|
-
.i18n({ 'zh-CN': '机器人参与掷骰子' }),
|
|
111
|
-
}).description('掷骰子比大小游戏配置')
|
|
112
|
-
.i18n({ 'zh-CN': '掷骰子比大小游戏配置' }),
|
|
113
|
-
rps: koishi_1.Schema.object({
|
|
114
|
-
totalRounds: koishi_1.Schema.number().min(1).default(5)
|
|
115
|
-
.description('石头剪刀布总回合数')
|
|
116
|
-
.i18n({ 'zh-CN': '石头剪刀布总回合数' }),
|
|
117
|
-
showRank: koishi_1.Schema.boolean().default(true)
|
|
118
|
-
.description('石头剪刀布显示排行榜')
|
|
119
|
-
.i18n({ 'zh-CN': '石头剪刀布显示排行榜' }),
|
|
120
|
-
botParticipate: koishi_1.Schema.boolean().default(true)
|
|
121
|
-
.description('机器人参与石头剪刀布')
|
|
122
|
-
.i18n({ 'zh-CN': '机器人参与石头剪刀布' }),
|
|
123
|
-
}).description('石头剪刀布游戏配置')
|
|
124
|
-
.i18n({ 'zh-CN': '石头剪刀布游戏配置' }),
|
|
125
|
-
calc24: koishi_1.Schema.object({
|
|
126
|
-
totalRounds: koishi_1.Schema.number().min(1).default(5)
|
|
127
|
-
.description('算24点总回合数')
|
|
128
|
-
.i18n({ 'zh-CN': '算24点总回合数' }),
|
|
129
|
-
showRank: koishi_1.Schema.boolean().default(true)
|
|
130
|
-
.description('算24点显示排行榜')
|
|
131
|
-
.i18n({ 'zh-CN': '算24点显示排行榜' }),
|
|
132
|
-
numberRange: koishi_1.Schema.array(koishi_1.Schema.number()).default([1, 13])
|
|
133
|
-
.description('算24点数字范围 [最小值, 最大值]')
|
|
134
|
-
.i18n({ 'zh-CN': '算24点数字范围 [最小值, 最大值]' }),
|
|
135
|
-
}).description('算24点游戏配置')
|
|
136
|
-
.i18n({ 'zh-CN': '算24点游戏配置' }),
|
|
137
|
-
passwordLock: koishi_1.Schema.object({
|
|
138
|
-
maxGuessTimes: koishi_1.Schema.number().min(1).default(10)
|
|
139
|
-
.description('密码锁最大猜测次数')
|
|
140
|
-
.i18n({ 'zh-CN': '密码锁最大猜测次数' }),
|
|
141
|
-
showHint: koishi_1.Schema.boolean().default(true)
|
|
142
|
-
.description('密码锁显示提示')
|
|
143
|
-
.i18n({ 'zh-CN': '密码锁显示提示' }),
|
|
144
|
-
showRank: koishi_1.Schema.boolean().default(true)
|
|
145
|
-
.description('密码锁显示排行榜')
|
|
146
|
-
.i18n({ 'zh-CN': '密码锁显示排行榜' }),
|
|
147
|
-
}).description('密码锁破解游戏配置')
|
|
148
|
-
.i18n({ 'zh-CN': '密码锁破解游戏配置' }),
|
|
149
|
-
apiConfig: koishi_1.Schema.object({
|
|
150
|
-
timeout: koishi_1.Schema.number().default(5000)
|
|
151
|
-
.description('API请求超时时间(毫秒)')
|
|
152
|
-
.i18n({ 'zh-CN': 'API请求超时时间(毫秒)' }),
|
|
153
|
-
}).description('API接口配置')
|
|
154
|
-
.i18n({ 'zh-CN': 'API接口配置' }),
|
|
155
|
-
}).i18n({
|
|
156
|
-
'zh-CN': {
|
|
157
|
-
'enableNumberGuess': '启用猜数字游戏',
|
|
158
|
-
'enableWzHero': '启用王者英雄猜谜游戏',
|
|
159
|
-
'enableChengyuImage': '启用看图猜成语游戏',
|
|
160
|
-
'enableChengyuJielong': '启用成语接龙游戏',
|
|
161
|
-
'enableDice': '启用掷骰子比大小游戏',
|
|
162
|
-
'enableRps': '启用石头剪刀布游戏',
|
|
163
|
-
'enableCalc24': '启用算24点游戏',
|
|
164
|
-
'enablePasswordLock': '启用猜密码游戏',
|
|
165
|
-
'enablePrivateGame': '允许私聊玩游戏',
|
|
166
|
-
'autoPlayDelay': '机器人自动操作延迟(秒)',
|
|
167
|
-
'autoPlayMaxCount': '机器人最大自动操作次数',
|
|
168
|
-
'autoStopInactiveTime': '游戏无操作自动停止时间(秒)',
|
|
169
|
-
'guessNumber': '猜数字游戏配置',
|
|
170
|
-
'guessNumber.min': '猜数字最小值',
|
|
171
|
-
'guessNumber.max': '猜数字最大值',
|
|
172
|
-
'guessNumber.botParticipateInGroup': '群聊中机器人参与猜数字',
|
|
173
|
-
'guessNumber.totalRounds': '猜数字总回合数',
|
|
174
|
-
'guessNumber.showRank': '猜数字显示排行榜',
|
|
175
|
-
'wzHero': '猜王者英雄配置',
|
|
176
|
-
'wzHero.totalRounds': '猜王者英雄总回合数',
|
|
177
|
-
'wzHero.showRank': '猜王者英雄显示排行榜',
|
|
178
|
-
'chengyuImage': '看图猜成语配置',
|
|
179
|
-
'chengyuImage.totalRounds': '看图猜成语总回合数',
|
|
180
|
-
'chengyuImage.showRank': '看图猜成语显示排行榜',
|
|
181
|
-
'chengyuJielong': '成语接龙配置',
|
|
182
|
-
'chengyuJielong.botParticipateInGroup': '群聊中机器人参与成语接龙',
|
|
183
|
-
'chengyuJielong.totalRounds': '成语接龙总回合数',
|
|
184
|
-
'chengyuJielong.showRank': '成语接龙显示排行榜',
|
|
185
|
-
'dice': '掷骰子比大小配置',
|
|
186
|
-
'dice.totalRounds': '掷骰子总回合数',
|
|
187
|
-
'dice.showRank': '掷骰子显示排行榜',
|
|
188
|
-
'dice.botParticipate': '机器人参与掷骰子',
|
|
189
|
-
'rps': '石头剪刀布配置',
|
|
190
|
-
'rps.totalRounds': '石头剪刀布总回合数',
|
|
191
|
-
'rps.showRank': '石头剪刀布显示排行榜',
|
|
192
|
-
'rps.botParticipate': '机器人参与石头剪刀布',
|
|
193
|
-
'calc24': '算24点配置',
|
|
194
|
-
'calc24.totalRounds': '算24点总回合数',
|
|
195
|
-
'calc24.showRank': '算24点显示排行榜',
|
|
196
|
-
'calc24.numberRange': '算24点数字范围',
|
|
197
|
-
'passwordLock': '猜密码配置',
|
|
198
|
-
'passwordLock.maxGuessTimes': '猜密码最大猜测次数',
|
|
199
|
-
'passwordLock.showHint': '猜密码显示提示',
|
|
200
|
-
'passwordLock.showRank': '猜密码显示排行榜',
|
|
201
|
-
'apiConfig': 'API接口配置',
|
|
202
|
-
'apiConfig.timeout': '请求超时时间(毫秒)'
|
|
16
|
+
const defaultMessages = {
|
|
17
|
+
guessNumber: {
|
|
18
|
+
usage: "用法错误!正确用法:猜数字 开始 | 猜数字 [数字] | 猜数字 结束",
|
|
19
|
+
start: "猜数字比赛开始!本次共 {0} 回合~",
|
|
20
|
+
stop: "猜数字比赛已停止",
|
|
21
|
+
outOfRange: "数字超出当前范围 [{0}-{1}],请重新输入!",
|
|
22
|
+
tooSmall: "猜小啦!当前范围更新为 [{0}-{1}]",
|
|
23
|
+
tooBig: "猜大啦!当前范围更新为 [{0}-{1}]",
|
|
24
|
+
correct: "恭喜你猜中数字!本轮你不得分,其他参与者各得1分~",
|
|
25
|
+
roundEnd: "第 {0} 回合结束!剩余回合:{1}",
|
|
26
|
+
gameEnd: "🎉 猜数字比赛结束!🎉",
|
|
27
|
+
rankTitle: "🏆 排行榜 🏆",
|
|
28
|
+
rankEmpty: "暂无参与记录~",
|
|
29
|
+
disabled: "猜数字功能已关闭,请联系管理员开启",
|
|
30
|
+
autoStop: "游戏因长时间无人操作,已自动结束"
|
|
31
|
+
},
|
|
32
|
+
wzHero: {
|
|
33
|
+
start: "猜王者英雄开始!本次共 {0} 回合~当前难度:{1}",
|
|
34
|
+
startUsage: "用法错误!正确用法:猜王者英雄 开始 | 猜王者英雄 [答案] | 猜王者英雄 提示 | 猜王者英雄 结束",
|
|
35
|
+
stop: "猜王者英雄比赛已停止",
|
|
36
|
+
notStarted: "猜王者英雄比赛尚未开始,请输入 猜王者英雄 开始 开始游戏",
|
|
37
|
+
hint: "提示",
|
|
38
|
+
apiError: "API请求失败,请稍后再试",
|
|
39
|
+
correct: "答对啦!你获得1分~",
|
|
40
|
+
wrong: "答错啦~正确答案是:{0},你不得分",
|
|
41
|
+
roundEnd: "第 {0} 回合结束!剩余回合:{1}",
|
|
42
|
+
gameEnd: "🎉 猜王者英雄比赛结束!🎉",
|
|
43
|
+
rankTitle: "🏆 排行榜 🏆",
|
|
44
|
+
rankEmpty: "暂无参与记录~",
|
|
45
|
+
disabled: "猜王者英雄功能已关闭,请联系管理员开启",
|
|
46
|
+
autoStop: "游戏因长时间无人操作,已自动结束"
|
|
47
|
+
},
|
|
48
|
+
chengyuImage: {
|
|
49
|
+
start: "看图猜成语比赛开始!本次共 {0} 回合~当前提示级别:{1}",
|
|
50
|
+
stop: "看图猜成语比赛已停止",
|
|
51
|
+
submitUsage: "请直接输入 看图猜成语 [答案],或输入 看图猜成语 提示 获取线索",
|
|
52
|
+
notStarted: "看图猜成语比赛尚未开始,请输入 看图猜成语 开始 开始游戏",
|
|
53
|
+
next: "第 {0} 题来啦!",
|
|
54
|
+
hintGet: "【提示】{0}",
|
|
55
|
+
hintError: "获取提示失败,请稍后再试",
|
|
56
|
+
apiError: "API请求失败,请稍后再试",
|
|
57
|
+
correct: "答对啦!你获得1分~",
|
|
58
|
+
wrong: "答错啦~正确答案是:{0},你不得分",
|
|
59
|
+
roundEnd: "第 {0} 回合结束!剩余回合:{1}",
|
|
60
|
+
gameEnd: "🎉 看图猜成语比赛结束!🎉",
|
|
61
|
+
rankTitle: "🏆 排行榜 🏆",
|
|
62
|
+
rankEmpty: "暂无参与记录~",
|
|
63
|
+
disabled: "看图猜成语功能已关闭,请联系管理员开启",
|
|
64
|
+
autoStop: "游戏因长时间无人操作,已自动结束"
|
|
65
|
+
},
|
|
66
|
+
chengyuJielong: {
|
|
67
|
+
start: "成语接龙比赛开始!本次共 {0} 回合~我先来~",
|
|
68
|
+
stop: "成语接龙比赛已停止",
|
|
69
|
+
notStarted: "成语接龙比赛尚未开始,请输入 成语接龙 开始 开始游戏",
|
|
70
|
+
joinUsage: "请直接发送 成语接龙 [成语] 参与接龙",
|
|
71
|
+
apiError: "API请求失败,请稍后再试",
|
|
72
|
+
botTurn: "该我了!我接:{0}({1})\n释义:{2}",
|
|
73
|
+
botWin: "哈哈我接不上了!本轮结束~",
|
|
74
|
+
autoPlayTooMany: "我已经主动参与 {0} 次啦,不再主动接啦~",
|
|
75
|
+
gameInactiveStop: "太久没人玩啦,比赛自动结束~",
|
|
76
|
+
notIdiom: "请发送四字成语参与游戏~",
|
|
77
|
+
correct: "接龙成功!你获得1分~",
|
|
78
|
+
wrong: "接龙失败!你不得分,其他参与者各得1分~",
|
|
79
|
+
roundEnd: "第 {0} 回合结束!剩余回合:{1}",
|
|
80
|
+
gameEnd: "🎉 成语接龙比赛结束!🎉",
|
|
81
|
+
rankTitle: "🏆 排行榜 🏆",
|
|
82
|
+
rankEmpty: "暂无参与记录~",
|
|
83
|
+
disabled: "成语接龙功能已关闭,请联系管理员开启",
|
|
84
|
+
autoStop: "游戏因长时间无人操作,已自动结束"
|
|
85
|
+
},
|
|
86
|
+
calc24: {
|
|
87
|
+
start: "算24点游戏开始!本次共 {0} 回合~当前难度:{1}",
|
|
88
|
+
stop: "算24点游戏已停止",
|
|
89
|
+
notStarted: "算24点游戏尚未开始,请输入 算24点 开始 开始游戏",
|
|
90
|
+
generate: "📝 第 {0} 题({1}):用 {2} 通过加减乘除和括号算出24!",
|
|
91
|
+
correct: "答对啦!你获得1分~",
|
|
92
|
+
wrong: "答错啦~",
|
|
93
|
+
impossible: "这组数无法算出24!本题作废,换一组数字~",
|
|
94
|
+
solved: "这组数已经被答对啦,换一组数字~",
|
|
95
|
+
roundEnd: "第 {0} 回合结束!剩余回合:{1}",
|
|
96
|
+
gameEnd: "🎉 算24点游戏结束!🎉",
|
|
97
|
+
rankTitle: "🏆 排行榜 🏆",
|
|
98
|
+
rankEmpty: "暂无参与记录~",
|
|
99
|
+
disabled: "算24点功能已关闭,请联系管理员开启",
|
|
100
|
+
autoStop: "游戏因长时间无人操作,已自动结束"
|
|
101
|
+
},
|
|
102
|
+
common: {
|
|
103
|
+
gameRunning: "当前已有游戏在运行中,请先结束当前游戏后再开始新游戏!",
|
|
104
|
+
gameStoppedByInactive: "游戏因长时间无人操作,已自动结束",
|
|
105
|
+
paramError: "参数错误!请检查输入格式"
|
|
203
106
|
}
|
|
204
|
-
}
|
|
107
|
+
};
|
|
108
|
+
exports.Config = koishi_1.Schema.intersect([
|
|
109
|
+
koishi_1.Schema.object({
|
|
110
|
+
enableNumberGuess: koishi_1.Schema.boolean().default(true).description('启用猜数字游戏'),
|
|
111
|
+
enableWzHero: koishi_1.Schema.boolean().default(true).description('启用王者英雄猜谜游戏'),
|
|
112
|
+
enableChengyuImage: koishi_1.Schema.boolean().default(true).description('启用看图猜成语游戏'),
|
|
113
|
+
enableChengyuJielong: koishi_1.Schema.boolean().default(true).description('启用成语接龙游戏'),
|
|
114
|
+
enableCalc24: koishi_1.Schema.boolean().default(true).description('启用算24点游戏'),
|
|
115
|
+
enablePrivateGame: koishi_1.Schema.boolean().default(true).description('允许私聊玩游戏'),
|
|
116
|
+
}).description('基础功能开关'),
|
|
117
|
+
koishi_1.Schema.object({
|
|
118
|
+
guessNumber: koishi_1.Schema.object({
|
|
119
|
+
min: koishi_1.Schema.number().min(0).default(0).description('猜数字最小值'),
|
|
120
|
+
max: koishi_1.Schema.number().min(1).default(100).description('猜数字最大值'),
|
|
121
|
+
botParticipateInGroup: koishi_1.Schema.boolean().default(true).description('群聊中机器人参与猜数字'),
|
|
122
|
+
totalRounds: koishi_1.Schema.number().min(1).default(10).description('猜数字总回合数'),
|
|
123
|
+
showRank: koishi_1.Schema.boolean().default(true).description('显示排行榜'),
|
|
124
|
+
autoPlayDelay: koishi_1.Schema.number().min(0).default(10).description('机器人自动操作延迟(秒)'),
|
|
125
|
+
autoPlayMaxCount: koishi_1.Schema.number().min(1).default(5).description('机器人最大自动操作次数'),
|
|
126
|
+
autoStopInactiveTime: koishi_1.Schema.number().min(0).default(60).description('游戏无操作自动停止时间(秒)'),
|
|
127
|
+
messages: koishi_1.Schema.object({
|
|
128
|
+
usage: koishi_1.Schema.string().default(defaultMessages.guessNumber.usage).description('用法错误提示'),
|
|
129
|
+
start: koishi_1.Schema.string().default(defaultMessages.guessNumber.start).description('游戏开始提示'),
|
|
130
|
+
stop: koishi_1.Schema.string().default(defaultMessages.guessNumber.stop).description('游戏停止提示'),
|
|
131
|
+
outOfRange: koishi_1.Schema.string().default(defaultMessages.guessNumber.outOfRange).description('数字超出范围提示'),
|
|
132
|
+
tooSmall: koishi_1.Schema.string().default(defaultMessages.guessNumber.tooSmall).description('猜小了提示'),
|
|
133
|
+
tooBig: koishi_1.Schema.string().default(defaultMessages.guessNumber.tooBig).description('猜大了提示'),
|
|
134
|
+
correct: koishi_1.Schema.string().default(defaultMessages.guessNumber.correct).description('猜中提示'),
|
|
135
|
+
roundEnd: koishi_1.Schema.string().default(defaultMessages.guessNumber.roundEnd).description('回合结束提示'),
|
|
136
|
+
gameEnd: koishi_1.Schema.string().default(defaultMessages.guessNumber.gameEnd).description('游戏结束提示'),
|
|
137
|
+
rankTitle: koishi_1.Schema.string().default(defaultMessages.guessNumber.rankTitle).description('排行榜标题'),
|
|
138
|
+
rankEmpty: koishi_1.Schema.string().default(defaultMessages.guessNumber.rankEmpty).description('排行榜为空提示'),
|
|
139
|
+
disabled: koishi_1.Schema.string().default(defaultMessages.guessNumber.disabled).description('功能禁用提示'),
|
|
140
|
+
autoStop: koishi_1.Schema.string().default(defaultMessages.guessNumber.autoStop).description('自动停止提示'),
|
|
141
|
+
}).description('猜数字消息配置'),
|
|
142
|
+
}).description('猜数字游戏配置'),
|
|
143
|
+
}),
|
|
144
|
+
koishi_1.Schema.object({
|
|
145
|
+
wzHero: koishi_1.Schema.object({
|
|
146
|
+
totalRounds: koishi_1.Schema.number().min(1).default(10).description('王者英雄猜谜总回合数'),
|
|
147
|
+
showRank: koishi_1.Schema.boolean().default(true).description('显示排行榜'),
|
|
148
|
+
defaultDifficulty: koishi_1.Schema.union(['简单', '中等', '困难']).default('简单').description('默认难度'),
|
|
149
|
+
autoStopInactiveTime: koishi_1.Schema.number().min(0).default(60).description('游戏无操作自动停止时间(秒)'),
|
|
150
|
+
messages: koishi_1.Schema.object({
|
|
151
|
+
start: koishi_1.Schema.string().default(defaultMessages.wzHero.start).description('游戏开始提示'),
|
|
152
|
+
startUsage: koishi_1.Schema.string().default(defaultMessages.wzHero.startUsage).description('开始用法提示'),
|
|
153
|
+
stop: koishi_1.Schema.string().default(defaultMessages.wzHero.stop).description('游戏停止提示'),
|
|
154
|
+
notStarted: koishi_1.Schema.string().default(defaultMessages.wzHero.notStarted).description('游戏未开始提示'),
|
|
155
|
+
hint: koishi_1.Schema.string().default(defaultMessages.wzHero.hint).description('提示命令'),
|
|
156
|
+
apiError: koishi_1.Schema.string().default(defaultMessages.wzHero.apiError).description('API错误提示'),
|
|
157
|
+
correct: koishi_1.Schema.string().default(defaultMessages.wzHero.correct).description('答对提示'),
|
|
158
|
+
wrong: koishi_1.Schema.string().default(defaultMessages.wzHero.wrong).description('答错提示'),
|
|
159
|
+
roundEnd: koishi_1.Schema.string().default(defaultMessages.wzHero.roundEnd).description('回合结束提示'),
|
|
160
|
+
gameEnd: koishi_1.Schema.string().default(defaultMessages.wzHero.gameEnd).description('游戏结束提示'),
|
|
161
|
+
rankTitle: koishi_1.Schema.string().default(defaultMessages.wzHero.rankTitle).description('排行榜标题'),
|
|
162
|
+
rankEmpty: koishi_1.Schema.string().default(defaultMessages.wzHero.rankEmpty).description('排行榜为空提示'),
|
|
163
|
+
disabled: koishi_1.Schema.string().default(defaultMessages.wzHero.disabled).description('功能禁用提示'),
|
|
164
|
+
autoStop: koishi_1.Schema.string().default(defaultMessages.wzHero.autoStop).description('自动停止提示'),
|
|
165
|
+
}).description('王者英雄猜谜消息配置'),
|
|
166
|
+
}).description('王者英雄猜谜游戏配置'),
|
|
167
|
+
}),
|
|
168
|
+
koishi_1.Schema.object({
|
|
169
|
+
chengyuImage: koishi_1.Schema.object({
|
|
170
|
+
totalRounds: koishi_1.Schema.number().min(1).default(10).description('看图猜成语总回合数'),
|
|
171
|
+
showRank: koishi_1.Schema.boolean().default(true).description('显示排行榜'),
|
|
172
|
+
defaultHintLevel: koishi_1.Schema.union([1, 2, 3, 4, 5]).default(1).description('默认提示级别(1-5)'),
|
|
173
|
+
autoStopInactiveTime: koishi_1.Schema.number().min(0).default(60).description('游戏无操作自动停止时间(秒)'),
|
|
174
|
+
messages: koishi_1.Schema.object({
|
|
175
|
+
start: koishi_1.Schema.string().default(defaultMessages.chengyuImage.start).description('游戏开始提示'),
|
|
176
|
+
stop: koishi_1.Schema.string().default(defaultMessages.chengyuImage.stop).description('游戏停止提示'),
|
|
177
|
+
submitUsage: koishi_1.Schema.string().default(defaultMessages.chengyuImage.submitUsage).description('提交答案用法提示'),
|
|
178
|
+
notStarted: koishi_1.Schema.string().default(defaultMessages.chengyuImage.notStarted).description('游戏未开始提示'),
|
|
179
|
+
next: koishi_1.Schema.string().default(defaultMessages.chengyuImage.next).description('下一题提示'),
|
|
180
|
+
hintGet: koishi_1.Schema.string().default(defaultMessages.chengyuImage.hintGet).description('获取提示成功'),
|
|
181
|
+
hintError: koishi_1.Schema.string().default(defaultMessages.chengyuImage.hintError).description('获取提示失败'),
|
|
182
|
+
apiError: koishi_1.Schema.string().default(defaultMessages.chengyuImage.apiError).description('API错误提示'),
|
|
183
|
+
correct: koishi_1.Schema.string().default(defaultMessages.chengyuImage.correct).description('答对提示'),
|
|
184
|
+
wrong: koishi_1.Schema.string().default(defaultMessages.chengyuImage.wrong).description('答错提示'),
|
|
185
|
+
roundEnd: koishi_1.Schema.string().default(defaultMessages.chengyuImage.roundEnd).description('回合结束提示'),
|
|
186
|
+
gameEnd: koishi_1.Schema.string().default(defaultMessages.chengyuImage.gameEnd).description('游戏结束提示'),
|
|
187
|
+
rankTitle: koishi_1.Schema.string().default(defaultMessages.chengyuImage.rankTitle).description('排行榜标题'),
|
|
188
|
+
rankEmpty: koishi_1.Schema.string().default(defaultMessages.chengyuImage.rankEmpty).description('排行榜为空提示'),
|
|
189
|
+
disabled: koishi_1.Schema.string().default(defaultMessages.chengyuImage.disabled).description('功能禁用提示'),
|
|
190
|
+
autoStop: koishi_1.Schema.string().default(defaultMessages.chengyuImage.autoStop).description('自动停止提示'),
|
|
191
|
+
}).description('看图猜成语消息配置'),
|
|
192
|
+
}).description('看图猜成语游戏配置'),
|
|
193
|
+
}),
|
|
194
|
+
koishi_1.Schema.object({
|
|
195
|
+
chengyuJielong: koishi_1.Schema.object({
|
|
196
|
+
botParticipateInGroup: koishi_1.Schema.boolean().default(true).description('群聊中机器人参与成语接龙'),
|
|
197
|
+
totalRounds: koishi_1.Schema.number().min(1).default(10).description('成语接龙总回合数'),
|
|
198
|
+
showRank: koishi_1.Schema.boolean().default(true).description('显示排行榜'),
|
|
199
|
+
autoPlayDelay: koishi_1.Schema.number().min(0).default(10).description('机器人自动操作延迟(秒)'),
|
|
200
|
+
autoPlayMaxCount: koishi_1.Schema.number().min(1).default(5).description('机器人最大自动操作次数'),
|
|
201
|
+
autoStopInactiveTime: koishi_1.Schema.number().min(0).default(60).description('游戏无操作自动停止时间(秒)'),
|
|
202
|
+
messages: koishi_1.Schema.object({
|
|
203
|
+
start: koishi_1.Schema.string().default(defaultMessages.chengyuJielong.start).description('游戏开始提示'),
|
|
204
|
+
stop: koishi_1.Schema.string().default(defaultMessages.chengyuJielong.stop).description('游戏停止提示'),
|
|
205
|
+
notStarted: koishi_1.Schema.string().default(defaultMessages.chengyuJielong.notStarted).description('游戏未开始提示'),
|
|
206
|
+
joinUsage: koishi_1.Schema.string().default(defaultMessages.chengyuJielong.joinUsage).description('参与用法提示'),
|
|
207
|
+
apiError: koishi_1.Schema.string().default(defaultMessages.chengyuJielong.apiError).description('API错误提示'),
|
|
208
|
+
botTurn: koishi_1.Schema.string().default(defaultMessages.chengyuJielong.botTurn).description('机器人回合提示'),
|
|
209
|
+
botWin: koishi_1.Schema.string().default(defaultMessages.chengyuJielong.botWin).description('机器人赢提示'),
|
|
210
|
+
autoPlayTooMany: koishi_1.Schema.string().default(defaultMessages.chengyuJielong.autoPlayTooMany).description('自动参与次数过多提示'),
|
|
211
|
+
gameInactiveStop: koishi_1.Schema.string().default(defaultMessages.chengyuJielong.gameInactiveStop).description('游戏无操作停止提示'),
|
|
212
|
+
notIdiom: koishi_1.Schema.string().default(defaultMessages.chengyuJielong.notIdiom).description('非成语提示'),
|
|
213
|
+
correct: koishi_1.Schema.string().default(defaultMessages.chengyuJielong.correct).description('接龙成功提示'),
|
|
214
|
+
wrong: koishi_1.Schema.string().default(defaultMessages.chengyuJielong.wrong).description('接龙失败提示'),
|
|
215
|
+
roundEnd: koishi_1.Schema.string().default(defaultMessages.chengyuJielong.roundEnd).description('回合结束提示'),
|
|
216
|
+
gameEnd: koishi_1.Schema.string().default(defaultMessages.chengyuJielong.gameEnd).description('游戏结束提示'),
|
|
217
|
+
rankTitle: koishi_1.Schema.string().default(defaultMessages.chengyuJielong.rankTitle).description('排行榜标题'),
|
|
218
|
+
rankEmpty: koishi_1.Schema.string().default(defaultMessages.chengyuJielong.rankEmpty).description('排行榜为空提示'),
|
|
219
|
+
disabled: koishi_1.Schema.string().default(defaultMessages.chengyuJielong.disabled).description('功能禁用提示'),
|
|
220
|
+
autoStop: koishi_1.Schema.string().default(defaultMessages.chengyuJielong.autoStop).description('自动停止提示'),
|
|
221
|
+
}).description('成语接龙消息配置'),
|
|
222
|
+
}).description('成语接龙游戏配置'),
|
|
223
|
+
}),
|
|
224
|
+
koishi_1.Schema.object({
|
|
225
|
+
calc24: koishi_1.Schema.object({
|
|
226
|
+
totalRounds: koishi_1.Schema.number().min(1).default(5).description('算24点总回合数'),
|
|
227
|
+
showRank: koishi_1.Schema.boolean().default(true).description('显示排行榜'),
|
|
228
|
+
defaultDifficulty: koishi_1.Schema.union(['简单', '中等', '困难']).default('中等').description('默认难度'),
|
|
229
|
+
difficultyLevels: koishi_1.Schema.object({
|
|
230
|
+
easy: koishi_1.Schema.object({
|
|
231
|
+
min: koishi_1.Schema.number().default(1).description('最小值'),
|
|
232
|
+
max: koishi_1.Schema.number().default(8).description('最大值'),
|
|
233
|
+
}).description('简单难度'),
|
|
234
|
+
medium: koishi_1.Schema.object({
|
|
235
|
+
min: koishi_1.Schema.number().default(1).description('最小值'),
|
|
236
|
+
max: koishi_1.Schema.number().default(10).description('最大值'),
|
|
237
|
+
}).description('中等难度'),
|
|
238
|
+
hard: koishi_1.Schema.object({
|
|
239
|
+
min: koishi_1.Schema.number().default(1).description('最小值'),
|
|
240
|
+
max: koishi_1.Schema.number().default(13).description('最大值'),
|
|
241
|
+
}).description('困难难度'),
|
|
242
|
+
}).description('难度等级配置'),
|
|
243
|
+
autoStopInactiveTime: koishi_1.Schema.number().min(0).default(60).description('游戏无操作自动停止时间(秒)'),
|
|
244
|
+
messages: koishi_1.Schema.object({
|
|
245
|
+
start: koishi_1.Schema.string().default(defaultMessages.calc24.start).description('游戏开始提示'),
|
|
246
|
+
stop: koishi_1.Schema.string().default(defaultMessages.calc24.stop).description('游戏停止提示'),
|
|
247
|
+
notStarted: koishi_1.Schema.string().default(defaultMessages.calc24.notStarted).description('游戏未开始提示'),
|
|
248
|
+
generate: koishi_1.Schema.string().default(defaultMessages.calc24.generate).description('生成题目提示'),
|
|
249
|
+
correct: koishi_1.Schema.string().default(defaultMessages.calc24.correct).description('答对提示'),
|
|
250
|
+
wrong: koishi_1.Schema.string().default(defaultMessages.calc24.wrong).description('答错提示'),
|
|
251
|
+
impossible: koishi_1.Schema.string().default(defaultMessages.calc24.impossible).description('无解提示'),
|
|
252
|
+
solved: koishi_1.Schema.string().default(defaultMessages.calc24.solved).description('已解决提示'),
|
|
253
|
+
roundEnd: koishi_1.Schema.string().default(defaultMessages.calc24.roundEnd).description('回合结束提示'),
|
|
254
|
+
gameEnd: koishi_1.Schema.string().default(defaultMessages.calc24.gameEnd).description('游戏结束提示'),
|
|
255
|
+
rankTitle: koishi_1.Schema.string().default(defaultMessages.calc24.rankTitle).description('排行榜标题'),
|
|
256
|
+
rankEmpty: koishi_1.Schema.string().default(defaultMessages.calc24.rankEmpty).description('排行榜为空提示'),
|
|
257
|
+
disabled: koishi_1.Schema.string().default(defaultMessages.calc24.disabled).description('功能禁用提示'),
|
|
258
|
+
autoStop: koishi_1.Schema.string().default(defaultMessages.calc24.autoStop).description('自动停止提示'),
|
|
259
|
+
}).description('算24点消息配置'),
|
|
260
|
+
}).description('算24点游戏配置'),
|
|
261
|
+
}),
|
|
262
|
+
koishi_1.Schema.object({
|
|
263
|
+
apiConfig: koishi_1.Schema.object({
|
|
264
|
+
timeout: koishi_1.Schema.number().default(5000).description('API请求超时时间(毫秒)'),
|
|
265
|
+
}).description('API接口配置'),
|
|
266
|
+
commonMessages: koishi_1.Schema.object({
|
|
267
|
+
gameRunning: koishi_1.Schema.string().default(defaultMessages.common.gameRunning).description('游戏运行中提示'),
|
|
268
|
+
gameStoppedByInactive: koishi_1.Schema.string().default(defaultMessages.common.gameStoppedByInactive).description('无操作停止提示'),
|
|
269
|
+
paramError: koishi_1.Schema.string().default(defaultMessages.common.paramError).description('参数错误提示'),
|
|
270
|
+
}).description('通用消息配置'),
|
|
271
|
+
}),
|
|
272
|
+
]);
|
|
205
273
|
const logger = new koishi_1.Logger('game-mini');
|
|
206
274
|
const gameStates = new Map();
|
|
207
275
|
const getSessionKey = (s) => s.channelId ? `g:${s.channelId}` : `p:${s.userId}`;
|
|
@@ -229,31 +297,22 @@ const checkGameRunning = (s, t) => {
|
|
|
229
297
|
return true;
|
|
230
298
|
if (t !== 'chengyuJielong' && s.chengyuJielong.started)
|
|
231
299
|
return true;
|
|
232
|
-
if (t !== 'dice' && s.dice.started)
|
|
233
|
-
return true;
|
|
234
|
-
if (t !== 'rps' && s.rps.started)
|
|
235
|
-
return true;
|
|
236
300
|
if (t !== 'calc24' && s.calc24.started)
|
|
237
301
|
return true;
|
|
238
|
-
if (t !== 'passwordLock' && s.passwordLock.started)
|
|
239
|
-
return true;
|
|
240
302
|
return false;
|
|
241
303
|
};
|
|
242
304
|
const clearGameTimer = (state) => {
|
|
243
305
|
if (state.stopTimer)
|
|
244
306
|
clearTimeout(state.stopTimer);
|
|
307
|
+
if (state.autoPlayTimer)
|
|
308
|
+
clearTimeout(state.autoPlayTimer);
|
|
245
309
|
};
|
|
246
310
|
const clearAllTimers = (st) => {
|
|
247
311
|
clearGameTimer(st.guessNumber);
|
|
248
312
|
clearGameTimer(st.wzHero);
|
|
249
313
|
clearGameTimer(st.chengyuImage);
|
|
250
314
|
clearGameTimer(st.chengyuJielong);
|
|
251
|
-
clearGameTimer(st.dice);
|
|
252
|
-
clearGameTimer(st.rps);
|
|
253
315
|
clearGameTimer(st.calc24);
|
|
254
|
-
clearGameTimer(st.passwordLock);
|
|
255
|
-
if (st.chengyuJielong.autoPlayTimer)
|
|
256
|
-
clearTimeout(st.chengyuJielong.autoPlayTimer);
|
|
257
316
|
};
|
|
258
317
|
const initState = (key, c) => {
|
|
259
318
|
const s = {
|
|
@@ -274,7 +333,7 @@ const initState = (key, c) => {
|
|
|
274
333
|
currentRound: 0,
|
|
275
334
|
players: {},
|
|
276
335
|
participants: [],
|
|
277
|
-
difficulty:
|
|
336
|
+
difficulty: c.wzHero.defaultDifficulty,
|
|
278
337
|
botAnswered: false,
|
|
279
338
|
lastHint: '',
|
|
280
339
|
currentHeroId: '',
|
|
@@ -301,27 +360,7 @@ const initState = (key, c) => {
|
|
|
301
360
|
botTurn: true,
|
|
302
361
|
autoPlayCount: 0,
|
|
303
362
|
hasTriggeredAutoPlay: false,
|
|
304
|
-
lastActiveTime: Date.now()
|
|
305
|
-
autoPlayTimer: undefined
|
|
306
|
-
},
|
|
307
|
-
dice: {
|
|
308
|
-
started: false,
|
|
309
|
-
totalRounds: c.dice.totalRounds,
|
|
310
|
-
currentRound: 0,
|
|
311
|
-
players: {},
|
|
312
|
-
participants: [],
|
|
313
|
-
playerDice: 0,
|
|
314
|
-
botDice: 0
|
|
315
|
-
},
|
|
316
|
-
rps: {
|
|
317
|
-
started: false,
|
|
318
|
-
totalRounds: c.rps.totalRounds,
|
|
319
|
-
currentRound: 0,
|
|
320
|
-
players: {},
|
|
321
|
-
participants: [],
|
|
322
|
-
playerChoice: '',
|
|
323
|
-
botChoice: '',
|
|
324
|
-
choices: ['石头', '剪刀', '布']
|
|
363
|
+
lastActiveTime: Date.now()
|
|
325
364
|
},
|
|
326
365
|
calc24: {
|
|
327
366
|
started: false,
|
|
@@ -329,22 +368,11 @@ const initState = (key, c) => {
|
|
|
329
368
|
currentRound: 0,
|
|
330
369
|
players: {},
|
|
331
370
|
participants: [],
|
|
371
|
+
difficulty: c.calc24.defaultDifficulty,
|
|
332
372
|
numbers: [],
|
|
333
373
|
playerAnswer: '',
|
|
334
|
-
solved: false
|
|
335
|
-
|
|
336
|
-
passwordLock: {
|
|
337
|
-
started: false,
|
|
338
|
-
totalRounds: 1,
|
|
339
|
-
currentRound: 0,
|
|
340
|
-
players: {},
|
|
341
|
-
participants: [],
|
|
342
|
-
password: '',
|
|
343
|
-
playerGuess: '',
|
|
344
|
-
guessTimes: 0,
|
|
345
|
-
maxGuessTimes: c.passwordLock.maxGuessTimes,
|
|
346
|
-
hints: [],
|
|
347
|
-
solved: false
|
|
374
|
+
solved: false,
|
|
375
|
+
availableNumbers: []
|
|
348
376
|
}
|
|
349
377
|
};
|
|
350
378
|
gameStates.set(key, s);
|
|
@@ -354,19 +382,22 @@ const isFourCharIdiom = (text) => {
|
|
|
354
382
|
const t = text.trim();
|
|
355
383
|
return /^[\u4e00-\u9fa5]{4}$/.test(t);
|
|
356
384
|
};
|
|
357
|
-
const generateRankText = (players) => {
|
|
385
|
+
const generateRankText = (players, rankTitle, rankEmpty) => {
|
|
358
386
|
const playerList = Object.values(players);
|
|
359
387
|
if (playerList.length === 0) {
|
|
360
|
-
return
|
|
388
|
+
return `${rankTitle}\n${rankEmpty}`;
|
|
361
389
|
}
|
|
362
390
|
const sortedPlayers = playerList.sort((a, b) => b.score - a.score);
|
|
363
|
-
let rankText =
|
|
391
|
+
let rankText = `${rankTitle}\n`;
|
|
364
392
|
sortedPlayers.forEach((player, index) => {
|
|
365
393
|
rankText += `${index + 1}. ${player.name} - 得分:${player.score}分(答对${player.correctCount}题)\n`;
|
|
366
394
|
});
|
|
367
395
|
return rankText.trim();
|
|
368
396
|
};
|
|
369
|
-
const clearGameData = (gameState) => {
|
|
397
|
+
const clearGameData = (gameState, showRank = false, session, rankTitle, rankEmpty) => {
|
|
398
|
+
if (showRank && session && session.channelId && rankTitle && rankEmpty) {
|
|
399
|
+
session.send(generateRankText(gameState.players, rankTitle, rankEmpty));
|
|
400
|
+
}
|
|
370
401
|
gameState.players = {};
|
|
371
402
|
gameState.participants = [];
|
|
372
403
|
gameState.currentRound = 0;
|
|
@@ -380,17 +411,25 @@ const addScoreToOthers = (players, excludePlayerKey) => {
|
|
|
380
411
|
}
|
|
381
412
|
});
|
|
382
413
|
};
|
|
383
|
-
const setupAutoStop = (session, state, cfg, endMsg, showRank) => {
|
|
414
|
+
const setupAutoStop = (session, state, cfg, gameType, endMsg, showRank, rankTitle, rankEmpty) => {
|
|
384
415
|
clearGameTimer(state);
|
|
385
|
-
|
|
416
|
+
let inactiveTime = 60;
|
|
417
|
+
if (gameType === 'guessNumber')
|
|
418
|
+
inactiveTime = cfg.guessNumber.autoStopInactiveTime;
|
|
419
|
+
else if (gameType === 'wzHero')
|
|
420
|
+
inactiveTime = cfg.wzHero.autoStopInactiveTime;
|
|
421
|
+
else if (gameType === 'chengyuImage')
|
|
422
|
+
inactiveTime = cfg.chengyuImage.autoStopInactiveTime;
|
|
423
|
+
else if (gameType === 'chengyuJielong')
|
|
424
|
+
inactiveTime = cfg.chengyuJielong.autoStopInactiveTime;
|
|
425
|
+
else if (gameType === 'calc24')
|
|
426
|
+
inactiveTime = cfg.calc24.autoStopInactiveTime;
|
|
427
|
+
if (inactiveTime <= 0)
|
|
386
428
|
return;
|
|
387
429
|
state.stopTimer = setTimeout(() => {
|
|
388
|
-
clearGameData(state);
|
|
430
|
+
clearGameData(state, showRank, session, rankTitle, rankEmpty);
|
|
389
431
|
session.send(endMsg);
|
|
390
|
-
|
|
391
|
-
session.send(generateRankText(state.players));
|
|
392
|
-
}
|
|
393
|
-
}, cfg.autoStopInactiveTime * 1000);
|
|
432
|
+
}, inactiveTime * 1000);
|
|
394
433
|
};
|
|
395
434
|
const calculate24 = (numbers) => {
|
|
396
435
|
if (numbers.length === 1)
|
|
@@ -422,172 +461,50 @@ const calculate24 = (numbers) => {
|
|
|
422
461
|
}
|
|
423
462
|
return false;
|
|
424
463
|
};
|
|
425
|
-
const
|
|
426
|
-
|
|
427
|
-
let
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
guessUsed[i] = true;
|
|
464
|
+
const generateSolvable24Numbers = (min, max) => {
|
|
465
|
+
const maxAttempts = 1000;
|
|
466
|
+
for (let attempt = 0; attempt < maxAttempts; attempt++) {
|
|
467
|
+
const numbers = [
|
|
468
|
+
koishi_1.Random.int(min, max + 1),
|
|
469
|
+
koishi_1.Random.int(min, max + 1),
|
|
470
|
+
koishi_1.Random.int(min, max + 1),
|
|
471
|
+
koishi_1.Random.int(min, max + 1)
|
|
472
|
+
];
|
|
473
|
+
if (calculate24([...numbers])) {
|
|
474
|
+
return numbers;
|
|
437
475
|
}
|
|
438
476
|
}
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
477
|
+
return [6, 4, 3, 1];
|
|
478
|
+
};
|
|
479
|
+
const evaluateExpression = (expr) => {
|
|
480
|
+
try {
|
|
481
|
+
let cleanExpr = expr.replace(/\s+/g, '');
|
|
482
|
+
cleanExpr = cleanExpr.replace(/[×xX]/g, '*');
|
|
483
|
+
cleanExpr = cleanExpr.replace(/[÷/]/g, '/');
|
|
484
|
+
cleanExpr = cleanExpr.replace(/\/\//g, '/');
|
|
485
|
+
if (!/^[\d\+\-\*\/\(\)\[\]\{\}]+$/.test(cleanExpr)) {
|
|
486
|
+
return null;
|
|
487
|
+
}
|
|
488
|
+
const normalizedExpr = cleanExpr.replace(/[\[\{]/g, '(').replace(/[\]\}]/g, ')');
|
|
489
|
+
const func = new Function('return ' + normalizedExpr);
|
|
490
|
+
const result = func();
|
|
491
|
+
if (typeof result === 'number' && isFinite(result)) {
|
|
492
|
+
return result;
|
|
448
493
|
}
|
|
494
|
+
return null;
|
|
495
|
+
}
|
|
496
|
+
catch {
|
|
497
|
+
return null;
|
|
449
498
|
}
|
|
450
|
-
return `提示:${correctPos}个数字位置正确,${correctNum}个数字正确但位置错误`;
|
|
451
499
|
};
|
|
452
500
|
function apply(ctx, cfg) {
|
|
453
501
|
const d = {
|
|
454
|
-
guessNumber:
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
tooBig: "猜大啦!当前范围更新为 [{0}-{1}]",
|
|
461
|
-
correct: "恭喜你猜中数字!本轮你不得分,其他参与者各得1分~",
|
|
462
|
-
roundEnd: "第 {0} 回合结束!剩余回合:{1}",
|
|
463
|
-
gameEnd: "🎉 猜数字比赛结束!🎉",
|
|
464
|
-
rankTitle: "🏆 排行榜 🏆",
|
|
465
|
-
rankEmpty: "暂无参与记录~",
|
|
466
|
-
disabled: "猜数字功能已关闭,请联系管理员开启",
|
|
467
|
-
autoStop: "游戏因长时间无人操作,已自动结束"
|
|
468
|
-
},
|
|
469
|
-
wzHero: {
|
|
470
|
-
start: "猜王者英雄开始!本次共 {0} 回合~",
|
|
471
|
-
startUsage: "用法错误!正确用法:猜王者英雄 开始 [难度] | 猜王者英雄 [答案] | 猜王者英雄 提示 | 猜王者英雄 结束",
|
|
472
|
-
stop: "猜王者英雄比赛已停止",
|
|
473
|
-
notStarted: "猜王者英雄比赛尚未开始,请输入 猜王者英雄 开始 [难度] 开始游戏",
|
|
474
|
-
hint: "提示",
|
|
475
|
-
apiError: "API请求失败,请稍后再试",
|
|
476
|
-
correct: "答对啦!你获得1分~",
|
|
477
|
-
wrong: "答错啦~正确答案是:{0},你不得分",
|
|
478
|
-
roundEnd: "第 {0} 回合结束!剩余回合:{1}",
|
|
479
|
-
gameEnd: "🎉 猜王者英雄比赛结束!🎉",
|
|
480
|
-
rankTitle: "🏆 排行榜 🏆",
|
|
481
|
-
rankEmpty: "暂无参与记录~",
|
|
482
|
-
disabled: "猜王者英雄功能已关闭,请联系管理员开启",
|
|
483
|
-
autoStop: "游戏因长时间无人操作,已自动结束"
|
|
484
|
-
},
|
|
485
|
-
chengyuImage: {
|
|
486
|
-
start: "看图猜成语比赛开始!本次共 {0} 回合~",
|
|
487
|
-
stop: "看图猜成语比赛已停止",
|
|
488
|
-
submitUsage: "请直接输入 看图猜成语 [答案],或输入 看图猜成语 提示 获取线索",
|
|
489
|
-
notStarted: "看图猜成语比赛尚未开始,请输入 看图猜成语 开始 开始游戏",
|
|
490
|
-
next: "第 {0} 题来啦!",
|
|
491
|
-
hintGet: "【提示】{0}",
|
|
492
|
-
hintError: "获取提示失败,请稍后再试",
|
|
493
|
-
apiError: "API请求失败,请稍后再试",
|
|
494
|
-
correct: "答对啦!你获得1分~",
|
|
495
|
-
wrong: "答错啦~正确答案是:{0},你不得分",
|
|
496
|
-
roundEnd: "第 {0} 回合结束!剩余回合:{1}",
|
|
497
|
-
gameEnd: "🎉 看图猜成语比赛结束!🎉",
|
|
498
|
-
rankTitle: "🏆 排行榜 🏆",
|
|
499
|
-
rankEmpty: "暂无参与记录~",
|
|
500
|
-
disabled: "看图猜成语功能已关闭,请联系管理员开启",
|
|
501
|
-
autoStop: "游戏因长时间无人操作,已自动结束"
|
|
502
|
-
},
|
|
503
|
-
chengyuJielong: {
|
|
504
|
-
start: "成语接龙比赛开始!本次共 {0} 回合~我先来~",
|
|
505
|
-
stop: "成语接龙比赛已停止",
|
|
506
|
-
notStarted: "成语接龙比赛尚未开始,请输入 成语接龙 开始 开始游戏",
|
|
507
|
-
joinUsage: "请直接发送 成语接龙 [成语] 参与接龙",
|
|
508
|
-
apiError: "API请求失败,请稍后再试",
|
|
509
|
-
botTurn: "该我了!我接:{0}({1})\n释义:{2}",
|
|
510
|
-
botWin: "哈哈我接不上了!本轮结束~",
|
|
511
|
-
autoPlayTooMany: "我已经主动参与 {0} 次啦,不再主动接啦~",
|
|
512
|
-
gameInactiveStop: "太久没人玩啦,比赛自动结束~",
|
|
513
|
-
notIdiom: "请发送四字成语参与游戏~",
|
|
514
|
-
correct: "接龙成功!你获得1分~",
|
|
515
|
-
wrong: "接龙失败!你不得分,其他参与者各得1分~",
|
|
516
|
-
roundEnd: "第 {0} 回合结束!剩余回合:{1}",
|
|
517
|
-
gameEnd: "🎉 成语接龙比赛结束!🎉",
|
|
518
|
-
rankTitle: "🏆 排行榜 🏆",
|
|
519
|
-
rankEmpty: "暂无参与记录~",
|
|
520
|
-
disabled: "成语接龙功能已关闭,请联系管理员开启",
|
|
521
|
-
autoStop: "游戏因长时间无人操作,已自动结束"
|
|
522
|
-
},
|
|
523
|
-
dice: {
|
|
524
|
-
start: "掷骰子比大小游戏开始!本次共 {0} 回合~",
|
|
525
|
-
stop: "掷骰子比大小游戏已停止",
|
|
526
|
-
notStarted: "掷骰子比大小游戏尚未开始,请输入 掷骰子 开始 开始游戏",
|
|
527
|
-
roll: "🎲 你掷出了 {0} 点!机器人掷出了 {1} 点!",
|
|
528
|
-
win: "你赢了这一回合!获得1分~",
|
|
529
|
-
lose: "机器人赢了这一回合!",
|
|
530
|
-
draw: "平局!双方都不得分~",
|
|
531
|
-
roundEnd: "第 {0} 回合结束!剩余回合:{1}",
|
|
532
|
-
gameEnd: "🎉 掷骰子比大小游戏结束!🎉",
|
|
533
|
-
rankTitle: "🏆 排行榜 🏆",
|
|
534
|
-
rankEmpty: "暂无参与记录~",
|
|
535
|
-
disabled: "掷骰子比大小功能已关闭,请联系管理员开启",
|
|
536
|
-
autoStop: "游戏因长时间无人操作,已自动结束"
|
|
537
|
-
},
|
|
538
|
-
rps: {
|
|
539
|
-
start: "石头剪刀布游戏开始!本次共 {0} 回合~",
|
|
540
|
-
stop: "石头剪刀布游戏已停止",
|
|
541
|
-
notStarted: "石头剪刀布游戏尚未开始,请输入 石头剪刀布 开始 开始游戏",
|
|
542
|
-
choice: "你选择了 {0},机器人选择了 {1}!",
|
|
543
|
-
win: "你赢了这一回合!获得1分~",
|
|
544
|
-
lose: "机器人赢了这一回合!",
|
|
545
|
-
draw: "平局!双方都不得分~",
|
|
546
|
-
invalidChoice: "无效的选择!请输入 石头、剪刀 或 布",
|
|
547
|
-
roundEnd: "第 {0} 回合结束!剩余回合:{1}",
|
|
548
|
-
gameEnd: "🎉 石头剪刀布游戏结束!🎉",
|
|
549
|
-
rankTitle: "🏆 排行榜 🏆",
|
|
550
|
-
rankEmpty: "暂无参与记录~",
|
|
551
|
-
disabled: "石头剪刀布功能已关闭,请联系管理员开启",
|
|
552
|
-
autoStop: "游戏因长时间无人操作,已自动结束"
|
|
553
|
-
},
|
|
554
|
-
calc24: {
|
|
555
|
-
start: "算24点游戏开始!本次共 {0} 回合~",
|
|
556
|
-
stop: "算24点游戏已停止",
|
|
557
|
-
notStarted: "算24点游戏尚未开始,请输入 算24点 开始 开始游戏",
|
|
558
|
-
generate: "📝 第 {0} 题:用 {1} 通过加减乘除算出24!",
|
|
559
|
-
correct: "答对啦!你获得1分~",
|
|
560
|
-
wrong: "答错啦~",
|
|
561
|
-
impossible: "这组数无法算出24!本题作废,换一组数字~",
|
|
562
|
-
solved: "这组数已经被答对啦,换一组数字~",
|
|
563
|
-
roundEnd: "第 {0} 回合结束!剩余回合:{1}",
|
|
564
|
-
gameEnd: "🎉 算24点游戏结束!🎉",
|
|
565
|
-
rankTitle: "🏆 排行榜 🏆",
|
|
566
|
-
rankEmpty: "暂无参与记录~",
|
|
567
|
-
disabled: "算24点功能已关闭,请联系管理员开启",
|
|
568
|
-
autoStop: "游戏因长时间无人操作,已自动结束"
|
|
569
|
-
},
|
|
570
|
-
passwordLock: {
|
|
571
|
-
start: "猜密码游戏开始!密码为4位数字,你有 {0} 次猜测机会~",
|
|
572
|
-
stop: "猜密码游戏已停止",
|
|
573
|
-
notStarted: "猜密码游戏尚未开始,请输入 猜密码 开始 开始游戏",
|
|
574
|
-
guess: "你猜测的密码是:{0},这是第 {1} 次猜测",
|
|
575
|
-
correct: "🎉 恭喜!你猜对了密码 {0}!总共猜测了 {1} 次,获得10分~",
|
|
576
|
-
wrong: "密码错误!{0}",
|
|
577
|
-
solved: "密码已经被猜出来啦,游戏结束~",
|
|
578
|
-
noChance: "❌ 没有猜测机会了!正确密码是:{0}~",
|
|
579
|
-
invalidPassword: "无效的密码!请输入4位数字",
|
|
580
|
-
gameEnd: "🎉 猜密码游戏结束!🎉",
|
|
581
|
-
rankTitle: "🏆 排行榜 🏆",
|
|
582
|
-
rankEmpty: "暂无参与记录~",
|
|
583
|
-
disabled: "猜密码功能已关闭,请联系管理员开启",
|
|
584
|
-
autoStop: "游戏因长时间无人操作,已自动结束"
|
|
585
|
-
},
|
|
586
|
-
common: {
|
|
587
|
-
gameRunning: "当前已有游戏在运行中,请先结束当前游戏后再开始新游戏!",
|
|
588
|
-
gameStoppedByInactive: "游戏因长时间无人操作,已自动结束",
|
|
589
|
-
paramError: "参数错误!请检查输入格式"
|
|
590
|
-
}
|
|
502
|
+
guessNumber: cfg.guessNumber.messages,
|
|
503
|
+
wzHero: cfg.wzHero.messages,
|
|
504
|
+
chengyuImage: cfg.chengyuImage.messages,
|
|
505
|
+
chengyuJielong: cfg.chengyuJielong.messages,
|
|
506
|
+
calc24: cfg.calc24.messages,
|
|
507
|
+
common: cfg.commonMessages
|
|
591
508
|
};
|
|
592
509
|
try {
|
|
593
510
|
const p = path_1.default.join(__dirname, './locales/zh-CN.yml');
|
|
@@ -613,7 +530,7 @@ function apply(ctx, cfg) {
|
|
|
613
530
|
return;
|
|
614
531
|
if (st.chengyuJielong.hasTriggeredAutoPlay)
|
|
615
532
|
return;
|
|
616
|
-
const delay = cfg.autoPlayDelay * 1000;
|
|
533
|
+
const delay = cfg.chengyuJielong.autoPlayDelay * 1000;
|
|
617
534
|
st.chengyuJielong.autoPlayTimer = setTimeout(() => {
|
|
618
535
|
doAutoPlay(session, key, st);
|
|
619
536
|
}, delay);
|
|
@@ -623,11 +540,11 @@ function apply(ctx, cfg) {
|
|
|
623
540
|
return;
|
|
624
541
|
if (st.chengyuJielong.hasTriggeredAutoPlay)
|
|
625
542
|
return;
|
|
626
|
-
if (st.chengyuJielong.autoPlayCount >= cfg.autoPlayMaxCount) {
|
|
627
|
-
session.send(d.chengyuJielong.autoPlayTooMany.replace('{0}', String(cfg.autoPlayMaxCount)));
|
|
543
|
+
if (st.chengyuJielong.autoPlayCount >= cfg.chengyuJielong.autoPlayMaxCount) {
|
|
544
|
+
session.send(d.chengyuJielong.autoPlayTooMany.replace('{0}', String(cfg.chengyuJielong.autoPlayMaxCount)));
|
|
628
545
|
st.chengyuJielong.hasTriggeredAutoPlay = true;
|
|
629
546
|
gameStates.set(key, st);
|
|
630
|
-
setupAutoStop(session, st.chengyuJielong, cfg, d.chengyuJielong.autoStop, cfg.chengyuJielong.showRank);
|
|
547
|
+
setupAutoStop(session, st.chengyuJielong, cfg, 'chengyuJielong', d.chengyuJielong.autoStop, cfg.chengyuJielong.showRank, d.chengyuJielong.rankTitle, d.chengyuJielong.rankEmpty);
|
|
631
548
|
return;
|
|
632
549
|
}
|
|
633
550
|
st.chengyuJielong.hasTriggeredAutoPlay = true;
|
|
@@ -661,7 +578,7 @@ function apply(ctx, cfg) {
|
|
|
661
578
|
await session.send(m);
|
|
662
579
|
await session.send(d.chengyuJielong.gameEnd);
|
|
663
580
|
if (cfg.chengyuJielong.showRank && !isPrivate(session)) {
|
|
664
|
-
const rankText = generateRankText(st.chengyuJielong.players);
|
|
581
|
+
const rankText = generateRankText(st.chengyuJielong.players, d.chengyuJielong.rankTitle, d.chengyuJielong.rankEmpty);
|
|
665
582
|
await session.send(rankText);
|
|
666
583
|
}
|
|
667
584
|
clearGameData(st.chengyuJielong);
|
|
@@ -678,7 +595,7 @@ function apply(ctx, cfg) {
|
|
|
678
595
|
await session.send(d.chengyuJielong.apiError);
|
|
679
596
|
}
|
|
680
597
|
gameStates.set(key, st);
|
|
681
|
-
setupAutoStop(session, st.chengyuJielong, cfg, d.chengyuJielong.autoStop, cfg.chengyuJielong.showRank);
|
|
598
|
+
setupAutoStop(session, st.chengyuJielong, cfg, 'chengyuJielong', d.chengyuJielong.autoStop, cfg.chengyuJielong.showRank, d.chengyuJielong.rankTitle, d.chengyuJielong.rankEmpty);
|
|
682
599
|
};
|
|
683
600
|
ctx.middleware(async (session, next) => {
|
|
684
601
|
if (!session.content)
|
|
@@ -697,7 +614,7 @@ function apply(ctx, cfg) {
|
|
|
697
614
|
st.chengyuJielong.participants.push(playerKey);
|
|
698
615
|
}
|
|
699
616
|
if (!isFourCharIdiom(content)) {
|
|
700
|
-
setupAutoStop(session, st.chengyuJielong, cfg, d.chengyuJielong.autoStop, cfg.chengyuJielong.showRank);
|
|
617
|
+
setupAutoStop(session, st.chengyuJielong, cfg, 'chengyuJielong', d.chengyuJielong.autoStop, cfg.chengyuJielong.showRank, d.chengyuJielong.rankTitle, d.chengyuJielong.rankEmpty);
|
|
701
618
|
scheduleAutoPlay(session, key, st);
|
|
702
619
|
return next();
|
|
703
620
|
}
|
|
@@ -738,7 +655,7 @@ function apply(ctx, cfg) {
|
|
|
738
655
|
await session.send(m);
|
|
739
656
|
await session.send(d.chengyuJielong.gameEnd);
|
|
740
657
|
if (cfg.chengyuJielong.showRank && !isPrivate(session)) {
|
|
741
|
-
const rankText = generateRankText(st.chengyuJielong.players);
|
|
658
|
+
const rankText = generateRankText(st.chengyuJielong.players, d.chengyuJielong.rankTitle, d.chengyuJielong.rankEmpty);
|
|
742
659
|
await session.send(rankText);
|
|
743
660
|
}
|
|
744
661
|
clearGameData(st.chengyuJielong);
|
|
@@ -747,7 +664,7 @@ function apply(ctx, cfg) {
|
|
|
747
664
|
m += '\n' + d.chengyuJielong.roundEnd.replace('{0}', st.chengyuJielong.currentRound.toString()).replace('{1}', (st.chengyuJielong.totalRounds - st.chengyuJielong.currentRound).toString());
|
|
748
665
|
await session.send(m);
|
|
749
666
|
st.chengyuJielong.hasTriggeredAutoPlay = false;
|
|
750
|
-
setupAutoStop(session, st.chengyuJielong, cfg, d.chengyuJielong.autoStop, cfg.chengyuJielong.showRank);
|
|
667
|
+
setupAutoStop(session, st.chengyuJielong, cfg, 'chengyuJielong', d.chengyuJielong.autoStop, cfg.chengyuJielong.showRank, d.chengyuJielong.rankTitle, d.chengyuJielong.rankEmpty);
|
|
751
668
|
scheduleAutoPlay(session, key, st);
|
|
752
669
|
}
|
|
753
670
|
}
|
|
@@ -760,7 +677,7 @@ function apply(ctx, cfg) {
|
|
|
760
677
|
}
|
|
761
678
|
catch (error) {
|
|
762
679
|
await session.send(d.chengyuJielong.apiError);
|
|
763
|
-
setupAutoStop(session, st.chengyuJielong, cfg, d.chengyuJielong.autoStop, cfg.chengyuJielong.showRank);
|
|
680
|
+
setupAutoStop(session, st.chengyuJielong, cfg, 'chengyuJielong', d.chengyuJielong.autoStop, cfg.chengyuJielong.showRank, d.chengyuJielong.rankTitle, d.chengyuJielong.rankEmpty);
|
|
764
681
|
scheduleAutoPlay(session, key, st);
|
|
765
682
|
}
|
|
766
683
|
gameStates.set(key, st);
|
|
@@ -778,7 +695,7 @@ function apply(ctx, cfg) {
|
|
|
778
695
|
params: {
|
|
779
696
|
action: 'get_hint',
|
|
780
697
|
id: st.chengyuImage.currentId,
|
|
781
|
-
level:
|
|
698
|
+
level: cfg.chengyuImage.defaultHintLevel
|
|
782
699
|
},
|
|
783
700
|
timeout: cfg.apiConfig.timeout
|
|
784
701
|
});
|
|
@@ -793,11 +710,11 @@ function apply(ctx, cfg) {
|
|
|
793
710
|
catch (error) {
|
|
794
711
|
await session.send(d.chengyuImage.hintError);
|
|
795
712
|
}
|
|
796
|
-
setupAutoStop(session, st.chengyuImage, cfg, d.chengyuImage.autoStop, cfg.chengyuImage.showRank);
|
|
713
|
+
setupAutoStop(session, st.chengyuImage, cfg, 'chengyuImage', d.chengyuImage.autoStop, cfg.chengyuImage.showRank, d.chengyuImage.rankTitle, d.chengyuImage.rankEmpty);
|
|
797
714
|
return;
|
|
798
715
|
}
|
|
799
716
|
if (!isFourCharIdiom(content)) {
|
|
800
|
-
setupAutoStop(session, st.chengyuImage, cfg, d.chengyuImage.autoStop, cfg.chengyuImage.showRank);
|
|
717
|
+
setupAutoStop(session, st.chengyuImage, cfg, 'chengyuImage', d.chengyuImage.autoStop, cfg.chengyuImage.showRank, d.chengyuImage.rankTitle, d.chengyuImage.rankEmpty);
|
|
801
718
|
return next();
|
|
802
719
|
}
|
|
803
720
|
try {
|
|
@@ -823,7 +740,7 @@ function apply(ctx, cfg) {
|
|
|
823
740
|
await session.send(reply);
|
|
824
741
|
await session.send(d.chengyuImage.gameEnd);
|
|
825
742
|
if (cfg.chengyuImage.showRank && !isPrivate(session)) {
|
|
826
|
-
const rankText = generateRankText(st.chengyuImage.players);
|
|
743
|
+
const rankText = generateRankText(st.chengyuImage.players, d.chengyuImage.rankTitle, d.chengyuImage.rankEmpty);
|
|
827
744
|
await session.send(rankText);
|
|
828
745
|
}
|
|
829
746
|
clearGameData(st.chengyuImage);
|
|
@@ -853,7 +770,7 @@ function apply(ctx, cfg) {
|
|
|
853
770
|
st.chengyuImage.started = false;
|
|
854
771
|
clearGameTimer(st.chengyuImage);
|
|
855
772
|
if (cfg.chengyuImage.showRank && !isPrivate(session)) {
|
|
856
|
-
const rankText = generateRankText(st.chengyuImage.players);
|
|
773
|
+
const rankText = generateRankText(st.chengyuImage.players, d.chengyuImage.rankTitle, d.chengyuImage.rankEmpty);
|
|
857
774
|
await session.send(rankText);
|
|
858
775
|
}
|
|
859
776
|
clearGameData(st.chengyuImage);
|
|
@@ -873,7 +790,7 @@ function apply(ctx, cfg) {
|
|
|
873
790
|
catch (error) {
|
|
874
791
|
await session.send(d.chengyuImage.apiError);
|
|
875
792
|
}
|
|
876
|
-
setupAutoStop(session, st.chengyuImage, cfg, d.chengyuImage.autoStop, cfg.chengyuImage.showRank);
|
|
793
|
+
setupAutoStop(session, st.chengyuImage, cfg, 'chengyuImage', d.chengyuImage.autoStop, cfg.chengyuImage.showRank, d.chengyuImage.rankTitle, d.chengyuImage.rankEmpty);
|
|
877
794
|
gameStates.set(key, st);
|
|
878
795
|
return;
|
|
879
796
|
}
|
|
@@ -884,7 +801,7 @@ function apply(ctx, cfg) {
|
|
|
884
801
|
st.wzHero.participants.push(playerKey);
|
|
885
802
|
}
|
|
886
803
|
if (content === '结束') {
|
|
887
|
-
clearGameData(st.wzHero);
|
|
804
|
+
clearGameData(st.wzHero, cfg.wzHero.showRank && !isPrivate(session), session, d.wzHero.rankTitle, d.wzHero.rankEmpty);
|
|
888
805
|
await session.send(d.wzHero.stop);
|
|
889
806
|
gameStates.set(key, st);
|
|
890
807
|
return;
|
|
@@ -908,7 +825,7 @@ function apply(ctx, cfg) {
|
|
|
908
825
|
await session.send(text);
|
|
909
826
|
await session.send(d.wzHero.gameEnd);
|
|
910
827
|
if (cfg.wzHero.showRank && !isPrivate(session)) {
|
|
911
|
-
const rankText = generateRankText(st.wzHero.players);
|
|
828
|
+
const rankText = generateRankText(st.wzHero.players, d.wzHero.rankTitle, d.wzHero.rankEmpty);
|
|
912
829
|
await session.send(rankText);
|
|
913
830
|
}
|
|
914
831
|
clearGameData(st.wzHero);
|
|
@@ -941,7 +858,7 @@ function apply(ctx, cfg) {
|
|
|
941
858
|
catch (error) {
|
|
942
859
|
await session.send(d.wzHero.apiError);
|
|
943
860
|
}
|
|
944
|
-
setupAutoStop(session, st.wzHero, cfg, d.wzHero.autoStop, cfg.wzHero.showRank);
|
|
861
|
+
setupAutoStop(session, st.wzHero, cfg, 'wzHero', d.wzHero.autoStop, cfg.wzHero.showRank, d.wzHero.rankTitle, d.wzHero.rankEmpty);
|
|
945
862
|
gameStates.set(key, st);
|
|
946
863
|
return;
|
|
947
864
|
}
|
|
@@ -952,14 +869,14 @@ function apply(ctx, cfg) {
|
|
|
952
869
|
st.guessNumber.participants.push(playerKey);
|
|
953
870
|
}
|
|
954
871
|
if (content === '结束') {
|
|
955
|
-
clearGameData(st.guessNumber);
|
|
872
|
+
clearGameData(st.guessNumber, cfg.guessNumber.showRank && !isPrivate(session), session, d.guessNumber.rankTitle, d.guessNumber.rankEmpty);
|
|
956
873
|
await session.send(d.guessNumber.stop);
|
|
957
874
|
gameStates.set(key, st);
|
|
958
875
|
return;
|
|
959
876
|
}
|
|
960
877
|
const num = parseInt(content);
|
|
961
878
|
if (isNaN(num)) {
|
|
962
|
-
setupAutoStop(session, st.guessNumber, cfg, d.guessNumber.autoStop, cfg.guessNumber.showRank);
|
|
879
|
+
setupAutoStop(session, st.guessNumber, cfg, 'guessNumber', d.guessNumber.autoStop, cfg.guessNumber.showRank, d.guessNumber.rankTitle, d.guessNumber.rankEmpty);
|
|
963
880
|
return next();
|
|
964
881
|
}
|
|
965
882
|
if (num === st.guessNumber.target) {
|
|
@@ -971,7 +888,7 @@ function apply(ctx, cfg) {
|
|
|
971
888
|
clearGameTimer(st.guessNumber);
|
|
972
889
|
await session.send(d.guessNumber.gameEnd);
|
|
973
890
|
if (cfg.guessNumber.showRank && !isPrivate(session)) {
|
|
974
|
-
const rankText = generateRankText(st.guessNumber.players);
|
|
891
|
+
const rankText = generateRankText(st.guessNumber.players, d.guessNumber.rankTitle, d.guessNumber.rankEmpty);
|
|
975
892
|
await session.send(rankText);
|
|
976
893
|
}
|
|
977
894
|
clearGameData(st.guessNumber);
|
|
@@ -990,108 +907,7 @@ function apply(ctx, cfg) {
|
|
|
990
907
|
st.guessNumber.currentMax = num - 1;
|
|
991
908
|
await session.send(d.guessNumber.tooBig.replace('{0}', st.guessNumber.currentMin.toString()).replace('{1}', st.guessNumber.currentMax.toString()));
|
|
992
909
|
}
|
|
993
|
-
setupAutoStop(session, st.guessNumber, cfg, d.guessNumber.autoStop, cfg.guessNumber.showRank);
|
|
994
|
-
gameStates.set(key, st);
|
|
995
|
-
return;
|
|
996
|
-
}
|
|
997
|
-
if (cfg.enableDice && st.dice.started) {
|
|
998
|
-
clearGameTimer(st.dice);
|
|
999
|
-
if (!st.dice.players[playerKey]) {
|
|
1000
|
-
st.dice.players[playerKey] = getPlayerData(session);
|
|
1001
|
-
st.dice.participants.push(playerKey);
|
|
1002
|
-
}
|
|
1003
|
-
if (content === '结束') {
|
|
1004
|
-
clearGameData(st.dice);
|
|
1005
|
-
await session.send(d.dice.stop);
|
|
1006
|
-
gameStates.set(key, st);
|
|
1007
|
-
return;
|
|
1008
|
-
}
|
|
1009
|
-
if (content !== '掷骰子') {
|
|
1010
|
-
setupAutoStop(session, st.dice, cfg, d.dice.autoStop, cfg.dice.showRank);
|
|
1011
|
-
return next();
|
|
1012
|
-
}
|
|
1013
|
-
st.dice.playerDice = koishi_1.Random.int(1, 6);
|
|
1014
|
-
st.dice.botDice = koishi_1.Random.int(1, 6);
|
|
1015
|
-
let resultMsg = d.dice.roll.replace('{0}', st.dice.playerDice.toString()).replace('{1}', st.dice.botDice.toString());
|
|
1016
|
-
if (st.dice.playerDice > st.dice.botDice) {
|
|
1017
|
-
resultMsg += '\n' + d.dice.win;
|
|
1018
|
-
st.dice.players[playerKey].score += 1;
|
|
1019
|
-
st.dice.players[playerKey].correctCount += 1;
|
|
1020
|
-
}
|
|
1021
|
-
else if (st.dice.playerDice < st.dice.botDice) {
|
|
1022
|
-
resultMsg += '\n' + d.dice.lose;
|
|
1023
|
-
}
|
|
1024
|
-
else {
|
|
1025
|
-
resultMsg += '\n' + d.dice.draw;
|
|
1026
|
-
}
|
|
1027
|
-
await session.send(resultMsg);
|
|
1028
|
-
st.dice.currentRound += 1;
|
|
1029
|
-
if (st.dice.currentRound > st.dice.totalRounds) {
|
|
1030
|
-
st.dice.started = false;
|
|
1031
|
-
clearGameTimer(st.dice);
|
|
1032
|
-
await session.send(d.dice.gameEnd);
|
|
1033
|
-
if (cfg.dice.showRank && !isPrivate(session)) {
|
|
1034
|
-
const rankText = generateRankText(st.dice.players);
|
|
1035
|
-
await session.send(rankText);
|
|
1036
|
-
}
|
|
1037
|
-
clearGameData(st.dice);
|
|
1038
|
-
}
|
|
1039
|
-
else {
|
|
1040
|
-
await session.send(d.dice.roundEnd.replace('{0}', st.dice.currentRound.toString()).replace('{1}', (st.dice.totalRounds - st.dice.currentRound).toString()));
|
|
1041
|
-
}
|
|
1042
|
-
setupAutoStop(session, st.dice, cfg, d.dice.autoStop, cfg.dice.showRank);
|
|
1043
|
-
gameStates.set(key, st);
|
|
1044
|
-
return;
|
|
1045
|
-
}
|
|
1046
|
-
if (cfg.enableRps && st.rps.started) {
|
|
1047
|
-
clearGameTimer(st.rps);
|
|
1048
|
-
if (!st.rps.players[playerKey]) {
|
|
1049
|
-
st.rps.players[playerKey] = getPlayerData(session);
|
|
1050
|
-
st.rps.participants.push(playerKey);
|
|
1051
|
-
}
|
|
1052
|
-
if (content === '结束') {
|
|
1053
|
-
clearGameData(st.rps);
|
|
1054
|
-
await session.send(d.rps.stop);
|
|
1055
|
-
gameStates.set(key, st);
|
|
1056
|
-
return;
|
|
1057
|
-
}
|
|
1058
|
-
if (!st.rps.choices.includes(content)) {
|
|
1059
|
-
await session.send(d.rps.invalidChoice);
|
|
1060
|
-
setupAutoStop(session, st.rps, cfg, d.rps.autoStop, cfg.rps.showRank);
|
|
1061
|
-
return;
|
|
1062
|
-
}
|
|
1063
|
-
st.rps.playerChoice = content;
|
|
1064
|
-
st.rps.botChoice = st.rps.choices[koishi_1.Random.int(0, 2)];
|
|
1065
|
-
let resultMsg = d.rps.choice.replace('{0}', st.rps.playerChoice).replace('{1}', st.rps.botChoice);
|
|
1066
|
-
if ((st.rps.playerChoice === '石头' && st.rps.botChoice === '剪刀') ||
|
|
1067
|
-
(st.rps.playerChoice === '剪刀' && st.rps.botChoice === '布') ||
|
|
1068
|
-
(st.rps.playerChoice === '布' && st.rps.botChoice === '石头')) {
|
|
1069
|
-
resultMsg += '\n' + d.rps.win;
|
|
1070
|
-
st.rps.players[playerKey].score += 1;
|
|
1071
|
-
st.rps.players[playerKey].correctCount += 1;
|
|
1072
|
-
}
|
|
1073
|
-
else if (st.rps.playerChoice === st.rps.botChoice) {
|
|
1074
|
-
resultMsg += '\n' + d.rps.draw;
|
|
1075
|
-
}
|
|
1076
|
-
else {
|
|
1077
|
-
resultMsg += '\n' + d.rps.lose;
|
|
1078
|
-
}
|
|
1079
|
-
await session.send(resultMsg);
|
|
1080
|
-
st.rps.currentRound += 1;
|
|
1081
|
-
if (st.rps.currentRound > st.rps.totalRounds) {
|
|
1082
|
-
st.rps.started = false;
|
|
1083
|
-
clearGameTimer(st.rps);
|
|
1084
|
-
await session.send(d.rps.gameEnd);
|
|
1085
|
-
if (cfg.rps.showRank && !isPrivate(session)) {
|
|
1086
|
-
const rankText = generateRankText(st.rps.players);
|
|
1087
|
-
await session.send(rankText);
|
|
1088
|
-
}
|
|
1089
|
-
clearGameData(st.rps);
|
|
1090
|
-
}
|
|
1091
|
-
else {
|
|
1092
|
-
await session.send(d.rps.roundEnd.replace('{0}', st.rps.currentRound.toString()).replace('{1}', (st.rps.totalRounds - st.rps.currentRound).toString()));
|
|
1093
|
-
}
|
|
1094
|
-
setupAutoStop(session, st.rps, cfg, d.rps.autoStop, cfg.rps.showRank);
|
|
910
|
+
setupAutoStop(session, st.guessNumber, cfg, 'guessNumber', d.guessNumber.autoStop, cfg.guessNumber.showRank, d.guessNumber.rankTitle, d.guessNumber.rankEmpty);
|
|
1095
911
|
gameStates.set(key, st);
|
|
1096
912
|
return;
|
|
1097
913
|
}
|
|
@@ -1102,152 +918,61 @@ function apply(ctx, cfg) {
|
|
|
1102
918
|
st.calc24.participants.push(playerKey);
|
|
1103
919
|
}
|
|
1104
920
|
if (content === '结束') {
|
|
1105
|
-
clearGameData(st.calc24);
|
|
921
|
+
clearGameData(st.calc24, cfg.calc24.showRank && !isPrivate(session), session, d.calc24.rankTitle, d.calc24.rankEmpty);
|
|
1106
922
|
await session.send(d.calc24.stop);
|
|
1107
923
|
gameStates.set(key, st);
|
|
1108
924
|
return;
|
|
1109
925
|
}
|
|
1110
926
|
if (content === '换题') {
|
|
1111
927
|
if (!st.calc24.solved) {
|
|
1112
|
-
st.calc24.
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
}
|
|
928
|
+
const range = cfg.calc24.difficultyLevels[st.calc24.difficulty === '简单' ? 'easy' :
|
|
929
|
+
st.calc24.difficulty === '中等' ? 'medium' : 'hard'];
|
|
930
|
+
st.calc24.numbers = generateSolvable24Numbers(range.min, range.max);
|
|
1116
931
|
st.calc24.solved = false;
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
|
|
1120
|
-
}
|
|
1121
|
-
else {
|
|
1122
|
-
await session.send(d.calc24.generate.replace('{0}', st.calc24.currentRound.toString()).replace('{1}', st.calc24.numbers.join('、')));
|
|
1123
|
-
}
|
|
932
|
+
await session.send(d.calc24.generate.replace('{0}', st.calc24.currentRound.toString())
|
|
933
|
+
.replace('{1}', st.calc24.difficulty)
|
|
934
|
+
.replace('{2}', st.calc24.numbers.join('、')));
|
|
1124
935
|
}
|
|
1125
|
-
setupAutoStop(session, st.calc24, cfg, d.calc24.autoStop, cfg.calc24.showRank);
|
|
936
|
+
setupAutoStop(session, st.calc24, cfg, 'calc24', d.calc24.autoStop, cfg.calc24.showRank, d.calc24.rankTitle, d.calc24.rankEmpty);
|
|
1126
937
|
return;
|
|
1127
938
|
}
|
|
1128
939
|
if (st.calc24.solved) {
|
|
1129
940
|
await session.send(d.calc24.solved);
|
|
1130
|
-
setupAutoStop(session, st.calc24, cfg, d.calc24.autoStop, cfg.calc24.showRank);
|
|
941
|
+
setupAutoStop(session, st.calc24, cfg, 'calc24', d.calc24.autoStop, cfg.calc24.showRank, d.calc24.rankTitle, d.calc24.rankEmpty);
|
|
1131
942
|
return;
|
|
1132
943
|
}
|
|
1133
|
-
|
|
1134
|
-
|
|
1135
|
-
|
|
1136
|
-
|
|
1137
|
-
st.calc24.
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
if (Math.abs(result - 24) < 0.001) {
|
|
1147
|
-
await session.send(d.calc24.correct);
|
|
1148
|
-
st.calc24.players[playerKey].score += 1;
|
|
1149
|
-
st.calc24.players[playerKey].correctCount += 1;
|
|
1150
|
-
st.calc24.solved = true;
|
|
1151
|
-
st.calc24.currentRound += 1;
|
|
1152
|
-
if (st.calc24.currentRound > st.calc24.totalRounds) {
|
|
1153
|
-
st.calc24.started = false;
|
|
1154
|
-
clearGameTimer(st.calc24);
|
|
1155
|
-
await session.send(d.calc24.gameEnd);
|
|
1156
|
-
if (cfg.calc24.showRank && !isPrivate(session)) {
|
|
1157
|
-
const rankText = generateRankText(st.calc24.players);
|
|
1158
|
-
await session.send(rankText);
|
|
1159
|
-
}
|
|
1160
|
-
clearGameData(st.calc24);
|
|
1161
|
-
}
|
|
1162
|
-
else {
|
|
1163
|
-
await session.send(d.calc24.roundEnd.replace('{0}', st.calc24.currentRound.toString()).replace('{1}', (st.calc24.totalRounds - st.calc24.currentRound).toString()));
|
|
1164
|
-
st.calc24.numbers = [];
|
|
1165
|
-
for (let i = 0; i < 4; i++) {
|
|
1166
|
-
st.calc24.numbers.push(koishi_1.Random.int(cfg.calc24.numberRange[0], cfg.calc24.numberRange[1]));
|
|
1167
|
-
}
|
|
1168
|
-
st.calc24.solved = false;
|
|
1169
|
-
const nextCanCalculate = calculate24([...st.calc24.numbers]);
|
|
1170
|
-
if (!nextCanCalculate) {
|
|
1171
|
-
await session.send(d.calc24.impossible);
|
|
1172
|
-
}
|
|
1173
|
-
else {
|
|
1174
|
-
await session.send(d.calc24.generate.replace('{0}', st.calc24.currentRound.toString()).replace('{1}', st.calc24.numbers.join('、')));
|
|
1175
|
-
}
|
|
1176
|
-
}
|
|
1177
|
-
}
|
|
1178
|
-
else {
|
|
1179
|
-
await session.send(d.calc24.wrong);
|
|
1180
|
-
}
|
|
1181
|
-
}
|
|
1182
|
-
catch {
|
|
1183
|
-
await session.send(d.calc24.wrong);
|
|
1184
|
-
}
|
|
1185
|
-
}
|
|
1186
|
-
setupAutoStop(session, st.calc24, cfg, d.calc24.autoStop, cfg.calc24.showRank);
|
|
1187
|
-
gameStates.set(key, st);
|
|
1188
|
-
return;
|
|
1189
|
-
}
|
|
1190
|
-
if (cfg.enablePasswordLock && st.passwordLock.started) {
|
|
1191
|
-
clearGameTimer(st.passwordLock);
|
|
1192
|
-
if (!st.passwordLock.players[playerKey]) {
|
|
1193
|
-
st.passwordLock.players[playerKey] = getPlayerData(session);
|
|
1194
|
-
st.passwordLock.participants.push(playerKey);
|
|
1195
|
-
}
|
|
1196
|
-
if (content === '结束') {
|
|
1197
|
-
clearGameData(st.passwordLock);
|
|
1198
|
-
await session.send(d.passwordLock.stop);
|
|
1199
|
-
gameStates.set(key, st);
|
|
1200
|
-
return;
|
|
1201
|
-
}
|
|
1202
|
-
if (st.passwordLock.solved) {
|
|
1203
|
-
await session.send(d.passwordLock.solved);
|
|
1204
|
-
setupAutoStop(session, st.passwordLock, cfg, d.passwordLock.autoStop, cfg.passwordLock.showRank);
|
|
1205
|
-
return;
|
|
1206
|
-
}
|
|
1207
|
-
if (!/^\d{4}$/.test(content)) {
|
|
1208
|
-
await session.send(d.passwordLock.invalidPassword);
|
|
1209
|
-
setupAutoStop(session, st.passwordLock, cfg, d.passwordLock.autoStop, cfg.passwordLock.showRank);
|
|
1210
|
-
return;
|
|
1211
|
-
}
|
|
1212
|
-
st.passwordLock.playerGuess = content;
|
|
1213
|
-
st.passwordLock.guessTimes += 1;
|
|
1214
|
-
await session.send(d.passwordLock.guess.replace('{0}', content).replace('{1}', st.passwordLock.guessTimes.toString()));
|
|
1215
|
-
if (content === st.passwordLock.password) {
|
|
1216
|
-
await session.send(d.passwordLock.correct.replace('{0}', content).replace('{1}', st.passwordLock.guessTimes.toString()));
|
|
1217
|
-
st.passwordLock.players[playerKey].score += 10 - (st.passwordLock.guessTimes - 1);
|
|
1218
|
-
st.passwordLock.players[playerKey].correctCount += 1;
|
|
1219
|
-
st.passwordLock.solved = true;
|
|
1220
|
-
st.passwordLock.started = false;
|
|
1221
|
-
clearGameTimer(st.passwordLock);
|
|
1222
|
-
await session.send(d.passwordLock.gameEnd);
|
|
1223
|
-
if (cfg.passwordLock.showRank && !isPrivate(session)) {
|
|
1224
|
-
const rankText = generateRankText(st.passwordLock.players);
|
|
1225
|
-
await session.send(rankText);
|
|
1226
|
-
}
|
|
1227
|
-
clearGameData(st.passwordLock);
|
|
1228
|
-
}
|
|
1229
|
-
else {
|
|
1230
|
-
let hint = '';
|
|
1231
|
-
if (cfg.passwordLock.showHint) {
|
|
1232
|
-
hint = generatePasswordHint(st.passwordLock.password, content);
|
|
1233
|
-
}
|
|
1234
|
-
if (st.passwordLock.guessTimes >= st.passwordLock.maxGuessTimes) {
|
|
1235
|
-
await session.send(d.passwordLock.noChance.replace('{0}', st.passwordLock.password));
|
|
1236
|
-
st.passwordLock.started = false;
|
|
1237
|
-
clearGameTimer(st.passwordLock);
|
|
1238
|
-
await session.send(d.passwordLock.gameEnd);
|
|
1239
|
-
if (cfg.passwordLock.showRank && !isPrivate(session)) {
|
|
1240
|
-
const rankText = generateRankText(st.passwordLock.players);
|
|
944
|
+
const result = evaluateExpression(content);
|
|
945
|
+
if (result !== null && Math.abs(result - 24) < 0.001) {
|
|
946
|
+
await session.send(d.calc24.correct);
|
|
947
|
+
st.calc24.players[playerKey].score += 1;
|
|
948
|
+
st.calc24.players[playerKey].correctCount += 1;
|
|
949
|
+
st.calc24.solved = true;
|
|
950
|
+
st.calc24.currentRound += 1;
|
|
951
|
+
if (st.calc24.currentRound > st.calc24.totalRounds) {
|
|
952
|
+
st.calc24.started = false;
|
|
953
|
+
clearGameTimer(st.calc24);
|
|
954
|
+
await session.send(d.calc24.gameEnd);
|
|
955
|
+
if (cfg.calc24.showRank && !isPrivate(session)) {
|
|
956
|
+
const rankText = generateRankText(st.calc24.players, d.calc24.rankTitle, d.calc24.rankEmpty);
|
|
1241
957
|
await session.send(rankText);
|
|
1242
958
|
}
|
|
1243
|
-
clearGameData(st.
|
|
959
|
+
clearGameData(st.calc24);
|
|
1244
960
|
}
|
|
1245
961
|
else {
|
|
1246
|
-
await session.send(d.
|
|
1247
|
-
|
|
962
|
+
await session.send(d.calc24.roundEnd.replace('{0}', st.calc24.currentRound.toString()).replace('{1}', (st.calc24.totalRounds - st.calc24.currentRound).toString()));
|
|
963
|
+
const range = cfg.calc24.difficultyLevels[st.calc24.difficulty === '简单' ? 'easy' :
|
|
964
|
+
st.calc24.difficulty === '中等' ? 'medium' : 'hard'];
|
|
965
|
+
st.calc24.numbers = generateSolvable24Numbers(range.min, range.max);
|
|
966
|
+
st.calc24.solved = false;
|
|
967
|
+
await session.send(d.calc24.generate.replace('{0}', st.calc24.currentRound.toString())
|
|
968
|
+
.replace('{1}', st.calc24.difficulty)
|
|
969
|
+
.replace('{2}', st.calc24.numbers.join('、')));
|
|
1248
970
|
}
|
|
1249
971
|
}
|
|
1250
|
-
|
|
972
|
+
else {
|
|
973
|
+
await session.send(d.calc24.wrong);
|
|
974
|
+
}
|
|
975
|
+
setupAutoStop(session, st.calc24, cfg, 'calc24', d.calc24.autoStop, cfg.calc24.showRank, d.calc24.rankTitle, d.calc24.rankEmpty);
|
|
1251
976
|
gameStates.set(key, st);
|
|
1252
977
|
return;
|
|
1253
978
|
}
|
|
@@ -1273,10 +998,10 @@ function apply(ctx, cfg) {
|
|
|
1273
998
|
await session.send(d.guessNumber.start.replace('{0}', st.guessNumber.totalRounds.toString()));
|
|
1274
999
|
await session.send(`猜数字范围:${st.guessNumber.currentMin} - ${st.guessNumber.currentMax}`);
|
|
1275
1000
|
gameStates.set(key, st);
|
|
1276
|
-
setupAutoStop(session, st.guessNumber, cfg, d.guessNumber.autoStop, cfg.guessNumber.showRank);
|
|
1001
|
+
setupAutoStop(session, st.guessNumber, cfg, 'guessNumber', d.guessNumber.autoStop, cfg.guessNumber.showRank, d.guessNumber.rankTitle, d.guessNumber.rankEmpty);
|
|
1277
1002
|
}
|
|
1278
1003
|
else if (action === '结束') {
|
|
1279
|
-
clearGameData(st.guessNumber);
|
|
1004
|
+
clearGameData(st.guessNumber, cfg.guessNumber.showRank && !isPrivate(session), session, d.guessNumber.rankTitle, d.guessNumber.rankEmpty);
|
|
1280
1005
|
await session.send(d.guessNumber.stop);
|
|
1281
1006
|
gameStates.set(key, st);
|
|
1282
1007
|
}
|
|
@@ -1297,7 +1022,7 @@ function apply(ctx, cfg) {
|
|
|
1297
1022
|
}
|
|
1298
1023
|
if (action === '开始') {
|
|
1299
1024
|
st.wzHero.started = true;
|
|
1300
|
-
st.wzHero.difficulty =
|
|
1025
|
+
st.wzHero.difficulty = cfg.wzHero.defaultDifficulty;
|
|
1301
1026
|
st.wzHero.currentRound = 1;
|
|
1302
1027
|
try {
|
|
1303
1028
|
const r = await axios_1.default.get('https://api.suol.cc/v1/game_wz.php', {
|
|
@@ -1307,7 +1032,7 @@ function apply(ctx, cfg) {
|
|
|
1307
1032
|
const dt = r.data;
|
|
1308
1033
|
let text = `${dt.message || ''}\n${dt.hint || ''}\n剩余提示次数:${dt.remaining_hints}\n${dt.guide || ''}`;
|
|
1309
1034
|
text = text.replace(/\\n/g, '\n');
|
|
1310
|
-
await session.send(d.wzHero.start.replace('{0}', st.wzHero.totalRounds.toString()));
|
|
1035
|
+
await session.send(d.wzHero.start.replace('{0}', st.wzHero.totalRounds.toString()).replace('{1}', st.wzHero.difficulty));
|
|
1311
1036
|
await session.send(text);
|
|
1312
1037
|
st.wzHero.currentAnswer = dt.hint || '';
|
|
1313
1038
|
}
|
|
@@ -1315,10 +1040,10 @@ function apply(ctx, cfg) {
|
|
|
1315
1040
|
await session.send(d.wzHero.apiError);
|
|
1316
1041
|
}
|
|
1317
1042
|
gameStates.set(key, st);
|
|
1318
|
-
setupAutoStop(session, st.wzHero, cfg, d.wzHero.autoStop, cfg.wzHero.showRank);
|
|
1043
|
+
setupAutoStop(session, st.wzHero, cfg, 'wzHero', d.wzHero.autoStop, cfg.wzHero.showRank, d.wzHero.rankTitle, d.wzHero.rankEmpty);
|
|
1319
1044
|
}
|
|
1320
1045
|
else if (action === '结束') {
|
|
1321
|
-
clearGameData(st.wzHero);
|
|
1046
|
+
clearGameData(st.wzHero, cfg.wzHero.showRank && !isPrivate(session), session, d.wzHero.rankTitle, d.wzHero.rankEmpty);
|
|
1322
1047
|
await session.send(d.wzHero.stop);
|
|
1323
1048
|
gameStates.set(key, st);
|
|
1324
1049
|
}
|
|
@@ -1351,7 +1076,7 @@ function apply(ctx, cfg) {
|
|
|
1351
1076
|
st.chengyuImage.currentPage = dt.data.question.page;
|
|
1352
1077
|
st.chengyuImage.options = dt.data.question.options;
|
|
1353
1078
|
st.chengyuImage.answer = dt.data.question.answer || '';
|
|
1354
|
-
await session.send(d.chengyuImage.start.replace('{0}', st.chengyuImage.totalRounds.toString()));
|
|
1079
|
+
await session.send(d.chengyuImage.start.replace('{0}', st.chengyuImage.totalRounds.toString()).replace('{1}', cfg.chengyuImage.defaultHintLevel.toString()));
|
|
1355
1080
|
await session.send(`请从选项中选择4个字组成成语\n选项:${dt.data.question.options.join('、')}`);
|
|
1356
1081
|
await session.send(koishi_1.segment.image(dt.data.question.image_url));
|
|
1357
1082
|
}
|
|
@@ -1363,10 +1088,10 @@ function apply(ctx, cfg) {
|
|
|
1363
1088
|
await session.send(d.chengyuImage.apiError);
|
|
1364
1089
|
}
|
|
1365
1090
|
gameStates.set(key, st);
|
|
1366
|
-
setupAutoStop(session, st.chengyuImage, cfg, d.chengyuImage.autoStop, cfg.chengyuImage.showRank);
|
|
1091
|
+
setupAutoStop(session, st.chengyuImage, cfg, 'chengyuImage', d.chengyuImage.autoStop, cfg.chengyuImage.showRank, d.chengyuImage.rankTitle, d.chengyuImage.rankEmpty);
|
|
1367
1092
|
}
|
|
1368
1093
|
else if (action === '结束') {
|
|
1369
|
-
clearGameData(st.chengyuImage);
|
|
1094
|
+
clearGameData(st.chengyuImage, cfg.chengyuImage.showRank && !isPrivate(session), session, d.chengyuImage.rankTitle, d.chengyuImage.rankEmpty);
|
|
1370
1095
|
await session.send(d.chengyuImage.stop);
|
|
1371
1096
|
gameStates.set(key, st);
|
|
1372
1097
|
}
|
|
@@ -1393,10 +1118,10 @@ function apply(ctx, cfg) {
|
|
|
1393
1118
|
await session.send(d.chengyuJielong.start.replace('{0}', st.chengyuJielong.totalRounds.toString()));
|
|
1394
1119
|
gameStates.set(key, st);
|
|
1395
1120
|
scheduleAutoPlay(session, key, st);
|
|
1396
|
-
setupAutoStop(session, st.chengyuJielong, cfg, d.chengyuJielong.autoStop, cfg.chengyuJielong.showRank);
|
|
1121
|
+
setupAutoStop(session, st.chengyuJielong, cfg, 'chengyuJielong', d.chengyuJielong.autoStop, cfg.chengyuJielong.showRank, d.chengyuJielong.rankTitle, d.chengyuJielong.rankEmpty);
|
|
1397
1122
|
}
|
|
1398
1123
|
else if (action === '结束') {
|
|
1399
|
-
clearGameData(st.chengyuJielong);
|
|
1124
|
+
clearGameData(st.chengyuJielong, cfg.chengyuJielong.showRank && !isPrivate(session), session, d.chengyuJielong.rankTitle, d.chengyuJielong.rankEmpty);
|
|
1400
1125
|
await session.send(d.chengyuJielong.stop);
|
|
1401
1126
|
gameStates.set(key, st);
|
|
1402
1127
|
}
|
|
@@ -1404,60 +1129,6 @@ function apply(ctx, cfg) {
|
|
|
1404
1129
|
await session.send(d.chengyuJielong.joinUsage);
|
|
1405
1130
|
}
|
|
1406
1131
|
});
|
|
1407
|
-
ctx.command('掷骰子 <action>', '掷骰子比大小')
|
|
1408
|
-
.action(async (argv, action) => {
|
|
1409
|
-
const session = argv.session;
|
|
1410
|
-
if (!session)
|
|
1411
|
-
return;
|
|
1412
|
-
const key = getSessionKey(session);
|
|
1413
|
-
const st = gameStates.get(key) || initState(key, cfg);
|
|
1414
|
-
if (checkGameRunning(st, 'dice')) {
|
|
1415
|
-
await session.send(d.common.gameRunning);
|
|
1416
|
-
return;
|
|
1417
|
-
}
|
|
1418
|
-
if (action === '开始') {
|
|
1419
|
-
st.dice.started = true;
|
|
1420
|
-
st.dice.currentRound = 1;
|
|
1421
|
-
await session.send(d.dice.start.replace('{0}', st.dice.totalRounds.toString()));
|
|
1422
|
-
gameStates.set(key, st);
|
|
1423
|
-
setupAutoStop(session, st.dice, cfg, d.dice.autoStop, cfg.dice.showRank);
|
|
1424
|
-
}
|
|
1425
|
-
else if (action === '结束') {
|
|
1426
|
-
clearGameData(st.dice);
|
|
1427
|
-
await session.send(d.dice.stop);
|
|
1428
|
-
gameStates.set(key, st);
|
|
1429
|
-
}
|
|
1430
|
-
else {
|
|
1431
|
-
await session.send('请输入:掷骰子 开始 或 掷骰子 结束');
|
|
1432
|
-
}
|
|
1433
|
-
});
|
|
1434
|
-
ctx.command('石头剪刀布 <action>', '石头剪刀布')
|
|
1435
|
-
.action(async (argv, action) => {
|
|
1436
|
-
const session = argv.session;
|
|
1437
|
-
if (!session)
|
|
1438
|
-
return;
|
|
1439
|
-
const key = getSessionKey(session);
|
|
1440
|
-
const st = gameStates.get(key) || initState(key, cfg);
|
|
1441
|
-
if (checkGameRunning(st, 'rps')) {
|
|
1442
|
-
await session.send(d.common.gameRunning);
|
|
1443
|
-
return;
|
|
1444
|
-
}
|
|
1445
|
-
if (action === '开始') {
|
|
1446
|
-
st.rps.started = true;
|
|
1447
|
-
st.rps.currentRound = 1;
|
|
1448
|
-
await session.send(d.rps.start.replace('{0}', st.rps.totalRounds.toString()));
|
|
1449
|
-
gameStates.set(key, st);
|
|
1450
|
-
setupAutoStop(session, st.rps, cfg, d.rps.autoStop, cfg.rps.showRank);
|
|
1451
|
-
}
|
|
1452
|
-
else if (action === '结束') {
|
|
1453
|
-
clearGameData(st.rps);
|
|
1454
|
-
await session.send(d.rps.stop);
|
|
1455
|
-
gameStates.set(key, st);
|
|
1456
|
-
}
|
|
1457
|
-
else {
|
|
1458
|
-
await session.send('请输入:石头剪刀布 开始 或 石头剪刀布 结束');
|
|
1459
|
-
}
|
|
1460
|
-
});
|
|
1461
1132
|
ctx.command('算24点 <action>', '算24点游戏')
|
|
1462
1133
|
.action(async (argv, action) => {
|
|
1463
1134
|
const session = argv.session;
|
|
@@ -1470,26 +1141,22 @@ function apply(ctx, cfg) {
|
|
|
1470
1141
|
return;
|
|
1471
1142
|
}
|
|
1472
1143
|
if (action === '开始') {
|
|
1144
|
+
st.calc24.difficulty = cfg.calc24.defaultDifficulty;
|
|
1473
1145
|
st.calc24.started = true;
|
|
1474
1146
|
st.calc24.currentRound = 1;
|
|
1475
1147
|
st.calc24.solved = false;
|
|
1476
|
-
st.calc24.
|
|
1477
|
-
|
|
1478
|
-
|
|
1479
|
-
}
|
|
1480
|
-
await session.send(d.calc24.
|
|
1481
|
-
|
|
1482
|
-
|
|
1483
|
-
await session.send(d.calc24.impossible);
|
|
1484
|
-
}
|
|
1485
|
-
else {
|
|
1486
|
-
await session.send(d.calc24.generate.replace('{0}', st.calc24.currentRound.toString()).replace('{1}', st.calc24.numbers.join('、')));
|
|
1487
|
-
}
|
|
1148
|
+
const range = cfg.calc24.difficultyLevels[st.calc24.difficulty === '简单' ? 'easy' :
|
|
1149
|
+
st.calc24.difficulty === '中等' ? 'medium' : 'hard'];
|
|
1150
|
+
st.calc24.numbers = generateSolvable24Numbers(range.min, range.max);
|
|
1151
|
+
await session.send(d.calc24.start.replace('{0}', st.calc24.totalRounds.toString()).replace('{1}', st.calc24.difficulty));
|
|
1152
|
+
await session.send(d.calc24.generate.replace('{0}', st.calc24.currentRound.toString())
|
|
1153
|
+
.replace('{1}', st.calc24.difficulty)
|
|
1154
|
+
.replace('{2}', st.calc24.numbers.join('、')));
|
|
1488
1155
|
gameStates.set(key, st);
|
|
1489
|
-
setupAutoStop(session, st.calc24, cfg, d.calc24.autoStop, cfg.calc24.showRank);
|
|
1156
|
+
setupAutoStop(session, st.calc24, cfg, 'calc24', d.calc24.autoStop, cfg.calc24.showRank, d.calc24.rankTitle, d.calc24.rankEmpty);
|
|
1490
1157
|
}
|
|
1491
1158
|
else if (action === '结束') {
|
|
1492
|
-
clearGameData(st.calc24);
|
|
1159
|
+
clearGameData(st.calc24, cfg.calc24.showRank && !isPrivate(session), session, d.calc24.rankTitle, d.calc24.rankEmpty);
|
|
1493
1160
|
await session.send(d.calc24.stop);
|
|
1494
1161
|
gameStates.set(key, st);
|
|
1495
1162
|
}
|
|
@@ -1497,34 +1164,4 @@ function apply(ctx, cfg) {
|
|
|
1497
1164
|
await session.send('请输入:算24点 开始 或 算24点 结束');
|
|
1498
1165
|
}
|
|
1499
1166
|
});
|
|
1500
|
-
ctx.command('猜密码 <action>', '猜密码游戏')
|
|
1501
|
-
.action(async (argv, action) => {
|
|
1502
|
-
const session = argv.session;
|
|
1503
|
-
if (!session)
|
|
1504
|
-
return;
|
|
1505
|
-
const key = getSessionKey(session);
|
|
1506
|
-
const st = gameStates.get(key) || initState(key, cfg);
|
|
1507
|
-
if (checkGameRunning(st, 'passwordLock')) {
|
|
1508
|
-
await session.send(d.common.gameRunning);
|
|
1509
|
-
return;
|
|
1510
|
-
}
|
|
1511
|
-
if (action === '开始') {
|
|
1512
|
-
st.passwordLock.started = true;
|
|
1513
|
-
st.passwordLock.currentRound = 1;
|
|
1514
|
-
st.passwordLock.guessTimes = 0;
|
|
1515
|
-
st.passwordLock.solved = false;
|
|
1516
|
-
st.passwordLock.password = koishi_1.Random.int(1000, 9999).toString();
|
|
1517
|
-
await session.send(d.passwordLock.start.replace('{0}', st.passwordLock.maxGuessTimes.toString()));
|
|
1518
|
-
gameStates.set(key, st);
|
|
1519
|
-
setupAutoStop(session, st.passwordLock, cfg, d.passwordLock.autoStop, cfg.passwordLock.showRank);
|
|
1520
|
-
}
|
|
1521
|
-
else if (action === '结束') {
|
|
1522
|
-
clearGameData(st.passwordLock);
|
|
1523
|
-
await session.send(d.passwordLock.stop);
|
|
1524
|
-
gameStates.set(key, st);
|
|
1525
|
-
}
|
|
1526
|
-
else {
|
|
1527
|
-
await session.send('请输入:猜密码 开始 或 猜密码 结束');
|
|
1528
|
-
}
|
|
1529
|
-
});
|
|
1530
1167
|
}
|