mirror of
https://github.com/LamGC/ContentGrabbingJi.git
synced 2025-04-30 06:37:36 +00:00
[Add] MessageSenderBuilder, MessageSenderFactory 增加用于创建MessageSender而又与平台无关的Builder, 初步增加对应Factory;
This commit is contained in:
parent
620c3785ad
commit
73ae9a268b
@ -16,6 +16,8 @@ import org.springframework.stereotype.Component;
|
|||||||
public class CQPluginMain extends CQPlugin implements EventHandler {
|
public class CQPluginMain extends CQPlugin implements EventHandler {
|
||||||
|
|
||||||
public CQPluginMain() {
|
public CQPluginMain() {
|
||||||
|
// TODO(LamGC, 2020.04.21): SpringCQ无法适配MessageSenderBuilder
|
||||||
|
BotEventHandler.preLoad();
|
||||||
LoggerFactory.getLogger(this.toString())
|
LoggerFactory.getLogger(this.toString())
|
||||||
.info("BotEventHandler.COMMAND_PREFIX = {}", BotEventHandler.COMMAND_PREFIX);
|
.info("BotEventHandler.COMMAND_PREFIX = {}", BotEventHandler.COMMAND_PREFIX);
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,8 @@ package net.lamgc.cgj.bot;
|
|||||||
|
|
||||||
import net.lamgc.cgj.bot.event.BotEventHandler;
|
import net.lamgc.cgj.bot.event.BotEventHandler;
|
||||||
import net.lamgc.cgj.bot.event.MiraiMessageEvent;
|
import net.lamgc.cgj.bot.event.MiraiMessageEvent;
|
||||||
|
import net.lamgc.cgj.bot.message.MessageSenderBuilder;
|
||||||
|
import net.lamgc.cgj.bot.message.MiraiMessageSenderFactory;
|
||||||
import net.mamoe.mirai.Bot;
|
import net.mamoe.mirai.Bot;
|
||||||
import net.mamoe.mirai.japt.Events;
|
import net.mamoe.mirai.japt.Events;
|
||||||
import net.mamoe.mirai.message.FriendMessage;
|
import net.mamoe.mirai.message.FriendMessage;
|
||||||
@ -44,6 +46,8 @@ public class MiraiMain implements Closeable {
|
|||||||
Events.subscribeAlways(GroupMessage.class, (msg) -> BotEventHandler.executor.executor(new MiraiMessageEvent(msg)));
|
Events.subscribeAlways(GroupMessage.class, (msg) -> BotEventHandler.executor.executor(new MiraiMessageEvent(msg)));
|
||||||
Events.subscribeAlways(FriendMessage.class, (msg) -> BotEventHandler.executor.executor(new MiraiMessageEvent(msg)));
|
Events.subscribeAlways(FriendMessage.class, (msg) -> BotEventHandler.executor.executor(new MiraiMessageEvent(msg)));
|
||||||
bot.login();
|
bot.login();
|
||||||
|
MessageSenderBuilder.setCurrentMessageSenderFactory(new MiraiMessageSenderFactory(bot));
|
||||||
|
BotEventHandler.preLoad();
|
||||||
bot.join();
|
bot.join();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -0,0 +1,43 @@
|
|||||||
|
package net.lamgc.cgj.bot.message;
|
||||||
|
|
||||||
|
import java.util.concurrent.atomic.AtomicReference;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 消息发送器构造
|
||||||
|
*/
|
||||||
|
public final class MessageSenderBuilder {
|
||||||
|
|
||||||
|
private final static AtomicReference<MessageSenderFactory> currentFactory = new AtomicReference<>();
|
||||||
|
|
||||||
|
private MessageSenderBuilder() {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取消息发送器
|
||||||
|
* @param source 消息源类型
|
||||||
|
* @param id 消息源Id
|
||||||
|
* @return 返回新建的发送器
|
||||||
|
*/
|
||||||
|
public static MessageSender getMessageSender(MessageSource source, long id) {
|
||||||
|
MessageSenderFactory messageSenderFactory = currentFactory.get();
|
||||||
|
if(messageSenderFactory == null) {
|
||||||
|
throw new IllegalStateException("The factory is not ready");
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
return messageSenderFactory.createMessageSender(source, id);
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new IllegalStateException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置消息发送器工厂
|
||||||
|
* @param factory 工厂对象
|
||||||
|
*/
|
||||||
|
public static void setCurrentMessageSenderFactory(MessageSenderFactory factory) {
|
||||||
|
if(currentFactory.get() != null) {
|
||||||
|
throw new IllegalStateException("Factory already exists");
|
||||||
|
}
|
||||||
|
currentFactory.set(factory);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,13 @@
|
|||||||
|
package net.lamgc.cgj.bot.message;
|
||||||
|
|
||||||
|
public interface MessageSenderFactory {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过Id创建发送器
|
||||||
|
* @param source 消息源
|
||||||
|
* @param id 消息源id
|
||||||
|
* @return 如果成功返回MessageSender
|
||||||
|
*/
|
||||||
|
MessageSender createMessageSender(MessageSource source, long id) throws Exception;
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,25 @@
|
|||||||
|
package net.lamgc.cgj.bot.message;
|
||||||
|
|
||||||
|
import net.mamoe.mirai.Bot;
|
||||||
|
|
||||||
|
public class MiraiMessageSenderFactory implements MessageSenderFactory {
|
||||||
|
|
||||||
|
private final Bot bot;
|
||||||
|
|
||||||
|
public MiraiMessageSenderFactory(Bot bot) {
|
||||||
|
this.bot = bot;
|
||||||
|
}
|
||||||
|
|
||||||
|
@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());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,17 @@
|
|||||||
|
package net.lamgc.cgj.bot.message;
|
||||||
|
|
||||||
|
import net.lz1998.cq.robot.CoolQ;
|
||||||
|
|
||||||
|
public class SpringCQMessageSenderFactory implements MessageSenderFactory {
|
||||||
|
|
||||||
|
private final CoolQ coolQ;
|
||||||
|
|
||||||
|
public SpringCQMessageSenderFactory(CoolQ coolQ) {
|
||||||
|
this.coolQ = coolQ;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public MessageSender createMessageSender(MessageSource source, long id) {
|
||||||
|
return new SpringCQMessageSender(coolQ, source, id);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user