koishi-plugin-cchess 2.5.0 → 2.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +4 -0
- package/README.md +32 -11
- package/lib/help.d.ts +14 -0
- package/lib/index.d.ts +1 -1
- package/lib/index.js +32 -7
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
package/README.md
CHANGED
|
@@ -1,36 +1,57 @@
|
|
|
1
1
|
# 中国象棋
|
|
2
2
|
|
|
3
|
-
Koishi
|
|
3
|
+
Koishi 插件:中国象棋,支持悔棋、棋谱分享与皮卡鱼引擎对战
|
|
4
|
+
|
|
5
|
+
[](https://github.com/araea/koishi-plugin-cchess)
|
|
6
|
+
[](https://www.npmjs.com/package/koishi-plugin-cchess)
|
|
4
7
|
|
|
5
8
|
## 安装
|
|
6
9
|
|
|
7
10
|
```sh
|
|
8
|
-
|
|
11
|
+
npm i koishi-plugin-cchess
|
|
9
12
|
```
|
|
10
13
|
|
|
11
|
-
|
|
14
|
+
启用插件,并安装 `database` 与 `canvas` 服务。
|
|
15
|
+
|
|
16
|
+
## 快速使用
|
|
12
17
|
|
|
13
|
-
|
|
18
|
+
发送 `cchess.开始` 入座,双方就位后自动开局;发送 `cchess.开始 人机` 直接挑战皮卡鱼。落子也可直接发送,如 `炮二平五` 或 `b2e2`。悔棋请求送出后,对方直接回复 `同意` 或 `拒绝` 即可表决。
|
|
14
19
|
|
|
15
20
|
| 指令 | 说明 |
|
|
16
21
|
| --- | --- |
|
|
22
|
+
| `cchess` | 查看指令列表 |
|
|
17
23
|
| `cchess.开始 [红/黑] [人机]` | 入座开局,或挑战皮卡鱼 |
|
|
18
24
|
| `cchess.开始 <FEN>` | 导入局面;随后发送 `cchess.开始` 开局 |
|
|
19
|
-
| `cchess.落子 <着法>` | 按棋谱落子,如 `炮二平五` |
|
|
25
|
+
| `cchess.落子 <着法>` | 按棋谱落子,如 `炮二平五` 或 `b2e2` |
|
|
20
26
|
| `cchess.悔棋 [同意/拒绝]` | 请求悔棋或表决 |
|
|
21
27
|
| `cchess.认输` | 认输 |
|
|
22
28
|
| `cchess.结束` | 结束当前对局 |
|
|
23
29
|
| `cchess.战绩 [@某人/榜] [胜场/输场] [人数]` | 查询战绩或排行 |
|
|
24
30
|
| `cchess.查看云库残局 [DTM/DTC]` | 查询云库残局统计 |
|
|
25
31
|
|
|
26
|
-
|
|
32
|
+
## 配置
|
|
33
|
+
|
|
34
|
+
| 配置项 | 类型 | 默认值 | 说明 |
|
|
35
|
+
| --- | --- | --- | --- |
|
|
36
|
+
| `boardSkin` | string | `象甲2023棋盘` | 棋盘皮肤 |
|
|
37
|
+
| `pieceSkin` | string | `象甲棋子` | 棋子皮肤 |
|
|
38
|
+
| `allowFreePieceMovementInHumanMachineMode` | boolean | `false` | 人机模式下允许所有人自由移动棋子 |
|
|
39
|
+
| `enableDirectInput` | boolean | `true` | 对局中直接发送棋谱或「同意」「拒绝」即可应答 |
|
|
40
|
+
| `defaultEngineThinkingDepth` | number | `10` | 引擎思考深度,范围 0–100;越高棋力越强、耗时越长 |
|
|
41
|
+
| `defaultMaxLeaderboardEntries` | number | `4` | 排行榜默认显示的人数 |
|
|
42
|
+
| `retractDelay` | number | `0` | 自动撤回延迟(秒),0 表示不撤回 |
|
|
43
|
+
| `imgScale` | number | `1` | 图片分辨率倍率,最小 1 |
|
|
44
|
+
| `imageType` | `png` / `jpeg` / `webp` | `png` | 发送的图片格式 |
|
|
45
|
+
| `isChessImageWithOutlineEnabled` | boolean | `true` | 给棋盘图片加坐标外框;关闭后出图更快 |
|
|
46
|
+
| `disableImages` | boolean | `false` | 全部改用文本,不发送棋盘图片 |
|
|
27
47
|
|
|
28
|
-
##
|
|
48
|
+
## 限制 / 风险
|
|
29
49
|
|
|
30
|
-
|
|
50
|
+
必须安装 `database` 与 `canvas` 服务才能运行。
|
|
31
51
|
|
|
32
|
-
|
|
52
|
+
引擎思考深度过高会显著增加响应耗时;Node.js 不支持 SIMD,不建议设置过大。
|
|
33
53
|
|
|
34
|
-
|
|
54
|
+
## 链接
|
|
35
55
|
|
|
36
|
-
|
|
56
|
+
- [设计系统](DESIGN_SYSTEM.md)
|
|
57
|
+
- [MIT](LICENSE-MIT) / [Apache-2.0](LICENSE-APACHE)
|
package/lib/help.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Session } from 'koishi';
|
|
2
|
+
export interface HelpEntry {
|
|
3
|
+
name: string;
|
|
4
|
+
description: string;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* 主指令帮助的内容:从已注册的指令树现取标题与直接子指令,不依赖 help 插件,也不会和指令脱节。
|
|
8
|
+
* `order` 列出希望靠前的子指令(完整指令名),没列到的按注册顺序排在后面;排版交给各插件。
|
|
9
|
+
* 不要在动作里 `session.execute('… -h')` 转发:`-h` 由 help 插件提供,缺它指令会无限调用自己。
|
|
10
|
+
*/
|
|
11
|
+
export declare function helpOf(session: Session, name: string, order?: string[]): {
|
|
12
|
+
title: string;
|
|
13
|
+
entries: HelpEntry[];
|
|
14
|
+
};
|
package/lib/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Context, Schema } from 'koishi';
|
|
2
2
|
export declare const name = "cchess";
|
|
3
|
-
export declare const usage = "## \u4F7F\u7528\n\n`cchess.\u5F00\u59CB` \
|
|
3
|
+
export declare const usage = "## \u4F7F\u7528\n\n\u53D1\u9001 `cchess.\u5F00\u59CB` \u5165\u5EA7\uFF0C\u53CC\u65B9\u5C31\u4F4D\u540E\u81EA\u52A8\u5F00\u5C40\uFF1B\u53D1\u9001 `cchess.\u5F00\u59CB \u4EBA\u673A` \u53EF\u76F4\u63A5\u6311\u6218\u5F15\u64CE\u3002\u843D\u5B50\u4E5F\u53EF\u76F4\u63A5\u53D1\u9001\uFF0C\u5982 `\u70AE\u4E8C\u5E73\u4E94` \u6216 `b2e2`\u3002\n\n\u6094\u68CB\u8BF7\u6C42\u9001\u51FA\u540E\uFF0C\u5BF9\u65B9\u65E0\u9700\u5E26\u6307\u4EE4\u524D\u7F00\uFF0C\u76F4\u63A5\u56DE\u590D `\u540C\u610F` \u6216 `\u62D2\u7EDD` \u5373\u53EF\u8868\u51B3\uFF1B\u8BF7\u6C42\u65B9\u53D1\u9001 `cchess.\u6094\u68CB \u62D2\u7EDD` \u53EF\u64A4\u4E0B\u8BF7\u6C42\u3002\n\n## \u6307\u4EE4\n\n| \u6307\u4EE4 | \u8BF4\u660E |\n| --- | --- |\n| `cchess` | \u67E5\u770B\u6307\u4EE4\u5217\u8868 |\n| `cchess.\u5F00\u59CB [\u7EA2/\u9ED1] [\u4EBA\u673A]` | \u5165\u5EA7\u5F00\u5C40\uFF0C\u6216\u76F4\u63A5\u6311\u6218\u76AE\u5361\u9C7C |\n| `cchess.\u5F00\u59CB <FEN>` | \u5BFC\u5165\u5C40\u9762\uFF1B\u968F\u540E\u53D1\u9001 `cchess.\u5F00\u59CB` \u5F00\u5C40 |\n| `cchess.\u843D\u5B50 <\u7740\u6CD5>` | \u6309\u68CB\u8C31\u843D\u5B50\uFF0C\u5982 `\u70AE\u4E8C\u5E73\u4E94` |\n| `cchess.\u6094\u68CB [\u540C\u610F/\u62D2\u7EDD]` | \u8BF7\u6C42\u6094\u68CB\u6216\u8868\u51B3 |\n| `cchess.\u8BA4\u8F93` | \u8BA4\u8F93 |\n| `cchess.\u7ED3\u675F` | \u7ED3\u675F\u5F53\u524D\u5BF9\u5C40 |\n| `cchess.\u6218\u7EE9 [@\u67D0\u4EBA/\u699C] [\u80DC\u573A/\u8F93\u573A] [\u4EBA\u6570]` | \u67E5\u8BE2\u6218\u7EE9\u6216\u6392\u884C |\n| `cchess.\u67E5\u770B\u4E91\u5E93\u6B8B\u5C40 [DTM/DTC]` | \u67E5\u8BE2\u4E91\u5E93\u6B8B\u5C40\u7EDF\u8BA1 |";
|
|
4
4
|
export declare const inject: string[];
|
|
5
5
|
export interface Config {
|
|
6
6
|
boardSkin: string;
|
package/lib/index.js
CHANGED
|
@@ -69,6 +69,24 @@ async function directInputConflict(ctx, session) {
|
|
|
69
69
|
}
|
|
70
70
|
__name(directInputConflict, "directInputConflict");
|
|
71
71
|
|
|
72
|
+
// src/help.ts
|
|
73
|
+
function helpOf(session, name2, order = []) {
|
|
74
|
+
const describe = /* @__PURE__ */ __name((command) => session.text([`commands.${command}.description`, ""]), "describe");
|
|
75
|
+
const rank = /* @__PURE__ */ __name((command) => {
|
|
76
|
+
const i = order.indexOf(command);
|
|
77
|
+
return i < 0 ? order.length : i;
|
|
78
|
+
}, "rank");
|
|
79
|
+
const entries = [];
|
|
80
|
+
for (const child of session.app.$commander.get(name2)?.children ?? []) {
|
|
81
|
+
const { hidden } = child.config;
|
|
82
|
+
if (!child.match(session) || session.resolve(hidden)) continue;
|
|
83
|
+
entries.push({ name: child.name, description: describe(child.name) });
|
|
84
|
+
}
|
|
85
|
+
entries.sort((a, b) => rank(a.name) - rank(b.name));
|
|
86
|
+
return { title: describe(name2), entries };
|
|
87
|
+
}
|
|
88
|
+
__name(helpOf, "helpOf");
|
|
89
|
+
|
|
72
90
|
// src/index.ts
|
|
73
91
|
var import_koishi2 = require("koishi");
|
|
74
92
|
|
|
@@ -5171,7 +5189,7 @@ var fs = __toESM(require("fs"));
|
|
|
5171
5189
|
var name = "cchess";
|
|
5172
5190
|
var usage = `## 使用
|
|
5173
5191
|
|
|
5174
|
-
\`cchess.开始\`
|
|
5192
|
+
发送 \`cchess.开始\` 入座,双方就位后自动开局;发送 \`cchess.开始 人机\` 可直接挑战引擎。落子也可直接发送,如 \`炮二平五\` 或 \`b2e2\`。
|
|
5175
5193
|
|
|
5176
5194
|
悔棋请求送出后,对方无需带指令前缀,直接回复 \`同意\` 或 \`拒绝\` 即可表决;请求方发送 \`cchess.悔棋 拒绝\` 可撤下请求。
|
|
5177
5195
|
|
|
@@ -5179,13 +5197,14 @@ var usage = `## 使用
|
|
|
5179
5197
|
|
|
5180
5198
|
| 指令 | 说明 |
|
|
5181
5199
|
| --- | --- |
|
|
5200
|
+
| \`cchess\` | 查看指令列表 |
|
|
5182
5201
|
| \`cchess.开始 [红/黑] [人机]\` | 入座开局,或直接挑战皮卡鱼 |
|
|
5183
|
-
| \`cchess.开始 <FEN>\` |
|
|
5202
|
+
| \`cchess.开始 <FEN>\` | 导入局面;随后发送 \`cchess.开始\` 开局 |
|
|
5184
5203
|
| \`cchess.落子 <着法>\` | 按棋谱落子,如 \`炮二平五\` |
|
|
5185
|
-
| \`cchess.悔棋 [同意/拒绝]\` |
|
|
5186
|
-
| \`cchess.认输\` |
|
|
5187
|
-
| \`cchess.结束\` |
|
|
5188
|
-
| \`cchess.战绩 [@某人/榜] [胜场/输场] [人数]\` |
|
|
5204
|
+
| \`cchess.悔棋 [同意/拒绝]\` | 请求悔棋或表决 |
|
|
5205
|
+
| \`cchess.认输\` | 认输 |
|
|
5206
|
+
| \`cchess.结束\` | 结束当前对局 |
|
|
5207
|
+
| \`cchess.战绩 [@某人/榜] [胜场/输场] [人数]\` | 查询战绩或排行 |
|
|
5189
5208
|
| \`cchess.查看云库残局 [DTM/DTC]\` | 查询云库残局统计 |`;
|
|
5190
5209
|
var inject = ["database", "canvas"];
|
|
5191
5210
|
var pieceSkins = ["棋弈无限图形棋子", "云库木制棋子", "刘炳森红黑牛角隶书棋子", "木制棋子", "本纹隶书棋子", "银灰将军体棋子", "棋弈无限红绿正棋子", "棋弈无限红绿棋子", "棋天大圣棋子", "棋者象棋棋子", "楷书玉石棋子", "水墨青瓷棋子", "牛皮纸华康金文棋子", "皮卡鱼棋子", "红蓝祥隶棋子", "红黑精典无阴影棋子", "红黑精典棋子", "行书玉石棋子", "象甲棋子", "金属棋子篆体棋子", "镌刻华彩棋子", "鹏飞红黑棋子", "鹏飞经典棋子", "鹏飞绿龙棋子", "龙腾四海棋子"];
|
|
@@ -5405,7 +5424,13 @@ function apply(ctx, config) {
|
|
|
5405
5424
|
await handleMove(session, moveOperation);
|
|
5406
5425
|
});
|
|
5407
5426
|
ctx.command("cchess", "中国象棋 · 楚河汉界").action(async ({ session }) => {
|
|
5408
|
-
|
|
5427
|
+
const { title, entries } = helpOf(session, "cchess", ["开始", "落子", "悔棋", "认输", "结束", "战绩", "查看云库残局"].map((name2) => `cchess.${name2}`));
|
|
5428
|
+
return await sendMessage(session, panel({
|
|
5429
|
+
icon: "📋",
|
|
5430
|
+
title,
|
|
5431
|
+
body: entries.map(({ name: name2, description }) => field(name2, description)),
|
|
5432
|
+
tips: ["发送「cchess.开始」入座,「cchess.落子 炮二平五」落子"]
|
|
5433
|
+
}));
|
|
5409
5434
|
});
|
|
5410
5435
|
ctx.command("cchess.开始 [args:text]", "入座开局,或挑战皮卡鱼").usage("可选阵营「红」「黑」;参数含「人机」即与皮卡鱼对战,不带则入座等待对手;直接粘贴 FEN 串则按摆谱处理。").example("cchess.开始 红 人机").action(async ({ session }, args) => {
|
|
5411
5436
|
const { username, channelId } = session;
|
package/package.json
CHANGED