koishijs / koishi-plugin-dialogue

Dialogue System for Koishi
https://dialogue.koishi.chat
MIT License
6 stars 4 forks source link

Feature: 为其他插件提供批量注册问答'库'的api #4

Closed Lipraty closed 2 years ago

Lipraty commented 2 years ago

部分插件可能需要或依托dialogue插件的特性,但是手动录入条目过多时会十分麻烦,那么可以提供一个api以供其他插件进行批量注册。例如下列方法:

ctx.dialogue.pushQuiz([{q, a}, ...]);
MaikoTan commented 2 years 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?

shigma commented 2 years ago

这个需求是确实存在的。不过考虑到扩展性和稳定性有一些问题需要考虑:

基于这些问题,我更倾向两种解决方案:

  1. 让 respondent 插件来承载这项功能。由于没有数据库,它得以有更高的安全性和可控性。并且这个插件可以与 dialogue 同时使用。
  2. 如果有手动录入的需求,我们可以给 dialogue 的控制台插件提供输入界面。
Lipraty commented 2 years ago
  1. 让 respondent 插件来承载这项功能。由于没有数据库,它得以有更高的安全性和可控性。并且这个插件可以与 dialogue 同时使用。
  2. 如果有手动录入的需求,我们可以给 dialogue 的控制台插件提供输入界面。

让没有数据库的 respondent 插件承担确实会是更好的办法。 关于手动录入,在输入界面中个人觉得可以支持拖入 @MaikoTan 所说的json或yaml文件来一次性录入(

shigma commented 2 years ago

Koishi 4.10.4 现已支持 ctx.match()

ctx.match('天王盖地虎', '宝塔镇河妖')

文档我之后补一下。

Lipraty commented 2 years ago

好的,期待文档更新()🚀梦梦太速度啦

shigma commented 2 years ago

文档下个版本再更新,有点 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:

ctx.match('hello.input', <i18n path="hello.output"/>)
# zh.yml
hello:
  input: 你好
  output: 你好呀

# en.yml
hello:
  input: hello
  output: hi there