From 2b9164ebc610f5017555c9565fe6c29309e9863d Mon Sep 17 00:00:00 2001 From: NorbiPeti Date: Sat, 14 Jan 2017 13:32:33 +0100 Subject: [PATCH] Fixes and probably added add cmd --- .../discordplugin/DiscordPlugin.java | 41 ++++++++---------- .../discordplugin/commands/RoleCommand.java | 43 ++++++++++++++++++- 2 files changed, 60 insertions(+), 24 deletions(-) diff --git a/src/main/java/buttondevteam/discordplugin/DiscordPlugin.java b/src/main/java/buttondevteam/discordplugin/DiscordPlugin.java index f871d45..b600ee6 100644 --- a/src/main/java/buttondevteam/discordplugin/DiscordPlugin.java +++ b/src/main/java/buttondevteam/discordplugin/DiscordPlugin.java @@ -4,6 +4,7 @@ import java.awt.Color; import java.io.BufferedReader; import java.io.File; import java.nio.charset.StandardCharsets; +import java.util.ArrayList; import java.util.List; import org.bukkit.Bukkit; import org.bukkit.plugin.RegisteredServiceProvider; @@ -32,24 +33,18 @@ public class DiscordPlugin extends JavaPlugin implements IListener { public static IDiscordClient dc; public static DiscordPlugin plugin; public static boolean SafeMode = true; + public static List GameRoles; + @SuppressWarnings("unchecked") @Override public void onEnable() { try { Bukkit.getLogger().info("Initializing DiscordPlugin..."); plugin = this; - final File file = new File("TBMC", "DiscordRedditLastAnnouncement.txt"); - if (file.exists()) { - BufferedReader reader = Files.newReader(file, StandardCharsets.UTF_8); - String line = reader.readLine(); - lastannouncementtime = Long.parseLong(line); - reader.close(); - file.delete(); - } else { - lastannouncementtime = getConfig().getLong("lastannouncementtime"); - lastseentime = getConfig().getLong("lastseentime"); - saveConfig(); - } + lastannouncementtime = getConfig().getLong("lastannouncementtime"); + lastseentime = getConfig().getLong("lastseentime"); + GameRoles = (List) getConfig().getList("gameroles", new ArrayList()); + saveConfig(); ClientBuilder cb = new ClientBuilder(); cb.withToken(Files.readFirstLine(new File("TBMC", "Token.txt"), StandardCharsets.UTF_8)); dc = cb.login(); @@ -114,6 +109,15 @@ public class DiscordPlugin extends JavaPlugin implements IListener { if (!sent) { sendMessageToChannel(chatchannel, "", new EmbedBuilder().withColor(Color.GREEN) .withTitle("Server started - chat connected.").build()); + try { + List msgs = genchannel.getPinnedMessages(); + for (int i = msgs.size() - 1; i >= 10; i--) { // Unpin all pinned messages except the newest 10 + genchannel.unpin(msgs.get(i)); + Thread.sleep(10); + } + } catch (Exception e) { + TBMCCoreAPI.SendException("Error occured while unpinning messages!", e); + } sent = true; } }, 0, 10); @@ -126,17 +130,7 @@ public class DiscordPlugin extends JavaPlugin implements IListener { Bukkit.getPluginManager().registerEvents(new ExceptionListener(), this); TBMCCoreAPI.RegisterEventsForExceptions(new MCListener(), this); TBMCChatAPI.AddCommands(this, DiscordMCCommandBase.class); - Runnable r = new Runnable() { - public void run() { - AnnouncementGetterThreadMethod(); - } - }; - Thread t = new Thread(r); - t.start(); - List msgs = genchannel.getPinnedMessages(); - for (int i = msgs.size() - 1; i >= 10; i--) { // Unpin all pinned messages except the newest 10 - genchannel.unpin(msgs.get(i)); - } + new Thread(() -> AnnouncementGetterThreadMethod()).start(); setupProviders(); TBMCCoreAPI.SendUnsentExceptions(); TBMCCoreAPI.SendUnsentDebugMessages(); @@ -155,6 +149,7 @@ public class DiscordPlugin extends JavaPlugin implements IListener { stop = true; getConfig().set("lastannouncementtime", lastannouncementtime); getConfig().set("lastseentime", lastseentime); + getConfig().set("gameroles", GameRoles); saveConfig(); sendMessageToChannel(chatchannel, "", new EmbedBuilder().withColor(Restart ? Color.ORANGE : Color.RED) .withTitle(Restart ? "Server restarting" : "Server stopping").build()); diff --git a/src/main/java/buttondevteam/discordplugin/commands/RoleCommand.java b/src/main/java/buttondevteam/discordplugin/commands/RoleCommand.java index a4a5bd9..09c6696 100644 --- a/src/main/java/buttondevteam/discordplugin/commands/RoleCommand.java +++ b/src/main/java/buttondevteam/discordplugin/commands/RoleCommand.java @@ -1,7 +1,13 @@ package buttondevteam.discordplugin.commands; +import java.util.List; +import java.util.stream.Collectors; + import buttondevteam.discordplugin.DiscordPlugin; +import buttondevteam.lib.TBMCCoreAPI; import sx.blah.discord.handle.obj.IMessage; +import sx.blah.discord.handle.obj.IRole; +import sx.blah.discord.util.RateLimitException; public class RoleCommand extends DiscordCommandBase { @@ -24,6 +30,40 @@ public class RoleCommand extends DiscordCommandBase { "This command adds a game role to your account.\nUsage: add "); return; } + if (!DiscordPlugin.GameRoles.contains(argsa[1].toLowerCase())) { + DiscordPlugin.sendMessageToChannel(message.getChannel(), + "That game role cannot be found.\nList of game roles:\n" + + DiscordPlugin.GameRoles.stream().collect(Collectors.joining("\n"))); + return; + } + final List roles = (TBMCCoreAPI.IsTestServer() ? DiscordPlugin.devServer : DiscordPlugin.mainServer) + .getRolesByName(argsa[1]); + if (roles.size() == 0) { + DiscordPlugin.sendMessageToChannel(message.getChannel(), + "The specified role cannot be found on Discord! Removing from the list."); + DiscordPlugin.GameRoles.remove(argsa[1].toLowerCase()); + return; + } + if (roles.size() > 1) { + DiscordPlugin.sendMessageToChannel(message.getChannel(), + "There are more roles with this name. Why are there more roles with this name?"); + return; + } + while (true) { + try { + message.getAuthor().addRole(roles.get(0)); + break; + } catch (RateLimitException e) { + try { + Thread.sleep(e.getRetryDelay() > 0 ? e.getRetryDelay() : 10); + } catch (InterruptedException e1) { + } + } catch (Exception e) { + TBMCCoreAPI.SendException("Error while adding role!", e); + DiscordPlugin.sendMessageToChannel(message.getChannel(), "An error occured while adding the role."); + break; + } + } } else if (argsa[0].equalsIgnoreCase("remove")) { if (argsa.length < 2) { DiscordPlugin.sendMessageToChannel(message.getChannel(), @@ -31,7 +71,8 @@ public class RoleCommand extends DiscordCommandBase { return; } } else if (argsa[0].equalsIgnoreCase("list")) { - DiscordPlugin.sendMessageToChannel(message.getChannel(), "List of game roles:"); + DiscordPlugin.sendMessageToChannel(message.getChannel(), + "List of game roles:\n" + DiscordPlugin.GameRoles.stream().collect(Collectors.joining("\n"))); } }