# 路由系统

在这个页面,我将讲解一些在Contrller中用得到的注解和其他方便的功能。

# GroupController 与 PrivateController

在YuQ的Controller系统中,便携的提供了类似于常见的类似于WebMVC的Controller功能,主要是继承自com.IceCreamQAQ.Yu.annotation.DefaultControllercom.icecreamqaq.yuq.annotation.GroupControllercom.icecreamqaq.yuq.annotation.PrivateController两个。

我们顾名思义,GroupControllerPrivateController分别提供了面向群聊和面向私聊的不同路由,也就是在class的上面添加注解之后,便会向YuQ注册成为对饮的路由,然后YuQ便会解析该类下的所有Action,来完成对于命令的触发。

其实很多内容在Demo中已经实现,所以对于两个路由不再赘述。

简易代码示例:

@PrivateController
@GroupController
public class WeatherController{}
1
2
3

但是,我们有时会遇到一个命令同时使用在群聊和私聊的情况,这种情况会在对路由系统有了一个相对完整认识之后再来讨论。

# BotActionContext

在说@Before@After之前,我们先简单说一下BotActionContext,这位可以说是路由系统的核心,而你随时可以使用方法参数获取到这个核心,就像是下面这样:

    @Before
    public void getContext(BotActionContext actionContext){}
1
2

BotActionContext中,用的最多的是以下四位:

  • source :消息来源,如果是Group对象表示是群聊,如果是Friend或者Member则是私聊。
  • sender :消息的发送者,如果消息来源是Group,则消息的发送者是信息的具体发送对象,否则可能和source中是同一个对象。
  • message:信息本身。
  • session:会话信息。

# 参数注入

编写命令中我们已经见过YuQ可以自动的注入参数,将参数city自动从信息中提取出来,然后提交给对应的方法,除了String类型以外,YuQ可以进行更简化的注入。

# Before 与 After

关于com.IceCreamQAQ.Yu.annotation.Beforecom.IceCreamQAQ.Yu.annotation.After两个注解,通常是打在已经表明了是路由系统的class上,如果某个类并没有路由系统的标记,其@Before@After也是毫无作用的,当然,下面的@Action也是同理。

@Before@After注解的作用,主要是在执行具体的指令操作之前进行一个过滤或者善后,比如在执行某些命令的时候需要权限校验,又或者在发送内容的时候要求自己的机器人主动替换掉一些违规内容。

# Action 与 QMsg

# Catch

# Global

# 路由的优先级