summaryrefslogtreecommitdiff
path: root/src/main/java/com/redstoner/modules/discord
diff options
context:
space:
mode:
authorDavid <david@panic.tk>2018-11-08 00:32:33 +0100
committerDavid <david@panic.tk>2018-11-08 00:32:33 +0100
commit994e6da8388838b2d63814decb28757c113c928c (patch)
treee5145b4afdbcc6c50485e6515f68155e3555293b /src/main/java/com/redstoner/modules/discord
parentf6536e0a9b49c7f3aa6439cf83f468fdeb924b00 (diff)
Finalized the Discord module
Diffstat (limited to 'src/main/java/com/redstoner/modules/discord')
-rw-r--r--src/main/java/com/redstoner/modules/discord/Discord.java165
1 files changed, 82 insertions, 83 deletions
diff --git a/src/main/java/com/redstoner/modules/discord/Discord.java b/src/main/java/com/redstoner/modules/discord/Discord.java
index 9d87bc0..57bc725 100644
--- a/src/main/java/com/redstoner/modules/discord/Discord.java
+++ b/src/main/java/com/redstoner/modules/discord/Discord.java
@@ -1,118 +1,117 @@
package com.redstoner.modules.discord;
-import java.io.File;
+import java.io.IOException;
import java.security.SecureRandom;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
-import org.json.simple.JSONObject;
-
-import net.nemez.chatapi.click.Message;
import com.nemez.cmdmgr.Command;
import com.redstoner.annotations.Commands;
import com.redstoner.annotations.Version;
import com.redstoner.misc.CommandHolderType;
+import com.redstoner.misc.mysql.Config;
+import com.redstoner.misc.mysql.MysqlHandler;
+import com.redstoner.misc.mysql.elements.ConstraintOperator;
+import com.redstoner.misc.mysql.elements.MysqlConstraint;
+import com.redstoner.misc.mysql.elements.MysqlDatabase;
+import com.redstoner.misc.mysql.elements.MysqlField;
+import com.redstoner.misc.mysql.elements.MysqlTable;
+import com.redstoner.misc.mysql.types.text.VarChar;
import com.redstoner.modules.Module;
-import com.redstoner.misc.JsonManager;
-import com.redstoner.misc.Main;
+
+import net.nemez.chatapi.click.Message;
@Commands(CommandHolderType.File)
@Version(major = 4, minor = 0, revision = 0, compatible = 4)
-public class Discord implements Module {
-
- private final String FILENAME = "discordTokens.json";
- private final String DNE_LINK = "dne://";
-
- private JSONObject discordTables;
- private JSONObject byToken;
- private JSONObject byUUID;
-
- private String joinLink;
- private File savefile;
-
+public class Discord implements Module {
+ private MysqlTable table;
+
+ private String inviteLink;
+
private final String tokenCharacters = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
private SecureRandom rnd = new SecureRandom();
-
- @SuppressWarnings("unchecked")
+
@Override
public boolean onEnable() {
- savefile = new File(Main.plugin.getDataFolder(), FILENAME);
-
- discordTables = JsonManager.getObject(savefile);
-
- if (discordTables == null) {
- discordTables = new JSONObject();
- discordTables.put("joinLink", DNE_LINK);
- save();
+ Config config;
+ try {
+ config = Config.getConfig("Discord.json");
+ } catch (IOException | org.json.simple.parser.ParseException e1) {
+ e1.printStackTrace();
+ return false;
}
-
- Object joinLinkObject = discordTables.get("joinLink");
-
- if (joinLinkObject == null || ((String) joinLinkObject).equals(DNE_LINK)) {
- getLogger().error("Missing Join Link. Set: \"joinLink\" to \"_joinLink_\" in the discordTokens.json file.");
+
+ if (config == null || !config.containsKey("database") || !config.containsKey("table")
+ || !config.containsKey("inviteLink")) {
+ getLogger().error("Could not load the Discord config file, disabling!");
+ config.put("database", "redstoner");
+ config.put("table", "discord");
+ config.put("inviteLink", "https://discord.gg/example");
return false;
}
-
- joinLink = (String) joinLinkObject;
-
- Object byTokenObject = discordTables.get("byToken");
-
- if (byTokenObject == null) {
- discordTables.put("byToken", new JSONObject());
- discordTables.put("byUUID", new JSONObject());
+
+ try {
+ MysqlDatabase database = MysqlHandler.INSTANCE.getDatabase(config.get("database") + "?autoReconnect=true");
+ MysqlField uuid = new MysqlField("uuid", new VarChar(36), false);
+ MysqlField pass = new MysqlField("token", new VarChar(8), false);
+ database.createTableIfNotExists((String) config.get("table"), uuid, pass);
+ table = database.getTable(config.get("table"));
+ } catch (NullPointerException e) {
+ getLogger().error("Could not use the Discord config, aborting!");
+ return false;
}
-
- byToken = (JSONObject) discordTables.get("byToken");
- byUUID = (JSONObject) discordTables.get("byUUID");
-
+
return true;
-
}
-
- @SuppressWarnings("unchecked")
+
@Command(hook = "discord")
public void discord(CommandSender sender) {
Player p = (Player) sender;
- String pUUID = p.getUniqueId().toString();
-
- Object tokenObject = byUUID.get(pUUID);
- String token = tokenObject == null? null : (String) tokenObject;
-
- if (token == null) {
-
+ String pUUID = p.getUniqueId().toString().replaceAll("-", "");
+
+ String token = null;
+ int tries = 0;
+
+ while (token == null) {
token = randomToken(8);
- Object UUIDObject = byToken.get(token);
-
- while (UUIDObject != null) {
- token = randomToken(8);
- UUIDObject = byToken.get(token);
+ Object[] results = table.get("token", new MysqlConstraint("token", ConstraintOperator.EQUAL, token));
+
+ if (results.length > 0) {
+ token = null;
+ tries++;
}
- byUUID.put(pUUID, token);
- byToken.put(token, pUUID);
- save();
+
+ if (tries > 10)
+ break;
+ }
+
+ if (token == null) {
+ // Someone please check my math and remove this comment lmao
+ new Message(sender, null).appendText(
+ "\n&4Could not find an unused token in 10 tries (a 1 in 2.462267087×10^143 chance)! Please try running this command again!")
+ .send();
+ return;
}
-
+
+ table.delete(new MysqlConstraint("uuid", ConstraintOperator.EQUAL, pUUID));
+ table.insert(pUUID, token);
+
new Message(sender, null).appendText("\n&cRedstoner&7 has a &2Discord&7 Now! \nClick ")
- .appendLinkHover("&e" + joinLink, joinLink, "&aClick to Join")
- .appendText("&7 to join. \n\nTo sync you rank, copy ")
- .appendSuggestHover("&e" + token, token, "&aClick to Copy")
- .appendText("&7 into &3#rank-sync&7.\n")
- .send();
+ .appendLinkHover("&e" + inviteLink, inviteLink, "&aClick to Join")
+ .appendText("&7 to join. \n\nTo sync you rank, copy ")
+ .appendSuggestHover("&e" + token, token, "&aClick to Copy")
+ .appendText("&7 into &3#rank-sync&7.\n")
+ .send();
}
-
- private String randomToken(int length){
- StringBuilder sb = new StringBuilder( length );
- for( int i = 0; i < length; i++ )
- sb.append( tokenCharacters.charAt( rnd.nextInt(tokenCharacters.length()) ) );
- return sb.toString();
- }
-
- @SuppressWarnings("unchecked")
- private void save() {
-
- discordTables.put("byToken", byToken);
- discordTables.put("byUUID", byUUID);
- JsonManager.save(discordTables, savefile);
+
+ private String randomToken(int length) {
+ StringBuilder sb = new StringBuilder(length);
+
+ for (int i = 0; i < length; i++) {
+ sb.append(tokenCharacters.charAt(rnd.nextInt(tokenCharacters.length())));
+ }
+
+ return sb.toString();
}
} \ No newline at end of file