@zhin.js/plugin-word-riddle 1.0.0 → 1.0.2
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/commands/riddle/[action:string=].ts +15 -0
- package/lib/engine.d.ts +0 -1
- package/lib/game-flow.d.ts +7 -8
- package/lib/game-flow.js +23 -16
- package/lib/game-flow.js.map +1 -1
- package/lib/index.d.ts +8 -2
- package/lib/index.js +8 -25
- package/lib/index.js.map +1 -1
- package/lib/memory-db.d.ts +6 -0
- package/lib/memory-db.js +18 -0
- package/lib/memory-db.js.map +1 -0
- package/lib/models.d.ts +5 -4
- package/lib/models.js +2 -2
- package/lib/models.js.map +1 -1
- package/lib/riddle-command.d.ts +4 -3
- package/lib/riddle-command.js +6 -2
- package/lib/riddle-command.js.map +1 -1
- package/lib/riddle-provider.d.ts +0 -1
- package/lib/riddle-provider.js +2 -1
- package/lib/riddle-provider.js.map +1 -1
- package/lib/riddles-catalog.d.ts +2 -0
- package/lib/riddles-catalog.js +2 -0
- package/lib/riddles-catalog.js.map +1 -0
- package/lib/runtime-store.d.ts +6 -0
- package/lib/runtime-store.js +7 -0
- package/lib/runtime-store.js.map +1 -0
- package/lib/session-service.d.ts +2 -4
- package/lib/session-service.js +4 -10
- package/lib/session-service.js.map +1 -1
- package/lib/view.d.ts +2 -3
- package/lib/view.js +6 -4
- package/lib/view.js.map +1 -1
- package/middlewares/riddle-alias.ts +18 -0
- package/middlewares/riddle-text.ts +75 -0
- package/package.json +45 -10
- package/plugin.ts +64 -0
- package/schema.json +6 -0
- package/src/game-flow.ts +28 -24
- package/src/index.ts +9 -32
- package/src/memory-db.ts +22 -0
- package/src/models.ts +7 -4
- package/src/riddle-command.ts +14 -5
- package/src/riddle-provider.ts +2 -1
- package/src/riddles-catalog.ts +8 -0
- package/src/runtime-store.ts +9 -0
- package/src/session-service.ts +5 -10
- package/src/view.ts +7 -4
- package/lib/commands.d.ts +0 -6
- package/lib/commands.d.ts.map +0 -1
- package/lib/commands.js +0 -94
- package/lib/commands.js.map +0 -1
- package/lib/data/riddles.d.ts +0 -3
- package/lib/data/riddles.d.ts.map +0 -1
- package/lib/data/riddles.js +0 -2
- package/lib/data/riddles.js.map +0 -1
- package/lib/engine.d.ts.map +0 -1
- package/lib/game-flow.d.ts.map +0 -1
- package/lib/hub-register.d.ts +0 -5
- package/lib/hub-register.d.ts.map +0 -1
- package/lib/hub-register.js +0 -32
- package/lib/hub-register.js.map +0 -1
- package/lib/index.d.ts.map +0 -1
- package/lib/models.d.ts.map +0 -1
- package/lib/riddle-command.d.ts.map +0 -1
- package/lib/riddle-provider.d.ts.map +0 -1
- package/lib/session-service.d.ts.map +0 -1
- package/lib/view.d.ts.map +0 -1
- package/plugin.yml +0 -2
- package/src/commands.ts +0 -112
- package/src/data/riddles.ts +0 -8
- package/src/hub-register.ts +0 -34
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { defineCommand } from '@zhin.js/command';
|
|
2
|
+
import { messageFromCommandInput, normalizeRiddleAction } from '@zhin.js/game-kit';
|
|
3
|
+
import { RIDDLE_HELP, runRiddleCommandText } from '../../src/riddle-command.js';
|
|
4
|
+
import { resolveGameServices } from '../../src/runtime-store.js';
|
|
5
|
+
|
|
6
|
+
export default defineCommand({
|
|
7
|
+
description: 'Word Riddle',
|
|
8
|
+
async execute({ params, input, use, owner }) {
|
|
9
|
+
const action = normalizeRiddleAction(String(params.action ?? ''));
|
|
10
|
+
if (!action || action === 'help') return RIDDLE_HELP;
|
|
11
|
+
const services = resolveGameServices({ use, owner });
|
|
12
|
+
const message = messageFromCommandInput(input);
|
|
13
|
+
return runRiddleCommandText(services, message, action);
|
|
14
|
+
},
|
|
15
|
+
});
|
package/lib/engine.d.ts
CHANGED
|
@@ -6,4 +6,3 @@ export declare function answersFor(entry: RiddleEntry): string[];
|
|
|
6
6
|
export declare function checkAnswer(entry: RiddleEntry, raw: string): boolean;
|
|
7
7
|
export declare function typeLabel(type: RiddleType): string;
|
|
8
8
|
export { getRiddleById };
|
|
9
|
-
//# sourceMappingURL=engine.d.ts.map
|
package/lib/game-flow.d.ts
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
import type { Message, Plugin } from 'zhin.js';
|
|
1
|
+
import type { Message, Plugin } from '@zhin.js/core';
|
|
2
2
|
import { RIDDLE_PREFIX } from './engine.js';
|
|
3
3
|
import type { RiddleSessionRow } from './models.js';
|
|
4
|
-
import type { RiddleType } from './
|
|
4
|
+
import type { RiddleType } from './riddles-catalog.js';
|
|
5
5
|
import { type SessionService } from './session-service.js';
|
|
6
|
-
export declare function sendOrEditView(plugin: Plugin, services: SessionService, message: Message<any>, session: RiddleSessionRow, eventLines?: string[]): Promise<void>;
|
|
7
|
-
export declare function startGame(plugin: Plugin, services: SessionService, message: Message<any>, mode: RiddleType): Promise<string | undefined>;
|
|
8
|
-
export declare function continueGame(plugin: Plugin, services: SessionService, message: Message<any>): Promise<string>;
|
|
9
|
-
export declare function processAnswerText(plugin: Plugin, services: SessionService, message: Message<any>, raw: string): Promise<string | null>;
|
|
10
|
-
export declare function handleChoice(plugin: Plugin, services: SessionService, message: Message<any>, sessionId: string, choiceId: string): Promise<string | null>;
|
|
6
|
+
export declare function sendOrEditView(plugin: Plugin | null, services: SessionService, message: Message<any>, session: RiddleSessionRow, eventLines?: string[]): Promise<string | void>;
|
|
7
|
+
export declare function startGame(plugin: Plugin | null, services: SessionService, message: Message<any>, mode: RiddleType): Promise<string | undefined>;
|
|
8
|
+
export declare function continueGame(plugin: Plugin | null, services: SessionService, message: Message<any>): Promise<string>;
|
|
9
|
+
export declare function processAnswerText(plugin: Plugin | null, services: SessionService, message: Message<any>, raw: string): Promise<string | null>;
|
|
10
|
+
export declare function handleChoice(plugin: Plugin | null, services: SessionService, message: Message<any>, sessionId: string, choiceId: string): Promise<string | null>;
|
|
11
11
|
export { RIDDLE_PREFIX };
|
|
12
|
-
//# sourceMappingURL=game-flow.d.ts.map
|
package/lib/game-flow.js
CHANGED
|
@@ -1,12 +1,17 @@
|
|
|
1
|
+
import { plainTextFromSendContent } from '@zhin.js/game-kit';
|
|
1
2
|
import { checkAnswer, getRiddleById, RIDDLE_PREFIX, typeLabel, } from './engine.js';
|
|
2
3
|
import { currentRiddleId, parseQueue, } from './session-service.js';
|
|
3
4
|
import { buildRiddleView, MAX_WRONG } from './view.js';
|
|
4
5
|
export async function sendOrEditView(plugin, services, message, session, eventLines = []) {
|
|
5
|
-
const content = buildRiddleView(session, eventLines);
|
|
6
|
+
const content = buildRiddleView(session, eventLines, message.$channel.type);
|
|
6
7
|
if (typeof content === 'string') {
|
|
8
|
+
if (!plugin)
|
|
9
|
+
return content;
|
|
7
10
|
await message.$reply?.(content);
|
|
8
11
|
return;
|
|
9
12
|
}
|
|
13
|
+
if (!plugin)
|
|
14
|
+
return plainTextFromSendContent(content);
|
|
10
15
|
const adapter = plugin.root.inject(message.$adapter);
|
|
11
16
|
if (session.board_message_id) {
|
|
12
17
|
const msgId = await adapter.editMessage({
|
|
@@ -47,14 +52,16 @@ export async function startGame(plugin, services, message, mode) {
|
|
|
47
52
|
return `本频道 ${active.player_name} 正在猜谜。`;
|
|
48
53
|
}
|
|
49
54
|
const session = await services.createSession(message, mode);
|
|
50
|
-
await sendOrEditView(plugin, services, message, session);
|
|
51
|
-
return undefined;
|
|
55
|
+
const text = await sendOrEditView(plugin, services, message, session);
|
|
56
|
+
return typeof text === 'string' ? text : undefined;
|
|
52
57
|
}
|
|
53
58
|
export async function continueGame(plugin, services, message) {
|
|
54
59
|
const session = await services.getActiveForUser(`${message.$adapter}-${message.$endpoint}-${message.$channel.type}:${message.$channel.id}`, message.$sender.id);
|
|
55
60
|
if (!session)
|
|
56
61
|
return '你没有进行中的猜谜,发送「猜谜 开始」。';
|
|
57
|
-
await sendOrEditView(plugin, services, message, session);
|
|
62
|
+
const text = await sendOrEditView(plugin, services, message, session);
|
|
63
|
+
if (typeof text === 'string')
|
|
64
|
+
return text;
|
|
58
65
|
return '已刷新猜谜界面。';
|
|
59
66
|
}
|
|
60
67
|
export async function processAnswerText(plugin, services, message, raw) {
|
|
@@ -77,26 +84,23 @@ export async function processAnswerText(plugin, services, message, raw) {
|
|
|
77
84
|
});
|
|
78
85
|
const after = await advanceQuestion(services, (await services.getById(session.id)));
|
|
79
86
|
const explain = entry.explanation ? `\n📖 ${entry.explanation}` : '';
|
|
80
|
-
await sendOrEditView(plugin, services, message, after, [
|
|
87
|
+
return (await sendOrEditView(plugin, services, message, after, [
|
|
81
88
|
`✅ 正确!答案:**${entry.answer}**${explain}`,
|
|
82
89
|
`+${10 + Math.min(streak, 5)} 分`,
|
|
83
|
-
]);
|
|
84
|
-
return null;
|
|
90
|
+
])) ?? null;
|
|
85
91
|
}
|
|
86
92
|
const wrong = session.wrong_count + 1;
|
|
87
93
|
if (wrong >= MAX_WRONG) {
|
|
88
94
|
await services.updateSession(session.id, { wrong_count: wrong, streak: 0 });
|
|
89
95
|
const after = await advanceQuestion(services, (await services.getById(session.id)));
|
|
90
|
-
await sendOrEditView(plugin, services, message, after, [
|
|
96
|
+
return (await sendOrEditView(plugin, services, message, after, [
|
|
91
97
|
`❌ 本题答案:**${entry.answer}**`,
|
|
92
98
|
'失误过多,自动下一题。',
|
|
93
|
-
]);
|
|
94
|
-
return null;
|
|
99
|
+
])) ?? null;
|
|
95
100
|
}
|
|
96
101
|
await services.updateSession(session.id, { wrong_count: wrong, streak: 0 });
|
|
97
102
|
const updated = (await services.getById(session.id));
|
|
98
|
-
await sendOrEditView(plugin, services, message, updated, ['❌ 不对,再想想!']);
|
|
99
|
-
return null;
|
|
103
|
+
return (await sendOrEditView(plugin, services, message, updated, ['❌ 不对,再想想!'])) ?? null;
|
|
100
104
|
}
|
|
101
105
|
export async function handleChoice(plugin, services, message, sessionId, choiceId) {
|
|
102
106
|
const session = await services.getById(sessionId);
|
|
@@ -122,14 +126,17 @@ export async function handleChoice(plugin, services, message, sessionId, choiceI
|
|
|
122
126
|
const hint = entry.hint ?? `答案共 ${entry.answer.length} 个字`;
|
|
123
127
|
await services.updateSession(session.id, { hints_used: session.hints_used + 1, streak: 0 });
|
|
124
128
|
const updated = (await services.getById(session.id));
|
|
125
|
-
await sendOrEditView(plugin, services, message, updated, [
|
|
126
|
-
|
|
129
|
+
return (await sendOrEditView(plugin, services, message, updated, [
|
|
130
|
+
`💡 提示:${hint}`,
|
|
131
|
+
'(连击清零)',
|
|
132
|
+
])) ?? null;
|
|
127
133
|
}
|
|
128
134
|
if (choiceId === 'skip') {
|
|
129
135
|
await services.updateSession(session.id, { streak: 0 });
|
|
130
136
|
const after = await advanceQuestion(services, session);
|
|
131
|
-
await sendOrEditView(plugin, services, message, after, [
|
|
132
|
-
|
|
137
|
+
return (await sendOrEditView(plugin, services, message, after, [
|
|
138
|
+
`⏭️ 跳过,答案:**${entry.answer}**`,
|
|
139
|
+
])) ?? null;
|
|
133
140
|
}
|
|
134
141
|
if (choiceId === 'quit') {
|
|
135
142
|
await services.updateSession(session.id, { status: 'aborted' });
|
package/lib/game-flow.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"game-flow.js","sourceRoot":"","sources":["../src/game-flow.ts"],"names":[],"mappings":"AACA,OAAO,EACL,WAAW,EACX,aAAa,EACb,aAAa,EACb,SAAS,GACV,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,eAAe,EACf,UAAU,GAEX,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEvD,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,
|
|
1
|
+
{"version":3,"file":"game-flow.js","sourceRoot":"","sources":["../src/game-flow.ts"],"names":[],"mappings":"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"}
|
package/lib/index.d.ts
CHANGED
|
@@ -1,2 +1,8 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
|
|
1
|
+
export { RIDDLE_HELP } from './riddle-command.js';
|
|
2
|
+
export { gameServicesToken, resolveGameServices } from './runtime-store.js';
|
|
3
|
+
export { createInMemoryRiddleDb, mountRiddleMemoryServices } from './memory-db.js';
|
|
4
|
+
/**
|
|
5
|
+
* 已由 plugin.ts 接线:commands/ 命令、middlewares/ 文本与选项中间件、
|
|
6
|
+
* 游戏大厅注册(registerRuntimeGame)、过期会话 cron(scheduleHostToken)、
|
|
7
|
+
* host DatabaseHost(databaseHostToken)。仍未接:interactive 按钮回调。
|
|
8
|
+
*/
|
package/lib/index.js
CHANGED
|
@@ -1,26 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
let services = null;
|
|
10
|
-
useContext('database', (dbFeature) => {
|
|
11
|
-
services = createServices(resolveGameDatabase(dbFeature));
|
|
12
|
-
logger.info(formatCompact({ 模块: '猜谜', 数据模型: '已就绪' }));
|
|
13
|
-
});
|
|
14
|
-
registerRiddleHub(() => services);
|
|
15
|
-
registerCommands(plugin, () => services);
|
|
16
|
-
registerInteractive(plugin, () => services);
|
|
17
|
-
registerTextMiddleware(plugin, () => services);
|
|
18
|
-
addCron(new Cron('0 */15 * * * *', async () => {
|
|
19
|
-
if (!services)
|
|
20
|
-
return;
|
|
21
|
-
const n = await services.abortStale(45 * 60 * 1000);
|
|
22
|
-
if (n > 0)
|
|
23
|
-
logger.debug(formatCompact({ 猜谜: '清理超时局', count: n }));
|
|
24
|
-
}));
|
|
25
|
-
logger.info(formatCompact({ 模块: '猜谜', 状态: '已加载' }));
|
|
1
|
+
export { RIDDLE_HELP } from './riddle-command.js';
|
|
2
|
+
export { gameServicesToken, resolveGameServices } from './runtime-store.js';
|
|
3
|
+
export { createInMemoryRiddleDb, mountRiddleMemoryServices } from './memory-db.js';
|
|
4
|
+
/**
|
|
5
|
+
* 已由 plugin.ts 接线:commands/ 命令、middlewares/ 文本与选项中间件、
|
|
6
|
+
* 游戏大厅注册(registerRuntimeGame)、过期会话 cron(scheduleHostToken)、
|
|
7
|
+
* host DatabaseHost(databaseHostToken)。仍未接:interactive 按钮回调。
|
|
8
|
+
*/
|
|
26
9
|
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EAAE,sBAAsB,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAEnF;;;;GAIG"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { DatabaseHost } from '@zhin.js/plugin-runtime';
|
|
2
|
+
import { type RiddleDatabase, type SessionService } from './session-service.js';
|
|
3
|
+
/** In-memory word_riddle_sessions for Plugin Runtime slice-2 (no DatabaseFeature). */
|
|
4
|
+
export declare function createInMemoryRiddleDb(): RiddleDatabase;
|
|
5
|
+
export declare function mountRiddleMemoryServices(): SessionService;
|
|
6
|
+
export declare function mountRiddleHostServices(host: DatabaseHost): SessionService;
|
package/lib/memory-db.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { createHostGameDb, createInMemoryGameDb } from '@zhin.js/game-kit';
|
|
2
|
+
import { defineHostTables } from './models.js';
|
|
3
|
+
import { createServices } from './session-service.js';
|
|
4
|
+
const RIDDLE_TABLES = ['word_riddle_sessions'];
|
|
5
|
+
/** In-memory word_riddle_sessions for Plugin Runtime slice-2 (no DatabaseFeature). */
|
|
6
|
+
export function createInMemoryRiddleDb() {
|
|
7
|
+
return createInMemoryGameDb(RIDDLE_TABLES);
|
|
8
|
+
}
|
|
9
|
+
export function mountRiddleMemoryServices() {
|
|
10
|
+
const services = createServices(createInMemoryRiddleDb());
|
|
11
|
+
return services;
|
|
12
|
+
}
|
|
13
|
+
export function mountRiddleHostServices(host) {
|
|
14
|
+
defineHostTables(host);
|
|
15
|
+
const services = createServices(createHostGameDb(host, RIDDLE_TABLES));
|
|
16
|
+
return services;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=memory-db.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-db.js","sourceRoot":"","sources":["../src/memory-db.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAE3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,cAAc,EAA4C,MAAM,sBAAsB,CAAC;AAEhG,MAAM,aAAa,GAAG,CAAC,sBAAsB,CAAU,CAAC;AAExD,sFAAsF;AACtF,MAAM,UAAU,sBAAsB;IACpC,OAAO,oBAAoB,CAAC,aAAa,CAA8B,CAAC;AAC1E,CAAC;AAED,MAAM,UAAU,yBAAyB;IACvC,MAAM,QAAQ,GAAG,cAAc,CAAC,sBAAsB,EAAE,CAAC,CAAC;IAC1D,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,IAAkB;IACxD,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACvB,MAAM,QAAQ,GAAG,cAAc,CAAC,gBAAgB,CAAC,IAAI,EAAE,aAAa,CAA8B,CAAC,CAAC;IACpG,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
package/lib/models.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type { Models
|
|
1
|
+
import type { Models } from '@zhin.js/core';
|
|
2
2
|
export type RiddleSessionStatus = 'active' | 'completed' | 'aborted';
|
|
3
|
-
declare module 'zhin.js' {
|
|
3
|
+
declare module '@zhin.js/core' {
|
|
4
4
|
interface Models {
|
|
5
5
|
word_riddle_sessions: {
|
|
6
6
|
id: string;
|
|
@@ -27,5 +27,6 @@ declare module 'zhin.js' {
|
|
|
27
27
|
}
|
|
28
28
|
}
|
|
29
29
|
export type RiddleSessionRow = Models['word_riddle_sessions'];
|
|
30
|
-
export declare function
|
|
31
|
-
|
|
30
|
+
export declare function defineHostTables(db: {
|
|
31
|
+
define: (name: string, definition: Record<string, unknown>) => void;
|
|
32
|
+
}): void;
|
package/lib/models.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export function
|
|
2
|
-
|
|
1
|
+
export function defineHostTables(db) {
|
|
2
|
+
db.define('word_riddle_sessions', {
|
|
3
3
|
id: { type: 'text', primary: true },
|
|
4
4
|
adapter: { type: 'text', nullable: false },
|
|
5
5
|
endpoint: { type: 'text', nullable: false },
|
package/lib/models.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"models.js","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"models.js","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"AAkCA,MAAM,UAAU,gBAAgB,CAC9B,EAA2E;IAE3E,EAAE,CAAC,MAAM,CAAC,sBAAsB,EAAE;QAChC,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE;QACnC,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE;QAC1C,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE;QAC3C,YAAY,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE;QAC/C,UAAU,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE;QAC7C,WAAW,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE;QAC9C,SAAS,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE;QAC5C,WAAW,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE;QAC1C,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;QACvC,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE;QACtC,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE;QACtC,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE;QACtC,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE;QACvC,WAAW,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE;QAC5C,UAAU,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE;QAC3C,WAAW,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE;QAC5C,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE;QAC3C,gBAAgB,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE;QAC/C,UAAU,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE;QAC3C,UAAU,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE;KAC5C,CAAC,CAAC;AACL,CAAC"}
|
package/lib/riddle-command.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import type { Message, Plugin } from 'zhin.js';
|
|
1
|
+
import type { Message, Plugin } from '@zhin.js/core';
|
|
2
2
|
import type { SessionService } from './session-service.js';
|
|
3
3
|
export declare const RIDDLE_HELP: string;
|
|
4
|
-
export declare function runRiddleCommand(plugin: Plugin, services: SessionService, message: Message<any>, action: string): Promise<string | undefined>;
|
|
5
|
-
|
|
4
|
+
export declare function runRiddleCommand(plugin: Plugin | null, services: SessionService, message: Message<any>, action: string): Promise<string | undefined>;
|
|
5
|
+
/** Plugin Runtime / smoke: text-only, no Adapter.editMessage. */
|
|
6
|
+
export declare function runRiddleCommandText(services: SessionService, message: Message<any>, action: string): Promise<string>;
|
package/lib/riddle-command.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { channelKey } from '@zhin.js/game-
|
|
1
|
+
import { channelKey } from '@zhin.js/game-kit';
|
|
2
2
|
import { continueGame, startGame } from './game-flow.js';
|
|
3
|
-
import { riddleCount } from './
|
|
3
|
+
import { riddleCount } from './riddles-catalog.js';
|
|
4
4
|
import { typeLabel } from './engine.js';
|
|
5
5
|
const counts = riddleCount();
|
|
6
6
|
export const RIDDLE_HELP = [
|
|
@@ -53,4 +53,8 @@ export async function runRiddleCommand(plugin, services, message, action) {
|
|
|
53
53
|
}
|
|
54
54
|
return `未知子命令:${action}\n\n${RIDDLE_HELP}`;
|
|
55
55
|
}
|
|
56
|
+
/** Plugin Runtime / smoke: text-only, no Adapter.editMessage. */
|
|
57
|
+
export async function runRiddleCommandText(services, message, action) {
|
|
58
|
+
return (await runRiddleCommand(null, services, message, action)) ?? '';
|
|
59
|
+
}
|
|
56
60
|
//# sourceMappingURL=riddle-command.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"riddle-command.js","sourceRoot":"","sources":["../src/riddle-command.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"riddle-command.js","sourceRoot":"","sources":["../src/riddle-command.ts"],"names":[],"mappings":"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"}
|
package/lib/riddle-provider.d.ts
CHANGED
|
@@ -18,4 +18,3 @@ export declare function riddleCount(): {
|
|
|
18
18
|
/** 每局随机抽题数量(避免把整库写入 session queue) */
|
|
19
19
|
export declare const QUESTIONS_PER_ROUND = 10;
|
|
20
20
|
export declare function pickRoundQueue(type: RiddleType, count?: number): RiddleEntry[];
|
|
21
|
-
//# sourceMappingURL=riddle-provider.d.ts.map
|
package/lib/riddle-provider.js
CHANGED
|
@@ -7,6 +7,7 @@ import { readFileSync } from 'node:fs';
|
|
|
7
7
|
import { dirname, join } from 'node:path';
|
|
8
8
|
import { fileURLToPath } from 'node:url';
|
|
9
9
|
import { createRequire } from 'node:module';
|
|
10
|
+
import { secureRandomInt } from '@zhin.js/game-kit';
|
|
10
11
|
const require = createRequire(import.meta.url);
|
|
11
12
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
12
13
|
const charRiddles = JSON.parse(readFileSync(join(__dirname, 'data/char-riddles.json'), 'utf8'));
|
|
@@ -72,7 +73,7 @@ export function pickRoundQueue(type, count = QUESTIONS_PER_ROUND) {
|
|
|
72
73
|
const k = Math.min(count, n);
|
|
73
74
|
const indices = Array.from({ length: n }, (_, i) => i);
|
|
74
75
|
for (let i = 0; i < k; i++) {
|
|
75
|
-
const j = i +
|
|
76
|
+
const j = i + secureRandomInt(n - i);
|
|
76
77
|
[indices[i], indices[j]] = [indices[j], indices[i]];
|
|
77
78
|
}
|
|
78
79
|
return indices.slice(0, k).map((i) => pool[i]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"riddle-provider.js","sourceRoot":"","sources":["../src/riddle-provider.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"riddle-provider.js","sourceRoot":"","sources":["../src/riddle-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"riddles-catalog.js","sourceRoot":"","sources":["../src/riddles-catalog.ts"],"names":[],"mappings":"AACA,OAAO,EACL,aAAa,EACb,cAAc,EACd,mBAAmB,EACnB,WAAW,EACX,aAAa,GACd,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { SessionService } from './session-service.js';
|
|
2
|
+
/** Owner-scoped service consumed by discovered commands and middleware. */
|
|
3
|
+
export declare const gameServicesToken: import("@zhin.js/plugin-runtime").Token<SessionService>;
|
|
4
|
+
export declare function resolveGameServices(context: {
|
|
5
|
+
use<T>(token: typeof gameServicesToken): T;
|
|
6
|
+
}): SessionService;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { createToken } from '@zhin.js/plugin-runtime';
|
|
2
|
+
/** Owner-scoped service consumed by discovered commands and middleware. */
|
|
3
|
+
export const gameServicesToken = createToken('zhin.game.word-riddle.services');
|
|
4
|
+
export function resolveGameServices(context) {
|
|
5
|
+
return context.use(gameServicesToken);
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=runtime-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-store.js","sourceRoot":"","sources":["../src/runtime-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAGtD,2EAA2E;AAC3E,MAAM,CAAC,MAAM,iBAAiB,GAAG,WAAW,CAAiB,gCAAgC,CAAC,CAAC;AAE/F,MAAM,UAAU,mBAAmB,CAAC,OAAuD;IACzF,OAAO,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAmB,CAAC;AAC1D,CAAC"}
|
package/lib/session-service.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { Database,
|
|
2
|
-
import { type RiddleType } from './
|
|
1
|
+
import type { Database, Message, Models } from '@zhin.js/core';
|
|
2
|
+
import { type RiddleType } from './riddles-catalog.js';
|
|
3
3
|
import type { RiddleSessionRow } from './models.js';
|
|
4
4
|
export type RiddleDatabase = Database<unknown, Models, string>;
|
|
5
5
|
export declare function parseQueue(value: string | string[] | unknown): string[];
|
|
@@ -15,6 +15,4 @@ export declare class SessionService {
|
|
|
15
15
|
abortStale(idleMs: number): Promise<number>;
|
|
16
16
|
}
|
|
17
17
|
export declare function createServices(db: RiddleDatabase): SessionService;
|
|
18
|
-
export declare function resolveGameDatabase(feature: DatabaseFeature): RiddleDatabase;
|
|
19
18
|
export declare function currentRiddleId(session: RiddleSessionRow): string | null;
|
|
20
|
-
//# sourceMappingURL=session-service.d.ts.map
|
package/lib/session-service.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { channelKey, generateSessionId } from '@zhin.js/game-
|
|
2
|
-
import { pickRoundQueue } from './
|
|
1
|
+
import { channelKey, generateSessionId, boardMessageMatches } from '@zhin.js/game-kit';
|
|
2
|
+
import { pickRoundQueue } from './riddles-catalog.js';
|
|
3
3
|
function getModel(db) {
|
|
4
4
|
const model = db.models.get('word_riddle_sessions');
|
|
5
5
|
if (!model)
|
|
@@ -40,12 +40,9 @@ export class SessionService {
|
|
|
40
40
|
async getActiveByBoardMessageId(messageId) {
|
|
41
41
|
if (!messageId)
|
|
42
42
|
return null;
|
|
43
|
-
const rows = await getModel(this.db).findAll({
|
|
43
|
+
const rows = await getModel(this.db).findAll({});
|
|
44
44
|
for (const row of rows) {
|
|
45
|
-
|
|
46
|
-
if (!stored)
|
|
47
|
-
continue;
|
|
48
|
-
if (stored === messageId || stored.endsWith(`:${messageId}`))
|
|
45
|
+
if (boardMessageMatches(row.board_message_id ?? '', messageId))
|
|
49
46
|
return row;
|
|
50
47
|
}
|
|
51
48
|
return null;
|
|
@@ -98,9 +95,6 @@ export class SessionService {
|
|
|
98
95
|
export function createServices(db) {
|
|
99
96
|
return new SessionService(db);
|
|
100
97
|
}
|
|
101
|
-
export function resolveGameDatabase(feature) {
|
|
102
|
-
return feature.db;
|
|
103
|
-
}
|
|
104
98
|
export function currentRiddleId(session) {
|
|
105
99
|
const queue = parseQueue(session.queue);
|
|
106
100
|
return queue[session.index] ?? null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-service.js","sourceRoot":"","sources":["../src/session-service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"session-service.js","sourceRoot":"","sources":["../src/session-service.ts"],"names":[],"mappings":"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"}
|
package/lib/view.d.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import type { SendContent } from 'zhin.js';
|
|
1
|
+
import type { SendContent } from '@zhin.js/core';
|
|
2
2
|
import type { RiddleSessionRow } from './models.js';
|
|
3
3
|
declare const MAX_WRONG = 3;
|
|
4
|
-
export declare function buildRiddleView(session: RiddleSessionRow, eventLines?: string[]): SendContent | string;
|
|
4
|
+
export declare function buildRiddleView(session: RiddleSessionRow, eventLines?: string[], channelType?: string): SendContent | string;
|
|
5
5
|
export { MAX_WRONG };
|
|
6
|
-
//# sourceMappingURL=view.d.ts.map
|
package/lib/view.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { buildChoiceKeyboard } from '@zhin.js/game-
|
|
1
|
+
import { buildChoiceKeyboard } from '@zhin.js/game-kit';
|
|
2
2
|
import { getRiddleById, RIDDLE_PREFIX, typeLabel } from './engine.js';
|
|
3
3
|
import { currentRiddleId, parseQueue } from './session-service.js';
|
|
4
4
|
const MAX_WRONG = 3;
|
|
5
|
-
export function buildRiddleView(session, eventLines = []) {
|
|
5
|
+
export function buildRiddleView(session, eventLines = [], channelType) {
|
|
6
6
|
const queue = parseQueue(session.queue);
|
|
7
7
|
const terminal = session.status !== 'active';
|
|
8
8
|
const riddleId = currentRiddleId(session);
|
|
@@ -28,8 +28,8 @@ export function buildRiddleView(session, eventLines = []) {
|
|
|
28
28
|
return '题目加载失败,请重新开始。';
|
|
29
29
|
const choices = terminal
|
|
30
30
|
? [
|
|
31
|
-
{ id: 'restart_char', label: '🔤 再来字谜', style: 'primary' },
|
|
32
|
-
{ id: 'restart_idiom', label: '📜 再来成语', style: 'primary' },
|
|
31
|
+
{ id: 'restart_char', label: '🔤 再来字谜', style: 'primary', keepEnabledWhenTerminal: true },
|
|
32
|
+
{ id: 'restart_idiom', label: '📜 再来成语', style: 'primary', keepEnabledWhenTerminal: true },
|
|
33
33
|
]
|
|
34
34
|
: [
|
|
35
35
|
{ id: 'hint', label: '💡 提示', style: 'secondary' },
|
|
@@ -44,6 +44,8 @@ export function buildRiddleView(session, eventLines = []) {
|
|
|
44
44
|
terminal,
|
|
45
45
|
buttonsPerRow: terminal ? 2 : 3,
|
|
46
46
|
fallbackHint: '回复答案,或 1提示 2跳过 3结束',
|
|
47
|
+
interactionProfile: terminal ? 'terminal' : 'gameplay',
|
|
48
|
+
channelType,
|
|
47
49
|
});
|
|
48
50
|
}
|
|
49
51
|
export { MAX_WRONG };
|
package/lib/view.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"view.js","sourceRoot":"","sources":["../src/view.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"view.js","sourceRoot":"","sources":["../src/view.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import {
|
|
2
|
+
defineGameCommandAliasMiddleware,
|
|
3
|
+
messageFromCommandInput,
|
|
4
|
+
normalizeRiddleAction,
|
|
5
|
+
} from '@zhin.js/game-kit';
|
|
6
|
+
import { RIDDLE_HELP, runRiddleCommandText } from '../src/riddle-command.js';
|
|
7
|
+
import { resolveGameServices } from '../src/runtime-store.js';
|
|
8
|
+
|
|
9
|
+
export default defineGameCommandAliasMiddleware({
|
|
10
|
+
aliases: ['猜谜', 'riddle'],
|
|
11
|
+
async run(action, input, context) {
|
|
12
|
+
const normalized = normalizeRiddleAction(String(action ?? ''));
|
|
13
|
+
if (!normalized || normalized === 'help') return RIDDLE_HELP;
|
|
14
|
+
const services = resolveGameServices(context);
|
|
15
|
+
const message = messageFromCommandInput(input);
|
|
16
|
+
return runRiddleCommandText(services, message, normalized);
|
|
17
|
+
},
|
|
18
|
+
});
|