Closed Lipraty closed 1 year ago
I am not saying no to this feature, but can we also extend it to be configurable?
Maybe there can be also a json file or yaml file that read by dialogue
plugin in initialisation and create (or replace) Q&As?
我不是在对这个功能说不,但是我们是否可以也将它扩展到可配置的?
也许还可以有一个json文件或yaml文件,由dialogue
插件在初始化时读取并创建(或替换)Q&As?
这个需求是确实存在的。不过考虑到扩展性和稳定性有一些问题需要考虑:
基于这些问题,我更倾向两种解决方案:
- 让 respondent 插件来承载这项功能。由于没有数据库,它得以有更高的安全性和可控性。并且这个插件可以与 dialogue 同时使用。
- 如果有手动录入的需求,我们可以给 dialogue 的控制台插件提供输入界面。
让没有数据库的 respondent 插件承担确实会是更好的办法。 关于手动录入,在输入界面中个人觉得可以支持拖入 @MaikoTan 所说的json或yaml文件来一次性录入(
Koishi 4.10.4 现已支持 ctx.match()
:
ctx.match('天王盖地虎', '宝塔镇河妖')
文档我之后补一下。
好的,期待文档更新()🚀梦梦太速度啦
文档下个版本再更新,有点 bug 等修好了一并发布。我先写在这里好了:
ctx.match(pattern, response, options?)
pattern 可以是字符串或者 RegExp,表示接受的输入。
response 可以是字符串,消息元素,字符串和消息元素组成的数组,或是一个接受 session 参数,同步或异步返回上述值的函数,表示触发输入后的输出。如果是字符串则会自动解析,与中间件和指令的返回值一致。4.10.4 不支持函数写法,下个版本会加。
// 基础用法
ctx.match('天王盖地虎', '宝塔镇河妖')
// 正则表达式用法,下面两种写法都可以
// 不过目前捕获组的处理有点问题,下个版本会修复
ctx.match(/^(.+)一时爽$/, '一直{1}一直爽')
ctx.match(/^(.+)一时爽$/, (_, params) => `一直${params[1]}一直爽`)
options 支持三个属性,都是 boolean:
params[0]
)ctx.match('hello.input', <i18n path="hello.output"/>)
# zh.yml
hello:
input: 你好
output: 你好呀
# en.yml
hello:
input: hello
output: hi there
部分插件可能需要或依托dialogue插件的特性,但是手动录入条目过多时会十分麻烦,那么可以提供一个api以供其他插件进行批量注册。例如下列方法: