[Change] SpringCQMessageEvent 更新 getImageUrl 具体实现, 首选BotCode中url地址;

[Change] BotEventHandler 调整initial代码;
This commit is contained in:
LamGC 2020-04-16 20:38:04 +08:00
parent 9f58e186d5
commit 99cdfb7598
2 changed files with 27 additions and 9 deletions

View File

@ -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@<init>");
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() {

View File

@ -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,13 +50,17 @@ 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) {
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");
@ -63,6 +68,7 @@ public class SpringCQMessageEvent extends MessageEvent {
String file = cq.getImage(imageFileName).getData().getFile().replaceAll("\\\\", "/");
return "http://" + remoteAddress.getHostString() + ":5700/data" + file.substring(file.lastIndexOf("/data") + 5);
}
}
@Override
public Object getRawMessage() {