新增手动签到

新增百合会签到
优化天使动漫签到
优化大头菜统计最高价日
修复大头菜第二周数据未清空
新增大头菜显示购入价功能
This commit is contained in:
Yutousama 2021-12-13 18:10:50 +08:00
parent f4711d82fb
commit 5a29f7595b
8 changed files with 146 additions and 71 deletions

View File

@ -42,7 +42,6 @@ public class QQMessageListener extends SimpleListenerHost {
Model useModel = (Model) model.getDeclaredConstructor().newInstance(); Model useModel = (Model) model.getDeclaredConstructor().newInstance();
if (!useModel.isUserPublic()) { if (!useModel.isUserPublic()) {
if (!QQNumberManager.getManager().isExistsPower(event.getSource().getFromId(), useModel.getUsePowers())) { if (!QQNumberManager.getManager().isExistsPower(event.getSource().getFromId(), useModel.getUsePowers())) {
Log.i("用户没有权限",event.getSource().getFromId()+" > "+model.getSimpleName());
continue; continue;
} }
} }

View File

@ -3,7 +3,10 @@ package com.yutou.qqbot.MessageEvent;
import com.yutou.qqbot.QQBotManager; import com.yutou.qqbot.QQBotManager;
import com.yutou.qqbot.QQNumberManager; import com.yutou.qqbot.QQNumberManager;
import com.yutou.qqbot.models.Model; import com.yutou.qqbot.models.Model;
import com.yutou.qqbot.models.WebSign.BaiHeHui;
import com.yutou.qqbot.models.WebSign.Tsdm;
import com.yutou.qqbot.utlis.AppTools; import com.yutou.qqbot.utlis.AppTools;
import com.yutou.qqbot.utlis.Log;
import com.yutou.qqbot.utlis.StringUtils; import com.yutou.qqbot.utlis.StringUtils;
import java.util.List; import java.util.List;
@ -24,6 +27,7 @@ public class AdminMessage extends Message {
private static final String SHOW="!列表"; private static final String SHOW="!列表";
private static final String HELP="!help"; private static final String HELP="!help";
private static final String SIGN="!签到";
} }
public AdminMessage(Long qq, String msg) { public AdminMessage(Long qq, String msg) {
@ -138,6 +142,27 @@ public class AdminMessage extends Message {
System.out.println("结束进程"); System.out.println("结束进程");
AppTools.exec("cd /home/yutou/public/servier/tools && ./start.sh",null,true,false); AppTools.exec("cd /home/yutou/public/servier/tools && ./start.sh",null,true,false);
} }
case QQCommands.SIGN -> {
boolean sign=true;
Log.i("开始签到");
try{
new Tsdm().tsdmSign();
}catch (Exception e){
sign=false;
QQBotManager.getInstance().sendMessage(qq,"tsdm签到失败:"+AppTools.getExceptionString(e));
e.printStackTrace();
}
try {
new BaiHeHui().sign();
}catch (Exception e){
sign=false;
QQBotManager.getInstance().sendMessage(qq,"百合会签到失败:"+AppTools.getExceptionString(e));
e.printStackTrace();
}
if(sign){
QQBotManager.getInstance().sendMessage(qq,"签到任务完成");
}
}
} }
} }

View File

