diff --git a/src/main/java/buttondevteam/discordplugin/DiscordPlugin.java b/src/main/java/buttondevteam/discordplugin/DiscordPlugin.java index 5790eea..45cb695 100644 --- a/src/main/java/buttondevteam/discordplugin/DiscordPlugin.java +++ b/src/main/java/buttondevteam/discordplugin/DiscordPlugin.java @@ -14,6 +14,10 @@ import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; +import buttondevteam.discordplugin.listeners.ChatListener; +import buttondevteam.discordplugin.listeners.CommandListener; +import buttondevteam.discordplugin.listeners.ExceptionListener; +import buttondevteam.discordplugin.listeners.MCListener; import buttondevteam.discordplugin.mccommands.DiscordMCCommandBase; import buttondevteam.lib.TBMCCoreAPI; import buttondevteam.lib.chat.TBMCChatAPI; @@ -57,6 +61,7 @@ public class DiscordPlugin extends JavaPlugin implements IListener { dc.getDispatcher().registerListener(this); for (IListener listener : CommandListener.getListeners()) dc.getDispatcher().registerListener(listener); + dc.getDispatcher().registerListener(new ChatListener()); Bukkit.getPluginManager().registerEvents(new ExceptionListener(), this); TBMCCoreAPI.RegisterEventsForExceptions(new MCListener(), this); TBMCChatAPI.AddCommands(this, DiscordMCCommandBase.class); @@ -71,6 +76,7 @@ public class DiscordPlugin extends JavaPlugin implements IListener { public static IChannel genchannel; public static IChannel issuechannel; public static IChannel debugchannel; + public static IChannel chatchannel; public static boolean Test = true; @@ -90,6 +96,7 @@ public class DiscordPlugin extends JavaPlugin implements IListener { genchannel = mainServer.getChannelByID("125813020357165056"); // general issuechannel = devServer.getChannelByID("219643416496046081"); // server-issues debugchannel = devServer.getChannelByID("250332016199860224"); // debug-channel + chatchannel = mainServer.getChannelByID("249663564057411596"); // minecraft_chat dc.changeStatus(Status.game("on TBMC")); } else { botchannel = devServer.getChannelByID("239519012529111040"); // bottest @@ -97,6 +104,7 @@ public class DiscordPlugin extends JavaPlugin implements IListener { genchannel = devServer.getChannelByID("239519012529111040"); // bottest issuechannel = devServer.getChannelByID("239519012529111040"); // bottest debugchannel = devServer.getChannelByID("239519012529111040"); //bottest + chatchannel = devServer.getChannelByID("248185455508455424"); // minecraft_chat_test dc.changeStatus(Status.game("testing")); } // sendMessageToChannel(botchannel, "Minecraft server started up"); diff --git a/src/main/java/buttondevteam/discordplugin/commands/ConnectCommand.java b/src/main/java/buttondevteam/discordplugin/commands/ConnectCommand.java index a2b149d..09f3fbf 100644 --- a/src/main/java/buttondevteam/discordplugin/commands/ConnectCommand.java +++ b/src/main/java/buttondevteam/discordplugin/commands/ConnectCommand.java @@ -65,4 +65,13 @@ public class ConnectCommand extends DiscordCommandBase { + message.getAuthor().getDiscriminator() + " do /discord accept"); } + @Override + public String[] getHelpText() { + return new String[] { // + "---- Connect command ----", // + "This commands let's you connect your acoount with a Minecraft account. This'd allow using the Minecraft chat and other things.", // + "Usage: connect " // + }; + } + } diff --git a/src/main/java/buttondevteam/discordplugin/commands/DiscordCommandBase.java b/src/main/java/buttondevteam/discordplugin/commands/DiscordCommandBase.java index 3e52cb3..df1846c 100644 --- a/src/main/java/buttondevteam/discordplugin/commands/DiscordCommandBase.java +++ b/src/main/java/buttondevteam/discordplugin/commands/DiscordCommandBase.java @@ -10,19 +10,22 @@ public abstract class DiscordCommandBase { public abstract String getCommandName(); public abstract void run(IMessage message, String args); + + public abstract String[] getHelpText(); static final HashMap commands = new HashMap(); static { commands.put("connect", new ConnectCommand()); // TODO: API for adding commands? commands.put("userinfo", new UserinfoCommand()); + commands.put("help", new HelpCommand()); } public static void runCommand(String cmd, String args, IMessage message) { DiscordCommandBase command = commands.get(cmd); if (command == null) { - // TODO: Help command - DiscordPlugin.sendMessageToChannel(message.getChannel(), "Unknown command: " + cmd + " with args: " + args); + DiscordPlugin.sendMessageToChannel(message.getChannel(), + "Unknown command: " + cmd + " with args: " + args + "\nDo @ChromaBot help for help"); return; } try { diff --git a/src/main/java/buttondevteam/discordplugin/commands/HelpCommand.java b/src/main/java/buttondevteam/discordplugin/commands/HelpCommand.java index 4c02475..f4b1cb5 100644 --- a/src/main/java/buttondevteam/discordplugin/commands/HelpCommand.java +++ b/src/main/java/buttondevteam/discordplugin/commands/HelpCommand.java @@ -1,5 +1,6 @@ package buttondevteam.discordplugin.commands; +import java.util.Arrays; import java.util.stream.Collectors; import buttondevteam.discordplugin.DiscordPlugin; @@ -14,8 +15,24 @@ public class HelpCommand extends DiscordCommandBase { @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"))); + DiscordCommandBase argdc; + if (args.length() == 0) + DiscordPlugin.sendMessageToChannel(message.getChannel(), + "Available commands:\n" + DiscordCommandBase.commands.values().stream() + .map(dc -> dc.getCommandName()).collect(Collectors.joining("\n"))); + else + DiscordPlugin.sendMessageToChannel(message.getChannel(), + (argdc = DiscordCommandBase.commands.get(args)) == null ? "Command not found: " + args + : Arrays.stream(argdc.getHelpText()).collect(Collectors.joining("\n"))); + } + + @Override + public String[] getHelpText() { + return new String[] { // + "---- Help command ----", // + "Shows some info about a command or lists the available commands.", // + "Usage: help [command]"// + }; } } diff --git a/src/main/java/buttondevteam/discordplugin/commands/UserinfoCommand.java b/src/main/java/buttondevteam/discordplugin/commands/UserinfoCommand.java index e1fd59d..eeb7e42 100644 --- a/src/main/java/buttondevteam/discordplugin/commands/UserinfoCommand.java +++ b/src/main/java/buttondevteam/discordplugin/commands/UserinfoCommand.java @@ -31,7 +31,7 @@ public class UserinfoCommand extends DiscordCommandBase { target = message.getMentions().get(0); else if (args.contains("#")) { String[] targettag = args.split("#"); - final List targets = message.getGuild().getUsersByName(targettag[0], true); + final List targets = getUsers(message, targettag[0]); if (targets.size() == 0) { DiscordPlugin.sendMessageToChannel(message.getChannel(), "The user cannot be found (by name): " + args); return; @@ -48,12 +48,7 @@ public class UserinfoCommand extends DiscordCommandBase { return; } } else { - final List targets; - if (message.getChannel().isPrivate()) - targets = DiscordPlugin.dc.getUsers().stream().filter(u -> u.getName().equalsIgnoreCase(args)) - .collect(Collectors.toList()); - else - targets = message.getGuild().getUsersByName(args, true); + final List targets = getUsers(message, args); if (targets.size() == 0) { DiscordPlugin.sendMessageToChannel(message.getChannel(), "The user cannot be found on Discord: " + args); @@ -82,4 +77,23 @@ public class UserinfoCommand extends DiscordCommandBase { "The user is not found in our system (player has to be on the MC server for now)!"); } + private List getUsers(IMessage message, String args) { + final List targets; + if (message.getChannel().isPrivate()) + targets = DiscordPlugin.dc.getUsers().stream().filter(u -> u.getName().equalsIgnoreCase(args)) + .collect(Collectors.toList()); + else + targets = message.getGuild().getUsersByName(args, true); + return targets; + } + + @Override + public String[] getHelpText() { + return new String[] { // + "---- User information ----", // + "Shows some information about users, from Discord, from Minecraft or from Reddit if they have these accounts connected.", // + "Usage: userinfo " // + }; + } + } diff --git a/src/main/java/buttondevteam/discordplugin/listeners/ChatListener.java b/src/main/java/buttondevteam/discordplugin/listeners/ChatListener.java new file mode 100644 index 0000000..5bcf348 --- /dev/null +++ b/src/main/java/buttondevteam/discordplugin/listeners/ChatListener.java @@ -0,0 +1,19 @@ +package buttondevteam.discordplugin.listeners; + +import buttondevteam.discordplugin.DiscordPlugin; +import sx.blah.discord.api.events.IListener; +import sx.blah.discord.handle.impl.events.MessageReceivedEvent; + +public class ChatListener implements IListener { + + @Override + public void handle(MessageReceivedEvent event) { + if (!event.getMessage().getChannel().getID().equals(DiscordPlugin.chatchannel.getID())) + return; + if (event.getMessage().getContent().startsWith("/")) + ; // Call API method + else + ; + } + +} diff --git a/src/main/java/buttondevteam/discordplugin/CommandListener.java b/src/main/java/buttondevteam/discordplugin/listeners/CommandListener.java similarity index 58% rename from src/main/java/buttondevteam/discordplugin/CommandListener.java rename to src/main/java/buttondevteam/discordplugin/listeners/CommandListener.java index 724d9f1..bd7ff06 100644 --- a/src/main/java/buttondevteam/discordplugin/CommandListener.java +++ b/src/main/java/buttondevteam/discordplugin/listeners/CommandListener.java @@ -1,5 +1,6 @@ -package buttondevteam.discordplugin; +package buttondevteam.discordplugin.listeners; +import buttondevteam.discordplugin.DiscordPlugin; import buttondevteam.discordplugin.commands.DiscordCommandBase; import sx.blah.discord.api.events.IListener; import sx.blah.discord.handle.impl.events.MentionEvent; @@ -33,13 +34,14 @@ public class CommandListener { } private static void runCommand(IMessage message) { + message.getChannel().setTypingStatus(true); String cmdwithargs = message.getContent(); final String mention = DiscordPlugin.dc.getOurUser().mention(false); final String mentionNick = DiscordPlugin.dc.getOurUser().mention(true); - if (message.getContent().startsWith(mention) && cmdwithargs.length() > mention.length() + 1) // TODO: Resolve mentions: Compound arguments, either a mention or text - cmdwithargs = cmdwithargs.substring(mention.length() + 1); - if (message.getContent().startsWith(mentionNick) && cmdwithargs.length() > mentionNick.length() + 1) - cmdwithargs = cmdwithargs.substring(mentionNick.length() + 1); + cmdwithargs = checkanddeletemention(cmdwithargs, mention, message); + cmdwithargs = checkanddeletemention(cmdwithargs, mentionNick, message); + for (String mentionRole : (Iterable) message.getRoleMentions().stream().map(r -> r.mention())::iterator) + cmdwithargs = checkanddeletemention(cmdwithargs, mentionRole, message); int index = cmdwithargs.indexOf(' '); String cmd; String args; @@ -51,5 +53,18 @@ public class CommandListener { args = cmdwithargs.substring(index + 1); } DiscordCommandBase.runCommand(cmd, args, message); + message.getChannel().setTypingStatus(false); + } + + private static String checkanddeletemention(String cmdwithargs, String mention, IMessage message) { + if (message.getContent().startsWith(mention)) // TODO: Resolve mentions: Compound arguments, either a mention or text + if (cmdwithargs.length() > mention.length() + 1) + cmdwithargs = cmdwithargs.substring( + cmdwithargs.charAt(mention.length() + 1) == ' ' ? mention.length() + 1 : mention.length()); + else + cmdwithargs = "help"; + if (cmdwithargs.length() == 0) + cmdwithargs = "help"; + return cmdwithargs; } } diff --git a/src/main/java/buttondevteam/discordplugin/ExceptionListener.java b/src/main/java/buttondevteam/discordplugin/listeners/ExceptionListener.java similarity index 87% rename from src/main/java/buttondevteam/discordplugin/ExceptionListener.java rename to src/main/java/buttondevteam/discordplugin/listeners/ExceptionListener.java index 85059ba..4375819 100644 --- a/src/main/java/buttondevteam/discordplugin/ExceptionListener.java +++ b/src/main/java/buttondevteam/discordplugin/listeners/ExceptionListener.java @@ -1,9 +1,10 @@ -package buttondevteam.discordplugin; +package buttondevteam.discordplugin.listeners; import org.apache.commons.lang.exception.ExceptionUtils; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; +import buttondevteam.discordplugin.DiscordPlugin; import buttondevteam.lib.TBMCExceptionEvent; public class ExceptionListener implements Listener { diff --git a/src/main/java/buttondevteam/discordplugin/listeners/MCChatListener.java b/src/main/java/buttondevteam/discordplugin/listeners/MCChatListener.java new file mode 100644 index 0000000..457af9c --- /dev/null +++ b/src/main/java/buttondevteam/discordplugin/listeners/MCChatListener.java @@ -0,0 +1,7 @@ +package buttondevteam.discordplugin.listeners; + +import org.bukkit.event.Listener; + +public class MCChatListener implements Listener { + // Custom event +} diff --git a/src/main/java/buttondevteam/discordplugin/MCListener.java b/src/main/java/buttondevteam/discordplugin/listeners/MCListener.java similarity index 91% rename from src/main/java/buttondevteam/discordplugin/MCListener.java rename to src/main/java/buttondevteam/discordplugin/listeners/MCListener.java index ea2f193..a600907 100644 --- a/src/main/java/buttondevteam/discordplugin/MCListener.java +++ b/src/main/java/buttondevteam/discordplugin/listeners/MCListener.java @@ -1,4 +1,4 @@ -package buttondevteam.discordplugin; +package buttondevteam.discordplugin.listeners; import org.bukkit.Bukkit; import org.bukkit.entity.Player; @@ -6,6 +6,8 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.server.ServerCommandEvent; +import buttondevteam.discordplugin.DiscordPlayer; +import buttondevteam.discordplugin.DiscordPlugin; import buttondevteam.discordplugin.commands.ConnectCommand; import buttondevteam.lib.TBMCPlayerGetInfoEvent; import buttondevteam.lib.TBMCPlayerJoinEvent;