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);
|
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(GroupMessageEvent.class, this::executeMessageEvent);
|
||||||
Events.subscribeAlways(FriendMessageEvent.class, this::executeMessageEvent);
|
Events.subscribeAlways(FriendMessageEvent.class, this::executeMessageEvent);
|
||||||
|
Events.subscribeAlways(TempMessageEvent.class, this::executeMessageEvent);
|
||||||
Events.subscribeAlways(BotMuteEvent.class,
|
Events.subscribeAlways(BotMuteEvent.class,
|
||||||
event -> BotEventHandler.setMuteState(event.getGroup().getId(), true));
|
event -> BotEventHandler.setMuteState(event.getGroup().getId(), true));
|
||||||
Events.subscribeAlways(BotUnmuteEvent.class,
|
Events.subscribeAlways(BotUnmuteEvent.class,
|
||||||
@ -70,13 +71,13 @@ public class MiraiMain implements Closeable {
|
|||||||
((GroupMessageEvent) message).getGroup().getBotMuteRemaining() != 0);
|
((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) {
|
if(bot == null) {
|
||||||
return;
|
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.MessageSender;
|
||||||
import net.lamgc.cgj.bot.message.MessageSource;
|
import net.lamgc.cgj.bot.message.MessageSource;
|
||||||
|
import net.mamoe.mirai.message.FriendMessageEvent;
|
||||||
import net.mamoe.mirai.message.GroupMessageEvent;
|
import net.mamoe.mirai.message.GroupMessageEvent;
|
||||||
import net.mamoe.mirai.message.MessageEvent;
|
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 net.mamoe.mirai.message.data.MessageUtils;
|
||||||
|
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
@ -13,6 +16,13 @@ public class MiraiMessageEvent extends net.lamgc.cgj.bot.event.MessageEvent {
|
|||||||
private final MessageEvent messageObject;
|
private final MessageEvent messageObject;
|
||||||
private final MessageSender messageSender;
|
private final MessageSender messageSender;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过Mirai的MessageEvent转换成应用支持的MessageEvent.
|
||||||
|
* @deprecated 请使用 {@link #covertEventObject(MessageEvent)}方法转换.
|
||||||
|
* @param message 消息对象
|
||||||
|
* @see #covertEventObject(MessageEvent)
|
||||||
|
*/
|
||||||
|
@Deprecated
|
||||||
public MiraiMessageEvent(MessageEvent message) {
|
public MiraiMessageEvent(MessageEvent message) {
|
||||||
super(message instanceof GroupMessageEvent ? ((GroupMessageEvent) message).getGroup().getId() : 0,
|
super(message instanceof GroupMessageEvent ? ((GroupMessageEvent) message).getGroup().getId() : 0,
|
||||||
message.getSender().getId(), getMessageBodyWithoutSource(message.getMessage().toString()));
|
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 并返回.
|
* 将ContactMessage获得的消息内容删除 Mirai:source 并返回.
|
||||||
* <p>该做法比较保守, 防止Mirai:source位置出现变动.</p>
|
* <p>该做法比较保守, 防止Mirai:source位置出现变动.</p>
|
||||||
|
Loading…
Reference in New Issue
Block a user