From 7d843c3f773495c47c8c5289f43f10984bc42328 Mon Sep 17 00:00:00 2001 From: LamGC Date: Sat, 11 Apr 2020 12:18:43 +0800 Subject: [PATCH] =?UTF-8?q?[Change]=20=E8=B0=83=E6=95=B4=E5=8C=85=E8=B7=AF?= =?UTF-8?q?=E5=BE=84;=20[Change]=20=E4=BF=AE=E6=94=B9=20CQPluginMain=20?= =?UTF-8?q?=E5=8A=9F=E8=83=BD,=20=E5=B0=86=E5=91=BD=E4=BB=A4=E5=A4=84?= =?UTF-8?q?=E7=90=86=E7=9A=84=E5=85=B7=E4=BD=93=E7=BB=86=E8=8A=82=E8=BF=81?= =?UTF-8?q?=E7=A7=BB;?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/net/lamgc/cgj/CQPluginMain.java | 171 ------------------ .../net/lamgc/cgj/{ => bot}/CQConfig.java | 4 +- .../java/net/lamgc/cgj/bot/CQPluginMain.java | 49 +++++ .../cgj/{ => bot}/RankingUpdateTimer.java | 8 +- 4 files changed, 54 insertions(+), 178 deletions(-) delete mode 100644 src/main/java/net/lamgc/cgj/CQPluginMain.java rename src/main/java/net/lamgc/cgj/{ => bot}/CQConfig.java (93%) create mode 100644 src/main/java/net/lamgc/cgj/bot/CQPluginMain.java rename src/main/java/net/lamgc/cgj/{ => bot}/RankingUpdateTimer.java (90%) diff --git a/src/main/java/net/lamgc/cgj/CQPluginMain.java b/src/main/java/net/lamgc/cgj/CQPluginMain.java deleted file mode 100644 index 1344348..0000000 --- a/src/main/java/net/lamgc/cgj/CQPluginMain.java +++ /dev/null @@ -1,171 +0,0 @@ -package net.lamgc.cgj; - -import com.google.common.base.Strings; -import net.lamgc.cgj.util.DateParser; -import net.lamgc.cgj.util.PagesQualityParser; -import net.lamgc.utils.base.runner.ArgumentsRunner; -import net.lamgc.utils.base.runner.ArgumentsRunnerConfig; -import net.lamgc.utils.base.runner.exception.DeveloperRunnerException; -import net.lamgc.utils.base.runner.exception.NoSuchCommandException; -import net.lamgc.utils.base.runner.exception.ParameterNoFoundException; -import net.lz1998.cq.event.message.CQDiscussMessageEvent; -import net.lz1998.cq.event.message.CQGroupMessageEvent; -import net.lz1998.cq.event.message.CQMessageEvent; -import net.lz1998.cq.event.message.CQPrivateMessageEvent; -import net.lz1998.cq.robot.CQPlugin; -import net.lz1998.cq.robot.CoolQ; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Component; - -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Objects; -import java.util.Properties; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -@Component -public class CQPluginMain extends CQPlugin { - - private final static String COMMAND_PREFIX = ".cgj"; - private final Logger log = LoggerFactory.getLogger("CQPluginMain@" + Integer.toHexString(this.hashCode())); - private final ArgumentsRunnerConfig runnerConfig = new ArgumentsRunnerConfig(); - private final ArgumentsRunner adminRunner; - private final ArgumentsRunner processRunner; - public final static Properties globalProp = new Properties(); - - public CQPluginMain() { - runnerConfig.setUseDefaultValueInsteadOfException(true); - runnerConfig.setCommandIgnoreCase(true); - runnerConfig.addStringParameterParser(new DateParser(new SimpleDateFormat("yyyy-MM-dd"))); - runnerConfig.addStringParameterParser(new PagesQualityParser()); - - processRunner = new ArgumentsRunner(CQProcess.class, runnerConfig); - adminRunner = new ArgumentsRunner(CQBotAdminProcess.class, runnerConfig); - - File globalPropFile = new File("./global.properties"); - if(globalPropFile.exists() && globalPropFile.isFile()) { - log.info("正在加载全局配置文件..."); - try { - globalProp.load(new FileInputStream(globalPropFile)); - log.info("全局配置文件加载完成."); - } catch (IOException e) { - log.error("加载全局配置文件时发生异常", e); - } - } else { - log.info("未找到全局配置文件,跳过加载."); - } - } - - @Override - public int onPrivateMessage(CoolQ cq, CQPrivateMessageEvent event) { - //log.info("私聊消息到达: 发送者[{}], 消息内容: {}", event.getSender().getUserId(), event.getMessage()); - return processMessage(cq, event); - } - - @Override - public int onGroupMessage(CoolQ cq, CQGroupMessageEvent event) { - //log.info("群消息到达: 群[{}], 发送者[{}], 消息内容: {}", event.getGroupId(), event.getSender().getUserId(), event.getMessage()); - return processMessage(cq, event); - } - - @Override - public int onDiscussMessage(CoolQ cq, CQDiscussMessageEvent event) { - //log.info("讨论组消息到达: 群[{}], 发送者[{}], 消息内容: {}", event.getDiscussId(), event.getSender().getUserId(), event.getMessage()); - return processMessage(cq, event); - } - - public int processMessage(CoolQ cq, CQMessageEvent event) { - String msg = event.getMessage(); - if(!msg.startsWith(COMMAND_PREFIX)) { - return MESSAGE_IGNORE; - } - - Pattern pattern = Pattern.compile("/\\s*(\".+?\"|[^:\\s])+((\\s*:\\s*(\".+?\"|[^\\s])+)|)|(\".+?\"|[^\"\\s])+"); - Matcher matcher = pattern.matcher(Strings.nullToEmpty(msg)); - ArrayList argsList = new ArrayList<>(); - while (matcher.find()) { - String arg = matcher.group(); - int startIndex = 0; - int endIndex = arg.length(); - if(arg.startsWith("\"")) { - while(arg.indexOf("\"", startIndex) == startIndex) { - startIndex++; - } - } - - if(arg.endsWith("\"")) { - while(arg.charAt(endIndex - 1) == '\"') { - endIndex--; - } - } - - argsList.add(arg.substring(startIndex, endIndex)); - } - String[] args = new String[argsList.size()]; - argsList.toArray(args); - log.debug("传入参数: {}", Arrays.toString(args)); - - log.warn("正在处理命令..."); - long time = System.currentTimeMillis(); - Object result; - try { - if(msg.toLowerCase().startsWith(COMMAND_PREFIX + "admin")) { - if(!String.valueOf(event.getUserId()).equals(globalProp.getProperty("admin.adminId"))) { - sendMessage(cq, event, "你没有执行该命令的权限!", false); - return MESSAGE_BLOCK; - } else { - result = adminRunner.run(new CQBotAdminProcess(), args.length <= 1 ? new String[0] : Arrays.copyOfRange(args, 1, args.length)); - } - } else { - result = processRunner.run(args.length <= 1 ? new String[0] : Arrays.copyOfRange(args, 1, args.length)); - } - } catch(NoSuchCommandException e) { - result = "没有这个命令!请使用“.cgj”查看帮助说明!"; - } catch(ParameterNoFoundException e) { - result = "命令缺少参数: " + e.getParameterName(); - } catch(DeveloperRunnerException e) { - log.error("执行命令时发生异常", e); - result = "命令执行时发生错误,无法完成!"; - } - log.warn("命令处理完成(耗时: {}ms)", System.currentTimeMillis() - time); - if(Objects.requireNonNull(result) instanceof String) { - try { - sendMessage(cq, event, (String) result, false); - } catch (Throwable e) { - log.error("发送消息时发生异常", e); - } - } - return MESSAGE_BLOCK; - } - - private final static Logger msgLog = LoggerFactory.getLogger("SendMsg"); - - /** - * 发送消息 - * @param cq CoolQ对象 - * @param event 消息事件对象 - * @param message 消息内容 - * @param auto_escape 消息内容是否作为纯文本发送(即不解析 CQ 码),只在 message 字段是字符串时有效. - */ - public static void sendMessage(CoolQ cq, CQMessageEvent event, String message, boolean auto_escape) { - msgLog.debug("发送消息:{}", message); - if(event instanceof CQPrivateMessageEvent) { - CQPrivateMessageEvent _event = (CQPrivateMessageEvent) event; - cq.sendPrivateMsg(_event.getSender().getUserId(), message, auto_escape); - } else if(event instanceof CQGroupMessageEvent) { - CQGroupMessageEvent _event = (CQGroupMessageEvent) event; - cq.sendGroupMsg(_event.getGroupId(), message, auto_escape); - } else if(event instanceof CQDiscussMessageEvent) { - CQDiscussMessageEvent _event = (CQDiscussMessageEvent) event; - cq.sendGroupMsg(_event.getDiscussId(), message, auto_escape).getData().getMessageId(); - } - } - - -} diff --git a/src/main/java/net/lamgc/cgj/CQConfig.java b/src/main/java/net/lamgc/cgj/bot/CQConfig.java similarity index 93% rename from src/main/java/net/lamgc/cgj/CQConfig.java rename to src/main/java/net/lamgc/cgj/bot/CQConfig.java index b0b31e6..c74fce5 100644 --- a/src/main/java/net/lamgc/cgj/CQConfig.java +++ b/src/main/java/net/lamgc/cgj/bot/CQConfig.java @@ -1,4 +1,4 @@ -package net.lamgc.cgj; +package net.lamgc.cgj.bot; import com.google.common.util.concurrent.ThreadFactoryBuilder; import net.lz1998.cq.CQGlobal; @@ -22,8 +22,6 @@ public class CQConfig { .setNameFormat("Plugin-ProcessThread-%d") .build() ); - - CQProcess.initialize(); } } diff --git a/src/main/java/net/lamgc/cgj/bot/CQPluginMain.java b/src/main/java/net/lamgc/cgj/bot/CQPluginMain.java new file mode 100644 index 0000000..287aee6 --- /dev/null +++ b/src/main/java/net/lamgc/cgj/bot/CQPluginMain.java @@ -0,0 +1,49 @@ +package net.lamgc.cgj.bot; + +import net.lamgc.cgj.bot.event.BotEventHandler; +import net.lamgc.cgj.bot.event.SpringCQMessageEvent; +import net.lamgc.utils.event.EventHandler; +import net.lz1998.cq.event.message.CQDiscussMessageEvent; +import net.lz1998.cq.event.message.CQGroupMessageEvent; +import net.lz1998.cq.event.message.CQMessageEvent; +import net.lz1998.cq.event.message.CQPrivateMessageEvent; +import net.lz1998.cq.robot.CQPlugin; +import net.lz1998.cq.robot.CoolQ; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +@Component +public class CQPluginMain extends CQPlugin implements EventHandler { + + public CQPluginMain() { + LoggerFactory.getLogger(this.toString()) + .info("BotEventHandler.COMMAND_PREFIX = {}", BotEventHandler.COMMAND_PREFIX); + } + + @Override + public int onPrivateMessage(CoolQ cq, CQPrivateMessageEvent event) { + //log.info("私聊消息到达: 发送者[{}], 消息内容: {}", event.getSender().getUserId(), event.getMessage()); + return processMessage(cq, event); + } + + @Override + public int onGroupMessage(CoolQ cq, CQGroupMessageEvent event) { + //log.info("群消息到达: 群[{}], 发送者[{}], 消息内容: {}", event.getGroupId(), event.getSender().getUserId(), event.getMessage()); + return processMessage(cq, event); + } + + @Override + public int onDiscussMessage(CoolQ cq, CQDiscussMessageEvent event) { + //log.info("讨论组消息到达: 群[{}], 发送者[{}], 消息内容: {}", event.getDiscussId(), event.getSender().getUserId(), event.getMessage()); + return processMessage(cq, event); + } + + public int processMessage(CoolQ cq, CQMessageEvent event) { + if(!BotEventHandler.match(event.getMessage())) { + return MESSAGE_IGNORE; + } + BotEventHandler.executor.executor(new SpringCQMessageEvent(cq, event)); + return MESSAGE_BLOCK; + } + +} diff --git a/src/main/java/net/lamgc/cgj/RankingUpdateTimer.java b/src/main/java/net/lamgc/cgj/bot/RankingUpdateTimer.java similarity index 90% rename from src/main/java/net/lamgc/cgj/RankingUpdateTimer.java rename to src/main/java/net/lamgc/cgj/bot/RankingUpdateTimer.java index 2f3ddf3..4fa7e8c 100644 --- a/src/main/java/net/lamgc/cgj/RankingUpdateTimer.java +++ b/src/main/java/net/lamgc/cgj/bot/RankingUpdateTimer.java @@ -1,4 +1,4 @@ -package net.lamgc.cgj; +package net.lamgc.cgj.bot; import net.lamgc.cgj.pixiv.PixivURL; import org.slf4j.Logger; @@ -14,7 +14,7 @@ import java.util.TimerTask; public class RankingUpdateTimer { private final Timer timer = new Timer("PixivRankingUpdate@" + Integer.toHexString(this.hashCode()), true); - private final Logger log = LoggerFactory.getLogger("RankingUpdateTimer@" + Integer.toHexString(this.hashCode())); + private final Logger log = LoggerFactory.getLogger(this.toString()); /** * 启动定时任务. @@ -33,7 +33,7 @@ public class RankingUpdateTimer { cal.set(Calendar.SECOND, 0); cal.set(Calendar.MILLISECOND, 0); - log.info("已设置排行榜定时更新, 首次运行时间: {}", cal.getTime()); + log.warn("已设置排行榜定时更新, 首次运行时间: {}", cal.getTime()); timer.schedule(new TimerTask() { @Override public void run() { @@ -65,7 +65,7 @@ public class RankingUpdateTimer { } log.info("当前排行榜类型: {}.{}, 正在更新...", rankingMode.name(), contentType.name()); try { - CQProcess.getRankingInfoByCache(contentType, rankingMode, calendar.getTime(), 1, 0, true); + BotCommandProcess.getRankingInfoByCache(contentType, rankingMode, calendar.getTime(), 1, 0, true); log.info("排行榜 {}.{} 更新完成.", rankingMode.name(), contentType.name()); } catch (IOException e) { log.error("排行榜 {}.{} 更新时发生异常", rankingMode.name(), contentType.name());