Skip to content

Commit

Permalink
alias
Browse files Browse the repository at this point in the history
close #162
  • Loading branch information
shigma committed Mar 17, 2024
1 parent 0aaa835 commit 32856f6
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 40 deletions.
12 changes: 8 additions & 4 deletions .vitepress/theme/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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'
Expand All @@ -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 }) {
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
47 changes: 12 additions & 35 deletions zh-CN/guide/basic/command.md
Original file line number Diff line number Diff line change
Expand Up @@ -262,57 +262,34 @@ ctx.command('test')
<chat-message nickname="Koishi">选项 beta 输入无效,请检查语法。</chat-message>
</chat-panel>

## 更改触发方式

### 指令别名

你可以为一条指令添加别名:

```ts
ctx.command('echo').alias('say')
```

这样一来,无论是 `echo` 还是 `say` 都能触发这条指令了。
## 指令别名

::: warning
由于指令名可以在用户侧配置,因此不建议开发者设置过多的别名。此外,如果用户加载的多个插件都注册了同一个指令别名,那么后一个加载的插件将直接加载失败。
由于指令名可以在用户侧配置,因此**不建议**开发者设置过多别名或以常用词作为别名。如果用户加载的多个插件都注册了同一个指令别名,那么后一个加载的插件将直接加载失败。
:::

### 快捷匹配

Koishi 的指令机制虽然能够尽可能避免冲突和误触发,但是也带来了一些麻烦。一方面,一些常用指令的调用会受到指令前缀的限制;另一方面,一些指令可能有较长的选项和参数,但它们调用时却往往是相同的。面对这些情况,**快捷匹配 (Shortcut)** 能有效地解决你的问题。

假设你实现了一个货币系统和 rank 指令,调用 `rank wealth --global` 可以实现查看全服所有人财富排行,你可以这样做:

```ts
ctx.command('rank <type>')
.shortcut('全服财富排行', { args: ['wealth'], options: { global: true } })
```

这样一来,只要输入“全服财富排行”,Koishi 就会自动调用 `rank wealth --global`,回复查询结果了。

通常来说,快捷方式都要求严格匹配(当然删除两端空格和繁简体转化这种程度的模糊匹配是可以做的),但是你也可以让快捷方式允许带参数:
你可以为一条指令添加别名:

```ts
ctx.command('buy <item>')
.shortcut('购买', { prefix: true, fuzzy: true })
ctx.command('echo <message>').alias('say')
```

上面程序注册了一个快捷方式,`prefix` 要求在调用时保留指令前缀,而 `fuzzy` 允许这个快捷方式带参数列表。这样一来,只要输入“Koishi,购买物品名”,Koishi 就会自动调用“buy 物品名”了
这样一来,无论是 `echo` 还是 `say` 都能触发这条指令了

除此以外,你还可以使用正则表达式作为快捷方式
你还可以为别名添加参数或选项

```ts
ctx.command('market <area>')
.shortcut(/^查(.+区)市场$/, { args: ['$1'] })
ctx.command('market <area> <item>').alias('市场', { args: ['China'] })
```

这样一来,输入“查美区市场”就等价于输入“market 美区”了。

不难看出,使用快捷方式会让你的输入方式更加接近自然语言,也会让你的机器人显得更平易近人。
此时调用 `市场` 时将等价于调用 `market China`。如果你传入了更多的参数,那么它们将被添加到 `China` 之后。

## 编写帮助

::: tip
此功能需要安装 [@koishijs/plugin-help](../../plugins/common/help.md) 插件。
:::

之前已经介绍了 `ctx.command()``cmd.option()` 这两个方法,它们都能传入一个 `desc` 参数。你可以在这个参数的结尾补上对于指令或参数的说明文字,就像这样:

```ts
Expand Down

0 comments on commit 32856f6

Please sign in to comment.