Skip to content

Commit 02e3033

Browse files
committed
add: friend and group system
1 parent 6afd88c commit 02e3033

20 files changed

+121
-50
lines changed

src/main/java/top/focess/qq/FocessQQ.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import top.focess.qq.core.bot.SimpleBotManager;
3030
import top.focess.qq.core.commands.*;
3131
import top.focess.qq.core.commands.special.*;
32+
import top.focess.qq.core.commands.ExecCommand;
3233
import top.focess.qq.core.listeners.ChatListener;
3334
import top.focess.qq.core.listeners.ConsoleListener;
3435
import top.focess.qq.core.listeners.PluginListener;
@@ -595,6 +596,7 @@ public void enable() {
595596
this.registerCommand(new CommandCommand());
596597
this.registerCommand(new PluginCommand());
597598
this.registerCommand(new DebugCommand());
599+
this.registerCommand(new ExecCommand());
598600
FocessQQ.getLogger().debugLang("register-default-commands");
599601
this.registerSpecialArgumentHandler("previous", new PreviousArgumentHandler());
600602
this.registerSpecialArgumentHandler("next", new NextArgumentHandler());

src/main/java/top/focess/qq/api/command/CommandLine.java

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,20 @@ public static Future<CommandResult> exec(CommandSender sender, String command) {
6363
public static Future<CommandResult> exec(CommandSender sender, String command, IOHandler ioHandler) {
6464
if (sender == CommandSender.CONSOLE)
6565
FocessQQ.getLogger().consoleInput(command);
66+
List<String> args = splitCommand(command);
67+
if (args.size() == 0)
68+
return CompletableFuture.completedFuture(CommandResult.NONE);
69+
String name = args.get(0);
70+
args.remove(0);
71+
return exec0(sender, name, args.toArray(new String[0]), ioHandler, command);
72+
}
73+
74+
/**
75+
* Split the command into arguments
76+
* @param command the command needed to be split
77+
* @return the split arguments
78+
*/
79+
public static List<String> splitCommand(String command) {
6680
List<String> args = Lists.newArrayList();
6781
StringBuilder stringBuilder = new StringBuilder();
6882
boolean stack = false;
@@ -121,11 +135,7 @@ else if (c == '@' && !stack && last != null && last == ' ') {
121135
}
122136
if (stringBuilder.length() != 0)
123137
args.add(stringBuilder.toString());
124-
if (args.size() == 0)
125-
return CompletableFuture.completedFuture(CommandResult.NONE);
126-
String name = args.get(0);
127-
args.remove(0);
128-
return exec0(sender, name, args.toArray(new String[0]), ioHandler, command);
138+
return args;
129139
}
130140

131141
private static Future<CommandResult> exec0(CommandSender sender, String command, String[] args, IOHandler ioHandler, String rawCommand) {

src/main/java/top/focess/qq/api/command/CommandPermission.java

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,6 @@ public enum CommandPermission {
2222
this.priority = commandPermission.priority;
2323
}
2424

25-
public static CommandPermission toCommandPermission(MemberPermission permission) {
26-
if (permission == MemberPermission.OWNER)
27-
return OWNER;
28-
else if (permission == MemberPermission.ADMINISTRATOR)
29-
return ADMINISTRATOR;
30-
else return MEMBER;
31-
}
32-
3325
public boolean hasPermission(CommandPermission permission) {
3426
return this.priority >= permission.priority;
3527
}

src/main/java/top/focess/qq/api/command/CommandSender.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
/**
2020
* This class present an executor to execute command. We can use it to distinguish different permissions.
2121
*/
22-
public class CommandSender {
22+
public final class CommandSender {
2323

2424
private static final Map<CommandSender, Session> SESSIONS = Maps.newHashMap();
2525

src/main/java/top/focess/qq/api/event/bot/BotPreSendMessageEvent.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package top.focess.qq.api.event.bot;
22

3-
import net.mamoe.mirai.contact.Contact;
43
import net.mamoe.mirai.event.events.MessagePreSendEvent;
54
import net.mamoe.mirai.message.data.Message;
65
import top.focess.qq.api.bot.Bot;
6+
import top.focess.qq.api.bot.Contact;
77
import top.focess.qq.api.event.ListenerHandler;
88

99
/**

src/main/java/top/focess/qq/api/event/bot/BotSendMessageEvent.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package top.focess.qq.api.event.bot;
22

3-
import net.mamoe.mirai.contact.Contact;
43
import net.mamoe.mirai.message.data.Message;
54
import top.focess.qq.api.bot.Bot;
5+
import top.focess.qq.api.bot.Contact;
66
import top.focess.qq.api.event.ListenerHandler;
77

88
/**

src/main/java/top/focess/qq/api/event/bot/FriendInputStatusEvent.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package top.focess.qq.api.event.bot;
22

33
import top.focess.qq.api.bot.Bot;
4+
import top.focess.qq.api.bot.Friend;
45
import top.focess.qq.api.event.ListenerHandler;
5-
import net.mamoe.mirai.contact.Friend;
66

77
/**
88
* Called when friend input status is changed

src/main/java/top/focess/qq/api/event/chat/StrangerChatEvent.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
package top.focess.qq.api.event.chat;
22

3-
import top.focess.qq.api.bot.Bot;
4-
import top.focess.qq.api.event.ListenerHandler;
5-
import net.mamoe.mirai.contact.Stranger;
63
import net.mamoe.mirai.message.data.MessageChain;
74
import net.mamoe.mirai.message.data.OnlineMessageSource;
5+
import top.focess.qq.api.bot.Bot;
6+
import top.focess.qq.api.bot.Stranger;
7+
import top.focess.qq.api.event.ListenerHandler;
88

99
/**
1010
* Called when a stranger chat with bot

src/main/java/top/focess/qq/api/event/message/StrangerMessageEvent.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package top.focess.qq.api.event.message;
22

3+
import net.mamoe.mirai.message.data.MessageChain;
34
import top.focess.qq.api.bot.Bot;
5+
import top.focess.qq.api.bot.Stranger;
46
import top.focess.qq.api.event.ListenerHandler;
5-
import net.mamoe.mirai.contact.Stranger;
6-
import net.mamoe.mirai.message.data.MessageChain;
77

88
/**
99
* Called when a stranger chat with bot (this does not execute any commands)

src/main/java/top/focess/qq/api/event/recall/FriendRecallEvent.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package top.focess.qq.api.event.recall;
22

33
import top.focess.qq.api.bot.Bot;
4+
import top.focess.qq.api.bot.Friend;
45
import top.focess.qq.api.event.ListenerHandler;
56
import top.focess.qq.api.event.bot.BotEvent;
6-
import net.mamoe.mirai.contact.Friend;
77

88
/**
99
* Called when a Friend recall a message

src/main/java/top/focess/qq/api/event/recall/GroupRecallEvent.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
package top.focess.qq.api.event.recall;
22

3-
import net.mamoe.mirai.contact.Group;
4-
import net.mamoe.mirai.contact.Member;
53
import org.checkerframework.checker.nullness.qual.NonNull;
64
import org.checkerframework.checker.nullness.qual.Nullable;
75
import top.focess.qq.api.bot.Bot;
6+
import top.focess.qq.api.bot.Group;
7+
import top.focess.qq.api.bot.Member;
88
import top.focess.qq.api.event.ListenerHandler;
99
import top.focess.qq.api.event.bot.BotEvent;
1010

src/main/java/top/focess/qq/api/event/request/FriendRequestEvent.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package top.focess.qq.api.event.request;
22

3-
import net.mamoe.mirai.contact.Group;
43
import org.checkerframework.checker.nullness.qual.NonNull;
54
import org.checkerframework.checker.nullness.qual.Nullable;
65
import top.focess.qq.api.bot.Bot;
6+
import top.focess.qq.api.bot.Group;
77
import top.focess.qq.api.event.ListenerHandler;
88
import top.focess.qq.api.event.bot.BotEvent;
99

src/main/java/top/focess/qq/api/event/request/GroupRequestEvent.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package top.focess.qq.api.event.request;
22

3-
import net.mamoe.mirai.contact.Friend;
43
import org.checkerframework.checker.nullness.qual.Nullable;
54
import top.focess.qq.api.bot.Bot;
5+
import top.focess.qq.api.bot.Friend;
66
import top.focess.qq.api.event.ListenerHandler;
77
import top.focess.qq.api.event.bot.BotEvent;
88

src/main/java/top/focess/qq/core/bot/SimpleBotManager.java

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -136,23 +136,23 @@ public Object onSolveUnsafeDeviceLoginVerify(@NotNull net.mamoe.mirai.Bot bot, @
136136
}
137137
}));
138138
listeners.add(bot.getEventChannel().subscribeAlways(MessageRecallEvent.GroupRecall.class, event -> {
139-
GroupRecallEvent e = new GroupRecallEvent(b,event.getAuthor(),event.getMessageIds(),event.getOperator());
139+
GroupRecallEvent e = new GroupRecallEvent(b, Objects.requireNonNull(SimpleMember.get(b, event.getAuthor())),event.getMessageIds(),SimpleMember.get(b,event.getOperator()));
140140
try {
141141
EventManager.submit(e);
142142
} catch (EventSubmitException ex) {
143143
FocessQQ.getLogger().thrLang("exception-submit-group-recall-event",ex);
144144
}
145145
}));
146146
listeners.add(bot.getEventChannel().subscribeAlways(MessageRecallEvent.FriendRecall.class, event -> {
147-
FriendRecallEvent e = new FriendRecallEvent(b,event.getAuthor(),event.getMessageIds());
147+
FriendRecallEvent e = new FriendRecallEvent(b, Objects.requireNonNull(SimpleFriend.get(b, event.getAuthor())),event.getMessageIds());
148148
try {
149149
EventManager.submit(e);
150150
} catch (EventSubmitException ex) {
151151
FocessQQ.getLogger().thrLang("exception-submit-friend-recall-event",ex);
152152
}
153153
}));
154154
listeners.add(bot.getEventChannel().subscribeAlways(NewFriendRequestEvent.class, event ->{
155-
FriendRequestEvent e = new FriendRequestEvent(b,event.getFromId(),event.getFromNick(),event.getFromGroup(),event.getMessage());
155+
FriendRequestEvent e = new FriendRequestEvent(b,event.getFromId(),event.getFromNick(),SimpleGroup.get(b,event.getFromGroup()),event.getMessage());
156156
try {
157157
EventManager.submit(e);
158158
} catch (EventSubmitException ex) {
@@ -164,7 +164,7 @@ public Object onSolveUnsafeDeviceLoginVerify(@NotNull net.mamoe.mirai.Bot bot, @
164164
else event.reject(e.isBlackList());
165165
}));
166166
listeners.add(bot.getEventChannel().subscribeAlways(BotInvitedJoinGroupRequestEvent.class, event->{
167-
GroupRequestEvent e = new GroupRequestEvent(b,event.getGroupId(),event.getGroupName(),event.getInvitor());
167+
GroupRequestEvent e = new GroupRequestEvent(b,event.getGroupId(),event.getGroupName(),SimpleFriend.get(b,event.getInvitor()));
168168
try {
169169
EventManager.submit(e);
170170
} catch (EventSubmitException ex) {
@@ -176,39 +176,39 @@ public Object onSolveUnsafeDeviceLoginVerify(@NotNull net.mamoe.mirai.Bot bot, @
176176
else event.ignore();
177177
}));
178178
listeners.add(bot.getEventChannel().subscribeAlways(FriendInputStatusChangedEvent.class,event->{
179-
FriendInputStatusEvent e = new FriendInputStatusEvent(b,event.getFriend(), event.getInputting());
179+
FriendInputStatusEvent e = new FriendInputStatusEvent(b, Objects.requireNonNull(SimpleFriend.get(b, event.getFriend())), event.getInputting());
180180
try {
181181
EventManager.submit(e);
182182
} catch (EventSubmitException ex) {
183183
FocessQQ.getLogger().thrLang("exception-submit-friend-input-status-event",ex);
184184
}
185185
}));
186186
listeners.add(bot.getEventChannel().subscribeAlways(StrangerMessageEvent.class,event->{
187-
StrangerChatEvent e = new StrangerChatEvent(b,event.getMessage(),event.getSender(),event.getSource());
187+
StrangerChatEvent e = new StrangerChatEvent(b,event.getMessage(), Objects.requireNonNull(SimpleStranger.get(b, event.getSender())),event.getSource());
188188
try {
189189
EventManager.submit(e);
190190
} catch (EventSubmitException ex) {
191191
FocessQQ.getLogger().thrLang("exception-submit-stranger-chat-event",ex);
192192
}
193193
}));
194194
listeners.add(bot.getEventChannel().subscribeAlways(MessagePostSendEvent.class,event->{
195-
BotSendMessageEvent e = new BotSendMessageEvent(b,event.getMessage(),event.getTarget());
195+
BotSendMessageEvent e = new BotSendMessageEvent(b,event.getMessage(),Objects.requireNonNull(SimpleContact.get(b, event.getTarget())));
196196
try {
197197
EventManager.submit(e);
198198
} catch (EventSubmitException ex) {
199199
FocessQQ.getLogger().thrLang("exception-submit-bot-send-message-event",ex);
200200
}
201201
}));
202202
listeners.add(bot.getEventChannel().subscribeAlways(MessagePreSendEvent.class,event->{
203-
BotPreSendMessageEvent e = new BotPreSendMessageEvent(b,event.getMessage(),event.getTarget(),event);
203+
BotPreSendMessageEvent e = new BotPreSendMessageEvent(b,event.getMessage(), Objects.requireNonNull(SimpleContact.get(b, event.getTarget())),event);
204204
try {
205205
EventManager.submit(e);
206206
} catch (EventSubmitException ex) {
207207
FocessQQ.getLogger().thrLang("exception-submit-bot-pre-send-message-event",ex);
208208
}
209209
}));
210210
listeners.add(bot.getEventChannel().subscribeAlways(MessageSyncEvent.class,event->{
211-
BotSendMessageEvent e = new BotSendMessageEvent(b,event.getMessage(),event.getSubject());
211+
BotSendMessageEvent e = new BotSendMessageEvent(b,event.getMessage(), Objects.requireNonNull(SimpleContact.get(b, event.getSubject())));
212212
try {
213213
EventManager.submit(e);
214214
} catch (EventSubmitException ex) {
@@ -310,23 +310,23 @@ public Object onSolveUnsafeDeviceLoginVerify(@NotNull net.mamoe.mirai.Bot bot, @
310310
}
311311
}));
312312
listeners.add(bot.getEventChannel().subscribeAlways(MessageRecallEvent.GroupRecall.class, event -> {
313-
GroupRecallEvent e = new GroupRecallEvent(b,event.getAuthor(),event.getMessageIds(),event.getOperator());
313+
GroupRecallEvent e = new GroupRecallEvent(b, Objects.requireNonNull(SimpleMember.get(b, event.getAuthor())),event.getMessageIds(),SimpleMember.get(b,event.getOperator()));
314314
try {
315315
EventManager.submit(e);
316316
} catch (EventSubmitException ex) {
317317
FocessQQ.getLogger().thrLang("exception-submit-group-recall-event",ex);
318318
}
319319
}));
320320
listeners.add(bot.getEventChannel().subscribeAlways(MessageRecallEvent.FriendRecall.class, event -> {
321-
FriendRecallEvent e = new FriendRecallEvent(b,event.getAuthor(),event.getMessageIds());
321+
FriendRecallEvent e = new FriendRecallEvent(b,Objects.requireNonNull(SimpleFriend.get(b, event.getAuthor())),event.getMessageIds());
322322
try {
323323
EventManager.submit(e);
324324
} catch (EventSubmitException ex) {
325325
FocessQQ.getLogger().thrLang("exception-submit-friend-recall-event",ex);
326326
}
327327
}));
328328
listeners.add(bot.getEventChannel().subscribeAlways(NewFriendRequestEvent.class, event ->{
329-
FriendRequestEvent e = new FriendRequestEvent(b,event.getFromId(),event.getFromNick(),event.getFromGroup(),event.getMessage());
329+
FriendRequestEvent e = new FriendRequestEvent(b,event.getFromId(),event.getFromNick(),SimpleGroup.get(b,event.getFromGroup()),event.getMessage());
330330
try {
331331
EventManager.submit(e);
332332
} catch (EventSubmitException ex) {
@@ -338,7 +338,7 @@ public Object onSolveUnsafeDeviceLoginVerify(@NotNull net.mamoe.mirai.Bot bot, @
338338
else event.reject(e.isBlackList());
339339
}));
340340
listeners.add(bot.getEventChannel().subscribeAlways(BotInvitedJoinGroupRequestEvent.class, event->{
341-
GroupRequestEvent e = new GroupRequestEvent(b,event.getGroupId(),event.getGroupName(),event.getInvitor());
341+
GroupRequestEvent e = new GroupRequestEvent(b,event.getGroupId(),event.getGroupName(),SimpleFriend.get(b,event.getInvitor()));
342342
try {
343343
EventManager.submit(e);
344344
} catch (EventSubmitException ex) {
@@ -350,15 +350,15 @@ public Object onSolveUnsafeDeviceLoginVerify(@NotNull net.mamoe.mirai.Bot bot, @
350350
else event.ignore();
351351
}));
352352
listeners.add(bot.getEventChannel().subscribeAlways(FriendInputStatusChangedEvent.class,event->{
353-
FriendInputStatusEvent e = new FriendInputStatusEvent(b,event.getFriend(), event.getInputting());
353+
FriendInputStatusEvent e = new FriendInputStatusEvent(b,Objects.requireNonNull(SimpleFriend.get(b, event.getFriend())), event.getInputting());
354354
try {
355355
EventManager.submit(e);
356356
} catch (EventSubmitException ex) {
357357
FocessQQ.getLogger().thrLang("exception-submit-friend-input-status-event",ex);
358358
}
359359
}));
360360
listeners.add(bot.getEventChannel().subscribeAlways(StrangerMessageEvent.class,event->{
361-
StrangerChatEvent e = new StrangerChatEvent(b,event.getMessage(),event.getSender(),event.getSource());
361+
StrangerChatEvent e = new StrangerChatEvent(b,event.getMessage(),Objects.requireNonNull(SimpleStranger.get(b, event.getSender())),event.getSource());
362362
try {
363363
EventManager.submit(e);
364364
} catch (EventSubmitException ex) {
@@ -367,23 +367,23 @@ public Object onSolveUnsafeDeviceLoginVerify(@NotNull net.mamoe.mirai.Bot bot, @
367367
}));
368368
listeners.add(bot.getEventChannel().subscribeAlways(MessagePostSendEvent.class,event->{
369369
System.out.println(event.getBot().getId() + " " + event.getMessage());
370-
BotSendMessageEvent e = new BotSendMessageEvent(b,event.getMessage(),event.getTarget());
370+
BotSendMessageEvent e = new BotSendMessageEvent(b,event.getMessage(),Objects.requireNonNull(SimpleContact.get(b, event.getTarget())));
371371
try {
372372
EventManager.submit(e);
373373
} catch (EventSubmitException ex) {
374374
FocessQQ.getLogger().thrLang("exception-submit-bot-send-message-event",ex);
375375
}
376376
}));
377377
listeners.add(bot.getEventChannel().subscribeAlways(MessagePreSendEvent.class,event->{
378-
BotPreSendMessageEvent e = new BotPreSendMessageEvent(b,event.getMessage(),event.getTarget(),event);
378+
BotPreSendMessageEvent e = new BotPreSendMessageEvent(b,event.getMessage(),Objects.requireNonNull(SimpleContact.get(b, event.getTarget())),event);
379379
try {
380380
EventManager.submit(e);
381381
} catch (EventSubmitException ex) {
382382
FocessQQ.getLogger().thrLang("exception-submit-bot-pre-send-message-event",ex);
383383
}
384384
}));
385385
listeners.add(bot.getEventChannel().subscribeAlways(MessageSyncEvent.class,event->{
386-
BotSendMessageEvent e = new BotSendMessageEvent(b,event.getMessage(),event.getSubject());
386+
BotSendMessageEvent e = new BotSendMessageEvent(b,event.getMessage(),Objects.requireNonNull(SimpleContact.get(b, event.getSubject())));
387387
try {
388388
EventManager.submit(e);
389389
} catch (EventSubmitException ex) {

src/main/java/top/focess/qq/core/bot/SimpleContact.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
package top.focess.qq.core.bot;
22

3+
import net.mamoe.mirai.contact.Friend;
4+
import net.mamoe.mirai.contact.Member;
5+
import net.mamoe.mirai.contact.Stranger;
6+
import org.jetbrains.annotations.Nullable;
37
import top.focess.qq.api.bot.Bot;
48
import top.focess.qq.api.bot.Contact;
59

@@ -13,6 +17,21 @@ public SimpleContact(Bot bot, net.mamoe.mirai.contact.Contact contact) {
1317
this.contact = contact;
1418
}
1519

20+
@Nullable
21+
public static Contact get(Bot bot, net.mamoe.mirai.contact.Contact contact) {
22+
if (contact == null)
23+
return null;
24+
if (contact.getBot().getId() != bot.getId())
25+
return null;
26+
if (contact instanceof Stranger)
27+
return SimpleStranger.get(bot,(Stranger) contact);
28+
if (contact instanceof Member)
29+
return SimpleMember.get(bot, (Member) contact);
30+
if (contact instanceof Friend)
31+
return SimpleFriend.get(bot, (Friend) contact);
32+
return null;
33+
}
34+
1635
@Override
1736
public long getId() {
1837
return this.contact.getId();

0 commit comments

Comments
 (0)