自定义回复
自定义回复允许你指定触发的关键词,并自定义响应的内容。这可以使机器人成为一个通用的问答机器人,为机器人赋予个性。
当用户使用 @机器人 XXXX
或 /XXXX
或 .XXXX
时,XXXX
部分就会被提取出来,判断是否触发自定义回复。
对于常用的关键词,建议同时添加到 QQ机器人后台的【功能配置】【指令】中,这样用户在 QQ 频道的对话框中输入 @机器人
或 /
时,会自动跳出指令选择菜单,更加方便快捷。
自定义回复配置包含如下功能要素:
- 排序图标。可以拖动对多条自定义回复进行排序。顺序越靠前,优先级越高。
- 启用图标。可以控制这条自定义回复是否启用。
- 编辑图标。当鼠标悬浮到自定义回复的标题上时出现,可以编辑它的名字和描述。
- 删除图标。可以删除这条自定义回复。
- 触发方式
- 回复内容
- 插件图标。标识这条自定义回复来自插件,不能编辑。
触发方式
可选择自定义回复的触发方式。
精确匹配
仅当用户输入内容与匹配词完全相等时才触发(用户输入内容会被去除首尾空格)。
例如:设置为 精确匹配
jrrp
时,用户输入:
/jrrp // 匹配成功,可触发自定义回复
/ jrrp // jrrp 前面的空格会被去除,仍然可以精确匹配成功,可触发自定义回复
/jrrpx // jrrpx 不等于 jrrp,匹配不成功
开头是
当用户输入的内容以匹配词开头时,则触发。
例如:设置为 开头是
早上好
时,用户输入:
/早上好 // 匹配成功,可触发自定义回复
/早上好啊 // 匹配成功,可触发自定义回复
/骰娘早上好 // 不以 早上好 开头,匹配不成功
包含
当用户输入的内容中包含该匹配词,则触发。
例如:设置为 包含
早上好
时,用户输入:
/早上好 // 匹配成功,可触发自定义回复
/骰娘早上好啊 // 匹配成功,可触发自定义回复
/骰娘早安 // 不包含 早上好,匹配不成功
正则匹配
使用正则表达式匹配用户输入的内容,如匹配,则触发。
通过正则表达式可以实现一些高级的匹配方式。讲解正则表达式超过了本文档的范畴,大家如有兴趣可自行搜索了解。这里提供几个常用的例子:
1. 匹配 A 或 B:
例如:设置为 正则匹配
早上好|早安
时,代表用户的输入包含 早上好
或 早安
均可触发:
/早上好 // 匹配成功,可触发自定义回复
/早安 // 匹配成功,可触发自定义回复
/骰娘早上好啊 // 匹配成功,可触发自定义回复
2. 精确匹配 A 或 B:
例如:设置为 正则匹配
^(早上好|早安)$
时,代表用户的输入只有精确匹配 早上好
或 早安
才可触发:
/早上好 // 匹配成功,可触发自定义回复
/早安 // 匹配成功,可触发自定义回复
/骰娘早上好啊 // 匹配不成功
3. 匹配开头和结尾
例如:设置为 正则匹配
^骰娘(.+)吗$
时,代表用户的输入以 骰娘
开头,且以 吗
结尾,才可触发:
/骰娘你好吗 // 匹配成功,可触发自定义回复
/骰娘今天开心吗 // 匹配成功,可触发自定义回复
/骰娘我爱你 // 匹配不成功
回复内容
权重
当存在多条回复内容时,会根据权重随机一条内容返回。
例如,可通过不同的权重实现类似抽卡的功能。设置:
权重 1 '你抽到了五星'
权重 10 '你抽到了四星'
权重 89 '你抽到了三星'
就代表 1%
概率抽到五星,10%
概率抽到四星,89%
概率抽到三星。
回复内容
当触发这条自定义回复时,机器人回复的文本内容。文本支持换行,可以通过输入框右下角拖动改变高度。
嵌入骰子指令和人物卡
回复内容支持通过 [[xxx]]
嵌入骰子指令,和指令嵌套与变量中使用的语法相同。也支持通过 $xxx
引用人物卡的数值,和指令引用人物卡中的使用方法相同。
例如我们可以通过嵌入骰子指令,实现 jrrp
的功能:
当用户的指令 '精确匹配' 'jrrp' 时,回复:
权重 1 '你今天的幸运指数是[[d100]]!'
结合上文的权重功能,我们可以实现根据幸运指数不同,返回不同的文字:
当用户的指令 '精确匹配' 'jrrp' 时,回复:
权重 1 '你今天的幸运指数是[[d50]],运气不好诶'
权重 1 '你今天的幸运指数是[[d50+50]],好运'
这样各有 50% 概率进入某个分支,走入上面的分支时,幸运指数为 1~50
;走入下面的分支时,幸运指数为 51~100
。
内置变量
回复内容还支持一些内置变量,目前的变量有:
{{at用户}}
:替换为@发送人
(旧版本使用{{at}}
){{用户名}}
:替换为 发送人的昵称(旧版本使用{{nick}}
){{人物卡名}}
:替换为 发送人的人物卡名,如未关联人物卡,则取用户名
例如:
当用户的指令 '精确匹配' 'jrrp' 时,回复:
权重 1 '{{at用户}}今天的幸运指数是[[d100]]!'
在回复时就会 @发送人
。
引用消息内容
当触发方式为正则匹配时,回复内容也可以使用 {{xxx}}
语法引用正则表达式的命名捕获组。
例如,我们可以实现价值一个亿的 AI 核心代码:
当用户的指令 '正则匹配' '^(?<content>.+)吗$' 时,回复:
权重 1 '{{content}}!'
然后我们可以:
@机器人 在吗
> 在!
@机器人 能看懂代码吗
> 能看懂代码!
网页端自带了一个【复读机】的例子,也是对这一功能的演示。
发送图片
支持使用类似 HTML 的 <img>
语法发送图片消息。例如:
当用户的指令 '精确匹配' 'img' 时,回复:
权重 1 '<img src="https://wiki.connect.qq.com/wp-content/uploads/2013/10/01_qq_logo-1-300x144.png" />'
也可以发送本地图片。当图片路径不以 http/https 开头时,视为发送本地图片。图片文件需事先放置在程序同级目录的 images
文件夹下。例如:
当用户的指令 '精确匹配' 'img' 时,回复:
权重 1 '<img src="test.png" />' // 实际发送了 images/test.png
建议图片的大小不要太大,否则容易发送失败。
优先级
自定义回复的优先级高于骰子指令。若同一个指令可以同时匹配自定义回复和骰子指令,那么优先触发自定义回复。
若同一个指令可以同时匹配到多条自定义回复,则以排序最上方的一条为准。