Skip to content

Latest commit

 

History

History
293 lines (254 loc) · 16.9 KB

advanced-CN.md

File metadata and controls

293 lines (254 loc) · 16.9 KB

导航

返回主文档
基础用法文档(中文)

目录

基本指令列表

开关指令

完整指令格式:打开/关闭词条开关
作用:开启或关闭对应群聊的插件开关
例:打开词条开关

学习指令

完整指令格式:学习#[词条名]#[词条内容/回复项]#[匹配方式]#[优先级]#[是否随机匹配]
作用:学习一个新的词条,记入数据库中
例:学习#词条库#欢迎使用词条库#模糊#2000

理想回复

格式说明

  1. 请使用#分割
  2. 匹配方式为可选项,包含精确模糊正则,默认为精确
  3. 优先级为可选项,允许范围在0~5000,大于5000将被修正为5000,匹配结果请见匹配顺序
  4. 是否随机匹配为可选项,包含随机最新,默认使用配置项中的设定
  5. 如果使用正则,请在词条名处填写正则表达式,并可在内容中用$1,$2...代表分组截获
  6. 正则示例:学习#^.*机器人(.+)了.*$#机器人没$1#正则调整view-mode后输入机器人坏了,获得回复机器人没坏
  7. 使用\进行转义,详见额外说明

查看指令

完整指令格式:查看#[词条名]
作用:查看词条内容
例:查看#词条库

理想回复

删除指令

完整指令格式:删除#[词条名]#[版本号]
作用:删除词条全部版本或删除其中一个版本
例:删除#词条库

理想回复

格式说明

  1. 版本号为可选项,若不填写则删除全部版本
  2. 删除对应版本后,其余后续版本号将自动向前填补

历史指令

完整指令格式:历史#[词条名]#[页码]
作用:查看词条修改历史
例:历史#词条库

理想回复

格式说明

  1. 页码为可选项,只可填写数字,默认为1
  2. 因为长度限制,因此一页所显示的数量有限,详见配置项

搜索指令

完整指令格式:搜索#[关键词]#[页码]
作用:检索与关键词有关的所有词条
例:搜索#词条

理想回复

格式说明

  1. 页码为可选项,只可填写数字,默认为1

全部指令

完整指令格式:全部#[页码]
作用:检索所有词条
例:全部#2

理想回复

格式说明

  1. 页码为可选项,只可填写数字,默认为1
  2. 若不填写页码,也可以直接使用全部作为命令

别名指令

完整指令格式:别名#[词条名]#[目标]#[匹配方式]#[优先级]
作用:添加词条的别名至目标
例:别名#词条#词条库

格式说明

  1. 为了防止指针成环,目标不能也是别名,且目标不能与词条名相同
  2. 目标必须是精确匹配的词条名,不可为模糊匹配
  3. 若不填写目标,则认为是删除名为词条名的别名
  4. 若目标词条被删除,则查询本别名将会返回错误,失效别名将会在下一次数据库定期清理中删除
  5. 为了方便管理,添加别名后,插件将会往词条名所在的版本中添加一条内容为alias to xxx的最新记录。该记录将会在别名被删除时删除,若这条记录为唯一的记录,则该词条一并删除
  6. 匹配方式和优先级均为可选项,说明与"学习"指令相同
  7. 若匹配方式为正则,正则替换将使用别名进行,而不是别名目标
  8. 别名的随机回复模式将使用别名目标的随机回复模式
  9. 别名仅应用于查看,不应用于历史、搜索等功能

帮助指令

完整指令格式:帮助#[命令名] 作用:查询命令对应帮助
例:帮助

理想回复

格式说明

  1. 命令名为可选项,默认为默认帮助
  2. 若不填写命令名,也可以直接使用帮助作为命令
  3. 帮助的输出文本可以在配置项中修改

匹配顺序

EntryLib 1.0.8 以下版本(已过时)

若存在多个满足条件的词条,查看/历史类指令优先返回规则如下:

  1. 检测是否有存在的精确匹配,若存在返回最小编号
  2. 检测是否有存在的模糊匹配,若存在返回最小编号
  3. 检测是否有存在的正则匹配,若存在返回最小编号

EntryLib 1.1.0 以上版本

若存在多个满足条件的词条,查看/历史类指令优先返回规则如下:

  • 返回匹配优先级最小的词条
  • 搜索类命令将按照优先级从小到大对所有匹配词条进行排序

群分组

群分组为机器人提供了 对不同群的操作处理使用同一个数据库 的解决方案
在配置好了群分组文件后,在同一分组内的所有群共享一个数据库

可以通过编辑配置项subgroup.json文件,来配置群分组
这个文件的格式样例可以参考这里
群分组配置文件由键值对构成,键为分组名,值为群组列表(群号字符串列表)

