Skip to content

碰撞域

示例插件的命令表

赌石

命令 状态 方法
赌石/stone 空状态 wakeup
退出/exit 任意状态 rest
敲/hit idle hit

木鱼

命令 状态 方法
木鱼/muyu 空状态 wakeup
退出/exit 任意状态 rest
敲/hit idle hit
查询功德/query idle query
调整步进/set step idle set_step

人员登记

命令 状态 子状态 方法
查看登记情况 空状态 空状态 show
我要登记 空状态 空状态 start
任意文字 空状态 name input_name
任意文字 空状态 age input_age

避免命令碰撞

示例中的三个插件,通过ayaka可以一定程度上解决命令碰撞的问题

假设机器人收到了一条消息,但赌石木鱼人员登记都有相应的命令规则符合,显然你并不希望他们三个全都对该消息做出响应

猫猫 命令 状态 方法
赌石 敲/hit idle hit
木鱼 敲/hit idle hit
人员登记 任意文字 空-name name
人员登记 任意文字 空-age age

借助ayaka,这种情况并不会发生

碰撞域

图片

图1

当机器人收到赌石命令后,碰撞域发生变化,这是因为在wakeup函数中,赌石的状态从空状态变更为了idle

图片

图2

碰撞域之外的回调不会参与竞争消息响应,因此只要红色的回调没有同时处于碰撞域之中,就不会出现命令碰撞

状态

所有的命令回调、文字回调都会要求注册在某个猫猫的某个状态下,之后,仅当该猫猫处于该状态时,这些回调才能进入碰撞域,从而有资格处理消息

通用状态

为方便起见,设计了*状态作为通用状态,它匹配一切非空状态

状态与群聊

各个群聊具有独立的碰撞域

例如,群聊1的碰撞域可如图1所示,同一时刻,群聊2的碰撞域可如图2所示,二者的碰撞域情况各不相同,互不干涉

这是由于不同群聊中,赌石猫猫的状态可以各不相同,互不干涉

子状态

为了进一步精细化状态控制,ayaka在0.0.2.0版本后,推出了子状态这一概念

不同群聊中,赌石猫猫的状态可以各不相同,互不干涉

而同一群聊、不同群成员中,赌石猫猫的子状态可以各不相同,互不干涉

图片

同样的,子状态也有通用子状态,其与通用状态作用方式相同

下一步

在这里~ ↘