282 lines
10 KiB
Java
282 lines
10 KiB
Java
package com.yutou.tools.utils;
|
||
|
||
import com.yutou.tools.ToolsApplication;
|
||
import com.yutou.tools.bangumi.BangumiTools;
|
||
import com.yutou.tools.interfaces.DownloadInterface;
|
||
import net.mamoe.mirai.Bot;
|
||
import net.mamoe.mirai.BotFactory;
|
||
import net.mamoe.mirai.event.GlobalEventChannel;
|
||
import net.mamoe.mirai.event.events.GroupMessageEvent;
|
||
import net.mamoe.mirai.message.data.Image;
|
||
import net.mamoe.mirai.message.data.MessageChainBuilder;
|
||
import net.mamoe.mirai.utils.BotConfiguration;
|
||
import net.mamoe.mirai.utils.ExternalResource;
|
||
|
||
import java.io.File;
|
||
import java.lang.reflect.Field;
|
||
import java.util.ArrayList;
|
||
import java.util.List;
|
||
import java.util.Objects;
|
||
import java.util.function.Consumer;
|
||
import java.util.regex.Matcher;
|
||
import java.util.regex.Pattern;
|
||
|
||
public class QQBotManager {
|
||
|
||
|
||
private static class QQCommands {
|
||
private final static String QQ_HELP = "!help";
|
||
private final static String QQ_UPDATE_IP = "!更新ip";
|
||
private final static String QQ_GET_IP = "!ip";
|
||
private final static String QQ_OPEN_PC = "!开机";
|
||
private final static String QQ_GET_VERSION = "!version";
|
||
private final static String QQ_CMD = "!cmd";
|
||
private final static String QQ_BANGUMI_TODAY = "!今日动画";
|
||
private final static String QQ_BANGUMI_SUB = "!查动画";
|
||
}
|
||
|
||
private static QQBotManager botManager = null;
|
||
private Bot bot;
|
||
private static final long qqGroup = 891655174L;
|
||
private boolean isLogin = false;
|
||
|
||
private QQBotManager() {
|
||
Object isRun = ConfigTools.load(ConfigTools.CONFIG, "qq_bot");
|
||
if (isRun != null && (boolean) isRun) {
|
||
isLogin = true;
|
||
init();
|
||
}
|
||
}
|
||
|
||
private void init() {
|
||
new Thread(new Runnable() {
|
||
@Override
|
||
public void run() {
|
||
long qq = 2476945931L;
|
||
String password = "zhang34864394";
|
||
if (ConfigTools.load(ConfigTools.CONFIG, "model").equals("dev")) {
|
||
qq = 3620756944L;
|
||
password = "UAs6YBYMyxJU";
|
||
}
|
||
|
||
bot = BotFactory.INSTANCE.newBot(qq, password, new BotConfiguration() {
|
||
{
|
||
setProtocol(MiraiProtocol.ANDROID_PAD);
|
||
fileBasedDeviceInfo("qq_bot_devices_info.json");
|
||
if (ConfigTools.load(ConfigTools.CONFIG, "model").equals("nas")) {
|
||
noBotLog();
|
||
noNetworkLog();
|
||
}
|
||
}
|
||
});
|
||
//Events.registerEvents(bot, new MessageListener());
|
||
GlobalEventChannel.INSTANCE.subscribeAlways(GroupMessageEvent.class, new MessageListener());
|
||
bot.login();
|
||
new Thread(new Runnable() {
|
||
@Override
|
||
public void run() {
|
||
try {
|
||
Thread.sleep(1000);
|
||
} catch (InterruptedException e) {
|
||
e.printStackTrace();
|
||
}
|
||
String str=sendMessage("姬妻酱上线拉~");
|
||
System.out.println(str);
|
||
|
||
}
|
||
}).start();
|
||
bot.join();
|
||
|
||
}
|
||
}).start();
|
||
|
||
}
|
||
|
||
public static QQBotManager getInstance() {
|
||
if (botManager == null) {
|
||
botManager = new QQBotManager();
|
||
}
|
||
return botManager;
|
||
}
|
||
|
||
public boolean isLogin() {
|
||
return isLogin;
|
||
}
|
||
|
||
private Image getImage(File file) {
|
||
if (bot != null) {
|
||
return Objects.requireNonNull(bot.getGroup(qqGroup)).uploadImage(ExternalResource.create(file));
|
||
}
|
||
return null;
|
||
}
|
||
|
||
private String getNotLoginQQ() {
|
||
return "没有登录QQ";
|
||
}
|
||
|
||
public void reportToDayBangumi() {
|
||
getInstance().sendMessage(BangumiTools.reportToDayBangumi());
|
||
}
|
||
public String sendMessage(String text) {
|
||
if (bot != null) {
|
||
try {
|
||
return Objects.requireNonNull(bot.getGroup(qqGroup)).sendMessage(text).toString();
|
||
} catch (Exception e) {
|
||
e.printStackTrace();
|
||
}
|
||
}
|
||
return getNotLoginQQ();
|
||
}
|
||
|
||
public String sendMessage(File imageFile, String text) {
|
||
try {
|
||
if (bot != null) {
|
||
Image image = getImage(imageFile);
|
||
MessageChainBuilder builder = new MessageChainBuilder();
|
||
if (image != null) {
|
||
builder.append(image);
|
||
}
|
||
builder.append(text);
|
||
return Objects.requireNonNull(bot.getGroup(qqGroup)).sendMessage(builder.asMessageChain()).toString();
|
||
}
|
||
} catch (Exception e) {
|
||
e.printStackTrace();
|
||
}
|
||
|
||
return getNotLoginQQ();
|
||
}
|
||
|
||
public String sendMessage(List<File> imgs, String text) {
|
||
if (bot != null) {
|
||
MessageChainBuilder builder = new MessageChainBuilder();
|
||
for (File img : imgs) {
|
||
builder.append(Objects.requireNonNull(getImage(img)));
|
||
}
|
||
builder.append(text);
|
||
return Objects.requireNonNull(bot.getGroup(qqGroup)).sendMessage(builder.asMessageChain()).toString();
|
||
}
|
||
return getNotLoginQQ();
|
||
}
|
||
|
||
public static List<String> getImages(String str) {
|
||
List<String> list = new ArrayList<>();
|
||
String regex = "<img(.*?)/img>";
|
||
Pattern pattern = Pattern.compile(regex);
|
||
Matcher matcher = pattern.matcher(str);
|
||
while (matcher.find()) {
|
||
list.add(matcher.group().replace("<img", "")
|
||
.replace("/img>", "")
|
||
.trim());
|
||
}
|
||
return list;
|
||
}
|
||
|
||
public static void main(String[] args) {
|
||
getInstance();
|
||
}
|
||
|
||
private static class MessageListener implements Consumer<GroupMessageEvent> {
|
||
|
||
@Override
|
||
public void accept(GroupMessageEvent event) {
|
||
if (event.getGroup().getId() == qqGroup) {
|
||
String msg = event.getMessage().contentToString();
|
||
msg = msg.replace("!", "!").toLowerCase();
|
||
switch (msg) {
|
||
case QQCommands.QQ_OPEN_PC:
|
||
RedisTools.Consumer.system("openPC", null);
|
||
break;
|
||
case QQCommands.QQ_UPDATE_IP:
|
||
RedisTools.Consumer.system("updateIP", null);
|
||
break;
|
||
case QQCommands.QQ_GET_IP:
|
||
RedisTools.Consumer.bot("getip");
|
||
break;
|
||
case QQCommands.QQ_GET_VERSION:
|
||
sendVersion();
|
||
break;
|
||
case QQCommands.QQ_BANGUMI_TODAY:
|
||
QQBotManager.getInstance().sendMessage(BangumiTools.reportToDayBangumi());
|
||
break;
|
||
case QQCommands.QQ_HELP:
|
||
StringBuilder builder=new StringBuilder();
|
||
for (Field field : QQCommands.class.getDeclaredFields()) {
|
||
try {
|
||
field.setAccessible(true);
|
||
builder.append(field.get(null)).append("\n");
|
||
} catch (IllegalAccessException e) {
|
||
e.printStackTrace();
|
||
}
|
||
}
|
||
getInstance().sendMessage(builder.toString());
|
||
break;
|
||
default:
|
||
if (msg.startsWith(QQCommands.QQ_CMD)) {
|
||
RedisTools.Consumer.system("cmd", msg.replace(QQCommands.QQ_CMD, ""));
|
||
} else if (msg.startsWith(QQCommands.QQ_BANGUMI_SUB)) {
|
||
String info = null;
|
||
try {
|
||
int id = Integer.parseInt(msg.replace(QQCommands.QQ_BANGUMI_SUB, "").trim());
|
||
info = BangumiTools.reportBangumiInfo(id);
|
||
} catch (Exception e) {
|
||
String key=msg.replace(QQCommands.QQ_BANGUMI_SUB, "").trim();
|
||
info = BangumiTools.reportSearchBangumi(key);
|
||
}
|
||
List<String> imgs=new ArrayList<>();
|
||
if (info.contains("<img") && info.contains(" /img>")) {
|
||
imgs = getImages(info);
|
||
for (String img : imgs) {
|
||
info=info.replace("<img "+img+" /img>","");
|
||
}
|
||
}
|
||
sendImagesMsg(imgs,info);
|
||
}
|
||
}
|
||
}/*else{
|
||
sendMessage("群:"+event.getGroup().getId()+" 发来消息:\n"+event.getMessage().contentToString());
|
||
}*/
|
||
}
|
||
private List<File> files;
|
||
private int index=0;
|
||
private void sendImagesMsg(List<String> imgs,String text){
|
||
files=new ArrayList<>();
|
||
index=0;
|
||
if(imgs.size()==0){
|
||
getInstance().sendMessage(text);
|
||
return;
|
||
}
|
||
for (String img : imgs) {
|
||
Tools.download(img, new DownloadInterface() {
|
||
@Override
|
||
public void onDownload(String file) {
|
||
super.onDownload(file);
|
||
files.add(new File(file));
|
||
send(imgs.size(), text);
|
||
}
|
||
|
||
@Override
|
||
public void onError(Exception e) {
|
||
super.onError(e);
|
||
index++;
|
||
send(imgs.size(),text);
|
||
}
|
||
});
|
||
}
|
||
}
|
||
private void send(int size,String text){
|
||
if((files.size()+index)==size){
|
||
String str= getInstance().sendMessage(files,text);
|
||
System.out.println("str = "+str);
|
||
}
|
||
}
|
||
private void sendVersion() {
|
||
String localVersion = ToolsApplication.version;
|
||
String serverVersion = HttpTools.get("http://tools.yutou233.cn:8000/public/version.do?token=zIrsh9TUZP2lfRW753PannG49E7VJvor");
|
||
String msg = "本地版本:" + localVersion + "\n" + "服务器版本:" + serverVersion;
|
||
QQBotManager.getInstance().sendMessage(msg);
|
||
Tools.sendServer("服务版本查询", msg);
|
||
}
|
||
|
||
}
|
||
}
|