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 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 getImages(String str) { List list = new ArrayList<>(); String regex = ""; Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(str); while (matcher.find()) { list.add(matcher.group().replace("", "") .trim()); } return list; } public static void main(String[] args) { getInstance(); } private static class MessageListener implements Consumer { @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 imgs=new ArrayList<>(); if (info.contains("")) { imgs = getImages(info); for (String img : imgs) { info=info.replace("",""); } } sendImagesMsg(imgs,info); } } }/*else{ sendMessage("群:"+event.getGroup().getId()+" 发来消息:\n"+event.getMessage().contentToString()); }*/ } private List files; private int index=0; private void sendImagesMsg(List 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); } } }