mirror of
https://github.com/LamGC/ContentGrabbingJi.git
synced 2025-04-30 06:37:36 +00:00
[Add] MiraiMain 增加对临时消息的支持;
[Change] MiraiMessageEvent 调整消息对象转换的方式, 通过静态方法转换Mirai的MessageEvent;
This commit is contained in:
parent
d45cd8aab5
commit
3f6c87da3c
@ -48,6 +48,7 @@ public class MiraiMain implements Closeable {
|
||||
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(TempMessageEvent.class, this::executeMessageEvent);
|
||||
Events.subscribeAlways(BotMuteEvent.class,
|
||||
event -> BotEventHandler.setMuteState(event.getGroup().getId(), true));
|
||||
Events.subscribeAlways(BotUnmuteEvent.class,
|
||||
@ -70,13 +71,13 @@ public class MiraiMain implements Closeable {
|
||||
((GroupMessageEvent) message).getGroup().getBotMuteRemaining() != 0);
|
||||
}
|
||||
}
|
||||
BotEventHandler.executeMessageEvent(new MiraiMessageEvent(message));
|
||||
BotEventHandler.executeMessageEvent(MiraiMessageEvent.covertEventObject(message));
|
||||
}
|
||||
|
||||
/**
|
||||
* 关闭机器人
|
||||
*/
|
||||
public void close() {
|
||||
public synchronized void close() {
|
||||
if(bot == null) {
|
||||
return;
|
||||
}
|
||||
|
@ -2,8 +2,11 @@ package net.lamgc.cgj.bot.framework.mirai.message;
|
||||
|
||||
import net.lamgc.cgj.bot.message.MessageSender;
|
||||
import net.lamgc.cgj.bot.message.MessageSource;
|
||||
import net.mamoe.mirai.message.FriendMessageEvent;
|
||||
import net.mamoe.mirai.message.GroupMessageEvent;
|
||||
import net.mamoe.mirai.message.MessageEvent;
|
||||
import net.mamoe.mirai.message.TempMessageEvent;
|
||||
import net.mamoe.mirai.message.data.MessageChain;
|
||||
import net.mamoe.mirai.message.data.MessageUtils;
|
||||
|
||||
import java.util.Objects;
|
||||
@ -13,6 +16,13 @@ public class MiraiMessageEvent extends net.lamgc.cgj.bot.event.MessageEvent {
|
||||
private final MessageEvent messageObject;
|
||||
private final MessageSender messageSender;
|
||||
|
||||
/**
|
||||
* 通过Mirai的MessageEvent转换成应用支持的MessageEvent.
|
||||
* @deprecated 请使用 {@link #covertEventObject(MessageEvent)}方法转换.
|
||||
* @param message 消息对象
|
||||
* @see #covertEventObject(MessageEvent)
|
||||
*/
|
||||
@Deprecated
|
||||
public MiraiMessageEvent(MessageEvent message) {
|
||||
super(message instanceof GroupMessageEvent ? ((GroupMessageEvent) message).getGroup().getId() : 0,
|
||||
message.getSender().getId(), getMessageBodyWithoutSource(message.getMessage().toString()));
|
||||
@ -24,6 +34,41 @@ public class MiraiMessageEvent extends net.lamgc.cgj.bot.event.MessageEvent {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过解析好的信息构造MessageEvent
|
||||
* @param messageObject 消息原始对象
|
||||
* @param groupId 群组Id, 非群聊或无需使用群聊时, 该参数为0
|
||||
* @param qqId 发送者Id, 不能为0
|
||||
* @param message 原始消息内容对象, 由构造方法内部解析
|
||||
*/
|
||||
private MiraiMessageEvent(MessageEvent messageObject, long groupId, long qqId, MessageChain message) {
|
||||
super(groupId, qqId, getMessageBodyWithoutSource(message.toString()));
|
||||
this.messageObject = Objects.requireNonNull(messageObject, "messageObject is null");
|
||||
this.messageSender = new MiraiMessageSender(messageObject.getSender(),
|
||||
groupId != 0 ? MessageSource.Group : MessageSource.Private);
|
||||
}
|
||||
|
||||
/**
|
||||
* 将Mirai原始MessageEvent转换成应用支持的MessageEvent对象
|
||||
* @param event 原始消息对象
|
||||
* @return 原始消息对象所对应的应用MessageEvent对象.
|
||||
* @throws IllegalArgumentException 当出现不支持的Mirai {@link MessageEvent}实现时将抛出异常.
|
||||
* @see MessageEvent 原始消息对象
|
||||
* @see net.lamgc.cgj.bot.event.MessageEvent 应用消息对象
|
||||
*/
|
||||
public static MiraiMessageEvent covertEventObject(MessageEvent event) throws IllegalArgumentException {
|
||||
if(event instanceof GroupMessageEvent) {
|
||||
return new MiraiMessageEvent(event,
|
||||
((GroupMessageEvent) event).getGroup().getId(), event.getSender().getId(), event.getMessage());
|
||||
} else if(event instanceof FriendMessageEvent) {
|
||||
return new MiraiMessageEvent(event, 0, event.getSender().getId(), event.getMessage());
|
||||
} else if(event instanceof TempMessageEvent) {
|
||||
return new MiraiMessageEvent(event, 0, event.getSender().getId(), event.getMessage());
|
||||
} else {
|
||||
throw new IllegalArgumentException("Unsupported event type: " + event.toString());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 将ContactMessage获得的消息内容删除 Mirai:source 并返回.
|
||||
* <p>该做法比较保守, 防止Mirai:source位置出现变动.</p>
|
||||
|
Loading…
Reference in New Issue
Block a user