有没有什么办法自定义插件回复的触发语句呢?
-
有一些使用chat-command的插件,可以在聊天里发送以斜杠“/”开头的指令来调用一些功能。
但是我想自定义这些功能的触发语句该怎么办呢?有没有解决方法?因为我感觉打斜杠不太方便,或者觉得这样触发太生硬。比如Arknights Helper插件,我想把“/公招 狙击干员 群攻”改为“狙击干员和群攻有什么?”,让这两句话都可以触发一样的功能。
想要实现这个,我首先想到的是“铃心自定义”插件的“【重发】”变量,铃心自定义官方文档如下
>调用回复< 【重发XXX】填写在回复中,触发后相当于机器人再次收到内容为XXX的消息。(发送者/群组 不变)。重发后的消息不受各类开关限制。等重发的内容处理完毕才继续执行。 【重发[RD:QQ]XXX】 重发重定向。将发送者重定向为QQ,请带上[]。 【线程重发XXX】 同【重发】,只是该重发将启动新的线程,不再等待重发完毕才继续执行。 重发屏蔽: 即重发指令只执行命令不实施发送消息,具体指令【重发屏蔽xxx】 【线程重发屏蔽xxx】。
只可惜“铃心自定义”是一款古早的插件,不能在Mirai下原生运行,只能在Mirai Native下运行(我个人理解为“兼容模式”),这导致了“【重发】”这个变量测试失效了,我的这个想法实现不了。
各位有没有更好的方案?求大神qwq
-
你没准可以自己写个插件自动在每条信息前加
\
, 然后调用指令 https://docs.mirai.mamoe.net/console/Commands.html#在-commandmanager-执行指令 , 然后屏蔽一下失败(不匹配)的输出就行了 -
方案1: 找一个类似
铃心自定义插件
的插件,能通用地自定义重发,配合任意目标插件使用。(看来目前没有)方案2:直接向目标插件开发者提议,新增功能,支持你所说的第二种表达。不过这应该涉及较大的代码架构改动,可以让大家先讨论这类表达方式的需求,未来开发新插件时,考虑一开始就设计成支持两种表达方式。
我曾经也在架构设计-抽离出-纯bot逻辑提过一些想法,对应写出了zacafleetbot插件,其支持指令语法是:
阿米娅查掉率 固源岩
这比较接近你所说的“不那么生硬”的语法吧?不过由于种种原因(详见zacafleetbot插件原帖),该插件不再维护了。
整理了一下我想到的,如果插件设计成支持两种表达方式,大概会是如下关系,可能可以作为社区的参考:
-
其实mirai好像有个属性
-
@nambers 这看起来是指从“/公招 狙击干员 群攻”变为还支持“公招 狙击干员 群攻”?
-
@hundun000 喔确实,没审题了(
-
@xiaojiedev
正好有点时间,就去做了一个
https://github.com/Nambers/Mirai-Resend
没有经过很完善的测试( -
@nambers 说实话没太看懂(
好像又看懂了 -
@tsudzuki 就是他发的那个插件类似功能(
>调用回复< 【重发XXX】填写在回复中,触发后相当于机器人再次收到内容为XXX的消息。(发送者/群组 不变)。重发后的消息不受各类开关限制。等重发的内容处理完毕才继续执行。
-
@nambers 感谢大大帮助!如果需要让我研究Mirai的文档,自己写插件,那就只能暂缓考虑了哈哈!因为我是初学的Java苦手,
做简单的Java课设实验还犯愁(上个月的事)。其实您展示的Mirai
prefixOptional (指令前缀可选)
属性也可以满足一部分需求了。虽然没有重发插件
那样灵活,但是不用打斜杠,体验还是可以上升一个档次的。最后再谢谢提供插件~拜读代码,安装测试中……
-
@hundun000 感谢大大提供的方案——
我认为/<指令> <指令>
这种形式还是咱bot开发者/搭建者调试的时候用比较合适。
如果用户能用 自然语言 来 触发回复 会比较好,挺希望插件开发者能考虑 “设计成支持两种表达方式” 的。
就好像 tb 和 jd 的电商客服机器人,虽然是固定回复,很蠢萌,大多情况下没什么用,但是交互的时候,也不需要用户打斜杠对吧XD