diff --git a/src/main/java/buttondevteam/discordplugin/DiscordPlugin.java b/src/main/java/buttondevteam/discordplugin/DiscordPlugin.java index 6fa8704..3dba56d 100644 --- a/src/main/java/buttondevteam/discordplugin/DiscordPlugin.java +++ b/src/main/java/buttondevteam/discordplugin/DiscordPlugin.java @@ -41,6 +41,10 @@ public class DiscordPlugin extends JavaPlugin implements IListener { BufferedReader reader = Files.newReader(file, StandardCharsets.UTF_8); String line = reader.readLine(); lastannouncementtime = Long.parseLong(line); + file.delete(); + } else { + lastannouncementtime = getConfig().getLong("lastannouncementtime"); + lastseentime = getConfig().getLong("lastseentime"); } ClientBuilder cb = new ClientBuilder(); cb.withToken(Files.readFirstLine(new File("TBMC", "Token.txt"), StandardCharsets.UTF_8)); @@ -79,8 +83,7 @@ public class DiscordPlugin extends JavaPlugin implements IListener { issuechannel = devServer.getChannelByID("239519012529111040"); // bottest } dc.changeStatus(Status.game("on TBMC")); - botchannel.sendMessage("Minecraft server started up"); - // TBMCDiscordAPI.SendException(new Exception("This is a test exception"), "This is a test error message"); + sendMessageToChannel(botchannel, "Minecraft server started up"); Runnable r = new Runnable() { public void run() { AnnouncementGetterThreadMethod(); @@ -108,6 +111,7 @@ public class DiscordPlugin extends JavaPlugin implements IListener { } private long lastannouncementtime = 0; + private long lastseentime = 0; private void AnnouncementGetterThreadMethod() { while (!stop) { @@ -122,14 +126,6 @@ public class DiscordPlugin extends JavaPlugin implements IListener { JsonObject item = json.get(i).getAsJsonObject(); final JsonObject data = item.get("data").getAsJsonObject(); String author = data.get("author").getAsString(); - // String title = data.get("title").getAsString(); - // String stickied = data.get("stickied").getAsString(); - JsonElement flairjson = data.get("link_flair_text"); - String flair; - if (flairjson.isJsonNull()) - flair = null; - else - flair = flairjson.getAsString(); JsonElement distinguishedjson = data.get("distinguished"); String distinguished; if (distinguishedjson.isJsonNull()) @@ -138,20 +134,22 @@ public class DiscordPlugin extends JavaPlugin implements IListener { distinguished = distinguishedjson.getAsString(); String permalink = "https://www.reddit.com" + data.get("permalink").getAsString(); long date = data.get("created_utc").getAsLong(); - if (date <= lastannouncementtime) - continue; - (distinguished != null && distinguished.equals("moderator") ? modmsgsb : msgsb) - .append("A new post was submitted to the subreddit by ").append(author).append("\n") - .append(permalink).append("\n"); - lastanntime = date; + if (date > lastseentime) + lastseentime = date; + else if (date > lastannouncementtime) { + (distinguished != null && distinguished.equals("moderator") ? modmsgsb : msgsb) + .append("A new post was submitted to the subreddit by ").append(author).append("\n") + .append(permalink).append("\n"); + lastanntime = date; + } } if (msgsb.length() > 0) - genchannel.pin(genchannel.sendMessage(msgsb.toString())); - if (modmsgsb.length() > 0) // TODO: Wait for distinguish - annchannel.sendMessage(modmsgsb.toString()); + genchannel.pin(sendMessageToChannel(genchannel, msgsb.toString())); + if (modmsgsb.length() > 0) + sendMessageToChannel(annchannel, modmsgsb.toString()); lastannouncementtime = lastanntime; // If sending succeeded - File file = new File("TBMC", "DiscordRedditLastAnnouncement.txt"); - Files.write(lastannouncementtime + "", file, StandardCharsets.UTF_8); + getConfig().set("lastannouncementtime", lastannouncementtime); + getConfig().set("lastseentime", lastseentime); } catch (Exception e) { e.printStackTrace(); } @@ -162,4 +160,25 @@ public class DiscordPlugin extends JavaPlugin implements IListener { } } } + + public static IMessage sendMessageToChannel(IChannel channel, String message) { + for (int i = 0; i < 10; i++) { + try { + Thread.sleep(i * 100); + } catch (InterruptedException e) { + e.printStackTrace(); + } + try { + return channel.sendMessage(message); + } catch (Exception e) { + if (i == 9) { + Bukkit.getLogger().warning("Failed to deliver message to Discord! Channel: " + channel.getName() + + " Message: " + message); + throw new RuntimeException(e); + } else + continue; + } + } + return null; + } } diff --git a/src/main/java/buttondevteam/discordplugin/MCListener.java b/src/main/java/buttondevteam/discordplugin/MCListener.java index 7f08a81..dd0b4e6 100644 --- a/src/main/java/buttondevteam/discordplugin/MCListener.java +++ b/src/main/java/buttondevteam/discordplugin/MCListener.java @@ -11,9 +11,9 @@ public class MCListener implements Listener { return; try { if (e.getCommand().equalsIgnoreCase("stop")) - DiscordPlugin.botchannel.sendMessage("Minecraft server shutting down!"); + DiscordPlugin.sendMessageToChannel(DiscordPlugin.botchannel, "Minecraft server shutting down!"); else if (e.getCommand().equalsIgnoreCase("restart")) - DiscordPlugin.botchannel.sendMessage("Minecraft server restarting"); + DiscordPlugin.sendMessageToChannel(DiscordPlugin.botchannel, "Minecraft server restarting"); } catch (Exception ex) { ex.printStackTrace(); } diff --git a/src/main/java/buttondevteam/discordplugin/TBMCDiscordAPI.java b/src/main/java/buttondevteam/discordplugin/TBMCDiscordAPI.java index 9a8885b..bd3b983 100644 --- a/src/main/java/buttondevteam/discordplugin/TBMCDiscordAPI.java +++ b/src/main/java/buttondevteam/discordplugin/TBMCDiscordAPI.java @@ -1,38 +1,18 @@ package buttondevteam.discordplugin; -import java.io.PrintStream; -import java.nio.charset.StandardCharsets; - -import org.apache.commons.io.output.ByteArrayOutputStream; import org.apache.commons.lang.exception.ExceptionUtils; public final class TBMCDiscordAPI { public static void SendException(Throwable e, String sourcemessage) { try { - //System.out.println("A"); - // ByteArrayOutputStream baos = new ByteArrayOutputStream(); - // PrintStream str = new PrintStream(baos, true, "UTF-8"); - // PrintStream str = new PrintStream(baos); StringBuilder sb = new StringBuilder(); - //System.out.println("B"); sb.append(sourcemessage).append("\n"); sb.append("```").append("\n"); - // e.printStackTrace(str); sb.append(ExceptionUtils.getStackTrace(e)).append("\n"); sb.append("```"); - // str.flush(); - // str.close(); - //System.out.println("C"); - //System.out.println("D"); - // final String string = baos.toString(StandardCharsets.UTF_8); - //System.out.println("E"); - DiscordPlugin.issuechannel.sendMessage(sb.toString()); - //System.out.println("F"); + DiscordPlugin.sendMessageToChannel(DiscordPlugin.issuechannel, sb.toString()); } catch (Exception ex) { - //System.out.println("EX"); - //System.out.println(ex); ex.printStackTrace(); } - //System.out.println("G"); } } diff --git a/src/main/java/buttondevteam/discordplugin/commands/ConnectCommand.java b/src/main/java/buttondevteam/discordplugin/commands/ConnectCommand.java index 226f93f..15cb856 100644 --- a/src/main/java/buttondevteam/discordplugin/commands/ConnectCommand.java +++ b/src/main/java/buttondevteam/discordplugin/commands/ConnectCommand.java @@ -1,5 +1,8 @@ package buttondevteam.discordplugin.commands; +import com.google.common.collect.HashBiMap; + +import buttondevteam.discordplugin.DiscordPlugin; import sx.blah.discord.handle.obj.IMessage; public class ConnectCommand extends DiscordCommandBase { @@ -9,13 +12,32 @@ public class ConnectCommand extends DiscordCommandBase { return "connect"; } + /** + * Key: Minecraft name
+ * Value: Discord ID + */ + public static HashBiMap WaitingToConnect = HashBiMap.create(); + @Override - public void run(IMessage message, String args) { // TODO: Throws? - try { - message.getChannel().sendMessage("Connect command WIP."); - } catch (Exception e) { - e.printStackTrace(); + public void run(IMessage message, String args) { + if (args.length() == 0) { + DiscordPlugin.sendMessageToChannel(message.getChannel(), "Usage: connect "); + return; } + if (args.contains(" ")) { + DiscordPlugin.sendMessageToChannel(message.getChannel(), + "Too many arguments.\nUsage: connect "); + return; + } + if (WaitingToConnect.inverse().containsKey(message.getAuthor().getID())) { + DiscordPlugin.sendMessageToChannel(message.getChannel(), + "Replacing " + WaitingToConnect.inverse().get(message.getAuthor().getID()) + " with " + args); + WaitingToConnect.inverse().remove(message.getAuthor().getID()); + } + WaitingToConnect.put(args, message.getAuthor().getID()); + DiscordPlugin.sendMessageToChannel(message.getChannel(), + "Pending connection - accept connection in Minecraft from the account " + args + + " before the server gets restarted."); } } diff --git a/src/main/java/buttondevteam/discordplugin/commands/DiscordCommandBase.java b/src/main/java/buttondevteam/discordplugin/commands/DiscordCommandBase.java index a814b78..4c72245 100644 --- a/src/main/java/buttondevteam/discordplugin/commands/DiscordCommandBase.java +++ b/src/main/java/buttondevteam/discordplugin/commands/DiscordCommandBase.java @@ -10,6 +10,10 @@ public abstract class DiscordCommandBase { public abstract void run(IMessage message, String args); private static final HashMap commands = new HashMap(); + + protected void respond(IMessage message, String messagetosend) { + } + static { commands.put("connect", new ConnectCommand()); // TODO: API for adding commands? }