Skip to content
This repository has been archived by the owner on Mar 9, 2021. It is now read-only.

Commit

Permalink
Hang until database returns, save hidden status, log deleted messages
Browse files Browse the repository at this point in the history
  • Loading branch information
urielsalis committed Sep 3, 2017
1 parent e6cb0d6 commit 9cf9560
Show file tree
Hide file tree
Showing 5 changed files with 60 additions and 21 deletions.
2 changes: 2 additions & 0 deletions src/main/java/me/urielsalis/cursebot/Main.java
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,8 @@ private void fetchDomains() {

private void loadProperties() {
try {
File file = new File("unhidden");
Util.unhidden = file.exists();
Properties prop = new Properties();
InputStream inputStream = new FileInputStream("config.properties");

Expand Down
35 changes: 21 additions & 14 deletions src/main/java/me/urielsalis/cursebot/api/CurseApi.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,22 +4,15 @@
import com.neovisionaries.ws.client.WebSocketAdapter;
import com.neovisionaries.ws.client.WebSocketException;
import com.neovisionaries.ws.client.WebSocketFactory;
import me.urielsalis.cursebot.api.Util;
import me.urielsalis.cursebot.events.CommandEvent;
import me.urielsalis.cursebot.events.MessageEvent;
import me.urielsalis.cursebot.extensions.Extension;
import me.urielsalis.cursebot.extensions.ExtensionApi;
import me.urielsalis.cursebot.extensions.ExtensionHandler;
import me.urielsalis.cursebot.extensions.Profanity.Main;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;

import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.lang.reflect.Array;
import java.sql.SQLException;
import java.util.*;
import java.util.concurrent.TimeUnit;
Expand Down Expand Up @@ -117,15 +110,29 @@ public void onTextMessage(WebSocket ws, String s) {
String channelUUID = (String) body.get("ConversationID");
addMemberIfNotFound((String) body.get("SenderName"), (long) body.get("SenderID"));
updateMember((long) body.get("SenderID"), (long) body.get("SenderVanityRole"), (String) body.get("SenderName"));
Message message = new Message(body.get("SenderName"), body.get("Body"), body.get("Timestamp"), body.get("ServerID"), channelUUID, isPM);
messages++;
if(isPM) {
updateListeners(message);
} else {
if((boolean) body.get("IsDeleted")) {
Channel channel = resolveChannelUUID(channelUUID);
if (!channel.getMessages().contains(message)) {
channel.getMessages().add(message);
Optional<Message> message = channel.getMessages().stream().filter(message1 -> (message1.serverID.equals(body.get("ServerID")) && (message1.timestamp==(long)body.get("Timestamp")))).findFirst();
message.ifPresent(message1 -> {
try {
Util.dataBase.addDeletedMessage(message1, channel, (long) body.get("DeletedUserID"), (String) body.get("DeletedUsername"), (long) body.get("DeletedTimestamp"));
} catch (SQLException e) {
e.printStackTrace();
api.postMessage(api.resolveChannel(Util.botlogChannel), "Database error while deleting message");
}
api.postMessage(api.resolveChannel(Util.botlogChannel), "Deleted message: " + Util.timestampToDate(message.get().timestamp) + " <" + body.get("senderUsername") + "> " + message1.body);
});
} else {
Message message = new Message(body.get("SenderName"), body.get("Body"), body.get("Timestamp"), body.get("ServerID"), channelUUID, isPM);
messages++;
if (isPM) {
updateListeners(message);
} else {
Channel channel = resolveChannelUUID(channelUUID);
if (!channel.getMessages().contains(message)) {
channel.getMessages().add(message);
updateListeners(message);
}
}
}
} else if(TypeID==RESPONSELOGIN1_ID) {
Expand Down
31 changes: 24 additions & 7 deletions src/main/java/me/urielsalis/cursebot/api/DataBase.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,13 +29,11 @@ public Connection getConnection() {
Connection con = null;
try {
con = DriverManager.getConnection(url, Util.databaseUsername, Util.databasePassword);
while(con == null) {
con = DriverManager.getConnection(url, Util.databaseUsername, Util.databasePassword);
}
Connection finalCon = con;
Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
@Override
public void run() {
closeDB(finalCon);
}
}));
Runtime.getRuntime().addShutdownHook(new Thread(() -> closeDB(finalCon)));
} catch (Exception ex) {
Logger lgr = Logger.getLogger(Main.class.getName());
lgr.log(Level.SEVERE, ex.getMessage(), ex);
Expand All @@ -57,7 +55,7 @@ public void addBanRecord(long issuerID, String issuerUsername, long bannedID, St
cs.setString("reason", reason);
cs.setLong("banDuration", duration);
cs.execute();

closeDB(con);
}
//Adds new command issuer, username must be unique curse ID(memberobj.username), args doesnt include the command, is a empty string if non existant
public void addCommandHistory(long userId, String username, String command, String channel, String args) {
Expand All @@ -71,6 +69,7 @@ public void addCommandHistory(long userId, String username, String command, Stri
cs.setString("channel", channel);
cs.setString("args", args);
cs.execute();
closeDB(con);
} catch (Exception e) {
api.postMessage(api.resolveChannel(Util.botlogChannel), "Database error in command history, this might be bad");
e.printStackTrace();
Expand All @@ -96,6 +95,7 @@ public void addLogMessage(String level, String message, Exception e) {
cs.setString("stacktrace", sw.toString());
cs.setString("data", "");
cs.execute();
closeDB(con);
} catch (Exception e1) {
e1.printStackTrace();
}
Expand All @@ -112,6 +112,7 @@ public void addWarning(long issuerId, String issuerUsername, long warnedId, Stri
cs.setString("reason", reason);
cs.setString("action", action);
cs.execute();
closeDB(con);
}

public void closeDB(Connection con) {
Expand All @@ -123,4 +124,20 @@ public void closeDB(Connection con) {
e.printStackTrace();
}
}

public void addDeletedMessage(Message message, Channel channel, long deletedUserID, String deletedUsername, long timestampDeleted) throws SQLException {
Connection con = getConnection();
String simpleProc = "{ call deletedMessage(?, ?, ?, ?, ?, ?) }";
CallableStatement cs = con.prepareCall(simpleProc);
cs.setString("body", message.body);
cs.setString("issuerUsername", deletedUsername);
cs.setLong("issuerID", deletedUserID);
cs.setLong("warnedId", api.resolveMember(message.senderName).senderID);
cs.setString("warnedUsername", message.senderName);
cs.setLong("timestampDeleted", timestampDeleted);
cs.setLong("timestampMessage", message.cursetimestamp);
cs.setString("channel", channel.getGroupTitle());
cs.execute();
closeDB(con);
}
}
11 changes: 11 additions & 0 deletions src/main/java/me/urielsalis/cursebot/api/Util.java
Original file line number Diff line number Diff line change
Expand Up @@ -166,4 +166,15 @@ public static boolean canRemoveUser(long userID) {
return Util.unhidden && Util.removeUserWhen.get(userID) % 4 == 0;
}

public static void saveState() {
File file = new File("unhidden");
try {
file.delete();
if(unhidden) {
file.createNewFile();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -272,11 +272,13 @@ private static void handleCommand(Command command) {
else {
if (Util.unhidden) { //hide
Util.unhidden = false;
Util.saveState();
Util.dataBase.addCommandHistory(cmdSenderID, uniqueName, "mode hide", channelName, stringArgs);
api.postMessage(botCommandChannel, "Bot has been suppressed from invoking actions, but will continue logging as normal.");
}
else { //unhide
Util.unhidden = true;
Util.saveState();
Util.dataBase.addCommandHistory(cmdSenderID, uniqueName, "mode unhide", channelName, stringArgs);
api.postMessage(botCommandChannel, "Bot has been unsuppressed from invoking actions, and will continue logging as normal.");
}
Expand Down

0 comments on commit 9cf9560

Please sign in to comment.