移植之前版本所有功能

This commit is contained in:
2021-12-07 21:59:41 +08:00
parent 06cb246af7
commit 697bf302ac
24 changed files with 1127 additions and 258 deletions

View File

@@ -0,0 +1,15 @@
package com.yutou.qqbot.models.Animal;
import com.yutou.qqbot.models.Model;
public class TurnipProphet extends Model {
@Override
public boolean isUserPublic() {
return false;
}
@Override
public String[] getUsePowers() {
return new String[0];
}
}

View File

@@ -0,0 +1,126 @@
package com.yutou.qqbot.models.Commands;
import com.yutou.qqbot.QQBotManager;
import com.yutou.qqbot.interfaces.DownloadInterface;
import com.yutou.qqbot.models.Model;
import com.yutou.qqbot.utlis.BangumiTools;
import com.yutou.qqbot.utlis.HttpTools;
import com.yutou.qqbot.utlis.Log;
import com.yutou.qqbot.utlis.RedisTools;
import net.mamoe.mirai.event.events.MessageEvent;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Bangumi extends Model {
@Override
public void onMessage(Long qq, MessageEvent event, boolean isGroup) {
super.onMessage(qq, event, isGroup);
if(!isGroupPower){
System.err.println(qq+" 没有权限");
return;
}
switch (msg){
case QQGroupCommands.QQ_BANGUMI_TODAY -> {
RedisTools.remove("reportToDayBangumi");
QQBotManager.getInstance().sendMessage(qq, BangumiTools.reportToDayBangumi());
}
case QQGroupCommands.QQ_BANGUMI_LIST -> {
QQBotManager.getInstance().sendMessage(qq,"获取中...");
QQBotManager.getInstance().sendMessage(qq,BangumiTools.reportBangumiList());
}default -> {
if(msg.startsWith(QQGroupCommands.QQ_BANGUMI_SUB)){
subBanGumi(qq,msg);
}
}
}
}
private void subBanGumi(long qq,String msg){
List<String> infos = null;
try {
int id = Integer.parseInt(msg.replace(QQGroupCommands.QQ_BANGUMI_SUB, "").trim());
infos = BangumiTools.reportBangumiInfo(id);
} catch (Exception e) {
String key = msg.replace(QQGroupCommands.QQ_BANGUMI_SUB, "").trim();
infos = BangumiTools.reportSearchBangumi(key);
}
for (String info : infos) {
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,qq, info);
}
}
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;
}
private List<File> files;
private int index = 0;
private void sendImagesMsg(List<String> imgs,Long qq, String text) {
files = new ArrayList<>();
index = 0;
if (imgs.size() == 0) {
QQBotManager.getInstance().sendMessage(qq,text);
return;
}
for (String img : imgs) {
HttpTools.download(img,null, new DownloadInterface() {
@Override
public void onDownload(File file) {
super.onDownload(file);
files.add(file);
send(imgs.size(),qq, text);
}
@Override
public void onError(Exception e) {
super.onError(e);
index++;
send(imgs.size(),qq, text);
}
});
}
}
private void send(int size,Long qq, String text) {
if ((files.size() + index) == size) {
String str = QQBotManager.getInstance().sendMessage(files,qq, text);
Log.i("str = " + str);
}
}
@Override
public boolean isUserPublic() {
return true;
}
@Override
public String[] getUsePowers() {
return new String[]{
QQGroupCommands.QQ_BANGUMI_SUB,
QQGroupCommands.QQ_BANGUMI_LIST,
QQGroupCommands.QQ_BANGUMI_TODAY
};
}
}

View File

@@ -0,0 +1,36 @@
package com.yutou.qqbot.models.Commands.System;
import com.yutou.qqbot.models.Model;
import com.yutou.qqbot.models.audio.QQAudio;
import net.mamoe.mirai.event.events.MessageEvent;
public class Audio extends Model {
@Override
public boolean isUserPublic() {
return false;
}
@Override
public String[] getUsePowers() {
return new String[]{
QQGroupCommands.QQ_AUDIO,
QQGroupCommands.QQ_AUDIO_OPEN_LAMP,
QQGroupCommands.QQ_AUDIO_OPEN_AIR
};
}
@Override
public void onMessage(Long qq, MessageEvent event, boolean isGroup) {
super.onMessage(qq, event, isGroup);
switch (msg){
case QQGroupCommands.QQ_AUDIO_OPEN_LAMP -> QQAudio.playText("小爱同学,开灯");
case QQGroupCommands.QQ_AUDIO_OPEN_AIR -> QQAudio.playText("小爱同学,开空调");
default -> {
if(msg.startsWith(QQGroupCommands.QQ_AUDIO)){
QQAudio.playText(msg.replace(QQGroupCommands.QQ_AUDIO, ""));
}
}
}
}
}

