diff --git a/src/main/java/net/lamgc/cgj/bot/event/BotEventHandler.java b/src/main/java/net/lamgc/cgj/bot/event/BotEventHandler.java index b4d136e..3e0b811 100644 --- a/src/main/java/net/lamgc/cgj/bot/event/BotEventHandler.java +++ b/src/main/java/net/lamgc/cgj/bot/event/BotEventHandler.java @@ -62,7 +62,19 @@ public class BotEventHandler implements EventHandler { .build() )); + private static boolean initialled = false; static { + initial(); + } + + public synchronized static void initial() { + if(initialled) { + Logger logger = LoggerFactory.getLogger("BotEventHandler@"); + logger.warn("BotEventHandler已经执行过初始化方法, 可能存在多次执行的问题, 堆栈信息: \n {}", + Throwables.getStackTraceAsString(new Exception())); + return; + } + executor.setEventUncaughtExceptionHandler(new EventUncaughtExceptionHandler() { private final Logger log = LoggerFactory.getLogger("EventUncaughtExceptionHandler"); @Override @@ -77,10 +89,10 @@ public class BotEventHandler implements EventHandler { }); try { executor.addHandler(new BotEventHandler()); - executor.addHandler(new TestEventHandler()); } catch (IllegalAccessException e) { LoggerFactory.getLogger("BotEventHandler@Static").error("添加Handler时发生异常", e); } + initialled = true; } private BotEventHandler() { diff --git a/src/main/java/net/lamgc/cgj/bot/event/SpringCQMessageEvent.java b/src/main/java/net/lamgc/cgj/bot/event/SpringCQMessageEvent.java index 89f1aa8..a3ff50a 100644 --- a/src/main/java/net/lamgc/cgj/bot/event/SpringCQMessageEvent.java +++ b/src/main/java/net/lamgc/cgj/bot/event/SpringCQMessageEvent.java @@ -1,5 +1,6 @@ package net.lamgc.cgj.bot.event; +import net.lamgc.cgj.bot.BotCode; import net.lz1998.cq.event.message.CQDiscussMessageEvent; import net.lz1998.cq.event.message.CQGroupMessageEvent; import net.lz1998.cq.event.message.CQMessageEvent; @@ -49,19 +50,24 @@ public class SpringCQMessageEvent extends MessageEvent { } /** - * 该功能在CQ上需要CQHttp插件启用http接口调用和serve_data_files为true. - * 如使用本方法, 则对方需开启5700端口, 且可能会影响多机器人处理. - * @param imageFileName 图片文件名 + * 通过CQ码获取图片下载链接. + * @param imageFileName 图片完整CQ码 * @return 图片下载链接 */ @Override public String getImageUrl(String imageFileName) { - InetSocketAddress remoteAddress = cq.getBotSession().getRemoteAddress(); - if(remoteAddress == null) { - throw new IllegalStateException("remoteAddress failed to get"); + BotCode code; + if(imageFileName.startsWith("[CQ:") && imageFileName.endsWith("]")) { + code = BotCode.parse(imageFileName); + return code.getParameter("url"); + } else { + InetSocketAddress remoteAddress = cq.getBotSession().getRemoteAddress(); + if(remoteAddress == null) { + throw new IllegalStateException("remoteAddress failed to get"); + } + String file = cq.getImage(imageFileName).getData().getFile().replaceAll("\\\\", "/"); + return "http://" + remoteAddress.getHostString() + ":5700/data" + file.substring(file.lastIndexOf("/data") + 5); } - String file = cq.getImage(imageFileName).getData().getFile().replaceAll("\\\\", "/"); - return "http://" + remoteAddress.getHostString() + ":5700/data" + file.substring(file.lastIndexOf("/data") + 5); } @Override