配置指令触发方式
在 fraq.yml 中,可以通过修改 activation 字段来改变指令的触发方式,例如要求用户先 @ 机器人或者使用特定前缀才能触发指令,从而避免其他人的消息意外触发插件。
触发方式
Fraq 支持以下几种触发方式:
| 触发方式 | 含义 |
|---|---|
direct | 不需要任何先导条件即可触发(默认行为) |
mention | 需要 @ 当前机器人触发 |
{ type: 'prefix', prefix: '/' } | 需要用指定文本前缀触发,例如 /ping 中的 / |
{ type: 'mention', prefix: '/' } | 需要先 @ 当前机器人并使用文本前缀,例如 @bot /ping |
direct 和 mention 可以用字符串简写。触发方式在消息中的匹配位置详见命令路由中的"触发方式"。
简写形式
如果你希望所有指令都使用同一种触发方式,可以直接在 activation 字段下填写触发方式。例如,让所有指令都需要先 @ 机器人才能触发:
activation: mention也可以填写一个由多种触发方式组成的数组,数组中的触发方式是"或"的关系,满足其中任意一种即可触发。例如,让所有指令都可以通过 @ 机器人或者使用 / 前缀来触发:
activation:
- mention
- { type: 'prefix', prefix: '/' }如果不配置 activation,则默认使用 direct 触发方式。
针对特定指令覆盖
如果你希望针对不同的指令设置不同的触发方式,可以使用 default 和 overrides 字段。default 指定默认的触发方式,overrides 是一个数组,其中每个元素包含 match 和 rule。Fraq 会按照 overrides 的顺序依次匹配,第一个匹配成功的 rule 会被应用;如果没有匹配成功,则使用 default。
match 支持以下属性,所有指定的属性都必须同时满足:
| 属性 | 含义 |
|---|---|
plugin | 匹配指令所属的插件名,可以是字符串或字符串数组 |
context | 匹配指令所在的 Context 名,可以是字符串或字符串数组 |
tag | 匹配指令的标签(由插件的 .tag() 方法设置),可以是字符串或字符串数组 |
command | 匹配指令名(仅对 command 路由生效),可以是字符串或字符串数组 |
例如,让 status 和 retrieve 插件的指令使用 / 前缀触发,其他指令都需要先 @ 机器人:
activation:
default: mention
overrides:
- match:
plugin: [status, retrieve]
rule: { type: 'prefix', prefix: '/' }也可以基于标签来匹配。例如,让所有带有 admin 标签的指令必须先 @ 机器人并使用 / 前缀触发:
activation:
default: direct
overrides:
- match:
tag: admin
rule: { type: 'mention', prefix: '/' }关于路由标签和元信息的详细介绍可以参考开发文档中的相关章节。一般而言,插件会在 README 中说明它们的指令是否带有特定的标签。