注意事项

  1. 群分组配置现已支持热加载,插件启动时从硬盘读取配置,也可以修改文件后从控制台更新加载
  2. 分组名不允许全为数字,原因请见数据库结构
  3. 不允许同一个群同时存在于多个分组中
  4. 若群分组加载错误或失败,将在控制台发送错误信息,此时的群分组状态为空
  5. 一旦群被纳入分组,其以前的数据库仍然保留但暂不使用;一旦群被移出分组,将会沿用以前的数据库
  6. 若分组被删除,其对应的数据库并不会清空,需要手动删除

图片与语音

图片

  1. 若在配置项中开启缓存图片,则插件将会缓存接收到的所有图片
  2. 缓存图片可以保证您的词条图片不会丢失,但同时也会增加磁盘占用,若不缓存仅能保证在一个tx服务器缓存刷新周期内图片不会丢失(这个周期一般较长)
  3. 在插件周期(24h)执行数据库整理任务时,同时也会清理未使用的缓存的图片文件与语音文件
  4. 图片可以作为词条名,也可以作为词条内容记录

如何将一个自定义图片加入词条库?

直接使用学习命令,在命令文本中插入图片即可,可以在后台查看该图片的 Mirai 码。
注意,若在手机端使用命令尝试插入图片时,图片将默认置后,因此推荐使用电脑端加入图片。

语音

  1. 所有插件接收到的语音都将缓存
  2. 在插件周期(24h)执行数据库整理任务时,同时也会清理未使用的缓存的图片文件与语音文件
  3. 语音可以作为词条名(但不推荐),也可以作为词条内容记录
  4. 语音没有官方支持的 Mirai 码,本插件中使用语音文件名构造 Mirai 码:[mirai:audio:${fileName}]
  5. 由于 Mirai 码使用语音文件名构造,因此不能保证它的唯一性。一旦插件接收到的语音文件名相同,缓存的本地文件将会发生覆盖
  6. 在插件发送语音时,将会上传本地语音。若本地语音不存在,则语音将会以原 Mirai 码的形式不进行转义直接发送
  7. 支持的语音格式只能是amr格式,语音文件大小最好不要超过1MB(否则可能发送失败)
  8. 语音是一种唯一消息,发送的语音将会收到唯一消息限制

如何将一条自定义语音加入词条库?

方法一,将要发送的语音(只能是amr格式)放入语音缓存文件夹中,然后使用包含语音文件名的 Mirai 码构造一条语音并使用命令将其加入词条库。语音文件名最好是英文与数字。
方法二,直接在群内发送该语音(以语音形式而非文件形式发送),然后在后台查看其解析的 Mirai 码,并使用命令将其加入词条库。

额外说明

  1. 本插件仅适用于群聊,且每个群聊独立拥有自己的词条库
  2. 本插件支持转义,可以使用\#来避免文本被解析为分隔符,也可以使用\\来避免右斜杠被识别为转义符
  3. 本插件的指令与回复均可自定义,详见配置项
  4. 如果将回复配置为空,插件将不会发送消息
  5. 拒绝以__MAIN_TABLE、开关指令、全部指令为词条名的修改与访问,插件将会检测并作出反馈
  6. 删除命令的默认权限为管理员以上才可使用,因为不同于更新为空,一旦词条被删除,它的所有历史备份均被删除,且不会再出现在搜索结果中
  7. 插件 24h 为周期执行一次数据库整理任务,目的是为了将数据库结构变得更方便管理。造成数据库需要整理的原因一般是删除了词条表造成编号不连续,或上次整理失败中途退出。整理状态会在控制台进行通知,请注意查看当前整理状态
  8. 为什么偶尔会造成更新操作失败?是因为数据库正在执行其他工作,因此受到了并发性限制。该问题发生概率很低,一般重试一次即可解决。若数据库长时间被占用,会出现一直无法执行更新的现象,若发生需要请发送 Issues 反馈

配置项

配置项位于Mirai\data\EntryLib\文件夹中
也可能位于Mirai\data\com.billyang.entrylib\文件夹中(常见于MCL)

global.json

本配置项提供对插件全局的控制,包含以下项目:

  1. "view-mode":0表示需要输入查看指令才可查看词条内容,修改为1表示可以直接输入词条名来查看词条内容(此时插件将不会再反馈查看指令错误信息)
  2. "random-reply":0表示回复词条最新版本内容,修改为1表示回复词条内容时从所有历史版本中随机选择
  3. "default-switch":1表示所有群都默认启用本插件,修改为0表示所有群都默认禁用本插件
  4. "switch-permission":1表示只有群管等级以上的成员才有权力修改插件开关(即使用命令打开/关闭词条开关),0表示所有成员都可以修改
  5. "history-max-height":3表示对于历史指令,每页仅返回3个记录,请确保本数值为正整数
  6. "search-max-height":5表示对于搜索指令,每页仅返回5个记录,请确保本数值为正整数
  7. "reply-mode":0表示机器人将普通回复,1表示机器人回复时会@发送指令的成员,2表示机器人回复时会引用指令消息
  8. "at-all-permission":0表示默认不允许机器人发送@全体成员,此时它将会被解析为 Mirai 码,修改为1表示允许机器人发送(机器人是管理员时才可生效)
  9. "xxx-permission":包含各类命令的执行权限,1为管理员表示只有群管等级以上的成员才可以使用,0表示所有成员都可以使用
  10. "download-image":1表示缓存接收到的图片(仅限于开关开启的群),修改为0表示不缓存。

