diff --git a/.vitepress/theme/index.ts b/.vitepress/theme/index.ts
index d61a2bef7f36..34e3d66dee98 100644
--- a/.vitepress/theme/index.ts
+++ b/.vitepress/theme/index.ts
@@ -29,6 +29,10 @@ import {
} from 'element-plus'
import Layout from './layout.vue'
import Overview from './overview.vue'
+import LayoutHome from './layouts/home/index.vue'
+import LayoutMarket from './layouts/market.vue'
+import LayoutStarter from './layouts/starter.vue'
+import LayoutSchema from './layouts/schema/index.vue'
import '@koishijs/core'
import 'element-plus/dist/index.css'
@@ -38,10 +42,10 @@ globalThis.Schema = Schema
export default defineTheme({
layouts: {
- home: defineAsyncComponent(() => import('./layouts/home/index.vue')),
- market: defineAsyncComponent(() => import('./layouts/market.vue')),
- starter: defineAsyncComponent(() => import('./layouts/starter.vue')),
- schema: defineAsyncComponent(() => import('./layouts/schema/index.vue')),
+ home: LayoutHome,
+ market: LayoutMarket,
+ starter: LayoutStarter,
+ schema: LayoutSchema,
},
Layout,
enhanceApp({ app }) {
diff --git a/package.json b/package.json
index c505227d98de..cfd2840f5ecc 100644
--- a/package.json
+++ b/package.json
@@ -14,7 +14,7 @@
"devDependencies": {
"@cordisjs/vitepress": "^3.2.6",
"@intlify/unplugin-vue-i18n": "^1.5.0",
- "@koishijs/components": "^1.5.8",
+ "@koishijs/components": "^1.5.9",
"@koishijs/core": "^4.17.2",
"@koishijs/dns": "^1.0.1",
"@koishijs/market": "^4.2.5",
diff --git a/zh-CN/guide/basic/command.md b/zh-CN/guide/basic/command.md
index 5831121ce842..e6c9a26ad3ec 100644
--- a/zh-CN/guide/basic/command.md
+++ b/zh-CN/guide/basic/command.md
@@ -262,57 +262,34 @@ ctx.command('test')
选项 beta 输入无效,请检查语法。
-## 更改触发方式
-
-### 指令别名
-
-你可以为一条指令添加别名:
-
-```ts
-ctx.command('echo').alias('say')
-```
-
-这样一来,无论是 `echo` 还是 `say` 都能触发这条指令了。
+## 指令别名
::: warning
-由于指令名可以在用户侧配置,因此不建议开发者设置过多的别名。此外,如果用户加载的多个插件都注册了同一个指令别名,那么后一个加载的插件将直接加载失败。
+由于指令名可以在用户侧配置,因此**不建议**开发者设置过多别名或以常用词作为别名。如果用户加载的多个插件都注册了同一个指令别名,那么后一个加载的插件将直接加载失败。
:::
-### 快捷匹配
-
-Koishi 的指令机制虽然能够尽可能避免冲突和误触发,但是也带来了一些麻烦。一方面,一些常用指令的调用会受到指令前缀的限制;另一方面,一些指令可能有较长的选项和参数,但它们调用时却往往是相同的。面对这些情况,**快捷匹配 (Shortcut)** 能有效地解决你的问题。
-
-假设你实现了一个货币系统和 rank 指令,调用 `rank wealth --global` 可以实现查看全服所有人财富排行,你可以这样做:
-
-```ts
-ctx.command('rank ')
- .shortcut('全服财富排行', { args: ['wealth'], options: { global: true } })
-```
-
-这样一来,只要输入“全服财富排行”,Koishi 就会自动调用 `rank wealth --global`,回复查询结果了。
-
-通常来说,快捷方式都要求严格匹配(当然删除两端空格和繁简体转化这种程度的模糊匹配是可以做的),但是你也可以让快捷方式允许带参数:
+你可以为一条指令添加别名:
```ts
-ctx.command('buy - ')
- .shortcut('购买', { prefix: true, fuzzy: true })
+ctx.command('echo ').alias('say')
```
-上面程序注册了一个快捷方式,`prefix` 要求在调用时保留指令前缀,而 `fuzzy` 允许这个快捷方式带参数列表。这样一来,只要输入“Koishi,购买物品名”,Koishi 就会自动调用“buy 物品名”了。
+这样一来,无论是 `echo` 还是 `say` 都能触发这条指令了。
-除此以外,你还可以使用正则表达式作为快捷方式:
+你还可以为别名添加参数或选项:
```ts
-ctx.command('market ')
- .shortcut(/^查(.+区)市场$/, { args: ['$1'] })
+ctx.command('market
- ').alias('市场', { args: ['China'] })
```
-这样一来,输入“查美区市场”就等价于输入“market 美区”了。
-
-不难看出,使用快捷方式会让你的输入方式更加接近自然语言,也会让你的机器人显得更平易近人。
+此时调用 `市场` 时将等价于调用 `market China`。如果你传入了更多的参数,那么它们将被添加到 `China` 之后。
## 编写帮助
+::: tip
+此功能需要安装 [@koishijs/plugin-help](../../plugins/common/help.md) 插件。
+:::
+
之前已经介绍了 `ctx.command()` 和 `cmd.option()` 这两个方法,它们都能传入一个 `desc` 参数。你可以在这个参数的结尾补上对于指令或参数的说明文字,就像这样:
```ts