From 7b1050b4e3ca3cf76eb00a2c4eb89184037c0c94 Mon Sep 17 00:00:00 2001
From: Yutousama <583819556@qq.com>
Date: Thu, 16 Dec 2021 23:25:05 +0800
Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=97=B6=E9=97=B4=E9=80=9A?=
=?UTF-8?q?=E7=9F=A5=E4=B8=BA=E6=AF=8F=E7=A7=92=20=E6=96=B0=E5=A2=9Ewifi?=
=?UTF-8?q?=E8=AE=BE=E5=A4=87=E8=BF=9E=E5=85=A5=E9=80=80=E5=87=BA=E5=88=A4?=
=?UTF-8?q?=E6=96=AD=20=E4=B8=BA=E4=B8=8B=E5=8F=91=E5=BC=80=E9=97=A8?=
=?UTF-8?q?=E6=8C=87=E4=BB=A4=E5=81=9A=E5=87=86=E5=A4=87?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
pom.xml | 7 ++
.../qqbot/Controllers/MiRouterDevices.java | 78 +++++++++++++
.../qqbot/Listeners/QQMessageListener.java | 1 -
.../com/yutou/qqbot/QQBotApplication.java | 2 +-
.../java/com/yutou/qqbot/QQBotManager.java | 2 +
.../yutou/qqbot/models/Commands/Bangumi.java | 2 +-
.../java/com/yutou/qqbot/models/Model.java | 2 +
.../yutou/qqbot/models/WebSign/BaiHeHui.java | 2 +-
.../com/yutou/qqbot/models/WebSign/Tsdm.java | 2 +-
.../yutou/qqbot/models/XiaoMi/MiRouter.java | 106 ++++++++++++++++++
.../com/yutou/qqbot/models/setu/QQSetu.java | 2 +-
.../yutou/qqbot/utlis/ApplicationInit.java | 4 +-
.../java/com/yutou/qqbot/utlis/HttpTools.java | 30 +++--
.../com/yutou/qqbot/utlis/RedisTools.java | 2 +-
.../com/yutou/qqbot/utlis/XiaoMiRouter.java | 40 +++++++
15 files changed, 265 insertions(+), 17 deletions(-)
create mode 100644 src/main/java/com/yutou/qqbot/Controllers/MiRouterDevices.java
create mode 100644 src/main/java/com/yutou/qqbot/models/XiaoMi/MiRouter.java
create mode 100644 src/main/java/com/yutou/qqbot/utlis/XiaoMiRouter.java
diff --git a/pom.xml b/pom.xml
index 94543ff..76db1a9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -95,6 +95,13 @@
spring-boot-starter-web
+
+
+ commons-codec
+ commons-codec
+ 1.15
+
+
diff --git a/src/main/java/com/yutou/qqbot/Controllers/MiRouterDevices.java b/src/main/java/com/yutou/qqbot/Controllers/MiRouterDevices.java
new file mode 100644
index 0000000..a096886
--- /dev/null
+++ b/src/main/java/com/yutou/qqbot/Controllers/MiRouterDevices.java
@@ -0,0 +1,78 @@
+package com.yutou.qqbot.Controllers;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.yutou.qqbot.models.XiaoMi.MiRouter;
+import com.yutou.qqbot.utlis.HttpTools;
+import com.yutou.qqbot.utlis.RedisTools;
+import com.yutou.qqbot.utlis.XiaoMiRouter;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import javax.servlet.http.HttpServletRequest;
+
+@Controller
+@RequestMapping("/router/")
+public class MiRouterDevices {
+ @RequestMapping("device/add.do")
+ @ResponseBody
+ public String addDevice(HttpServletRequest request,String qq) {
+ String data = RedisTools.get(MiRouter.redis_key);
+ JSONArray array;
+ if (data == null) {
+ array = new JSONArray();
+ } else {
+ array = JSONArray.parseArray(data);
+ }
+ for (Object o : array) {
+ JSONObject item = (JSONObject) o;
+ if (item.getString("mac").equals(getRemoteAddress(request.getRemoteAddr()))) {
+ return "已经添加过了";
+ }
+ }
+ JSONObject item=new JSONObject();
+ item.put("qq",qq);
+ item.put("mac",getRemoteAddress(request.getRemoteAddr()));
+ item.put("online",false);
+ array.add(item);
+ RedisTools.set(MiRouter.redis_key,array.toString());
+ return "添加成功,关闭当前页面即可";
+ }
+ @ResponseBody
+ @RequestMapping("device/del.do")
+ public String delDevice(HttpServletRequest request,String qq){
+ String data = RedisTools.get(MiRouter.redis_key);
+ JSONArray array;
+ if (data == null) {
+ array = new JSONArray();
+ } else {
+ array = JSONArray.parseArray(data);
+ }
+ JSONArray _array= (JSONArray) array.clone();
+ for (Object o : array) {
+ JSONObject item = (JSONObject) o;
+ if (item.getString("mac").equals(getRemoteAddress(request.getRemoteAddr()))) {
+ _array.remove(item);
+ RedisTools.set(MiRouter.redis_key,_array.toString());
+ return "已成功删除";
+ }
+ }
+ return "未找到该设备";
+ }
+
+ private String getRemoteAddress(String ip) {
+ JSONObject data = JSONObject.parseObject(HttpTools.get(XiaoMiRouter.getDeviceListUrl()));
+ if (data.getInteger("code") == 0) {
+ JSONArray array=data.getJSONArray("list");
+ for (Object o : array) {
+ JSONObject item= (JSONObject) o;
+ if(item.getJSONArray("ip").getJSONObject(0).getString("ip").equals(ip)){
+ return item.getString("mac");
+ }
+ }
+ }
+ return null;
+
+ }
+}
diff --git a/src/main/java/com/yutou/qqbot/Listeners/QQMessageListener.java b/src/main/java/com/yutou/qqbot/Listeners/QQMessageListener.java
index 54fc18b..93f4048 100644
--- a/src/main/java/com/yutou/qqbot/Listeners/QQMessageListener.java
+++ b/src/main/java/com/yutou/qqbot/Listeners/QQMessageListener.java
@@ -3,7 +3,6 @@ package com.yutou.qqbot.Listeners;
import com.yutou.qqbot.MessageEvent.AdminMessage;
import com.yutou.qqbot.QQNumberManager;
import com.yutou.qqbot.models.Model;
-import com.yutou.qqbot.utlis.Log;
import kotlin.coroutines.CoroutineContext;
import net.mamoe.mirai.event.EventHandler;
import net.mamoe.mirai.event.ListeningStatus;
diff --git a/src/main/java/com/yutou/qqbot/QQBotApplication.java b/src/main/java/com/yutou/qqbot/QQBotApplication.java
index c00d40d..38e025a 100644
--- a/src/main/java/com/yutou/qqbot/QQBotApplication.java
+++ b/src/main/java/com/yutou/qqbot/QQBotApplication.java
@@ -6,7 +6,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class QQBotApplication {
- public static final String version="QQBot v.1.1.2";
+ public static final String version="QQBot v.1.2.0";
public static void main(String[] args) {
SpringApplication.run(QQBotApplication.class, args);
RedisTools.initRedisPoolSub();
diff --git a/src/main/java/com/yutou/qqbot/QQBotManager.java b/src/main/java/com/yutou/qqbot/QQBotManager.java
index be08495..0762715 100644
--- a/src/main/java/com/yutou/qqbot/QQBotManager.java
+++ b/src/main/java/com/yutou/qqbot/QQBotManager.java
@@ -7,6 +7,7 @@ import com.yutou.qqbot.models.Commands.Bangumi;
import com.yutou.qqbot.models.Commands.System.*;
import com.yutou.qqbot.models.Model;
import com.yutou.qqbot.models.WebSign.Tsdm;
+import com.yutou.qqbot.models.XiaoMi.MiRouter;
import com.yutou.qqbot.models.setu.QQSetu;
import com.yutou.qqbot.utlis.*;
import net.mamoe.mirai.Bot;
@@ -42,6 +43,7 @@ public class QQBotManager {
Model.classList.add(TurnipProphet.class);
Model.classList.add(Tsdm.class);
Model.classList.add(BaiduDown.class);
+ Model.classList.add(MiRouter.class);
}
private static QQBotManager botManager = null;
private Bot bot;
diff --git a/src/main/java/com/yutou/qqbot/models/Commands/Bangumi.java b/src/main/java/com/yutou/qqbot/models/Commands/Bangumi.java
index d0c902b..c8f7dbf 100644
--- a/src/main/java/com/yutou/qqbot/models/Commands/Bangumi.java
+++ b/src/main/java/com/yutou/qqbot/models/Commands/Bangumi.java
@@ -127,7 +127,7 @@ public class Bangumi extends Model {
public void onTime(String time) {
super.onTime(time);
switch (time) {
- case "08:00", "20:00" -> QQBotManager.getInstance().sendMessage(QQBotManager.defGroup,BangumiTools.reportToDayBangumi());
+ case "08:00:00", "20:00:00" -> QQBotManager.getInstance().sendMessage(QQBotManager.defGroup,BangumiTools.reportToDayBangumi());
}
}
}
diff --git a/src/main/java/com/yutou/qqbot/models/Model.java b/src/main/java/com/yutou/qqbot/models/Model.java
index 85f81f4..610da01 100644
--- a/src/main/java/com/yutou/qqbot/models/Model.java
+++ b/src/main/java/com/yutou/qqbot/models/Model.java
@@ -39,6 +39,8 @@ public abstract class Model implements ModelInterface {
public static final String TSDM_PAY = "!tsdm";
public static final String TSDM_SIGN = "!tsdm签到";
public static final String BAIDU_DOWN = "!bd";
+ public static final String ROUTER_ADD="!添加设备";
+ public static final String ROUTER_DEL="!删除设备";
}
diff --git a/src/main/java/com/yutou/qqbot/models/WebSign/BaiHeHui.java b/src/main/java/com/yutou/qqbot/models/WebSign/BaiHeHui.java
index 5980e53..bd95d2b 100644
--- a/src/main/java/com/yutou/qqbot/models/WebSign/BaiHeHui.java
+++ b/src/main/java/com/yutou/qqbot/models/WebSign/BaiHeHui.java
@@ -26,7 +26,7 @@ public class BaiHeHui extends Model {
@Override
public void onTime(String time) {
super.onTime(time);
- if ("08:10".equals(time)) {
+ if ("08:10:00".equals(time)) {
Log.i("开始百合会签到");
try {
sign();
diff --git a/src/main/java/com/yutou/qqbot/models/WebSign/Tsdm.java b/src/main/java/com/yutou/qqbot/models/WebSign/Tsdm.java
index e9adeaa..606220c 100644
--- a/src/main/java/com/yutou/qqbot/models/WebSign/Tsdm.java
+++ b/src/main/java/com/yutou/qqbot/models/WebSign/Tsdm.java
@@ -40,7 +40,7 @@ public class Tsdm extends Model {
@Override
public void onTime(String time) {
super.onTime(time);
- if ("08:00".equals(time)) {
+ if ("08:00:00".equals(time)) {
Log.i("开始天使动漫签到");
try {
tsdmSign();
diff --git a/src/main/java/com/yutou/qqbot/models/XiaoMi/MiRouter.java b/src/main/java/com/yutou/qqbot/models/XiaoMi/MiRouter.java
new file mode 100644
index 0000000..b3a4455
--- /dev/null
+++ b/src/main/java/com/yutou/qqbot/models/XiaoMi/MiRouter.java
@@ -0,0 +1,106 @@
+package com.yutou.qqbot.models.XiaoMi;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.yutou.qqbot.QQBotManager;
+import com.yutou.qqbot.models.Model;
+import com.yutou.qqbot.utlis.HttpTools;
+import com.yutou.qqbot.utlis.RedisTools;
+import com.yutou.qqbot.utlis.XiaoMiRouter;
+import net.mamoe.mirai.event.events.MessageEvent;
+
+import java.util.HashSet;
+import java.util.Set;
+
+public class MiRouter extends Model {
+ public static String redis_key = "MiRouterDevices";
+
+ @Override
+ public boolean isUserPublic() {
+ return false;
+ }
+
+ @Override
+ public String[] getUsePowers() {
+ return new String[]{
+ QQFromCommands.ROUTER_ADD,
+ QQFromCommands.ROUTER_DEL
+ };
+ }
+
+ @Override
+ public void onMessage(Long qq, MessageEvent event, boolean isGroup) {
+ super.onMessage(qq, event, isGroup);
+ if(msg.equals(QQFromCommands.ROUTER_ADD)){
+ String url="http://192.168.31.88:8002/router/device/add.do?qq="+qq;
+ QQBotManager.getInstance().sendMessage(qq,"点击该链接完成设备添加:\n"+url);
+ }else if(msg.equals(QQFromCommands.ROUTER_DEL)){
+ String url="http://192.168.31.88:8002/router/device/del.do?qq="+qq;
+ QQBotManager.getInstance().sendMessage(qq,"点击该删除设备:\n"+url);
+ }
+ }
+
+ @Override
+ public void onTime(String time) {
+ super.onTime(time);
+ String url = XiaoMiRouter.getDeviceListUrl();
+ JSONObject json = JSONObject.parseObject(HttpTools.get(url));
+ if (json.getInteger("code") == 0) {
+ String _tmp = RedisTools.get(redis_key);
+ if (_tmp == null) {
+ return;
+ }
+ JSONArray devices = JSONArray.parseArray(_tmp);
+ JSONArray devs = (JSONArray) devices.clone();
+ JSONArray array = json.getJSONArray("list");
+ Set links = new HashSet<>();
+ for (Object o : array) {
+ JSONObject item = (JSONObject) o;
+ for (Object device : devices) {
+ JSONObject _device = (JSONObject) device;
+ devs.remove(_device);
+ if (_device.getString("mac").equals(item.getString("mac")) && !_device.getBoolean("online")) {
+ StringBuilder builder = new StringBuilder();
+ builder.append(item.getString("oname"));
+ builder.append(" 欢迎回家!").append("\n");
+ builder.append("点击该链接开门:").append("\n");
+ QQBotManager.getInstance().sendMessage(_device.getLong("qq"), builder.toString());
+ _device.put("online", true);
+ _device.put("name", item.getString("oname"));
+ }
+ if (_device.getString("mac").equals(item.getString("mac")) && _device.getBoolean("online")) {
+ links.add(_device.getString("mac"));
+ _device.put("linkTime", Long.parseLong(item.getJSONObject("statistics").getString("online")));
+ }
+ devs.add(_device);
+ }
+ }
+ devices = (JSONArray) devs.clone();
+ for (Object device : devices) {
+ JSONObject item = (JSONObject) device;
+ if (!links.contains(item.getString("mac"))&&item.getLong("linkTime")!=0) {
+ devs.remove(device);
+ String builder = "你的设备:" +
+ item.getString("name") +
+ "已下线" + "\n" +
+ "在线时长:" + getOnLineTime(item.getString("linkTime")) + "\n";
+ QQBotManager.getInstance().sendMessage(item.getLong("qq"), builder);
+ item.put("online", false);
+ item.put("linkTime",0);
+ devs.add(item);
+ }
+ }
+ RedisTools.set(redis_key, devs.toJSONString());
+
+ }
+ }
+
+ private String getOnLineTime(String online) {
+ long time = Long.parseLong(online);
+ long day = time / 24 / 60 / 60;
+ long h = time / 60 / 60 % 24;
+ long m = time / 60 % 60;
+ long s = time % 60;
+ return String.format("%02d天%02d时%02d分%02d秒", day, h, m, s);
+ }
+}
diff --git a/src/main/java/com/yutou/qqbot/models/setu/QQSetu.java b/src/main/java/com/yutou/qqbot/models/setu/QQSetu.java
index de51e8c..7e6ecbf 100644
--- a/src/main/java/com/yutou/qqbot/models/setu/QQSetu.java
+++ b/src/main/java/com/yutou/qqbot/models/setu/QQSetu.java
@@ -222,7 +222,7 @@ public class QQSetu extends Model {
@Override
public void onTime(String time) {
super.onTime(time);
- if("23:59".equals(time)){
+ if("23:59:00".equals(time)){
printTodaySetu();
}
}
diff --git a/src/main/java/com/yutou/qqbot/utlis/ApplicationInit.java b/src/main/java/com/yutou/qqbot/utlis/ApplicationInit.java
index 48cdedc..e559c6c 100644
--- a/src/main/java/com/yutou/qqbot/utlis/ApplicationInit.java
+++ b/src/main/java/com/yutou/qqbot/utlis/ApplicationInit.java
@@ -19,7 +19,7 @@ public class ApplicationInit implements ApplicationRunner {
@Override
public void run() {
try {
- String time = new SimpleDateFormat("HH:mm").format(new Date());
+ String time = new SimpleDateFormat("HH:mm:ss").format(new Date());
if (time.equals(oldTime)) {
return;
}
@@ -36,6 +36,6 @@ public class ApplicationInit implements ApplicationRunner {
e.printStackTrace();
}
}
- },0, 35 * 1000);
+ },0, 1000);
}
}
diff --git a/src/main/java/com/yutou/qqbot/utlis/HttpTools.java b/src/main/java/com/yutou/qqbot/utlis/HttpTools.java
index c96b079..9e6535d 100644
--- a/src/main/java/com/yutou/qqbot/utlis/HttpTools.java
+++ b/src/main/java/com/yutou/qqbot/utlis/HttpTools.java
@@ -4,10 +4,7 @@ import com.alibaba.fastjson.JSONObject;
import com.yutou.qqbot.interfaces.DownloadInterface;
import java.io.*;
-import java.net.HttpURLConnection;
-import java.net.URL;
-import java.net.URLConnection;
-import java.net.URLEncoder;
+import java.net.*;
import java.util.Map;
import java.util.Set;
@@ -102,11 +99,8 @@ public class HttpTools {
return "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36";
}
- private static String getKuKuUA() {
- return "/KUKU_APP(Android/#/cn.kuku.sdk/ttsdk17228/29401/A-2.9.4.01.KUSDK/868139039134314/fcddf839c8c135fa/F4:60:E2:AB:25:1A/460019406520644/+8618569400341/#/9/Redmi 6 Pro/xiaomi/1736/76fda4d6-cd6b-485f-987b-8d347b007f24/#/KUKU/Native/92972ea9651fbd2e)";
- }
- public String toUrlParams(JSONObject json) {
+ public static String toUrlParams(JSONObject json) {
StringBuilder string = new StringBuilder();
Set keys = json.keySet();
for (String key : keys) {
@@ -257,4 +251,24 @@ public class HttpTools {
return null;
}
}
+ public static String getLocalMacAddress(){
+ try {
+ InetAddress address=InetAddress.getLocalHost();
+ byte[] bytes=NetworkInterface.getByInetAddress(address).getHardwareAddress();
+ StringBuilder builder=new StringBuilder();
+ for (int i = 0; i < bytes.length; i++) {
+ if (i != 0) {
+ builder.append(":");
+ }
+ String tmp=Integer.toHexString(bytes[i]&0xFF);
+ builder.append(tmp.length()==1?0+tmp:tmp);
+
+ }
+ return builder.toString();
+ } catch (UnknownHostException | java.net.SocketException e) {
+ e.printStackTrace();
+ return null;
+ }
+
+ }
}
diff --git a/src/main/java/com/yutou/qqbot/utlis/RedisTools.java b/src/main/java/com/yutou/qqbot/utlis/RedisTools.java
index 4c9a112..b47f471 100644
--- a/src/main/java/com/yutou/qqbot/utlis/RedisTools.java
+++ b/src/main/java/com/yutou/qqbot/utlis/RedisTools.java
@@ -45,7 +45,7 @@ public class RedisTools {
Jedis jedis = getRedis();
jedis.select(dbIndex);
String ret = jedis.set(key, value);
- Log.i("Redis set =" + ret,"key = "+key+" value = "+value);
+ //Log.i("Redis set =" + ret,"key = "+key+" value = "+value);
jedis.close();
} catch (Exception e) {
// TODO: handle exception
diff --git a/src/main/java/com/yutou/qqbot/utlis/XiaoMiRouter.java b/src/main/java/com/yutou/qqbot/utlis/XiaoMiRouter.java
new file mode 100644
index 0000000..f419146
--- /dev/null
+++ b/src/main/java/com/yutou/qqbot/utlis/XiaoMiRouter.java
@@ -0,0 +1,40 @@
+package com.yutou.qqbot.utlis;
+
+import com.alibaba.fastjson.JSONObject;
+import org.apache.commons.codec.digest.DigestUtils;
+
+import java.nio.charset.StandardCharsets;
+import java.text.SimpleDateFormat;
+import java.util.Arrays;
+import java.util.Date;
+
+public class XiaoMiRouter {
+ private final static String key = "a2ffa5c9be07488bbb04a3a47d3c5f6a";
+
+ public static String getToken() {
+ String nonce = nonceCreat();
+ String oldPwd = DigestUtils.sha1Hex(nonce + DigestUtils.sha1Hex("34864394" + key));
+ JSONObject json = new JSONObject();
+ json.put("username", "admin");
+ json.put("password", oldPwd);
+ json.put("logtype", 2);
+ json.put("nonce", nonce);
+ json = JSONObject.parseObject(HttpTools.http_post("http://192.168.31.1/cgi-bin/luci/api/xqsystem/login", HttpTools.toUrlParams(json).getBytes(StandardCharsets.UTF_8), 1, null));
+ if (json.getInteger("code") == 0) {
+ return json.getString("token");
+ }
+ return null;
+ }
+
+ public static String getDeviceListUrl() {
+ return "http://192.168.31.1/cgi-bin/luci/;stok=" + getToken() + "/api/misystem/devicelist";
+ }
+
+ private static String nonceCreat() {
+ return String.format("%s_%s_%s_%s", 0, HttpTools.getLocalMacAddress(), (int) (System.currentTimeMillis() / 1000), (int) (Math.random() * 10000));
+ }
+
+ public static void main(String[] args) {
+
+ }
+}