package wiki.IceCream.yuq.demo.controller;
import com.IceCreamQAQ.Yu.annotation.*;
import com.IceCreamQAQ.Yu.controller.ActionContext;
import com.IceCreamQAQ.Yu.entity.DoNone;
import com.icecreamqaq.yuq.YuQ;
import com.icecreamqaq.yuq.annotation.GroupController;
import com.icecreamqaq.yuq.annotation.QMsg;
import com.icecreamqaq.yuq.controller.BotActionContext;
import com.icecreamqaq.yuq.message.Message;
import com.icecreamqaq.yuq.message.MessageItemFactory;
import javax.inject.Inject;
@GroupController
public class WeatherController {
@Inject
private MessageItemFactory mif;
/**
* weight表示权重,越低越优先,默认值是0
* @param group 信息发送者所在群 YuQ会自动注入
* @param qq 信息发送者的ID YuQ会自动注入
* @throws DoNone 不做任何事情的异常
*/
@Before(weight = 0)
public void WeatherBefore(long group,long qq) throws DoNone, Exception{
if(group != 12345L) {
//通过抛出异常来停止信息前往Action,这个异常只会抛出,但是不会做任何处理。
throw new DoNone();
}
if(qq != 122222L){
//将一条Message.toThrowable()会让这个信息返回到信息来源处。可以起到提示的作用。
throw mif.text("你无权使用这个类里面的命令").toMessage().toThrowable();
}
}
/**
* 此处使用@Action将函数变成指令的响应器
* 指令格式应该是 ”weather 南京“
* 使用@Synonym使命令拥有别名
* 所以”天气 南京“ 和 ”天气预报 南京“ 同样会触发命令
*/
@Action("weather {city}")
@Synonym({"天气 {city}","天气预报 {city}"})
@QMsg
public Message weather(String city){
if(city.equals("")){
//使用mif将String变成Message
return mif.text("要查询的城市名称不能为空").toMessage();
}
//使用伴生方法将String变成Message
return Message.Companion.toMessage(city+"的天气是。。。。");
}
/**
* After与 Before极其类似,除了出现的时间点不同,使用和逻辑上基本一致
* @param reMessage 这是由Action处理完发送的信息,目前还没有交给服务器
* @param qq 同Before
* @return 并非直接返回信息来源,可以在后续@After中进行使用,所以这个方法无返回值,直接修改reMessage也可实现。
*/
@After
public Message addNotice(Message reMessage,long qq){
//使用mif添加At效果,同理可使用mif添加图片等。
return reMessage.plus(mif.at(qq));
}
/**
* 直接使用注入来获取YuQ对象,对象内存储着Bot的各种信息,包括群列表,好友列表等。
*/
@Inject
private YuQ yuq;
/**
* Catch 与 Before 、 After 类似,但是必须要求参数来捕获指定异常
* @param e 这里捕获空指针异常
* @return 也并非返回信息来源,而是留给后续使用
*/
@Catch(error = NullPointerException.class)
public void reportNullPoint(NullPointerException e){
//从YuQ(此时的YuQ是你的Bot)中获取指定对象并且发送信息。
yuq.getFriends().get(12345L).sendMessage(mif.text(e.toString()).toMessage());
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89