如何使机器人被at才响应

全局配置里 prefix 和 nickname 都是空的,但即使填了也会直接对群里的消息进行响应。
希望能实现at机器人之后才会对“@昵称”后方的信息进行响应,该如何配置呢?

1 个赞
  1. 如果你的响应是指令,prefix 提供之后就不会响应了
  2. 如果不是指令,那么说明某个插件无视了你设置的规则乱响应了,你需要检查是哪个插件响应的,然后修改这个插件的配置使其不响应
1 个赞

试了一下,指令确实要加前缀了。那怎么设置才能让它只对at它的消息有反应呢?
感激不尽

1 个赞

设置一个不会误触的前缀就可以只对 at 他的消息有反应了。

另外一个方法是使用 assign 机制,可以在论坛搜索「assign」查看此方法的详细使用方法。

1 个赞

将 prefix 设置为空数组(注意,不是空着不填而是把数组清空)可以做到只有 at 响应。

prefix 的几种设置:

  • 一个空白输入框:任何情况下都尝试触发指令
  • 输入框中填写 .:仅当 at 或者 . 开头时触发指令
  • 两个输入框,分别填写 .:仅当 at 或者 . 开头时触发指令
  • 没有输入框:只有 at 会触发指令
4 个赞

原来还有这样的方法,学到了

2 个赞

啊我明白问题了,这个只对指令生效,我写的对特定文本生效的就不能通过at来触发了。

1 个赞

是的,绝大多数情况下都应该使用指令完成需求,因为指令天生自带调用前缀、指令管理、权限控制、速率限制等等一些列非常方便的功能,其他方法都不会携带这些功能。

1 个赞

那我产生了新的问题,希望没有打扰到您。
我方才提到的特定文本的,是自己写的一个扔骰子的小玩具,期望的需求是:输入3D100的时候,能回复“3D100 = a,b,c”,其中abc分别是3次随机的结果。目前是写的如果收到消息第二个字符是"D"就开始执行随机并输出。
如果用指令的话应该怎么实现呢?
再次感谢

1 个赞

在论坛提问的一大优势就是不会打扰到任何人,这是我们鼓励在论坛提问的原因之一。


如果你使用 Blockly 编程,你需要使用指令进行调用。调用的方法类似:

roll 3D100

如果你使用代码编程,你也可以使用 roll 3D100 的方法进行调用。此外,Koishi 提供了名为 快捷匹配 的功能,使用这个功能可以直接以 3D100 的方法调用指令,可以查阅该功能的文档以了解更多。


值得一提的是,Koishi 的插件市场内已经存在名为 dice 的认证插件,其实现 roll 功能的代码 在这里 ,可供参考。

2 个赞

十分感谢OwO
但我说的3D100只是一个例子,期望里3和100是两个自己输入的参数
目前打算改成指令rd后跟两个参数的格式输入了

我再研究一下,再次感谢<3

1 个赞

翻了一下我之前写的垃圾骰子,真的好垃圾

middleware 也是可以检测是否被 at 或者回复的,我记得以前我用过一个属性是 quoted,不过刚刚文档没翻到,不知道现在推荐的做法是什么

  1. 实现一个 roll 指令,接受一个 掷骰表达式 参数
  2. 实现一个 shortcut(快捷匹配),使用正则表达式匹配形如 XdX 的格式,shortcut 可以要求前缀
  3. 如果有更高级的需求,可以手写中间件,使用 session.execute 调用指令
2 个赞

好哒,我研究一下,谢啦
话说blockly有快捷匹配吗……

1 个赞

没有的,你需要使用普通指令

1 个赞