diff --git a/src/main/java/buttondevteam/discordplugin/DiscordPlugin.java b/src/main/java/buttondevteam/discordplugin/DiscordPlugin.java index e85f685..7e1c133 100644 --- a/src/main/java/buttondevteam/discordplugin/DiscordPlugin.java +++ b/src/main/java/buttondevteam/discordplugin/DiscordPlugin.java @@ -74,8 +74,13 @@ public class DiscordPlugin extends JavaPlugin implements IListener { @Override public void handle(ReadyEvent event) { try { - final IGuild mainServer = event.getClient().getGuildByID("125813020357165056"); - final IGuild devServer = event.getClient().getGuildByID("219529124321034241"); + IGuild mainServer; + IGuild devServer; + do { + mainServer = event.getClient().getGuildByID("125813020357165056"); + devServer = event.getClient().getGuildByID("219529124321034241"); + Thread.sleep(100); + } while (mainServer == null || devServer == null); if (!Test) { botchannel = mainServer.getChannelByID("209720707188260864"); // bot annchannel = mainServer.getChannelByID("126795071927353344"); // announcements diff --git a/src/main/java/buttondevteam/discordplugin/ExceptionListener.java b/src/main/java/buttondevteam/discordplugin/ExceptionListener.java index ff65459..48c9e69 100644 --- a/src/main/java/buttondevteam/discordplugin/ExceptionListener.java +++ b/src/main/java/buttondevteam/discordplugin/ExceptionListener.java @@ -17,7 +17,10 @@ public class ExceptionListener implements Listener { StringBuilder sb = new StringBuilder(); sb.append(sourcemessage).append("\n"); sb.append("```").append("\n"); - sb.append(ExceptionUtils.getStackTrace(e)).append("\n"); + String stackTrace = ExceptionUtils.getStackTrace(e); + if (stackTrace.length() > 2000) + stackTrace = stackTrace.substring(0, 2000); + sb.append(stackTrace).append("\n"); sb.append("```"); DiscordPlugin.sendMessageToChannel(DiscordPlugin.issuechannel, sb.toString()); } catch (Exception ex) { diff --git a/src/main/java/buttondevteam/discordplugin/MCListener.java b/src/main/java/buttondevteam/discordplugin/MCListener.java index 84d8ea2..596cc1f 100644 --- a/src/main/java/buttondevteam/discordplugin/MCListener.java +++ b/src/main/java/buttondevteam/discordplugin/MCListener.java @@ -10,6 +10,7 @@ import buttondevteam.discordplugin.commands.ConnectCommand; import buttondevteam.lib.TBMCPlayerGetInfoEvent; import buttondevteam.lib.TBMCPlayerJoinEvent; import sx.blah.discord.handle.obj.IUser; +import sx.blah.discord.handle.obj.Status.StatusType; public class MCListener implements Listener { @EventHandler @@ -29,9 +30,11 @@ public class MCListener implements Listener { @EventHandler public void onPlayerJoin(TBMCPlayerJoinEvent e) { final Player p = Bukkit.getPlayer(e.GetPlayer().getUuid()); - p.sendMessage("§bTo connect with the Discord account " - + ConnectCommand.WaitingToConnect.get(e.GetPlayer().getPlayerName()) + " do /discord accept"); - p.sendMessage("§bIf it wasn't you, do /discord decline"); + if (ConnectCommand.WaitingToConnect.containsKey(e.GetPlayer().getPlayerName())) { + p.sendMessage("§bTo connect with the Discord account " + + ConnectCommand.WaitingToConnect.get(e.GetPlayer().getPlayerName()) + " do /discord accept"); + p.sendMessage("§bIf it wasn't you, do /discord decline"); + } } @EventHandler @@ -41,6 +44,12 @@ public class MCListener implements Listener { return; IUser user = DiscordPlugin.dc.getUserByID(dp.getDiscordID()); e.addInfo("Discord tag: " + user.getName() + "#" + user.getDiscriminator()); - e.addInfo("Discord status: " + user.getStatus()); + if (!user.getStatus().getType().equals(StatusType.NONE)) { + if (user.getStatus().getType().equals(StatusType.GAME)) + e.addInfo("Discord status: Playing " + user.getStatus().getStatusMessage()); + else if (user.getStatus().getType().equals(StatusType.STREAM)) + e.addInfo("Discord status: Streaming " + user.getStatus().getStatusMessage() + " - " + + user.getStatus().getUrl()); + } } } diff --git a/src/main/java/buttondevteam/discordplugin/commands/DiscordCommandBase.java b/src/main/java/buttondevteam/discordplugin/commands/DiscordCommandBase.java index 079447b..3e52cb3 100644 --- a/src/main/java/buttondevteam/discordplugin/commands/DiscordCommandBase.java +++ b/src/main/java/buttondevteam/discordplugin/commands/DiscordCommandBase.java @@ -3,6 +3,7 @@ package buttondevteam.discordplugin.commands; import java.util.HashMap; import buttondevteam.discordplugin.DiscordPlugin; +import buttondevteam.lib.TBMCCoreAPI; import sx.blah.discord.handle.obj.IMessage; public abstract class DiscordCommandBase { @@ -10,7 +11,7 @@ public abstract class DiscordCommandBase { public abstract void run(IMessage message, String args); - private static final HashMap commands = new HashMap(); + static final HashMap commands = new HashMap(); static { commands.put("connect", new ConnectCommand()); // TODO: API for adding commands? @@ -24,6 +25,12 @@ public abstract class DiscordCommandBase { DiscordPlugin.sendMessageToChannel(message.getChannel(), "Unknown command: " + cmd + " with args: " + args); return; } - command.run(message, args); + try { + command.run(message, args); + } catch (Exception e) { + TBMCCoreAPI.SendException("An error occured while executing command " + cmd + "!", e); + DiscordPlugin.sendMessageToChannel(message.getChannel(), + "An internal error occured while executing this command. For more technical details see the server-issues channel on the dev Discord."); + } } } diff --git a/src/main/java/buttondevteam/discordplugin/commands/HelpCommand.java b/src/main/java/buttondevteam/discordplugin/commands/HelpCommand.java new file mode 100644 index 0000000..4c02475 --- /dev/null +++ b/src/main/java/buttondevteam/discordplugin/commands/HelpCommand.java @@ -0,0 +1,21 @@ +package buttondevteam.discordplugin.commands; + +import java.util.stream.Collectors; + +import buttondevteam.discordplugin.DiscordPlugin; +import sx.blah.discord.handle.obj.IMessage; + +public class HelpCommand extends DiscordCommandBase { + + @Override + public String getCommandName() { + return "help"; + } + + @Override + public void run(IMessage message, String args) { + DiscordPlugin.sendMessageToChannel(message.getChannel(), "Available commands:\n" + DiscordCommandBase.commands + .values().stream().map(dc -> dc.getCommandName()).collect(Collectors.joining("\n"))); + } + +} diff --git a/src/main/java/buttondevteam/discordplugin/commands/UserinfoCommand.java b/src/main/java/buttondevteam/discordplugin/commands/UserinfoCommand.java index 4687329..27d9369 100644 --- a/src/main/java/buttondevteam/discordplugin/commands/UserinfoCommand.java +++ b/src/main/java/buttondevteam/discordplugin/commands/UserinfoCommand.java @@ -40,17 +40,17 @@ public class UserinfoCommand extends DiscordCommandBase { target = ptarget; break; } - if (target == null) { - DiscordPlugin.sendMessageToChannel(message.getChannel(), - "The user cannot be found (by discriminator): " + args + "(Found " + targets.size() - + " users with the name.)"); - return; - } + } + if (target == null) { + DiscordPlugin.sendMessageToChannel(message.getChannel(), "The user cannot be found (by discriminator): " + + args + "(Found " + targets.size() + " users with the name.)"); + return; } } else { final List targets = message.getGuild().getUsersByName(args, true); if (targets.size() == 0) { - DiscordPlugin.sendMessageToChannel(message.getChannel(), "The user cannot be found: " + args); + DiscordPlugin.sendMessageToChannel(message.getChannel(), + "The user cannot be found on Discord: " + args); return; } if (targets.size() > 1) { @@ -60,15 +60,20 @@ public class UserinfoCommand extends DiscordCommandBase { } target = targets.get(0); } + boolean found = false; for (TBMCPlayer player : TBMCPlayer.getLoadedPlayers().values()) { DiscordPlayer dp = player.asPluginPlayer(DiscordPlayer.class); if (target.getID().equals(dp.getDiscordID())) { - StringBuilder uinfo = new StringBuilder("User info for ").append(target.getName()).append(":"); + StringBuilder uinfo = new StringBuilder("User info for ").append(target.getName()).append(":\n"); uinfo.append(player.getInfo(InfoTarget.Discord)); DiscordPlugin.sendMessageToChannel(message.getChannel(), uinfo.toString()); + found = true; break; } } + if (!found) + DiscordPlugin.sendMessageToChannel(message.getChannel(), + "The user is not found in our system (player has to be on the MC server for now)!"); } }