View File

@@ -0,0 +1,29 @@
package com.yutou.qqbot.models.Commands.System;
import com.yutou.qqbot.QQBotManager;
import com.yutou.qqbot.models.Model;
import com.yutou.qqbot.utlis.HttpTools;
import net.mamoe.mirai.event.events.MessageEvent;
public class BtFlash extends Model {
@Override
public boolean isUserPublic() {
return false;
}
@Override
public String[] getUsePowers() {
return new String[]{
QQGroupCommands.QQ_BT_RELOAD
};
}
@Override
public void onMessage(Long qq, MessageEvent event, boolean isGroup) {
super.onMessage(qq, event, isGroup);
if(msg.equals(QQGroupCommands.QQ_BT_RELOAD)){
HttpTools.get("http://192.168.31.88:8000/bt/down.do");
QQBotManager.getInstance().sendMessage(qq,"已提交");
}
}
}

View File

@@ -0,0 +1,28 @@
package com.yutou.qqbot.models.Commands.System;
import com.yutou.qqbot.models.Model;
import com.yutou.qqbot.utlis.RedisTools;
import net.mamoe.mirai.event.events.MessageEvent;
public class Cmd extends Model {
@Override
public boolean isUserPublic() {
return false;
}
@Override
public String[] getUsePowers() {
return new String[]{
QQGroupCommands.QQ_CMD
};
}
@Override
public void onMessage(Long qq, MessageEvent event, boolean isGroup) {
super.onMessage(qq, event, isGroup);
if (msg.startsWith(QQGroupCommands.QQ_CMD)) {
RedisTools.Consumer.system("cmd", msg.replace(QQGroupCommands.QQ_CMD, ""));
}
}
}

View File

@@ -0,0 +1,26 @@
package com.yutou.qqbot.models.Commands.System;
import com.yutou.qqbot.QQBotManager;
import com.yutou.qqbot.models.Model;
import net.mamoe.mirai.event.events.MessageEvent;
public class Help extends Model {
@Override
public boolean isUserPublic() {
return true;
}
@Override
public String[] getUsePowers() {
return new String[0];
}
@Override
public void onMessage(Long qq, MessageEvent event, boolean isGroup) {
super.onMessage(qq, event, isGroup);
if(msg.equals(QQGroupCommands.QQ_HELP)){
QQBotManager.getInstance().sendMessage(qq,getCommands(QQGroupCommands.class).toString());
}
}
}

View File

@@ -0,0 +1,27 @@
package com.yutou.qqbot.models.Commands.System;
import com.yutou.qqbot.models.Model;
import com.yutou.qqbot.utlis.RedisTools;
import net.mamoe.mirai.event.events.MessageEvent;
public class IP extends Model {
@Override
public boolean isUserPublic() {
return false;
}
@Override
public String[] getUsePowers() {
return new String[]{
QQGroupCommands.QQ_GET_IP
};
}
@Override
public void onMessage(Long qq, MessageEvent event, boolean isGroup) {
super.onMessage(qq, event, isGroup);
if(msg.equals(QQGroupCommands.QQ_GET_IP)){
RedisTools.Consumer.bot("getip");
}
}
}

View File

@@ -0,0 +1,30 @@
package com.yutou.qqbot.models.Commands.System;
import com.yutou.qqbot.models.Model;
import com.yutou.qqbot.utlis.RedisTools;
import net.mamoe.mirai.event.events.MessageEvent;
import java.text.SimpleDateFormat;
import java.util.Date;
public class OpenPC extends Model {
@Override
public boolean isUserPublic() {
return false;
}
@Override
public String[] getUsePowers() {
return new String[]{
QQGroupCommands.QQ_OPEN_PC
};
}
@Override
public void onMessage(Long qq, MessageEvent event, boolean isGroup) {
super.onMessage(qq, event, isGroup);
if(msg.equals(QQGroupCommands.QQ_OPEN_PC)){
RedisTools.Consumer.system("openPC", null);
}
}
}

View File

@@ -0,0 +1,30 @@
package com.yutou.qqbot.models.Commands.System;
import com.yutou.qqbot.QQBotManager;
import com.yutou.qqbot.models.Model;
import com.yutou.qqbot.utlis.AppTools;
import net.mamoe.mirai.event.events.MessageEvent;
public class Restart extends Model {
@Override
public boolean isUserPublic() {
return false;
}
@Override
public String[] getUsePowers() {
return new String[]{
QQGroupCommands.QQ_SYSTEM_RESTART
};
}
@Override
public void onMessage(Long qq, MessageEvent event, boolean isGroup) {
super.onMessage(qq, event, isGroup);
if(msg.equals(QQGroupCommands.QQ_SYSTEM_RESTART)){
QQBotManager.getInstance().sendMessage(qq,"正在重启服务");
System.out.println("结束进程");
AppTools.exec("cd /home/yutou/public/servier/tools && ./start.sh",null,true,false);
}
}
}

View File

@@ -0,0 +1,50 @@
package com.yutou.qqbot.models.Commands.System;
import com.yutou.qqbot.QQBotManager;
import com.yutou.qqbot.models.Model;
import com.yutou.qqbot.utlis.IdeaTools;
import com.yutou.qqbot.utlis.RedisTools;
import com.yutou.qqbot.utlis.StringUtils;
import net.mamoe.mirai.event.events.MessageEvent;
public class ToolsIdea extends Model {
@Override
public boolean isUserPublic() {
return false;
}
@Override
public String[] getUsePowers() {
return new String[]{
QQGroupCommands.QQ_TOOLS_IDEA,
QQGroupCommands.QQ_TOOLS_IDEA_FILE,
QQGroupCommands.QQ_TOOLS_IDEA
};
}
@Override
public void onMessage(Long qq, MessageEvent event, boolean isGroup) {
super.onMessage(qq, event, isGroup);
if (QQGroupCommands.QQ_TOOLS_IDEA.equals(msg)) {
StringBuilder builder = new StringBuilder();
if (StringUtils.isEmpty(RedisTools.get("ideaUrl"))) {
builder.append("暂未设置IDEA激活码下载地址");
} else {
for (String name : IdeaTools.getIdeaList(RedisTools.get("ideaUrl"))) {
builder.append(QQGroupCommands.QQ_TOOLS_IDEA_FILE).append(name).append("\n");
}
if (builder.toString().trim().length() == 0) {
builder.append("激活码文件中未包含txt文件");
}
}
QQBotManager.getInstance().sendMessage(qq, builder.toString());
} else {
if (msg.startsWith(QQGroupCommands.QQ_TOOLS_IDEA_URL)) {
RedisTools.set("ideaUrl", msg.replace(QQGroupCommands.QQ_TOOLS_IDEA_URL, "").trim());
QQBotManager.getInstance().sendMessage(qq, "已设定下载地址:" + RedisTools.get("ideaUrl"));
} else if (msg.startsWith(QQGroupCommands.QQ_TOOLS_IDEA_FILE)) {
QQBotManager.getInstance().sendMessage(qq, IdeaTools.getIdea(event.getMessage().contentToString().replace(QQGroupCommands.QQ_TOOLS_IDEA_FILE, "")));
}
}
}
}

View File

@@ -0,0 +1,27 @@
package com.yutou.qqbot.models.Commands.System;
import com.yutou.qqbot.models.Model;
import com.yutou.qqbot.utlis.RedisTools;
import net.mamoe.mirai.event.events.MessageEvent;
public class UpdateIP extends Model {
@Override
public boolean isUserPublic() {
return false;
}
@Override
public String[] getUsePowers() {
return new String[]{
QQGroupCommands.QQ_UPDATE_IP
};
}
@Override
public void onMessage(Long qq, MessageEvent event, boolean isGroup) {
super.onMessage(qq, event, isGroup);
if(msg.equals(QQGroupCommands.QQ_UPDATE_IP)){
RedisTools.Consumer.system("updateIP", null);
}
}
}

View File

@@ -0,0 +1,27 @@
package com.yutou.qqbot.models.Commands.System;
import com.yutou.qqbot.QQBotManager;
import com.yutou.qqbot.models.Model;
import net.mamoe.mirai.event.events.MessageEvent;
public class Version extends Model {
@Override
public boolean isUserPublic() {
return false;
}
@Override
public String[] getUsePowers() {
return new String[]{
QQGroupCommands.QQ_GET_VERSION
};
}
@Override
public void onMessage(Long qq, MessageEvent event, boolean isGroup) {
super.onMessage(qq, event, isGroup);
if(msg.equals(QQGroupCommands.QQ_GET_VERSION)){
QQBotManager.getInstance().sendVersion();
}
}
}

