diff --git a/pom.xml b/pom.xml index 8acf37c..53c6f24 100644 --- a/pom.xml +++ b/pom.xml @@ -19,7 +19,7 @@ UTF-8 UTF-8 UTF-8 - 0.39.4 + 1.0-RC2-1 1.1.1 1.3.71 1.3.2 diff --git a/src/main/java/net/lamgc/cgj/bot/framework/mirai/MiraiMain.java b/src/main/java/net/lamgc/cgj/bot/framework/mirai/MiraiMain.java index 97e14fe..b16a694 100644 --- a/src/main/java/net/lamgc/cgj/bot/framework/mirai/MiraiMain.java +++ b/src/main/java/net/lamgc/cgj/bot/framework/mirai/MiraiMain.java @@ -9,9 +9,7 @@ import net.mamoe.mirai.BotFactoryJvm; import net.mamoe.mirai.event.events.BotMuteEvent; import net.mamoe.mirai.event.events.BotUnmuteEvent; import net.mamoe.mirai.japt.Events; -import net.mamoe.mirai.message.ContactMessage; -import net.mamoe.mirai.message.FriendMessage; -import net.mamoe.mirai.message.GroupMessage; +import net.mamoe.mirai.message.*; import net.mamoe.mirai.utils.BotConfiguration; import org.apache.commons.net.util.Base64; import org.slf4j.Logger; @@ -45,9 +43,11 @@ public class MiraiMain implements Closeable { return; } - bot = BotFactoryJvm.newBot(Long.parseLong(botProperties.getProperty("bot.qq", "0")), Base64.decodeBase64(botProperties.getProperty("bot.password", "")), new BotConfiguration()); - Events.subscribeAlways(GroupMessage.class, this::executeMessageEvent); - Events.subscribeAlways(FriendMessage.class, this::executeMessageEvent); + BotConfiguration configuration = new BotConfiguration(); + configuration.setProtocol(BotConfiguration.MiraiProtocol.ANDROID_PAD); + bot = BotFactoryJvm.newBot(Long.parseLong(botProperties.getProperty("bot.qq", "0")), Base64.decodeBase64(botProperties.getProperty("bot.password", "")), configuration); + Events.subscribeAlways(GroupMessageEvent.class, this::executeMessageEvent); + Events.subscribeAlways(FriendMessageEvent.class, this::executeMessageEvent); Events.subscribeAlways(BotMuteEvent.class, event -> BotEventHandler.setMuteState(event.getGroup().getId(), true)); Events.subscribeAlways(BotUnmuteEvent.class, @@ -62,20 +62,27 @@ public class MiraiMain implements Closeable { * 处理消息事件 * @param message 消息事件对象 */ - private void executeMessageEvent(ContactMessage message) { - if(message instanceof GroupMessage) { - GroupMessage groupMessage = (GroupMessage) message; - if(BotEventHandler.isMute(groupMessage.getGroup().getId(), true) == null) { - BotEventHandler.setMuteState(groupMessage.getGroup().getId(), - ((GroupMessage) message).getGroup().getBotMuteRemaining() != 0); + private void executeMessageEvent(MessageEvent message) { + if(message instanceof GroupMessageEvent) { + GroupMessageEvent GroupMessageEvent = (GroupMessageEvent) message; + if(BotEventHandler.isMute(GroupMessageEvent.getGroup().getId(), true) == null) { + BotEventHandler.setMuteState(GroupMessageEvent.getGroup().getId(), + ((GroupMessageEvent) message).getGroup().getBotMuteRemaining() != 0); } } BotEventHandler.executeMessageEvent(new MiraiMessageEvent(message)); } + /** + * 关闭机器人 + */ public void close() { + if(bot == null) { + return; + } log.warn("正在关闭机器人..."); bot.close(null); + bot = null; log.warn("机器人已关闭."); } diff --git a/src/main/java/net/lamgc/cgj/bot/framework/mirai/message/MiraiMessageEvent.java b/src/main/java/net/lamgc/cgj/bot/framework/mirai/message/MiraiMessageEvent.java index 2177eb5..baa8344 100644 --- a/src/main/java/net/lamgc/cgj/bot/framework/mirai/message/MiraiMessageEvent.java +++ b/src/main/java/net/lamgc/cgj/bot/framework/mirai/message/MiraiMessageEvent.java @@ -1,29 +1,27 @@ package net.lamgc.cgj.bot.framework.mirai.message; -import net.lamgc.cgj.bot.event.MessageEvent; import net.lamgc.cgj.bot.message.MessageSender; import net.lamgc.cgj.bot.message.MessageSource; -import net.mamoe.mirai.message.ContactMessage; -import net.mamoe.mirai.message.GroupMessage; +import net.mamoe.mirai.message.GroupMessageEvent; +import net.mamoe.mirai.message.MessageEvent; import net.mamoe.mirai.message.data.MessageUtils; import java.util.Objects; -public class MiraiMessageEvent extends MessageEvent { +public class MiraiMessageEvent extends net.lamgc.cgj.bot.event.MessageEvent { - private final ContactMessage messageObject; + private final MessageEvent messageObject; private final MessageSender messageSender; - public MiraiMessageEvent(ContactMessage message) { - super(message instanceof GroupMessage ? ((GroupMessage) message).getGroup().getId() : 0, + public MiraiMessageEvent(MessageEvent message) { + super(message instanceof GroupMessageEvent ? ((GroupMessageEvent) message).getGroup().getId() : 0, message.getSender().getId(), getMessageBodyWithoutSource(message.getMessage().toString())); this.messageObject = Objects.requireNonNull(message); - if(message instanceof GroupMessage) { - messageSender = new MiraiMessageSender(((GroupMessage) message).getGroup(), MessageSource.Group); + if(message instanceof GroupMessageEvent) { + messageSender = new MiraiMessageSender(((GroupMessageEvent) message).getGroup(), MessageSource.Group); } else { messageSender = new MiraiMessageSender(message.getSender(), MessageSource.Private); } - } /** diff --git a/src/main/java/net/lamgc/cgj/bot/framework/mirai/message/MiraiMessageSender.java b/src/main/java/net/lamgc/cgj/bot/framework/mirai/message/MiraiMessageSender.java index 149f306..fe502bb 100644 --- a/src/main/java/net/lamgc/cgj/bot/framework/mirai/message/MiraiMessageSender.java +++ b/src/main/java/net/lamgc/cgj/bot/framework/mirai/message/MiraiMessageSender.java @@ -60,7 +60,7 @@ public class MiraiMessageSender implements MessageSender { public int sendMessage(final String message) { log.debug("处理前的消息内容:\n{}", message); Message msgBody = processMessage(Objects.requireNonNull(message)); - log.debug("处理后的消息内容(可能出现乱序的情况, 但实际上顺序是没问题的):\n{}", msgBody); + log.debug("处理后的消息内容(可能出现乱序的情况, 但实际上顺序是没问题的):\n{}", msgBody.contentToString()); member.sendMessage(msgBody); return 0; } diff --git a/src/main/java/net/lamgc/cgj/bot/framework/mirai/message/MiraiMessageSenderFactory.java b/src/main/java/net/lamgc/cgj/bot/framework/mirai/message/MiraiMessageSenderFactory.java index f40616d..9dd8d0f 100644 --- a/src/main/java/net/lamgc/cgj/bot/framework/mirai/message/MiraiMessageSenderFactory.java +++ b/src/main/java/net/lamgc/cgj/bot/framework/mirai/message/MiraiMessageSenderFactory.java @@ -5,6 +5,8 @@ import net.lamgc.cgj.bot.message.MessageSenderFactory; import net.lamgc.cgj.bot.message.MessageSource; import net.mamoe.mirai.Bot; +import java.util.Objects; + public class MiraiMessageSenderFactory implements MessageSenderFactory { private final Bot bot; @@ -14,15 +16,11 @@ public class MiraiMessageSenderFactory implements MessageSenderFactory { } @Override - public MessageSender createMessageSender(MessageSource source, long id) throws Exception { - switch(source) { - case Group: - case Discuss: - return new MiraiMessageSender(bot.getGroup(id), source); - case Private: - return new MiraiMessageSender(bot.getFriend(id), source); - default: - throw new NoSuchFieldException(source.toString()); + public MessageSender createMessageSender(MessageSource source, long id) { + Objects.requireNonNull(source); + if(id <= 0) { + throw new IllegalArgumentException("id cannot be 0 or negative: " + id); } + return new MiraiMessageSender(bot, source, id); } }