input.json

本配置项提供用户键入指令的配置
实质为键值对,键为用户输入,值为指令识别参数,请对照基本指令列表进行查看
可以增加新的键值对来提供新的指令
默认内容请查看这里

output.json

本配置项提供插件回复项的配置
实质为键值对,键为条件状况,值为实际回复项
可以修改键值对来获得不同插件回复,但请勿增加或删除任意配置项
默认内容请查看这里
下面是一些参数解释:

  1. "learn"中$1表示词条名
  2. "view"中$1表示词条名,$2表示词条内容
  3. "(history,reply)"中$1表示词条名,$2表示词条历史,$3/$4表示 页码/总页数
  4. "(history,single)"表示单条历史格式,其中$1表示版本号,$2表示版本内容,$3表示修改时间
  5. "help"中的每一项都代表对应命令的帮助,"error"表示命令不存在或对应帮助不存在

admin.json

本配置项提供对管理员账号的配置 初始内容为空:

[  ]

向内填入 QQ 账号,使其成为插件后台管理员,使用英文逗号分割
比如:

[ 23333333, 114514 ]

插件后台管理员在插件功能上拥有与群主同样的权限

控制台

插件在 Windows 环境下运行时,将会创建系统托盘图标
双击图标或点击菜单可以进入插件 GUI 控制台
在控制台中可以方便地进行如下操作:

  • 编辑全局配置
  • 词条库导入导出
  • 分组配置更新

词条库导入导出

导入导出会根据一个 json 文件进行,这个文件的格式样例可以参考这里
导出时将会生成上述格式的 json 文件
导入时需要提供上述格式的 json 文件,同时可以选择三种覆盖方式:

  1. 不覆盖相同词条
  2. 合并相同词条
  3. 覆盖相同词条

关于导入导出文件的版本问题,请见兼容性问题

Mirai 码支持

关于 Mirai 码的具体说明,请查看 Mirai 文档

已适配的 Mirai 码:

  • 纯文本
  • 图片
  • At
  • AtAll
  • 表情
  • 语音(使用 Audio 接口并自定义 Mirai 码)
  • 闪图(很可能不会适配)
  • 戳一戳(很可能不会适配)
  • Vip表情(Mirai 不支持发送,发送时会变成纯文本,因此不会适配)
  • 富文本消息(很可能不会适配)
  • 骰子:注意事项
  • 音乐分享(很可能不会适配)
  • 文件信息(很可能不会适配)

注意事项

唯一消息限制

由于 Mirai 元素唯一性的限制,部分消息(如骰子、语音、戳一戳等)只能单一存在,这也是符合现实的:一条消息如果包含了语音,就不能同时包含群文件、提及全体成员、文字内容等元素。
如何让机器人学习唯一消息:请使用 Mirai 码,如:学习#骰子#[mirai:dice:5]
若机器人在同一个词条中储存了多个唯一消息,将会仅发送最后的唯一消息

骰子随机性

您可以使用[mirai:dice:$value]来让机器人学习或发送值为$value的骰子($value范围为1~6
但您也可以使用[mirai:dice:0]来让机器人发送一个随机的骰子
$value范围在0~6以外,插件将不予解析

数据库结构

插件采用 sqlite 作为数据库
插件在启动时自动更新所有数据库版本,可以在控制台查看详情

数据库版本0(无版本号)

每一个群独立建立数据库,保存为群号.db文件
每一个群分组独立建立数据库,保存为群组名.db文件
每个数据库使用__MAIN_TABLE作为主表,储存了所有词条名(包含[id]、匹配方式)
每个词条单独建立TABLE_[id]表,储存该词条信息(包含所有历史版本与修改时间)

数据库版本1

数据库新增__VERSION表,储存当前数据库版本号
__MAIN_TABLE主表中新增PRIORITY列表示匹配优先级

数据库版本2

__MAIN_TABLE主表中新增ALIAS列表示别名目标,新增RANDOM表示是否随机回复

兼容性问题

  • EntryLib 1.1.0 以上版本只能在数据库版本1的状态运行
  • EntryLib 1.1.0 允许导入版本0时的数据包,优先级将默认设置为0
  • EntryLib 1.3.1 以上版本只能在数据库版本2的状态运行
  • EntryLib 1.3.1 允许导入版本0与版本1时的数据包,优先级将默认设置为0,别名默认设置为空,随机回复模式默认为否

若数据库状态正常,插件将会自动升级到最高的匹配版本。
若自动升级失败,请手动修复或发送 Issues 反馈