this was alot simpler than with c++

This commit is contained in:
jenzur
2019-04-15 00:14:00 +02:00
parent 5552a20eb6
commit f6da878ac0
2 changed files with 189 additions and 17 deletions
@@ -0,0 +1,147 @@
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package FunctionLayer;
//ps ax | grep EventNotfierDiscordBot-1.0
//kill $pid (number)
/*
screen -d -m -S nonRoot java -jar /home/sourcemodextensionstest/EventNotfierDiscordBot/EventNotfierDiscordBot-1.0.jar
screen -ls (number1)
screen -X -S (number1) quit
nohup screen -d -m -S nonroot java -jar /home/sourcemodextensionstest/EventNotfierDiscordBot/EventNotfierDiscordBot-1.0.jar
*/
import DataLayer.DataMapper;
import com.google.common.base.Stopwatch;
import com.google.common.collect.MapMaker;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.ProtocolException;
import java.net.URL;
import java.sql.SQLException;
import java.util.Collection;
import java.util.List;
import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.TimeUnit;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.javacord.api.DiscordApi;
import org.javacord.api.DiscordApiBuilder;
import org.javacord.api.event.message.MessageCreateEvent;
import org.jsoup.Jsoup;
/**
*
* @author install1
*/
public class EventNotifier {
//public static EventNotifier instance = new EventNotifier();
public static final long EXPIRE_TIME_IN_SECONDS = TimeUnit.SECONDS.convert(15, TimeUnit.MINUTES);
private static Stopwatch stopwatch = Stopwatch.createUnstarted();
private static String eventURL = "https://unloze.com/forums/events.76/";
private static void checkIfNewEventThread() {
try {
URL url = new URL(eventURL);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("GET");
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer content = new StringBuffer();
int firstEventForZEFinder = 0;
while ((inputLine = in.readLine()) != null) {
content.append(inputLine).append("\n");
if (inputLine.contains(">Event #") && firstEventForZEFinder == 0) {
if (!inputLine.contains("Nomination") && !inputLine.contains("Poll")) {
int diff = content.length() - inputLine.length();
firstEventForZEFinder = diff > 0 ? diff : 0;
}
}
}
String str = content.toString();
String hRef = "<a href=\"";
str = str.substring(firstEventForZEFinder);
str = str.substring(0, str.indexOf(">Event #"));
str = str.substring(str.lastIndexOf(hRef), str.lastIndexOf("\" title="));
str = str.replace(hRef, "");
String urlFirstEvent = "https://unloze.com/" + str;
System.out.println(urlFirstEvent);
url = new URL(urlFirstEvent);
con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("GET");
in = new BufferedReader(new InputStreamReader(con.getInputStream()));
content = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
content.append(inputLine).append("\n");
}
str = content.toString();
if (str.contains("Server :") && str.contains("Maps :") && str.contains("Prize :")) {
ConcurrentMap<Integer, String> eventContentMap = new MapMaker().concurrencyLevel(2).makeMap();
String html2text = html2text(str);
System.out.println(html2text);
String title = html2text.substring(0, html2text.indexOf("| UNLOZE"));
eventContentMap.put(eventContentMap.size(), title);
String rewards = html2text.substring(html2text.indexOf("Prize :") + 7, html2text.lastIndexOf("won"));
rewards = rewards + "won";
eventContentMap.put(eventContentMap.size(), rewards);
String leaders = html2text.substring(html2text.indexOf("Leader :") + 7, html2text.indexOf("Prize :"));
eventContentMap.put(eventContentMap.size(), leaders);
String date = html2text.substring(html2text.indexOf("Date :") + 6, html2text.indexOf("Time :"));
eventContentMap.put(eventContentMap.size(), date);
String Time = html2text.substring(html2text.indexOf("Time :") + 6, html2text.indexOf("Leader :"));
eventContentMap.put(eventContentMap.size(), Time);
String maps = html2text.substring(html2text.indexOf("Maps : -") + 6, html2text.indexOf("Date :"));
String[] split = maps.split("-");
for (String strsplit : split) {
eventContentMap.put(eventContentMap.size(), strsplit);
}
DataMapper.instance.insertIntoDBEventContent(eventContentMap);
}
con.disconnect();
in.close();
} catch (MalformedURLException | ProtocolException ex) {
Logger.getLogger(EventNotifier.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(EventNotifier.class.getName()).log(Level.SEVERE, null, ex);
}
}
public static String html2text(String html) {
return Jsoup.parse(html).text();
}
public static void main(String[] args) {
String token = "NTI5MDIyODgwOTU3MDcxMzk5.Dwqy6w.sgbRejEzZOLdTqyqzDmktSTBDpM";
DiscordApi api = new DiscordApiBuilder().setToken(token).login().join();
api.addMessageCreateListener((MessageCreateEvent event) -> {
if (stopwatch.elapsed(TimeUnit.SECONDS) >= EXPIRE_TIME_IN_SECONDS || !stopwatch.isRunning()) {
if (!stopwatch.isRunning()) {
stopwatch.start();
} else {
stopwatch.reset();
}
checkIfNewEventThread();
}
if (event.getMessageContent().equalsIgnoreCase("!event")) {
try {
DataMapper.instance.initialization();
List<StringObject> EventContent = DataMapper.instance.getAllMapValues();
StringBuilder sb = new StringBuilder();
sb.append("Event Information: \n");
for (StringObject SO : EventContent) {
sb.append(SO.getEventContent()).append("\n");
}
event.getChannel().sendMessage(sb.toString());
} catch (SQLException | IOException | CustomError ex) {
Logger.getLogger(EventNotifier.class.getName()).log(Level.SEVERE, null, ex);
}
}
});
}
}