ContentGrabbingJi/src/main/java/net/lamgc/cgj/bot/event/SpringCQMessageEvent.java

65 lines
2.5 KiB
Java

package net.lamgc.cgj.bot.event;
import net.lamgc.cgj.bot.BotCode;
import net.lamgc.cgj.bot.message.MessageSender;
import net.lamgc.cgj.bot.message.MessageSource;
import net.lamgc.cgj.bot.message.SpringCQMessageSender;
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.robot.CoolQ;
import java.net.InetSocketAddress;
import java.util.Objects;
public class SpringCQMessageEvent extends MessageEvent {
private final CoolQ cq;
private final MessageSender messageSender;
public SpringCQMessageEvent(CoolQ cq, CQMessageEvent messageEvent) {
super(messageEvent instanceof CQGroupMessageEvent ? (
(CQGroupMessageEvent) messageEvent).getGroupId() :
messageEvent instanceof CQDiscussMessageEvent ?
((CQDiscussMessageEvent) messageEvent).getDiscussId() : 0,
messageEvent.getUserId(), messageEvent.getMessage());
this.cq = Objects.requireNonNull(cq);
MessageSource source;
if(messageEvent instanceof CQGroupMessageEvent) {
source = MessageSource.Group;
} else if (messageEvent instanceof CQDiscussMessageEvent) {
source = MessageSource.Discuss;
} else {
source = MessageSource.Private;
}
messageSender = new SpringCQMessageSender(cq, source, source == MessageSource.Private ? getFromQQ() : getFromGroup());
}
@Override
public int sendMessage(final String message) {
return messageSender.sendMessage(message);
}
/**
* 通过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");
}
String file = cq.getImage(imageFileName).getData().getFile().replaceAll("\\\\", "/");
return "http://" + remoteAddress.getHostString() + ":5700/data" + file.substring(file.lastIndexOf("/data") + 5);
}
}
}