View File

@@ -0,0 +1,81 @@
package com.yutou.qqbot.models;
import com.yutou.qqbot.QQNumberManager;
import com.yutou.qqbot.interfaces.ModelInterface;
import net.mamoe.mirai.event.events.GroupMessageEvent;
import net.mamoe.mirai.event.events.MessageEvent;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
public abstract class Model implements ModelInterface {
public static class QQGroupCommands {
public final static String QQ_HELP = "!help";
public final static String QQ_SYSTEM_RESTART = "!restart";
public final static String QQ_UPDATE_IP = "!更新ip";
public final static String QQ_GET_IP = "!ip";
public final static String QQ_OPEN_PC = "!开机";
public final static String QQ_GET_VERSION = "!version";
public final static String QQ_CMD = "!cmd";
public final static String QQ_BANGUMI_TODAY = "!今日动画";
public final static String QQ_BANGUMI_LIST = "!新番";
public final static String QQ_BANGUMI_SUB = "!查动画";
public final static String QQ_AUDIO = "!语音";
public final static String QQ_AUDIO_OPEN_LAMP = "!开灯";
public final static String QQ_AUDIO_OPEN_AIR = "!开空调";
public final static String QQ_BT_RELOAD = "!刷bt";
public final static String QQ_TOOLS_IDEA = "!idea";
public final static String QQ_TOOLS_IDEA_FILE = "!idea>";
public final static String QQ_TOOLS_IDEA_URL = "!idea_url";
public final static String QQ_BANGUMI_INFO = "!保存动画信息>";
}
public static class QQFromCommands {
public static final String ADD_POWER = "大头菜";
}
public static List<Class<?>> classList = new ArrayList<>();
long group;
public Model() {
if (!classList.contains(getClass())) {
classList.add(getClass());
}
}
public String msg;
protected boolean isGroupPower = false;
public void onMessage(Long qq, MessageEvent event, boolean isGroup) {
msg = event.getMessage().contentToString();
msg = msg.replace("", "!");
GroupMessageEvent groupEvent = (GroupMessageEvent) event;
group = groupEvent.getGroup().getId();
if (QQNumberManager.getManager().isExistsPower(group, msg.split(" ")[0])) {
isGroupPower = true;
}
}
public void onTime(String time) {
}
public static StringBuilder getCommands(Class<?> commands) {
StringBuilder builder = new StringBuilder();
for (Field field : commands.getDeclaredFields()) {
try {
field.setAccessible(true);
builder.append(field.get(null)).append("\n");
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
return builder;
}
}

View File

@@ -3,11 +3,14 @@ package com.yutou.qqbot.models.setu;
import com.alibaba.fastjson.JSONObject;
import com.yutou.qqbot.Annotations.UseModel;
import com.yutou.qqbot.QQBotManager;
import com.yutou.qqbot.models.Model;
import com.yutou.qqbot.utlis.AppTools;
import com.yutou.qqbot.utlis.Log;
import com.yutou.qqbot.utlis.RedisTools;
import net.mamoe.mirai.event.events.GroupMessageEvent;
import net.mamoe.mirai.event.events.MessageEvent;
import net.mamoe.mirai.message.data.At;
import net.mamoe.mirai.message.data.Image;
import net.mamoe.mirai.message.data.MessageChainBuilder;
@@ -15,16 +18,22 @@ import net.mamoe.mirai.message.data.MessageChainBuilder;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
import java.util.Timer;
import java.util.TimerTask;
import java.text.SimpleDateFormat;
import java.util.*;
public class QQSetu {
public static void printTodaySetu() {
@UseModel
public class QQSetu extends Model {
private int db_print =1;//统计结果
private int db_user =3;//当次数据
private long group;
private Timer timer;
private final Map<String, Float> setuScore = new HashMap<>();
public void printTodaySetu() {
String redisKey= AppTools.getToDayTime() + "_setu";
Log.i("今日涩图 redisKey = " + redisKey);
String js = RedisTools.get(redisKey, 1);
String js = RedisTools.get(redisKey, db_print);
if (js != null) {
JSONObject json = JSONObject.parseObject(js);
if(json.containsKey("isPrint")&&json.getBoolean("isPrint")){
@@ -49,7 +58,7 @@ public class QQSetu {
setu=json.getJSONObject(groupImage.get(id));
if(setu!=null){
json.put("isPrint",true);
RedisTools.set(1,redisKey,json.toJSONString());
RedisTools.set(db_print,redisKey,json.toJSONString());
JSONObject info=setu.getJSONObject("info");
JSONObject score=setu.getJSONObject("score");
MessageChainBuilder builder = new MessageChainBuilder();
@@ -87,7 +96,7 @@ public class QQSetu {
if (!isSetu(image)) {
return;
}
if (RedisTools.get(event.getGroup().getId()+"setu") != null) {
if (RedisTools.get(event.getGroup().getId()+"setu", db_user) != null) {
printSetu(event.getGroup().getId());
}
setuScore.clear();
@@ -96,15 +105,15 @@ public class QQSetu {
json.put("sourName", event.getSenderName());
json.put("sourQQ", event.getSender().getId());
json.put("group", event.getGroup().getId());
RedisTools.set(event.getGroup().getId()+"setu", json.toJSONString(),6*60);
RedisTools.set(event.getGroup().getId()+"setu", json.toJSONString(),6*60, db_user);
if (timer != null) {
timer.cancel();
timer = null;
}
startTimer(event.getGroup().getId());
startTimer();
}
private void startTimer(long group) {
private void startTimer() {
timer = new Timer();
timer.schedule(new TimerTask() {
@Override
@@ -114,11 +123,11 @@ public class QQSetu {
}
timer = null;
}
}, 5 * 60 * 1000);
}, (long) (0.9 * 60 * 1000));
}
private void printSetu(long group) {
JSONObject jt = JSONObject.parseObject(RedisTools.get(group+"setu"));
JSONObject jt = JSONObject.parseObject(RedisTools.get(group+"setu", db_user));
String id = jt.getString("id");
float average = 0;
float max = 0;
@@ -154,7 +163,7 @@ public class QQSetu {
"其中最高分由:" + maxName + " 给与:" + max +"\n "+
"其中最低分由:" + minName + " 给与:" + min;
QQBotManager.getInstance().sendMessage(group, builder);
String st = RedisTools.get(AppTools.getToDayTime() + "_setu", 1);
String st = RedisTools.get(AppTools.getToDayTime() + "_setu", db_print);
JSONObject json;
if (st == null) {
json = new JSONObject();
@@ -173,16 +182,23 @@ public class QQSetu {
item.put("info", jt);
item.put("average", average);
json.put(id, item);
RedisTools.set(1, AppTools.getToDayTime() + "_setu", json.toJSONString());
RedisTools.set(db_print, AppTools.getToDayTime() + "_setu", json.toJSONString());
}
RedisTools.remove(group+"setu",0);
RedisTools.remove(group+"setu",db_user);
setuScore.clear();
}
public void setu(String msg, GroupMessageEvent event) {
if (msg.trim().equals("[图片]")) {
@Override
public void onMessage(Long qq, MessageEvent event, boolean isGroup){
System.out.println("qq = " + qq + ", event = " + event.getMessage().contentToString() + ", isGroup = " + isGroup);
if(!isGroup){
return;
}
group=qq;
String msg=event.getMessage().contentToString();
if ("[图片]".equals(msg.trim())) {
Image image = (Image) event.getMessage().stream().filter(Image.class::isInstance).findFirst().orElse(null);
if (image != null) {
setuBuilder(image, event);
setuBuilder(image, (GroupMessageEvent) event);
return;
}
}
@@ -193,15 +209,30 @@ public class QQSetu {
float i = Float.parseFloat(msg.trim());
if (i > 0 && i <= 10) {
String name = event.getSenderName();
String qq=event.getSender().getId()+"";
String sender=event.getSender().getId()+"";
if (!setuScore.containsKey(name)) {
setuScore.put(name+"|"+qq, i);
setuScore.put(name+"|"+sender, i);
}
}
} catch (Exception ignored) {
}
}
private Timer timer;
private static Map<String, Float> setuScore = new HashMap<>();
@Override
public void onTime(String time) {
super.onTime(time);
if("23:59".equals(time)){
printTodaySetu();
}
}
@Override
public boolean isUserPublic() {
return true;
}
@Override
public String[] getUsePowers() {
return new String[0];
}
}