Compare commits
5 Commits
f4733ab9bc
...
512928c8ad
Author | SHA1 | Date | |
---|---|---|---|
512928c8ad | |||
95141649dc | |||
191a1fc6ed | |||
90b9718471 | |||
4c2f4abaa5 |
@ -2,8 +2,10 @@ package com.yutou.qqbot;
|
|||||||
|
|
||||||
import com.yutou.qqbot.Listeners.QQMessageListener;
|
import com.yutou.qqbot.Listeners.QQMessageListener;
|
||||||
import com.yutou.qqbot.models.Animal.TurnipProphet;
|
import com.yutou.qqbot.models.Animal.TurnipProphet;
|
||||||
|
import com.yutou.qqbot.models.Commands.BaiduDown;
|
||||||
import com.yutou.qqbot.models.Commands.Bangumi;
|
import com.yutou.qqbot.models.Commands.Bangumi;
|
||||||
import com.yutou.qqbot.models.Commands.System.*;
|
import com.yutou.qqbot.models.Commands.System.*;
|
||||||
|
import com.yutou.qqbot.models.Commands.Tsdm;
|
||||||
import com.yutou.qqbot.models.Model;
|
import com.yutou.qqbot.models.Model;
|
||||||
import com.yutou.qqbot.models.setu.QQSetu;
|
import com.yutou.qqbot.models.setu.QQSetu;
|
||||||
import com.yutou.qqbot.utlis.*;
|
import com.yutou.qqbot.utlis.*;
|
||||||
@ -38,6 +40,8 @@ public class QQBotManager {
|
|||||||
Model.classList.add(Bangumi.class);
|
Model.classList.add(Bangumi.class);
|
||||||
|
|
||||||
Model.classList.add(TurnipProphet.class);
|
Model.classList.add(TurnipProphet.class);
|
||||||
|
Model.classList.add(Tsdm.class);
|
||||||
|
Model.classList.add(BaiduDown.class);
|
||||||
}
|
}
|
||||||
private static QQBotManager botManager = null;
|
private static QQBotManager botManager = null;
|
||||||
private Bot bot;
|
private Bot bot;
|
||||||
|
@ -36,7 +36,7 @@ public class TurnipProphet extends Model {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int nowTime;
|
static int nowTime;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isUserPublic() {
|
public boolean isUserPublic() {
|
||||||
@ -53,15 +53,56 @@ public class TurnipProphet 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 (isGroup) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
int money = -1;
|
int money = -1;
|
||||||
try {
|
try {
|
||||||
money = Integer.parseInt(msg.trim());
|
money = Integer.parseInt(msg.trim());
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
if (msg.equals(QQFromCommands.TURNIP_PROPHET)) {
|
||||||
|
showData(event.getSource().getFromId());
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
setData(money, event.getSource().getFromId());
|
setData(money, event.getSource().getFromId());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void showData(long qq) {
|
||||||
|
String redisKey = qq + "_turnip";
|
||||||
|
String data = RedisTools.get(redisKey);
|
||||||
|
if (StringUtils.isEmpty(data)) {
|
||||||
|
QQBotManager.getInstance().sendMessage(qq, "没有本周数据,无法预测");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
JSONObject json = JSONObject.parseObject(data);
|
||||||
|
String prices = json.getString("prices");
|
||||||
|
String pattern = null;
|
||||||
|
if (json.containsKey("old_pattern")) {
|
||||||
|
try {
|
||||||
|
pattern = json.getString("old_pattern");
|
||||||
|
} catch (Exception ignored) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (pattern != null) {
|
||||||
|
switch (pattern) {
|
||||||
|
case "波动型" -> pattern = "0";
|
||||||
|
case "大幅上涨(三期型)" -> pattern = "1";
|
||||||
|
case "递减型" -> pattern = "2";
|
||||||
|
case "小幅上涨(四期型)" -> pattern = "3";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Map<String, String> map = null;
|
||||||
|
try {
|
||||||
|
map = WebClient.getInstance().openTurnip(prices, pattern);
|
||||||
|
sendQQ(map, prices, pattern, qq);
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
showData(qq);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
private void setData(int money, long qq) {
|
private void setData(int money, long qq) {
|
||||||
String redisKey = qq + "_turnip";
|
String redisKey = qq + "_turnip";
|
||||||
String data = RedisTools.get(redisKey);
|
String data = RedisTools.get(redisKey);
|
||||||
@ -139,15 +180,32 @@ public class TurnipProphet extends Model {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
QQBotManager.getInstance().sendMessage(qq, "已记录,正在预测本周走势...");
|
QQBotManager.getInstance().sendMessage(qq, "已记录,正在预测本周走势...");
|
||||||
|
|
||||||
Map<String, String> map = WebClient.getInstance().openTurnip(prices, pattern);
|
Map<String, String> map = WebClient.getInstance().openTurnip(prices, pattern);
|
||||||
|
|
||||||
|
String tmp_pattern = sendQQ(map, prices, pattern, qq);
|
||||||
|
if (!StringUtils.isEmpty(tmp_pattern)) {
|
||||||
|
json.put("pattern", tmp_pattern);
|
||||||
|
}
|
||||||
|
RedisTools.set(redisKey, json.toJSONString());
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
setData(money, qq);
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
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网页预览:" + url);
|
||||||
return;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
JSONObject pr = JSONObject.parseObject(map.get(TurnipData.MODEL));
|
JSONObject pr = JSONObject.parseObject(map.get(TurnipData.MODEL));
|
||||||
@ -183,16 +241,10 @@ public class TurnipProphet extends Model {
|
|||||||
}
|
}
|
||||||
out.append("------------").append("\n");
|
out.append("------------").append("\n");
|
||||||
out.append("祝好运 :)");
|
out.append("祝好运 :)");
|
||||||
json.put("pattern", prArray.getJSONObject(0).getString(TurnipData.MODEL));
|
|
||||||
RedisTools.set(redisKey, json.toJSONString());
|
|
||||||
Log.i("TurnipProphet", out.toString());
|
Log.i("TurnipProphet", out.toString());
|
||||||
QQBotManager.getInstance().sendMessage(qq, out.toString());
|
QQBotManager.getInstance().sendMessage(qq, out.toString());
|
||||||
} catch (Exception e) {
|
return prArray.getJSONObject(0).getString(TurnipData.MODEL);
|
||||||
setData(money, qq);
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
40
src/main/java/com/yutou/qqbot/models/Commands/BaiduDown.java
Normal file
40
src/main/java/com/yutou/qqbot/models/Commands/BaiduDown.java
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
package com.yutou.qqbot.models.Commands;
|
||||||
|
|
||||||
|
import com.yutou.qqbot.QQBotManager;
|
||||||
|
import com.yutou.qqbot.interfaces.ObjectInterface;
|
||||||
|
import com.yutou.qqbot.models.Model;
|
||||||
|
import com.yutou.qqbot.utlis.AppTools;
|
||||||
|
import com.yutou.qqbot.utlis.Log;
|
||||||
|
import net.mamoe.mirai.event.events.MessageEvent;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
|
||||||
|
public class BaiduDown extends Model {
|
||||||
|
@Override
|
||||||
|
public boolean isUserPublic() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String[] getUsePowers() {
|
||||||
|
return new String[]{
|
||||||
|
QQFromCommands.BAIDU_DOWN
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onMessage(Long qq, MessageEvent event, boolean isGroup) {
|
||||||
|
super.onMessage(qq, event, isGroup);
|
||||||
|
if(msg.startsWith(QQFromCommands.BAIDU_DOWN)){
|
||||||
|
QQBotManager.getInstance().sendMessage(qq,"开始同步百度云");
|
||||||
|
AppTools.exec("cd "+new File("baidupan").getAbsolutePath()+" && bypy downdir -v", new ObjectInterface() {
|
||||||
|
@Override
|
||||||
|
public void out(String data) {
|
||||||
|
super.out(data);
|
||||||
|
Log.i(data);
|
||||||
|
QQBotManager.getInstance().sendMessage(qq,"任务完成");
|
||||||
|
}
|
||||||
|
},true,true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
44
src/main/java/com/yutou/qqbot/models/Commands/Tsdm.java
Normal file
44
src/main/java/com/yutou/qqbot/models/Commands/Tsdm.java
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
package com.yutou.qqbot.models.Commands;
|
||||||
|
|
||||||
|
import com.yutou.qqbot.QQBotManager;
|
||||||
|
import com.yutou.qqbot.models.Model;
|
||||||
|
import com.yutou.qqbot.utlis.StringUtils;
|
||||||
|
import com.yutou.qqbot.utlis.WebClient;
|
||||||
|
import net.mamoe.mirai.event.events.MessageEvent;
|
||||||
|
|
||||||
|
public class Tsdm extends Model {
|
||||||
|
@Override
|
||||||
|
public boolean isUserPublic() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String[] getUsePowers() {
|
||||||
|
return new String[]{
|
||||||
|
QQFromCommands.TSDM_PAY
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onMessage(Long qq, MessageEvent event, boolean isGroup) {
|
||||||
|
super.onMessage(qq, event, isGroup);
|
||||||
|
if(msg.startsWith(QQFromCommands.TSDM_PAY)){
|
||||||
|
String url=msg.replace(QQFromCommands.TSDM_PAY,"").trim();
|
||||||
|
if(StringUtils.isEmpty(url)){
|
||||||
|
QQBotManager.getInstance().sendMessage(qq,"使用说明:!tsdm [url]");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
QQBotManager.getInstance().sendMessage(qq,"正在获取,请稍等...");
|
||||||
|
QQBotManager.getInstance().sendMessage(qq,WebClient.getInstance().tsdm(url));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onTime(String time) {
|
||||||
|
super.onTime(time);
|
||||||
|
if("08:00".equals(time)){
|
||||||
|
WebClient.getInstance().tsdmSign();
|
||||||
|
QQBotManager.getInstance().sendMessage(QQBotManager.defGroup,"已完成天使动漫的签到");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -36,6 +36,9 @@ public abstract class Model implements ModelInterface {
|
|||||||
|
|
||||||
public static class QQFromCommands {
|
public static class QQFromCommands {
|
||||||
public static final String TURNIP_PROPHET = "大头菜";
|
public static final String TURNIP_PROPHET = "大头菜";
|
||||||
|
public static final String TSDM_PAY = "!tsdm";
|
||||||
|
public static final String TSDM_SIGN = "!tsdm签到";
|
||||||
|
public static final String BAIDU_DOWN = "!bd";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -28,7 +28,7 @@ public class QQSetu extends Model {
|
|||||||
private int db_user =3;//当次数据
|
private int db_user =3;//当次数据
|
||||||
private long group;
|
private long group;
|
||||||
private Timer timer;
|
private Timer timer;
|
||||||
private final Map<String, Float> setuScore = new HashMap<>();
|
private static final Map<String, Float> setuScore = new HashMap<>();
|
||||||
|
|
||||||
public void printTodaySetu() {
|
public void printTodaySetu() {
|
||||||
String redisKey= AppTools.getToDayTime() + "_setu";
|
String redisKey= AppTools.getToDayTime() + "_setu";
|
||||||
@ -121,6 +121,7 @@ public class QQSetu extends Model {
|
|||||||
if(!setuScore.isEmpty()){
|
if(!setuScore.isEmpty()){
|
||||||
printSetu(group);
|
printSetu(group);
|
||||||
}
|
}
|
||||||
|
timer.cancel();
|
||||||
timer = null;
|
timer = null;
|
||||||
}
|
}
|
||||||
}, (long) (0.9 * 60 * 1000));
|
}, (long) (0.9 * 60 * 1000));
|
||||||
|
@ -23,6 +23,7 @@ public class ApplicationInit implements ApplicationRunner {
|
|||||||
if (time.equals(oldTime)) {
|
if (time.equals(oldTime)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
oldTime=time;
|
||||||
for (Class<?> model : Model.classList) {
|
for (Class<?> model : Model.classList) {
|
||||||
try {
|
try {
|
||||||
Model useModel= (Model) model.getDeclaredConstructor().newInstance();
|
Model useModel= (Model) model.getDeclaredConstructor().newInstance();
|
||||||
|
@ -3,17 +3,16 @@ package com.yutou.qqbot.utlis;
|
|||||||
import com.alibaba.fastjson.JSONArray;
|
import com.alibaba.fastjson.JSONArray;
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import com.yutou.qqbot.models.Animal.TurnipProphet;
|
import com.yutou.qqbot.models.Animal.TurnipProphet;
|
||||||
import org.openqa.selenium.By;
|
import org.openqa.selenium.*;
|
||||||
import org.openqa.selenium.WebDriver;
|
|
||||||
import org.openqa.selenium.WebElement;
|
|
||||||
import org.openqa.selenium.chrome.ChromeDriver;
|
import org.openqa.selenium.chrome.ChromeDriver;
|
||||||
import org.openqa.selenium.chrome.ChromeOptions;
|
import org.openqa.selenium.chrome.ChromeOptions;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.util.Date;
|
||||||
import java.util.LinkedHashMap;
|
import java.util.LinkedHashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.util.logging.Level;
|
|
||||||
|
|
||||||
public class WebClient {
|
public class WebClient {
|
||||||
private static WebClient client;
|
private static WebClient client;
|
||||||
@ -28,12 +27,12 @@ public class WebClient {
|
|||||||
|
|
||||||
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));
|
||||||
// java.util.logging.Logger.getLogger("org.openqa.selenium").setLevel(Level.OFF);
|
// java.util.logging.Logger.getLogger("org.openqa.selenium").setLevel(Level.OFF);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Map<String, String> openTurnip(String prices, String pattern) throws Exception {
|
public Map<String, String> openTurnip(String prices, String pattern) throws Exception {
|
||||||
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
|
||||||
);
|
);
|
||||||
@ -48,7 +47,7 @@ public class WebClient {
|
|||||||
List<WebElement> list = element.findElements(By.tagName("tr"));
|
List<WebElement> list = element.findElements(By.tagName("tr"));
|
||||||
JSONObject pr = new JSONObject();
|
JSONObject pr = new JSONObject();
|
||||||
JSONArray array = new JSONArray();
|
JSONArray array = new JSONArray();
|
||||||
if(list.size()==0){
|
if (list.size() == 0) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -86,7 +85,7 @@ public class WebClient {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (String key : map.keySet()) {
|
for (String key : map.keySet()) {
|
||||||
System.err.println("记录最高日:"+map.get(key)+" > "+key);
|
System.err.println("记录最高日:" + map.get(key) + " > " + key);
|
||||||
if (!key.equals(TurnipProphet.TurnipData.MAX) &&
|
if (!key.equals(TurnipProphet.TurnipData.MAX) &&
|
||||||
map.get(key).contains(map.get(TurnipProphet.TurnipData.MAX))) {
|
map.get(key).contains(map.get(TurnipProphet.TurnipData.MAX))) {
|
||||||
map.put(TurnipProphet.TurnipData.DAY, key);
|
map.put(TurnipProphet.TurnipData.DAY, key);
|
||||||
@ -96,9 +95,89 @@ public class WebClient {
|
|||||||
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());
|
||||||
webDriver.close();
|
webDriver.close();
|
||||||
|
webDriver.quit();
|
||||||
return map;
|
return map;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String tsdm(String url) {
|
||||||
|
JSONArray array = JSONArray.parseArray(ConfigTools.readFile(new File("cookie.json")));
|
||||||
|
if (array == null) {
|
||||||
|
System.err.println("array is null");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
WebDriver driver = new ChromeDriver(getOptions());
|
||||||
|
driver.get(url);
|
||||||
|
getTsdm(array, driver);
|
||||||
|
try {
|
||||||
|
((JavascriptExecutor) driver).executeScript("document.getElementsByClassName('y viewpay')[0].click()");
|
||||||
|
try {
|
||||||
|
Thread.sleep(500);
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
driver.findElement(By.id("payform")).submit();
|
||||||
|
} catch (Exception ignored) {
|
||||||
|
|
||||||
|
}
|
||||||
|
String body = driver.findElement(By.name("tsdmlz")).getText();
|
||||||
|
driver.close();
|
||||||
|
driver.quit();
|
||||||
|
return body;
|
||||||
|
}
|
||||||
|
public void tsdmSign(){
|
||||||
|
JSONArray array = JSONArray.parseArray(ConfigTools.readFile(new File("cookie.json")));
|
||||||
|
if (array == null) {
|
||||||
|
System.err.println("array is null");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
WebDriver driver = new ChromeDriver(getOptions());
|
||||||
|
driver.get("https://www.tsdm39.net/forum.php");
|
||||||
|
getTsdm(array, driver);
|
||||||
|
try {
|
||||||
|
((JavascriptExecutor) driver).executeScript("showWindow('dsu_paulsign', 'plugin.php?id=dsu_paulsign:sign&9b5e8da2')");
|
||||||
|
}catch (Exception ignored){
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
Thread.sleep(500);
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
driver.findElement(By.id("wl")).click();
|
||||||
|
driver.findElement(By.xpath("//input[@value='3']")).click();
|
||||||
|
driver.findElement(By.id("qiandao")).submit();
|
||||||
|
driver.close();
|
||||||
|
driver.quit();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void getTsdm(JSONArray array, WebDriver driver) {
|
||||||
|
driver.manage().timeouts().implicitlyWait(10000, TimeUnit.SECONDS);
|
||||||
|
try {
|
||||||
|
Thread.sleep(500);
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
for (Object o : array) {
|
||||||
|
JSONObject json = (JSONObject) o;
|
||||||
|
long t = Long.parseLong(json.getString("expirationDate").replace(".", "")) / 1000;
|
||||||
|
Cookie cookie = new Cookie(json.getString("name"),
|
||||||
|
json.getString("value"),
|
||||||
|
json.getString("domain"),
|
||||||
|
json.getString("path"),
|
||||||
|
new Date(t),
|
||||||
|
json.getBoolean("secure"),
|
||||||
|
json.getBoolean("httpOnly")
|
||||||
|
|
||||||
|
);
|
||||||
|
driver.manage().addCookie(cookie);
|
||||||
|
}
|
||||||
|
driver.navigate().refresh();
|
||||||
|
try {
|
||||||
|
Thread.sleep(1000);
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private ChromeOptions getOptions() {
|
private ChromeOptions getOptions() {
|
||||||
ChromeOptions options = new ChromeOptions();
|
ChromeOptions options = new ChromeOptions();
|
||||||
options.addArguments("disable-infobars");
|
options.addArguments("disable-infobars");
|
||||||
@ -110,6 +189,6 @@ public class WebClient {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
|
WebClient.getInstance().tsdmSign();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user