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