diff --git a/pom.xml b/pom.xml index a782ff7..6d75ca6 100644 --- a/pom.xml +++ b/pom.xml @@ -151,11 +151,11 @@ 3.1.1 - + com.github.TBMCPlugins.ChromaCore Chroma-Core diff --git a/src/main/java/buttondevteam/discordplugin/listeners/CommandListener.java b/src/main/java/buttondevteam/discordplugin/listeners/CommandListener.java index 776a711..08bd40f 100644 --- a/src/main/java/buttondevteam/discordplugin/listeners/CommandListener.java +++ b/src/main/java/buttondevteam/discordplugin/listeners/CommandListener.java @@ -5,9 +5,9 @@ import buttondevteam.discordplugin.DiscordPlugin; import buttondevteam.discordplugin.commands.Command2DCSender; import buttondevteam.discordplugin.util.Timings; import buttondevteam.lib.TBMCCoreAPI; +import discord4j.common.util.Snowflake; import discord4j.core.object.entity.Message; import discord4j.core.object.entity.Role; -import discord4j.core.object.entity.channel.MessageChannel; import discord4j.core.object.entity.channel.PrivateChannel; import lombok.val; import reactor.core.publisher.Mono; @@ -22,7 +22,7 @@ public class CommandListener { * @param mentionedonly Only run the command if ChromaBot is mentioned at the start of the message * @return Whether it did not run the command */ - public static Mono runCommand(Message message, MessageChannel commandChannel, boolean mentionedonly) { + public static Mono runCommand(Message message, Snowflake commandChannelID, boolean mentionedonly) { Timings timings = CommonListeners.timings; Mono ret = Mono.just(true); if (message.getContent().length() == 0) @@ -35,7 +35,7 @@ public class CommandListener { timings.printElapsed("B"); if (!(channel instanceof PrivateChannel) && !(content.charAt(0) == DiscordPlugin.getPrefix() - && channel.getId().asLong() == commandChannel.getId().asLong())) // + && channel.getId().asLong() == commandChannelID.asLong())) // return ret; timings.printElapsed("C"); tmp = ret.then(channel.type()).thenReturn(true); // Fun (this true is ignored - x) @@ -62,7 +62,7 @@ public class CommandListener { try { timings.printElapsed("F"); if (!DiscordPlugin.plugin.getManager().handleCommand(new Command2DCSender(message), cmdwithargsString)) - return DPUtils.reply(message, channel, "unknown command. Do " + DiscordPlugin.getPrefix() + "help for help.\n" + cmdwithargsString) + return DPUtils.reply(message, channel, "unknown command. Do " + DiscordPlugin.getPrefix() + "help for help.") .map(m -> false); } catch (Exception e) { TBMCCoreAPI.SendException("Failed to process Discord command: " + cmdwithargsString, e, DiscordPlugin.plugin); diff --git a/src/main/java/buttondevteam/discordplugin/listeners/CommonListeners.java b/src/main/java/buttondevteam/discordplugin/listeners/CommonListeners.java index c206864..57985aa 100755 --- a/src/main/java/buttondevteam/discordplugin/listeners/CommonListeners.java +++ b/src/main/java/buttondevteam/discordplugin/listeners/CommonListeners.java @@ -43,8 +43,7 @@ public class CommonListeners { if (FunModule.executeMemes(event.getMessage())) return def; val commandChannel = DiscordPlugin.plugin.commandChannel.get(); - val commandCh = DPUtils.getMessageChannel(DiscordPlugin.plugin.commandChannel); - return commandCh.filterWhen(ch -> event.getMessage().getChannel().map(mch -> + return event.getMessage().getChannel().map(mch -> (commandChannel != null && mch.getId().asLong() == commandChannel.asLong()) //If mentioned, that's higher than chat || mch instanceof PrivateChannel || event.getMessage().getContent().contains("channelcon")) //Only 'channelcon' is allowed in other channels @@ -52,17 +51,17 @@ public class CommonListeners { if (!shouldRun) return Mono.just(true); //The condition is only for the first command execution, not mcchat timings.printElapsed("Run command 1"); - return CommandListener.runCommand(event.getMessage(), ch, true); //#bot is handled here - })).filterWhen(ch -> { - timings.printElapsed("mcchat"); - val mcchat = Component.getComponents().get(MinecraftChatModule.class); - if (mcchat != null && mcchat.isEnabled()) //ComponentManager.isEnabled() searches the component again - return ((MinecraftChatModule) mcchat).getListener().handleDiscord(event); //Also runs Discord commands in chat channels - return Mono.empty(); //Wasn't handled, continue - }).filterWhen(ch -> { - timings.printElapsed("Run command 2"); - return CommandListener.runCommand(event.getMessage(), ch, false); - }); + return CommandListener.runCommand(event.getMessage(), commandChannel, true); //#bot is handled here + }).filterWhen(ch -> { + timings.printElapsed("mcchat"); + val mcchat = Component.getComponents().get(MinecraftChatModule.class); + if (mcchat != null && mcchat.isEnabled()) //ComponentManager.isEnabled() searches the component again + return ((MinecraftChatModule) mcchat).getListener().handleDiscord(event); //Also runs Discord commands in chat channels + return Mono.just(true); //Wasn't handled, continue + }).filterWhen(ch -> { + timings.printElapsed("Run command 2"); + return CommandListener.runCommand(event.getMessage(), commandChannel, false); + }); }).onErrorContinue((err, obj) -> TBMCCoreAPI.SendException("An error occured while handling a message!", err, DiscordPlugin.plugin)) .subscribe(); dispatcher.on(PresenceUpdateEvent.class).subscribe(event -> { diff --git a/src/main/java/buttondevteam/discordplugin/mcchat/MCChatListener.java b/src/main/java/buttondevteam/discordplugin/mcchat/MCChatListener.java index 38c159d..007b90c 100755 --- a/src/main/java/buttondevteam/discordplugin/mcchat/MCChatListener.java +++ b/src/main/java/buttondevteam/discordplugin/mcchat/MCChatListener.java @@ -228,9 +228,6 @@ public class MCChatListener implements Listener { // Discord public Mono handleDiscord(MessageCreateEvent ev) { - val ret = Mono.just(true); - if (!ComponentManager.isEnabled(MinecraftChatModule.class)) - return ret; Timings timings = CommonListeners.timings; timings.printElapsed("Chat event"); val author = ev.getMessage().getAuthor(); @@ -249,7 +246,7 @@ public class MCChatListener implements Listener { && ev.getMessage().getContent().replace(prefix + "", "") .equalsIgnoreCase("mcchat")); //Either mcchat or /mcchat //Allow disabling the chat if needed - }).filterWhen(channel -> CommandListener.runCommand(ev.getMessage(), channel, true)) + }).filterWhen(channel -> CommandListener.runCommand(ev.getMessage(), DiscordPlugin.plugin.commandChannel.get(), true)) //Allow running commands in chat channels .filter(channel -> { MCChatUtils.resetLastMessage(channel); @@ -373,7 +370,7 @@ public class MCChatListener implements Listener { return true; } module.log(dsender.getName() + " ran from DC: /" + cmd); - if (runCustomCommand(dsender, cmdlowercased)) return true; + if (dsender instanceof DiscordSender && runCustomCommand(dsender, cmdlowercased)) return true; val channel = clmd == null ? user.channel.get() : clmd.mcchannel; val ev = new TBMCCommandPreprocessEvent(dsender, channel, dmessage, clmd == null ? dsender : clmd.dcp); Bukkit.getScheduler().runTask(DiscordPlugin.plugin, //Commands need to be run sync diff --git a/src/main/java/buttondevteam/discordplugin/mcchat/MinecraftChatModule.java b/src/main/java/buttondevteam/discordplugin/mcchat/MinecraftChatModule.java index 80619cc..a162a9f 100644 --- a/src/main/java/buttondevteam/discordplugin/mcchat/MinecraftChatModule.java +++ b/src/main/java/buttondevteam/discordplugin/mcchat/MinecraftChatModule.java @@ -114,6 +114,9 @@ public class MinecraftChatModule extends Component { */ private final ConfigData serverUp = getConfig().getData("serverUp", false); + private final MCChatCommand mcChatCommand = new MCChatCommand(this); + private final ChannelconCommand channelconCommand = new ChannelconCommand(this); + @Override protected void enable() { if (DPUtils.disableIfConfigErrorRes(this, chatChannel, chatChannelMono())) @@ -121,8 +124,8 @@ public class MinecraftChatModule extends Component { listener = new MCChatListener(this); TBMCCoreAPI.RegisterEventsForExceptions(listener, getPlugin()); TBMCCoreAPI.RegisterEventsForExceptions(new MCListener(this), getPlugin());//These get undone if restarting/resetting - it will ignore events if disabled - getPlugin().getManager().registerCommand(new MCChatCommand(this)); - getPlugin().getManager().registerCommand(new ChannelconCommand(this)); + getPlugin().getManager().registerCommand(mcChatCommand); + getPlugin().getManager().registerCommand(channelconCommand); val chcons = getConfig().getConfig().getConfigurationSection("chcons"); if (chcons == null) //Fallback to old place @@ -234,6 +237,8 @@ public class MinecraftChatModule extends Component { chconc.set("brtoggles", chcon.brtoggles.stream().map(TBMCSystemChatEvent.BroadcastTarget::getName).collect(Collectors.toList())); } listener.stop(true); + getPlugin().getManager().unregisterCommand(mcChatCommand); + getPlugin().getManager().unregisterCommand(channelconCommand); disabling = false; } diff --git a/src/main/java/buttondevteam/discordplugin/role/GameRoleModule.java b/src/main/java/buttondevteam/discordplugin/role/GameRoleModule.java index cb2dd8b..c1a4079 100644 --- a/src/main/java/buttondevteam/discordplugin/role/GameRoleModule.java +++ b/src/main/java/buttondevteam/discordplugin/role/GameRoleModule.java @@ -30,15 +30,17 @@ import java.util.stream.Collectors; public class GameRoleModule extends Component { public List GameRoles; + private final RoleCommand command = new RoleCommand(this); + @Override protected void enable() { - getPlugin().getManager().registerCommand(new RoleCommand(this)); + getPlugin().getManager().registerCommand(command); GameRoles = DiscordPlugin.mainServer.getRoles().filterWhen(this::isGameRole).map(Role::getName).collect(Collectors.toList()).block(); } @Override protected void disable() { - + getPlugin().getManager().unregisterCommand(command); } /**