@ -6,7 +6,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication @SpringBootApplication
public class QQBotApplication { public class QQBotApplication {
public static final String version="QQBot v.1.0.1"; public static final String version="QQBot v.1.1.1";
public static void main(String[] args) { public static void main(String[] args) {
SpringApplication.run(QQBotApplication.class, args); SpringApplication.run(QQBotApplication.class, args);
RedisTools.initRedisPoolSub(); RedisTools.initRedisPoolSub();

View File

@ -4,10 +4,7 @@ import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.yutou.qqbot.QQBotManager; import com.yutou.qqbot.QQBotManager;
import com.yutou.qqbot.models.Model; import com.yutou.qqbot.models.Model;
import com.yutou.qqbot.utlis.Log; import com.yutou.qqbot.utlis.*;
import com.yutou.qqbot.utlis.RedisTools;
import com.yutou.qqbot.utlis.StringUtils;
import com.yutou.qqbot.utlis.WebClient;
import net.mamoe.mirai.event.events.MessageEvent; import net.mamoe.mirai.event.events.MessageEvent;
import org.openqa.selenium.By; import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebDriver;
@ -43,7 +40,7 @@ public class TurnipProphet extends Model {
} }
static int nowTime; static int nowTime=-1;
@Override @Override
public boolean isUserPublic() { public boolean isUserPublic() {
@ -156,9 +153,7 @@ public class TurnipProphet extends Model {
} }
} else { } else {
if (money >= 9 && money <= 660) { if (money >= 9 && money <= 660) {
System.out.println("array = " + array); if (getTime() < 12) {
System.out.println("array.size() = " + array.size());
if (nowTime < 12) {
array.set(getDay() * 2 - 1, money); array.set(getDay() * 2 - 1, money);
} else { } else {
array.set(getDay() * 2, money); array.set(getDay() * 2, money);
@ -189,7 +184,9 @@ public class TurnipProphet extends Model {
QQBotManager.getInstance().sendMessage(qq, "已记录,正在预测本周走势..."); QQBotManager.getInstance().sendMessage(qq, "已记录,正在预测本周走势...");
Map<String, String> map = openTurnip(prices, pattern); Map<String, String> map = openTurnip(prices, pattern);
if(map==null){
map=openTurnip(prices,pattern);
}
String tmp_pattern = sendQQ(map, prices, pattern, qq); String tmp_pattern = sendQQ(map, prices, pattern, qq);
if (!StringUtils.isEmpty(tmp_pattern)) { if (!StringUtils.isEmpty(tmp_pattern)) {
json.put("pattern", tmp_pattern); json.put("pattern", tmp_pattern);
@ -197,21 +194,20 @@ public class TurnipProphet extends Model {
RedisTools.set(redisKey, json.toJSONString()); RedisTools.set(redisKey, json.toJSONString());
} catch (Exception e) { } catch (Exception e) {
setData(money, qq);
e.printStackTrace(); e.printStackTrace();
setData(money, qq);
} }
} }
private String sendQQ(Map<String, String> map, String prices, String pattern, long qq) { private String sendQQ(Map<String, String> map, String prices, String pattern, long qq) {
if (map == null) { if (map == null) {
String url = String.format("https://turnipprophet.io?prices=%s%s", String url = String.format("https://turnipprophet.io?prices=%s%s",
prices, prices,
pattern == null ? "" : "&pattern=" + pattern pattern == null ? "" : "&pattern=" + pattern
); );
QQBotManager.getInstance().sendMessage(qq, "没有结果,请检查数据是否有误。 \n网页预览" + url); QQBotManager.getInstance().sendMessage(qq, "没有结果,请检查数据是否有误。 \n网页预览\n" + url);
return null; return null;
} }
@ -221,7 +217,7 @@ public class TurnipProphet extends Model {
out.append("预测结果如下:\n"); out.append("预测结果如下:\n");
out.append(TurnipData.MODEL).append(prArray.getJSONObject(0).getString(TurnipData.MODEL)).append("\n"); out.append(TurnipData.MODEL).append(prArray.getJSONObject(0).getString(TurnipData.MODEL)).append("\n");
out.append(TurnipData.PR).append(prArray.getJSONObject(0).getString(TurnipData.PR)).append("\n"); out.append(TurnipData.PR).append(prArray.getJSONObject(0).getString(TurnipData.PR)).append("\n");
out.append("购入价:").append(prices.split("\\.")[0]).append("\n");
out.append(TurnipData.MIX).append(map.get(TurnipData.MIX)).append("\n") out.append(TurnipData.MIX).append(map.get(TurnipData.MIX)).append("\n")
.append(TurnipData.MAX).append(map.get(TurnipData.MAX)).append("\n") .append(TurnipData.MAX).append(map.get(TurnipData.MAX)).append("\n")
.append(TurnipData.DAY).append(map.get(TurnipData.DAY)).append("\n") .append(TurnipData.DAY).append(map.get(TurnipData.DAY)).append("\n")
@ -259,6 +255,12 @@ public class TurnipProphet extends Model {
super.onTime(time); super.onTime(time);
nowTime = Integer.parseInt(time.split(":")[0]); nowTime = Integer.parseInt(time.split(":")[0]);
} }
public int getTime(){
if(nowTime==-1){
nowTime=Integer.parseInt(AppTools.getHours());
}
return nowTime;
}
private int getDay() { private int getDay() {
return Calendar.getInstance().get(Calendar.DAY_OF_WEEK) - 1; return Calendar.getInstance().get(Calendar.DAY_OF_WEEK) - 1;
@ -266,7 +268,7 @@ public class TurnipProphet extends Model {
public static void main(String[] args) throws Exception { public static void main(String[] args) throws Exception {
TurnipProphet prophet = new TurnipProphet(); TurnipProphet prophet = new TurnipProphet();
prophet.setData(88, 583819556); prophet.setData(68, 583819556);
} }
@ -284,10 +286,14 @@ public class TurnipProphet extends Model {
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
Thread.sleep(500); Thread.sleep(500);
WebElement element = driver.findElement(By.id("output")); WebElement element = driver.findElement(By.id("output"));
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
List<WebElement> list = element.findElements(By.tagName("tr")); List<WebElement> list = element.findElements(By.tagName("tr"));
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
JSONObject pr = new JSONObject(); JSONObject pr = new JSONObject();
JSONArray array = new JSONArray(); JSONArray array = new JSONArray();
if (list.size() == 0) { if (list.size() == 0) {
driver.close();
driver.quit();
return null; return null;
} }
@ -324,14 +330,24 @@ public class TurnipProphet extends Model {
} }
} }
} }
int maxMoney=0;
String maxDay=null;
for (String key : map.keySet()) { for (String key : map.keySet()) {
System.err.println("记录最高日:" + map.get(key) + " > " + key); if(map.get(key).contains("~")){
if (!key.equals(TurnipProphet.TurnipData.MAX) && for (String s : map.get(key).split("~")) {
map.get(key).contains(map.get(TurnipProphet.TurnipData.MAX))) { if(Integer.parseInt(s)>maxMoney){
map.put(TurnipProphet.TurnipData.DAY, key); maxMoney=Integer.parseInt(s);
break; maxDay=key;
}
}
}else{
if(Integer.parseInt(map.get(key))>maxMoney){
maxMoney=Integer.parseInt(map.get(key));
maxDay=key;
}
} }
} }
map.put(TurnipProphet.TurnipData.DAY, maxDay);
pr.put(TurnipProphet.TurnipData.MODEL, array); pr.put(TurnipProphet.TurnipData.MODEL, array);
map.put(TurnipProphet.TurnipData.MODEL, pr.toJSONString()); map.put(TurnipProphet.TurnipData.MODEL, pr.toJSONString());
driver.close(); driver.close();

View File

@ -1,15 +1,19 @@
package com.yutou.qqbot.models.WebSign; package com.yutou.qqbot.models.WebSign;
import com.alibaba.fastjson.JSONArray; 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.models.Model;
import com.yutou.qqbot.utlis.AppTools;
import com.yutou.qqbot.utlis.ConfigTools; import com.yutou.qqbot.utlis.ConfigTools;
import com.yutou.qqbot.utlis.StringUtils; import com.yutou.qqbot.utlis.StringUtils;
import com.yutou.qqbot.utlis.WebClient; import com.yutou.qqbot.utlis.WebClient;
import org.openqa.selenium.By;
import org.openqa.selenium.Cookie; import org.openqa.selenium.Cookie;
import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import java.io.File; import java.io.File;
import java.util.concurrent.TimeUnit;
public class BaiHeHui extends Model { public class BaiHeHui extends Model {
@Override @Override
@ -25,19 +29,27 @@ public class BaiHeHui extends Model {
@Override @Override
public void onTime(String time) { public void onTime(String time) {
super.onTime(time); super.onTime(time);
if("08:00".equals(time)){ if ("08:00".equals(time)) {
sign(); try {
sign();
QQBotManager.getInstance().sendMessage(QQBotManager.defGroup,"百合会签到成功");
} catch (Exception e) {
e.printStackTrace();
QQBotManager.getInstance().sendMessage(QQBotManager.defGroup,"百合会签到失败:"+ AppTools.getExceptionString(e));
}
} }
} }
private void sign(){ public void sign() {
String cookie= ConfigTools.readFile(new File("baihehui.json")); String cookie = ConfigTools.readFile(new File("baihehui.json"));
if(StringUtils.isEmpty(cookie)){ if (StringUtils.isEmpty(cookie)) {
return; return;
} }
WebDriver driver=WebClient.getInstance().getWebDriver(); WebDriver driver = WebClient.getInstance().getWebDriver();
JSONArray array=JSONArray.parseArray(cookie); JSONArray array = JSONArray.parseArray(cookie);
driver.get("https://bbs.yamibo.com/plugin.php?id=study_daily_attendance:daily_attendance&fhash=425430f7"); driver.manage().timeouts().implicitlyWait(10000, TimeUnit.SECONDS);
driver.get("https://bbs.yamibo.com/forum.php");
driver.manage().deleteAllCookies();
for (Cookie _cookie : WebClient.loadCookie(array)) { for (Cookie _cookie : WebClient.loadCookie(array)) {
driver.manage().addCookie(_cookie); driver.manage().addCookie(_cookie);
} }
@ -47,10 +59,17 @@ public class BaiHeHui extends Model {
e.printStackTrace(); e.printStackTrace();
} }
driver.navigate().refresh(); driver.navigate().refresh();
for (WebElement element : driver.findElements(By.xpath("//a"))) {
if("打卡签到".equals(element.getText())){
element.click();
return;
}
}
driver.close();
driver.quit();
} }
public static void main(String[] args) { public static void main(String[] args) {
new BaiHeHui().sign();
} }
} }

View File

@ -3,21 +3,16 @@ package com.yutou.qqbot.models.WebSign;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.yutou.qqbot.QQBotManager; import com.yutou.qqbot.QQBotManager;
import com.yutou.qqbot.models.Model; import com.yutou.qqbot.models.Model;
import com.yutou.qqbot.utlis.AppTools;
import com.yutou.qqbot.utlis.ConfigTools; import com.yutou.qqbot.utlis.ConfigTools;
import com.yutou.qqbot.utlis.StringUtils; import com.yutou.qqbot.utlis.StringUtils;
import com.yutou.qqbot.utlis.WebClient; import com.yutou.qqbot.utlis.WebClient;
import net.mamoe.mirai.event.events.MessageEvent; import net.mamoe.mirai.event.events.MessageEvent;
import org.openqa.selenium.By; import org.openqa.selenium.*;
import org.openqa.selenium.Cookie;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import java.io.File; import java.io.File;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import static com.yutou.qqbot.utlis.WebClient.getOptions;
public class Tsdm extends Model { public class Tsdm extends Model {
@Override @Override
public boolean isUserPublic() { public boolean isUserPublic() {
@ -34,53 +29,74 @@ public class Tsdm extends Model {
@Override @Override
public void onMessage(Long qq, MessageEvent event, boolean isGroup) { public void onMessage(Long qq, MessageEvent event, boolean isGroup) {
super.onMessage(qq, event, isGroup); super.onMessage(qq, event, isGroup);
if(msg.startsWith(QQFromCommands.TSDM_PAY)){ if (msg.startsWith(QQFromCommands.TSDM_PAY)) {
String url=msg.replace(QQFromCommands.TSDM_PAY,"").trim(); String url = msg.replace(QQFromCommands.TSDM_PAY, "").trim();
if(StringUtils.isEmpty(url)){ if (StringUtils.isEmpty(url)) {
QQBotManager.getInstance().sendMessage(qq,"使用说明:!tsdm [url]"); QQBotManager.getInstance().sendMessage(qq, "使用说明:!tsdm [url]");
return; return;
} }
QQBotManager.getInstance().sendMessage(qq,"正在获取,请稍等..."); QQBotManager.getInstance().sendMessage(qq, "正在获取,请稍等...");
QQBotManager.getInstance().sendMessage(qq,tsdm(url)); QQBotManager.getInstance().sendMessage(qq, tsdm(url));
} }
} }
@Override @Override
public void onTime(String time) { public void onTime(String time) {
super.onTime(time); super.onTime(time);
if("08:00".equals(time)){ if ("08:00".equals(time)) {
tsdmSign(); try {
QQBotManager.getInstance().sendMessage(QQBotManager.defGroup,"已完成天使动漫的签到"); tsdmSign();
QQBotManager.getInstance().sendMessage(QQBotManager.defGroup, "已完成天使动漫的签到");
} catch (Exception e) {
QQBotManager.getInstance().sendMessage(QQBotManager.defGroup, "天使动漫签到失败:" + AppTools.getExceptionString(e));
e.printStackTrace();
}
} }
} }
public void tsdmSign(){ public void tsdmSign() {
JSONArray array = JSONArray.parseArray(ConfigTools.readFile(new File("cookie.json"))); JSONArray array = JSONArray.parseArray(ConfigTools.readFile(new File("cookie.json")));
if (array == null) { if (array == null) {
System.err.println("array is null"); System.err.println("array is null");
return; return;
} }
WebDriver driver =WebClient.getInstance().getWebDriver(); WebDriver driver = WebClient.getInstance().getWebDriver();
driver.get("https://www.tsdm39.net/forum.php"); driver.get("https://www.tsdm39.net/forum.php");
getTsdm(array, driver); getTsdm(array, driver);
boolean isSign=false;
for (WebElement element : driver.findElements(By.xpath("//a"))) {
if(element.getText().contains("签到")){
isSign=true;
}
}
if(!isSign){
driver.close();
driver.quit();
return;
}
try { try {
((JavascriptExecutor) driver).executeScript("showWindow('dsu_paulsign', 'plugin.php?id=dsu_paulsign:sign&9b5e8da2')"); ((JavascriptExecutor) driver).executeScript("showWindow('dsu_paulsign', 'plugin.php?id=dsu_paulsign:sign&9b5e8da2')");
}catch (Exception ignored){ } catch (Exception ignored) {
} }
try { try {
Thread.sleep(500); Thread.sleep(500);
} catch (InterruptedException e) { } catch (InterruptedException e) {
e.printStackTrace(); e.printStackTrace();
} }
driver.findElement(By.id("wl")).click(); try {
driver.findElement(By.xpath("//input[@value='3']")).click(); driver.findElement(By.id("wl")).click();
driver.findElement(By.id("qiandao")).submit(); driver.findElement(By.xpath("//input[@value='3']")).click();
driver.findElement(By.id("qiandao")).submit();
} catch (Exception e) {
e.printStackTrace();
}
driver.close(); driver.close();
driver.quit(); driver.quit();
} }
private void getTsdm(JSONArray array, WebDriver driver) { private void getTsdm(JSONArray array, WebDriver driver) {
driver.manage().timeouts().implicitlyWait(10000, TimeUnit.SECONDS); driver.manage().timeouts().implicitlyWait(10000, TimeUnit.SECONDS);
driver.manage().deleteAllCookies();
try { try {
Thread.sleep(500); Thread.sleep(500);
} catch (InterruptedException e) { } catch (InterruptedException e) {
@ -103,7 +119,7 @@ public class Tsdm extends Model {
System.err.println("array is null"); System.err.println("array is null");
return null; return null;
} }
WebDriver driver =WebClient.getInstance().getWebDriver(); WebDriver driver = WebClient.getInstance().getWebDriver();
driver.get(url); driver.get(url);
getTsdm(array, driver); getTsdm(array, driver);
try { try {

View File

@ -31,6 +31,9 @@ public class AppTools {
public static String getToDayTime() { public static String getToDayTime() {
return new SimpleDateFormat("yyyy-MM-dd").format(new Date()); return new SimpleDateFormat("yyyy-MM-dd").format(new Date());
} }
public static String getHours(){
return new SimpleDateFormat("HH").format(new Date());
}
/** /**
* 异常输出 * 异常输出
* *

View File

@ -21,9 +21,11 @@ public class WebClient {
} }
return client; return client;
} }
public WebDriver getWebDriver(){
public WebDriver getWebDriver() {
return new ChromeDriver(getOptions()); return new ChromeDriver(getOptions());
} }
private WebClient() { private WebClient() {
System.setProperty("webdriver.chrome.driver", System.setProperty("webdriver.chrome.driver",
ConfigTools.load(ConfigTools.CONFIG, "chrome", String.class)); ConfigTools.load(ConfigTools.CONFIG, "chrome", String.class));
@ -31,27 +33,22 @@ public class WebClient {
} }
public static List<Cookie> loadCookie(JSONArray array) {
List<Cookie> list = new ArrayList<>();
public static List<Cookie> loadCookie(JSONArray array){
List<Cookie> list=new ArrayList<>();
for (Object o : array) { for (Object o : array) {
JSONObject json = (JSONObject) o; JSONObject json = (JSONObject) o;
boolean containsDate=json.containsKey("expirationDate"); boolean containsDate = json.containsKey("expirationDate");
long t=0; long t = 0;
if(containsDate) { if (containsDate) {
t = Long.parseLong(json.getString("expirationDate").replace(".", "")) / 1000; t = Long.parseLong(json.getString("expirationDate").replace(".", "")) / 1000;
} }
Cookie cookie = new Cookie(json.getString("name"), Cookie cookie = new Cookie(json.getString("name"),
json.getString("value"), json.getString("value"),
json.getString("domain"), json.getString("domain"),
json.getString("path"), json.getString("path"),
containsDate? new Date(t):null, containsDate ? new Date(t) : new Date(),
json.getBoolean("secure"), json.getBoolean("secure"),
json.getBoolean("httpOnly") json.getBoolean("httpOnly")
@ -63,9 +60,9 @@ public class WebClient {
public static ChromeOptions getOptions() { public static ChromeOptions getOptions() {
ChromeOptions options = new ChromeOptions(); ChromeOptions options = new ChromeOptions();
options.addArguments("disable-infobars"); options.addArguments("--disable-gpu");
options.addArguments("blink-settings=imagesEnabled=false"); // options.addArguments("blink-settings=imagesEnabled=false");
options.addArguments("--headless"); options.addArguments("--headless");
options.addArguments("--no-sandbox"); options.addArguments("--no-sandbox");
return options; return options;