diff --git a/src/main/java/buttondevteam/discordplugin/DiscordPlugin.java b/src/main/java/buttondevteam/discordplugin/DiscordPlugin.java index 8373471..24be49a 100644 --- a/src/main/java/buttondevteam/discordplugin/DiscordPlugin.java +++ b/src/main/java/buttondevteam/discordplugin/DiscordPlugin.java @@ -98,10 +98,10 @@ public class DiscordPlugin extends JavaPlugin implements IListener { dc.changeStatus(Status.game("on TBMC")); } else { botchannel = devServer.getChannelByID("239519012529111040"); // bot-room - annchannel = devServer.getChannelByID("239519012529111040"); // bot-room - genchannel = devServer.getChannelByID("239519012529111040"); // bot-room - botroomchannel = devServer.getChannelByID("239519012529111040");// bot-room - issuechannel = devServer.getChannelByID("239519012529111040"); // bot-room + annchannel = botchannel; // bot-room + genchannel = botchannel; // bot-room + botroomchannel = botchannel;// bot-room + issuechannel = botchannel; // bot-room chatchannel = devServer.getChannelByID("248185455508455424"); // minecraft_chat_test dc.changeStatus(Status.game("testing")); } diff --git a/src/main/java/buttondevteam/discordplugin/listeners/CommandListener.java b/src/main/java/buttondevteam/discordplugin/listeners/CommandListener.java index 8e291aa..f0b3970 100644 --- a/src/main/java/buttondevteam/discordplugin/listeners/CommandListener.java +++ b/src/main/java/buttondevteam/discordplugin/listeners/CommandListener.java @@ -19,7 +19,7 @@ public class CommandListener { final IChannel channel = event.getMessage().getChannel(); if (!channel.getID().equals(DiscordPlugin.botchannel.getID()) && !channel.isPrivate()) return; - runCommand(event.getMessage()); + runCommand(event.getMessage(), true); } }, new IListener() { @Override @@ -28,25 +28,38 @@ public class CommandListener { return; if (event.getMessage().getAuthor().isBot()) return; - runCommand(event.getMessage()); + runCommand(event.getMessage(), false); } } }; } - private static void runCommand(IMessage message) { + /** + * Runs a ChromaBot command. + * + * @param message + * The Discord message + * @param mentionedonly + * Only run the command if ChromaBot is mentioned at the start of the message + * @return Whether it ran the command (always true if mentionedonly is false) + */ + public static boolean runCommand(IMessage message, boolean mentionedonly) { message.getChannel().setTypingStatus(true); - String cmdwithargs = message.getContent(); + final StringBuilder cmdwithargs = new StringBuilder(message.getContent()); final String mention = DiscordPlugin.dc.getOurUser().mention(false); final String mentionNick = DiscordPlugin.dc.getOurUser().mention(true); - cmdwithargs = checkanddeletemention(cmdwithargs, mention, message); - cmdwithargs = checkanddeletemention(cmdwithargs, mentionNick, message); + boolean gotmention = checkanddeletemention(cmdwithargs, mention, message); + gotmention = 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(' '); + gotmention = checkanddeletemention(cmdwithargs, mentionRole, message); + if (mentionedonly && !gotmention) { + message.getChannel().setTypingStatus(false); + return false; + } + int index = cmdwithargs.indexOf(" "); String cmd; String args; if (index == -1) { - cmd = cmdwithargs; + cmd = cmdwithargs.toString(); args = ""; } else { cmd = cmdwithargs.substring(0, index); @@ -54,17 +67,20 @@ public class CommandListener { } DiscordCommandBase.runCommand(cmd, args, message); message.getChannel().setTypingStatus(false); + return true; } - private static String checkanddeletemention(String cmdwithargs, String mention, IMessage message) { + private static boolean checkanddeletemention(StringBuilder 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 = cmdwithargs.delete(0, cmdwithargs.charAt(mention.length()) == ' ' ? mention.length() + 1 : mention.length()); else - cmdwithargs = "help"; + cmdwithargs.replace(0, cmdwithargs.length(), "help"); + else + return false; if (cmdwithargs.length() == 0) - cmdwithargs = "help"; - return cmdwithargs; + cmdwithargs.replace(0, cmdwithargs.length(), "help"); + return true; } } diff --git a/src/main/java/buttondevteam/discordplugin/listeners/MCChatListener.java b/src/main/java/buttondevteam/discordplugin/listeners/MCChatListener.java index 43d215d..77247a3 100644 --- a/src/main/java/buttondevteam/discordplugin/listeners/MCChatListener.java +++ b/src/main/java/buttondevteam/discordplugin/listeners/MCChatListener.java @@ -35,14 +35,13 @@ public class MCChatListener implements Listener, IListener return; if (e.getChannel().equals(Channel.GlobalChat)) DiscordPlugin.sendMessageToChannel(DiscordPlugin.chatchannel, - "<" + (e.getSender() instanceof Player - ? DiscordPlugin.sanitizeString(((Player) e.getSender()).getDisplayName()) - : DiscordPlugin.sanitizeString(e.getSender().getName())) + "> " - + DiscordPlugin.sanitizeString(e.getMessage())); + DiscordPlugin.sanitizeString("<" + (e.getSender() instanceof Player // + ? ((Player) e.getSender()).getDisplayName() // + : e.getSender().getName()) + "> " + e.getMessage())); } private static final String[] UnconnectedCmds = new String[] { "list", "u", "shrug", "tableflip", "unflip", "mwiki", - "t" }; + "yeehaw" }; public static final HashMap UnconnectedSenders = new HashMap<>(); public static final HashMap ConnectedSenders = new HashMap<>(); @@ -55,6 +54,8 @@ public class MCChatListener implements Listener, IListener if (!event.getMessage().getChannel().getID().equals(DiscordPlugin.chatchannel.getID()) /* && !(event.getMessage().getChannel().isPrivate() && privatechat) */) return; + if (CommandListener.runCommand(event.getMessage(), true)) + return; String dmessage = event.getMessage().getContent(); try { Optional player = Bukkit.getOnlinePlayers().stream().filter(p -> { // TODO: Support offline players @@ -89,7 +90,7 @@ public class MCChatListener implements Listener, IListener "Sorry, you need to be online on the server and have your accounts connected, you can only access these commands:\n" + Arrays.stream(UnconnectedCmds).map(uc -> "/" + uc) .collect(Collectors.joining(", ")) - + "\nTo connect your accounts, use @ChromaBot connect in " + + "\nTo connect your accounts, use @ChromaBot connect here or in " + DiscordPlugin.botchannel.mention()); return; } diff --git a/src/main/java/buttondevteam/discordplugin/listeners/MCListener.java b/src/main/java/buttondevteam/discordplugin/listeners/MCListener.java index 3b5c55c..cf38145 100644 --- a/src/main/java/buttondevteam/discordplugin/listeners/MCListener.java +++ b/src/main/java/buttondevteam/discordplugin/listeners/MCListener.java @@ -56,14 +56,10 @@ public class MCListener implements Listener { DiscordPlugin.sendMessageToChannel(DiscordPlugin.chatchannel, e.getDeathMessage()); } - /*@EventHandler - public void onPlayerYEEHAW(TBMCYEEHAWEvent e) { - DiscordPlugin.sendMessageToChannel(DiscordPlugin.chatchannel, e.getSender() + " YEEHAWs"); - }*/ // It's broadcasted now - @EventHandler public void onPlayerAFK(AfkStatusChangeEvent e) { DiscordPlugin.sendMessageToChannel(DiscordPlugin.chatchannel, - e.getAffected().getBase().getDisplayName() + " is " + (e.getValue() ? "now" : "no longer") + " AFK."); + DiscordPlugin.sanitizeString(e.getAffected().getBase().getDisplayName()) + " is " + + (e.getValue() ? "now" : "no longer") + " AFK."); } }