自定义回复

自定义回复允许你指定触发的关键词,并自定义响应的内容。这可以使机器人成为一个通用的问答机器人,为机器人赋予个性。

当用户使用 @机器人 XXXX/XXXX.XXXX 时,XXXX 部分就会被提取出来,判断是否触发自定义回复。

对于常用的关键词,建议同时添加到 QQ机器人后台open in new window的【功能配置】【指令】中,这样用户在 QQ 频道的对话框中输入 @机器人/ 时,会自动跳出指令选择菜单,更加方便快捷。

QQ机器人后台设置


自定义回复配置包含如下功能要素:

功能区域

  1. 排序图标。可以拖动对多条自定义回复进行排序。顺序越靠前,优先级越高。
  2. 启用图标。可以控制这条自定义回复是否启用。
  3. 编辑图标。当鼠标悬浮到自定义回复的标题上时出现,可以编辑它的名字和描述。
  4. 删除图标。可以删除这条自定义回复。
  5. 触发方式
  6. 回复内容
  7. 插件图标。标识这条自定义回复来自插件,不能编辑。

触发方式

可选择自定义回复的触发方式。

精确匹配

仅当用户输入内容与匹配词完全相等时才触发(用户输入内容会被去除首尾空格)。

例如:设置为 精确匹配 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 核心代码open in new window

当用户的指令 '正则匹配' '^(?<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

建议图片的大小不要太大,否则容易发送失败。

优先级

自定义回复的优先级高于骰子指令。若同一个指令可以同时匹配自定义回复和骰子指令,那么优先触发自定义回复。

若同一个指令可以同时匹配到多条自定义回复,则以排序最上方的一条为准。

Last Updated: