Added and fixed a bunch of things
- Added exception handler to Discord commands - Added retry code for getting guilds/servers - Added max message length for exception sending to Discord - Made the connect message only appear in Minecraft when needed - Fixed status formatting in userinfo - Improved userinfo command - Other fixes and improvements
This commit is contained in:
parent
fb5dd60b84
commit
b43b7c86ff
6 changed files with 67 additions and 17 deletions
|
@ -74,8 +74,13 @@ public class DiscordPlugin extends JavaPlugin implements IListener<ReadyEvent> {
|
|||
@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
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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,10 +30,12 @@ public class MCListener implements Listener {
|
|||
@EventHandler
|
||||
public void onPlayerJoin(TBMCPlayerJoinEvent e) {
|
||||
final Player p = Bukkit.getPlayer(e.GetPlayer().getUuid());
|
||||
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
|
||||
public void onGetInfo(TBMCPlayerGetInfoEvent e) {
|
||||
|
@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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<String, DiscordCommandBase> commands = new HashMap<String, DiscordCommandBase>();
|
||||
static final HashMap<String, DiscordCommandBase> commands = new HashMap<String, DiscordCommandBase>();
|
||||
|
||||
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;
|
||||
}
|
||||
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.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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")));
|
||||
}
|
||||
|
||||
}
|
|
@ -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<IUser> 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)!");
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue