koishi-plugin-ciyi 1.2.5 → 1.2.7
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 +9 -2
- package/lib/index.js +52 -25
- package/package.json +8 -3
- package/readme.md +1 -1
package/lib/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { Context, Schema } from "koishi";
|
|
1
|
+
import { Context, Schema, Session } from "koishi";
|
|
2
2
|
import { History } from "./view";
|
|
3
3
|
export declare const name = "ciyi";
|
|
4
|
-
export declare const usage = "
|
|
4
|
+
export declare const usage = "## \u4F7F\u7528\n\n\u8BBE\u7F6E\u6307\u4EE4\u522B\u540D\u540E\uFF0C\u53D1\u9001 `ciyi` \u67E5\u770B\u73A9\u6CD5\u3002\u6BCF\u65E5\u85CF\u4E00\u4E2A\u4E24\u5B57\u8BCD\uFF0C\u4F7F\u7528 `ciyi.\u731C <\u8BCD>` \u63D0\u4EA4\u7B2C\u4E00\u6B21\u731C\u6D4B\u5E76\u5F00\u9898\uFF1B\u5F00\u9898\u540E\u53EF\u76F4\u63A5\u53D1\u9001\u4E24\u5B57\u8BCD\u7EE7\u7EED\u731C\u6D4B\u3002\n\n## \u6307\u4EE4\n\n| \u6307\u4EE4 | \u8BF4\u660E |\n| --- | --- |\n| `ciyi` | \u73A9\u6CD5\u8BF4\u660E |\n| `ciyi.\u731C <\u8BCD>` | \u5F00\u59CB\u4ECA\u65E5\u6E38\u620F\u5E76\u63D0\u4EA4\u731C\u6D4B |\n| `ciyi.\u6392\u884C\u699C` | \u731C\u4E2D\u6B21\u6570\u699C |";
|
|
5
5
|
export declare const inject: {
|
|
6
6
|
required: string[];
|
|
7
7
|
optional: string[];
|
|
@@ -39,4 +39,11 @@ export interface CiyiRank {
|
|
|
39
39
|
score: number;
|
|
40
40
|
}
|
|
41
41
|
export type { History };
|
|
42
|
+
/**
|
|
43
|
+
* 裸词中间件只接受一条完整、无修饰的两字中文纯文本消息。
|
|
44
|
+
* 引用、@、图片、富文本以及机器人消息都可能只是普通聊天的一部分,不能据此猜词。
|
|
45
|
+
*/
|
|
46
|
+
export declare function getMiddlewareGuess(session: Session): string | null;
|
|
47
|
+
/** 裸词只能加入已开始且未封题的游戏,不能开题,也不重复提交旧猜测。 */
|
|
48
|
+
export declare function canHandleMiddlewareGuess(game: Ciyi | null | undefined, guess: string): boolean;
|
|
42
49
|
export declare function apply(ctx: Context, cfg: Config): void;
|
package/lib/index.js
CHANGED
|
@@ -22,6 +22,8 @@ var index_exports = {};
|
|
|
22
22
|
__export(index_exports, {
|
|
23
23
|
Config: () => Config,
|
|
24
24
|
apply: () => apply,
|
|
25
|
+
canHandleMiddlewareGuess: () => canHandleMiddlewareGuess,
|
|
26
|
+
getMiddlewareGuess: () => getMiddlewareGuess,
|
|
25
27
|
inject: () => inject,
|
|
26
28
|
name: () => name,
|
|
27
29
|
usage: () => usage
|
|
@@ -578,7 +580,7 @@ function renderIntroCard(service, opts) {
|
|
|
578
580
|
textLeft(ctx, "ciyi.猜 山水", ix + s(96), y + s(24), `${s(13.5)}px ${FONT_NUM}`, C.ink);
|
|
579
581
|
textLeftFit(
|
|
580
582
|
ctx,
|
|
581
|
-
`开题并报一个两字词${opts.middleware ? "
|
|
583
|
+
`开题并报一个两字词${opts.middleware ? ";开题后可直接发词" : ""}`,
|
|
582
584
|
ix + s(230),
|
|
583
585
|
y + s(24),
|
|
584
586
|
iw - s(268),
|
|
@@ -858,33 +860,48 @@ __name(renderRankCard, "renderRankCard");
|
|
|
858
860
|
|
|
859
861
|
// src/index.ts
|
|
860
862
|
var name = "ciyi";
|
|
861
|
-
var usage =
|
|
863
|
+
var usage = `## 使用
|
|
862
864
|
|
|
863
|
-
|
|
864
|
-
名次越小越近,**#1 就是答案本身**。
|
|
865
|
+
设置指令别名后,发送 \`ciyi\` 查看玩法。每日藏一个两字词,使用 \`ciyi.猜 <词>\` 提交第一次猜测并开题;开题后可直接发送两字词继续猜测。
|
|
865
866
|
|
|
866
|
-
##
|
|
867
|
+
## 指令
|
|
867
868
|
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
启用 Koishi Canvas 服务后渲染「墨与纸」风格卡片;Puppeteer 已自带该服务,无需重复安装绘图库。
|
|
874
|
-
没有绘图服务、渲染失败或关掉「渲染图片」时,自动回退为等价文本,玩法不受影响。
|
|
875
|
-
|
|
876
|
-
## QQ 群
|
|
877
|
-
|
|
878
|
-
* 956758505`;
|
|
869
|
+
| 指令 | 说明 |
|
|
870
|
+
| --- | --- |
|
|
871
|
+
| \`ciyi\` | 玩法说明 |
|
|
872
|
+
| \`ciyi.猜 <词>\` | 开始今日游戏并提交猜测 |
|
|
873
|
+
| \`ciyi.排行榜\` | 猜中次数榜 |`;
|
|
879
874
|
var inject = { required: ["database"], optional: ["canvas"] };
|
|
880
875
|
var Config = import_koishi.Schema.object({
|
|
881
876
|
atReply: import_koishi.Schema.boolean().default(false).description("响应时 @"),
|
|
882
877
|
quoteReply: import_koishi.Schema.boolean().default(false).description("响应时引用"),
|
|
883
|
-
isEnableMiddleware: import_koishi.Schema.boolean().default(true).description("
|
|
878
|
+
isEnableMiddleware: import_koishi.Schema.boolean().default(true).description("是否启用中间件(若启用,已开题时可以不使用指令直接猜测)"),
|
|
884
879
|
renderImage: import_koishi.Schema.boolean().default(true).description("渲染图片(复用 Koishi Canvas 服务;不可用时使用等价文本)"),
|
|
885
880
|
maxHistory: import_koishi.Schema.number().default(10).min(0).description("猜测板最多列出的历史条数(最新一次猜测始终会列出)"),
|
|
886
881
|
maxRank: import_koishi.Schema.number().default(10).min(0).description("最大排行榜人数")
|
|
887
882
|
});
|
|
883
|
+
function getMiddlewareGuess(session) {
|
|
884
|
+
const message = session.event.message;
|
|
885
|
+
if (!message || message.quote || session.event.user?.isBot || message.user?.isBot) {
|
|
886
|
+
return null;
|
|
887
|
+
}
|
|
888
|
+
const elements = message.elements ?? [];
|
|
889
|
+
if (elements.length !== 1 || elements[0].type !== "text") {
|
|
890
|
+
return null;
|
|
891
|
+
}
|
|
892
|
+
const text = elements[0].attrs.content;
|
|
893
|
+
if (typeof text !== "string" || text !== text.trim() || Array.from(text).length !== 2 || !/^\p{Script=Han}{2}$/u.test(text) || !allWords_default.includes(text)) {
|
|
894
|
+
return null;
|
|
895
|
+
}
|
|
896
|
+
return text;
|
|
897
|
+
}
|
|
898
|
+
__name(getMiddlewareGuess, "getMiddlewareGuess");
|
|
899
|
+
function canHandleMiddlewareGuess(game, guess) {
|
|
900
|
+
if (!game || game.isOver) return false;
|
|
901
|
+
if (game.guessedHistoryInOneGame?.includes(guess)) return false;
|
|
902
|
+
return guess === game.answer || game.rankList?.includes(guess) === true;
|
|
903
|
+
}
|
|
904
|
+
__name(canHandleMiddlewareGuess, "canHandleMiddlewareGuess");
|
|
888
905
|
function apply(ctx, cfg) {
|
|
889
906
|
ctx.model.extend(
|
|
890
907
|
"ciyi",
|
|
@@ -916,14 +933,21 @@ function apply(ctx, cfg) {
|
|
|
916
933
|
const RULE = "────────────";
|
|
917
934
|
if (cfg.isEnableMiddleware) {
|
|
918
935
|
ctx.middleware(async (session, next) => {
|
|
919
|
-
const
|
|
920
|
-
if (
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
936
|
+
const guess = getMiddlewareGuess(session);
|
|
937
|
+
if (!guess || !session.channelId) return await next();
|
|
938
|
+
try {
|
|
939
|
+
const [game] = await ctx.database.get("ciyi", {
|
|
940
|
+
channelId: session.channelId
|
|
941
|
+
});
|
|
942
|
+
if (!canHandleMiddlewareGuess(game, guess)) return await next();
|
|
943
|
+
} catch (error) {
|
|
944
|
+
logger.warn(
|
|
945
|
+
"中间件读取游戏状态失败,本次消息不作猜测:%s",
|
|
946
|
+
error?.message ?? error
|
|
947
|
+
);
|
|
924
948
|
return await next();
|
|
925
949
|
}
|
|
926
|
-
return await session.execute(`ciyi.猜 ${
|
|
950
|
+
return await session.execute(`ciyi.猜 ${guess}`);
|
|
927
951
|
});
|
|
928
952
|
}
|
|
929
953
|
ctx.command("ciyi", "词意(猜词游戏)").action(async ({ session }) => {
|
|
@@ -1025,9 +1049,10 @@ function apply(ctx, cfg) {
|
|
|
1025
1049
|
"词意 · 按意思远近找词",
|
|
1026
1050
|
`每天藏起一个两字词。你报词,我回它与答案的语义排名 —— 名次越小越近,#1 就是答案本身。`,
|
|
1027
1051
|
[
|
|
1028
|
-
`开始 ciyi.猜 山水
|
|
1052
|
+
`开始 ciyi.猜 山水 开题并报一个两字词`,
|
|
1053
|
+
cfg.isEnableMiddleware ? `续猜 直接发送两字词 仅限已开题且未结束` : null,
|
|
1029
1054
|
`排行 ciyi.排行榜 看谁猜中得最多`
|
|
1030
|
-
],
|
|
1055
|
+
].filter(Boolean),
|
|
1031
1056
|
[
|
|
1032
1057
|
`读板 ?好)企业(地? #467 · 沾边`,
|
|
1033
1058
|
` #467 是「企业」与答案的相近名次`,
|
|
@@ -1293,6 +1318,8 @@ __name(apply, "apply");
|
|
|
1293
1318
|
0 && (module.exports = {
|
|
1294
1319
|
Config,
|
|
1295
1320
|
apply,
|
|
1321
|
+
canHandleMiddlewareGuess,
|
|
1322
|
+
getMiddlewareGuess,
|
|
1296
1323
|
inject,
|
|
1297
1324
|
name,
|
|
1298
1325
|
usage
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "koishi-plugin-ciyi",
|
|
3
|
-
"description": "Koishi
|
|
4
|
-
"version": "1.2.
|
|
3
|
+
"description": "Koishi 的词意猜词插件。",
|
|
4
|
+
"version": "1.2.7",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"typings": "lib/index.d.ts",
|
|
7
7
|
"files": [
|
|
@@ -41,7 +41,12 @@
|
|
|
41
41
|
"词意"
|
|
42
42
|
],
|
|
43
43
|
"devDependencies": {
|
|
44
|
-
"@koishijs/canvas": "^0.2.0"
|
|
44
|
+
"@koishijs/canvas": "^0.2.0",
|
|
45
|
+
"koishi": "^4.18.11",
|
|
46
|
+
"tsx": "^4.23.13"
|
|
47
|
+
},
|
|
48
|
+
"scripts": {
|
|
49
|
+
"test": "tsx --test test/*.test.ts"
|
|
45
50
|
},
|
|
46
51
|
"peerDependencies": {
|
|
47
52
|
"koishi": "^4.18.11"
|