From eeb1955ebe6784c5f2757b949ed0f94cf7333abf Mon Sep 17 00:00:00 2001 From: NorbiPeti Date: Thu, 25 Apr 2019 19:52:43 +0200 Subject: [PATCH] Bunch of fixes #93 --- pom.xml | 7 +- .../buttondevteam/discordplugin/DPUtils.java | 9 +- .../discordplugin/DiscordPlugin.java | 141 ++++++++---------- .../discordplugin/DiscordSenderBase.java | 2 +- .../commands/Command2DCSender.java | 9 +- .../discordplugin/commands/HelpCommand.java | 18 ++- .../listeners/CommandListener.java | 21 +-- .../listeners/CommonListeners.java | 73 ++++----- .../discordplugin/mcchat/MCChatCustom.java | 3 +- .../discordplugin/mcchat/MCChatListener.java | 1 + .../discordplugin/mcchat/MCChatPrivate.java | 3 +- .../mcchat/MinecraftChatModule.java | 2 - .../mccommands/DiscordMCCommand.java | 4 +- 13 files changed, 145 insertions(+), 148 deletions(-) diff --git a/pom.xml b/pom.xml index 7a38cc9..fc313cc 100755 --- a/pom.xml +++ b/pom.xml @@ -174,7 +174,7 @@ com.discord4j discord4j-core - 3.0.2 + 3.0.3 @@ -200,11 +200,6 @@ 2.13.1 provided - - com.github.xaanit - D4J-OAuth - master-SNAPSHOT - org.projectlombok diff --git a/src/main/java/buttondevteam/discordplugin/DPUtils.java b/src/main/java/buttondevteam/discordplugin/DPUtils.java index 028a7f2..069e675 100755 --- a/src/main/java/buttondevteam/discordplugin/DPUtils.java +++ b/src/main/java/buttondevteam/discordplugin/DPUtils.java @@ -58,7 +58,10 @@ public final class DPUtils { public static ConfigData channelData(IHaveConfig config, String key, long defID) { return config.getDataPrimDef(key, defID, id -> { - Channel ch = DiscordPlugin.dc.getChannelById(Snowflake.of((long) id)).block(); + Channel ch = DiscordPlugin.dc.getChannelById(Snowflake.of((long) id)).onErrorResume(e -> { + getLogger().warning("Failed to get channel data for " + key + "=" + id + " - " + e.getMessage()); + return Mono.empty(); + }).block(); if (ch instanceof MessageChannel) return (MessageChannel) ch; else @@ -127,4 +130,8 @@ public final class DPUtils { ? original.getAuthor().get().getMention() + ", " : "") + message)); } + public static String nickMention(Snowflake userId) { + return "<@!" + userId.asString() + ">"; + } + } diff --git a/src/main/java/buttondevteam/discordplugin/DiscordPlugin.java b/src/main/java/buttondevteam/discordplugin/DiscordPlugin.java index bcf5e5e..307f8b9 100755 --- a/src/main/java/buttondevteam/discordplugin/DiscordPlugin.java +++ b/src/main/java/buttondevteam/discordplugin/DiscordPlugin.java @@ -20,6 +20,7 @@ import buttondevteam.lib.player.ChromaGamerBase; import com.google.common.io.Files; import discord4j.core.DiscordClient; import discord4j.core.DiscordClientBuilder; +import discord4j.core.event.domain.guild.GuildCreateEvent; import discord4j.core.event.domain.lifecycle.ReadyEvent; import discord4j.core.object.entity.Guild; import discord4j.core.object.entity.MessageChannel; @@ -35,14 +36,14 @@ import org.bukkit.Bukkit; import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.entity.Player; import org.bukkit.plugin.RegisteredServiceProvider; -import org.bukkit.scheduler.BukkitTask; import java.awt.*; import java.io.File; import java.nio.charset.StandardCharsets; import java.time.Duration; +import java.util.List; +import java.util.Objects; import java.util.Optional; -import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; public class DiscordPlugin extends ButtonPlugin { @@ -105,15 +106,16 @@ public class DiscordPlugin extends ButtonPlugin { } } val cb = new DiscordClientBuilder(token); + cb.setInitialPresence(Presence.doNotDisturb(Activity.playing("booting"))); dc = cb.build(); - dc.getEventDispatcher().on(ReadyEvent.class).subscribe(this::handleReady); - /*dc.getEventDispatcher().on(ReadyEvent.class) // Listen for ReadyEvent(s) + dc.getEventDispatcher().on(ReadyEvent.class) // Listen for ReadyEvent(s) .map(event -> event.getGuilds().size()) // Get how many guilds the bot is in .flatMap(size -> dc.getEventDispatcher() .on(GuildCreateEvent.class) // Listen for GuildCreateEvent(s) .take(size) // Take only the first `size` GuildCreateEvent(s) to be received .collectList()) // Take all received GuildCreateEvents and make it a List - .subscribe(events -> /* All guilds have been received, client is fully connected *);*/ //TODO + .subscribe(this::handleReady); /* All guilds have been received, client is fully connected */ + dc.login().subscribe(); } catch (Exception e) { e.printStackTrace(); Bukkit.getPluginManager().disablePlugin(this); @@ -122,86 +124,68 @@ public class DiscordPlugin extends ButtonPlugin { public static Guild mainServer; - private static volatile BukkitTask task; - private static volatile boolean sent = false; - - private void handleReady(ReadyEvent event) { + private void handleReady(List event) { try { - dc.updatePresence(Presence.doNotDisturb(Activity.playing("booting"))).subscribe(); - val tries = new AtomicInteger(); - task = Bukkit.getScheduler().runTaskTimerAsynchronously(this, () -> { - tries.incrementAndGet(); - if (tries.get() > 10) { //5 seconds - task.cancel(); + mainServer = MainServer().get(); //Shouldn't change afterwards + if (mainServer == null) { + if (event.size() == 0) { getLogger().severe("Main server not found! Invite the bot and do /discord reset"); - //getIConfig().getConfig().set("mainServer", 219529124321034241L); //Needed because it won't save as long as it's null - made it save saveConfig(); //Put default there - return; + return; //We should have all guilds by now, no need to retry } - mainServer = MainServer().get(); //Shouldn't change afterwards - if (mainServer == null) { - val guilds = dc.getGuilds(); - if (guilds.count().blockOptional().orElse(0L) == 0L) - return; //If there are no guilds in cache, retry - mainServer = guilds.blockFirst(); - if (mainServer == null) return; - getLogger().warning("Main server set to first one: " + mainServer.getName()); - MainServer().set(mainServer); //Save in config - } - if (!TBMCCoreAPI.IsTestServer()) { //Don't change conditions here, see mainServer=devServer=null in onDisable() - dc.updatePresence(Presence.online(Activity.playing("Minecraft"))); - } else { - dc.updatePresence(Presence.online(Activity.playing("testing"))); - } - SafeMode = false; - if (task != null) - task.cancel(); - if (!sent) { - DPUtils.disableIfConfigError(null, CommandChannel(), ModRole()); //Won't disable, just prints the warning here + mainServer = event.get(0).getGuild(); + getLogger().warning("Main server set to first one: " + mainServer.getName()); + MainServer().set(mainServer); //Save in config + } + if (!TBMCCoreAPI.IsTestServer()) { //Don't change conditions here, see mainServer=devServer=null in onDisable() + dc.updatePresence(Presence.online(Activity.playing("Minecraft"))).subscribe(); + } else { + dc.updatePresence(Presence.online(Activity.playing("testing"))).subscribe(); + } + SafeMode = false; + DPUtils.disableIfConfigError(null, CommandChannel(), ModRole()); //Won't disable, just prints the warning here - Component.registerComponent(this, new GeneralEventBroadcasterModule()); - Component.registerComponent(this, new MinecraftChatModule()); - Component.registerComponent(this, new ExceptionListenerModule()); - Component.registerComponent(this, new GameRoleModule()); //Needs the mainServer to be set - Component.registerComponent(this, new AnnouncerModule()); - Component.registerComponent(this, new FunModule()); - new ChromaBot(this).updatePlayerList(); //Initialize ChromaBot - The MCCHatModule is tested to be enabled + Component.registerComponent(this, new GeneralEventBroadcasterModule()); + Component.registerComponent(this, new MinecraftChatModule()); + Component.registerComponent(this, new ExceptionListenerModule()); + Component.registerComponent(this, new GameRoleModule()); //Needs the mainServer to be set + Component.registerComponent(this, new AnnouncerModule()); + Component.registerComponent(this, new FunModule()); + new ChromaBot(this).updatePlayerList(); //Initialize ChromaBot - The MCCHatModule is tested to be enabled - getManager().registerCommand(new VersionCommand()); - getManager().registerCommand(new UserinfoCommand()); - getManager().registerCommand(new HelpCommand()); - getManager().registerCommand(new DebugCommand()); - getManager().registerCommand(new ConnectCommand()); - if (DiscordMCCommand.resetting) //These will only execute if the chat is enabled - ChromaBot.getInstance().sendMessageCustomAsWell(ch->ch.createEmbed(ecs->ecs.setColor(Color.CYAN) - .setTitle("Discord plugin restarted - chat connected.")), ChannelconBroadcast.RESTART); //Really important to note the chat, hmm - else if (getConfig().getBoolean("serverup", false)) { - ChromaBot.getInstance().sendMessageCustomAsWell(ch->ch.createEmbed(ecs->ecs.setColor(Color.YELLOW) - .setTitle("Server recovered from a crash - chat connected.")), ChannelconBroadcast.RESTART); - val thr = new Throwable( - "The server shut down unexpectedly. See the log of the previous run for more details."); - thr.setStackTrace(new StackTraceElement[0]); - TBMCCoreAPI.SendException("The server crashed!", thr); - } else - ChromaBot.getInstance().sendMessageCustomAsWell(ch -> ch.createEmbed(ecs -> ecs.setColor(Color.GREEN) - .setTitle("Server started - chat connected.")), ChannelconBroadcast.RESTART); + getManager().registerCommand(new VersionCommand()); + getManager().registerCommand(new UserinfoCommand()); + getManager().registerCommand(new HelpCommand()); + getManager().registerCommand(new DebugCommand()); + getManager().registerCommand(new ConnectCommand()); + if (DiscordMCCommand.resetting) //These will only execute if the chat is enabled + ChromaBot.getInstance().sendMessageCustomAsWell(ch -> ch.createEmbed(ecs -> ecs.setColor(Color.CYAN) + .setTitle("Discord plugin restarted - chat connected.")), ChannelconBroadcast.RESTART); //Really important to note the chat, hmm + else if (getConfig().getBoolean("serverup", false)) { + ChromaBot.getInstance().sendMessageCustomAsWell(ch -> ch.createEmbed(ecs -> ecs.setColor(Color.YELLOW) + .setTitle("Server recovered from a crash - chat connected.")), ChannelconBroadcast.RESTART); + val thr = new Throwable( + "The server shut down unexpectedly. See the log of the previous run for more details."); + thr.setStackTrace(new StackTraceElement[0]); + TBMCCoreAPI.SendException("The server crashed!", thr); + } else + ChromaBot.getInstance().sendMessageCustomAsWell(ch -> ch.createEmbed(ecs -> ecs.setColor(Color.GREEN) + .setTitle("Server started - chat connected.")), ChannelconBroadcast.RESTART); - DiscordMCCommand.resetting = false; //This is the last event handling this flag + DiscordMCCommand.resetting = false; //This is the last event handling this flag + + getConfig().set("serverup", true); + saveConfig(); + if (TBMCCoreAPI.IsTestServer() && !Objects.requireNonNull(dc.getSelf().block()).getUsername().toLowerCase().contains("test")) { + TBMCCoreAPI.SendException( + "Won't load because we're in testing mode and not using a separate account.", + new Exception( + "The plugin refuses to load until you change the token to a testing account. (The account needs to have \"test\" in it's name.)")); + Bukkit.getPluginManager().disablePlugin(this); + } + TBMCCoreAPI.SendUnsentExceptions(); + TBMCCoreAPI.SendUnsentDebugMessages(); - getConfig().set("serverup", true); - saveConfig(); - sent = true; - if (TBMCCoreAPI.IsTestServer() && !event.getSelf().getUsername().toLowerCase().contains("test")) { - TBMCCoreAPI.SendException( - "Won't load because we're in testing mode and not using a separate account.", - new Exception( - "The plugin refuses to load until you change the token to a testing account. (The account needs to have \"test\" in it's name.)")); - Bukkit.getPluginManager().disablePlugin(this); - } - TBMCCoreAPI.SendUnsentExceptions(); - TBMCCoreAPI.SendUnsentDebugMessages(); - } - }, 0, 10); CommonListeners.register(dc.getEventDispatcher()); TBMCCoreAPI.RegisterEventsForExceptions(new MCListener(), this); getCommand2MC().registerCommand(new DiscordMCCommand()); @@ -253,7 +237,6 @@ public class DiscordPlugin extends ButtonPlugin { dc.updatePresence(Presence.idle(Activity.playing("Chromacraft"))).block(); //No longer using the same account for testing dc.logout().block(); //Configs are emptied so channels and servers are fetched again - sent = false; } catch (Exception e) { TBMCCoreAPI.SendException("An error occured while disabling DiscordPlugin!", e); } @@ -263,7 +246,7 @@ public class DiscordPlugin extends ButtonPlugin { public static Permission perms; - public boolean setupProviders() { + private boolean setupProviders() { try { Class.forName("net.milkbowl.vault.permission.Permission"); Class.forName("net.milkbowl.vault.chat.Chat"); diff --git a/src/main/java/buttondevteam/discordplugin/DiscordSenderBase.java b/src/main/java/buttondevteam/discordplugin/DiscordSenderBase.java index 145a8c0..103a350 100755 --- a/src/main/java/buttondevteam/discordplugin/DiscordSenderBase.java +++ b/src/main/java/buttondevteam/discordplugin/DiscordSenderBase.java @@ -58,7 +58,7 @@ public abstract class DiscordSenderBase implements CommandSender { msgtosend += "\n" + sendmsg; if (sendtask == null) sendtask = Bukkit.getScheduler().runTaskLaterAsynchronously(DiscordPlugin.plugin, () -> { - channel.createMessage((!broadcast && user != null ? user.getMention() + "\n" : "") + msgtosend.trim()); + channel.createMessage((!broadcast && user != null ? user.getMention() + "\n" : "") + msgtosend.trim()).subscribe(); sendtask = null; msgtosend = ""; }, 4); // Waits a 0.2 second to gather all/most of the different messages diff --git a/src/main/java/buttondevteam/discordplugin/commands/Command2DCSender.java b/src/main/java/buttondevteam/discordplugin/commands/Command2DCSender.java index 1165612..8b705fd 100644 --- a/src/main/java/buttondevteam/discordplugin/commands/Command2DCSender.java +++ b/src/main/java/buttondevteam/discordplugin/commands/Command2DCSender.java @@ -18,9 +18,12 @@ public class Command2DCSender implements Command2Sender { message = DPUtils.sanitizeString(message); message = Character.toLowerCase(message.charAt(0)) + message.substring(1); val msg = message; - val author = this.message.getAuthorAsMember().block(); - if (author == null) return; - this.message.getChannel().subscribe(ch -> ch.createMessage(author.getNicknameMention() + ", " + msg)); + /*this.message.getAuthorAsMember().flatMap(author -> + this.message.getChannel().flatMap(ch -> + ch.createMessage(author.getNicknameMention() + ", " + msg))).subscribe();*/ + this.message.getChannel().flatMap(ch -> + ch.createMessage(this.message.getAuthor().map(u -> DPUtils.nickMention(u.getId()) + ", ").orElse("") + + msg)).subscribe(); } @Override diff --git a/src/main/java/buttondevteam/discordplugin/commands/HelpCommand.java b/src/main/java/buttondevteam/discordplugin/commands/HelpCommand.java index 0194dab..546d4ee 100755 --- 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 buttondevteam.lib.chat.Command2; import buttondevteam.lib.chat.CommandClass; @CommandClass(helpText = { @@ -7,12 +8,17 @@ import buttondevteam.lib.chat.CommandClass; "Shows some info about a command or lists the available commands.", // }) public class HelpCommand extends ICommand2DC { - @Override - public boolean def(Command2DCSender sender, String args) { - if (args.length() == 0) + @Command2.Subcommand + public boolean def(Command2DCSender sender, @Command2.TextArg @Command2.OptionalArg String args) { + if (args == null || args.length() == 0) sender.sendMessage(getManager().getCommandsText()); - else - sender.sendMessage("Soon:tm:"); //TODO - return true; + else { + String[] ht = getManager().getHelpText(args); + if (ht == null) + sender.sendMessage("Command not found: " + args); + else + sender.sendMessage(ht); + } + return true; } } diff --git a/src/main/java/buttondevteam/discordplugin/listeners/CommandListener.java b/src/main/java/buttondevteam/discordplugin/listeners/CommandListener.java index f72e066..aff8339 100644 --- a/src/main/java/buttondevteam/discordplugin/listeners/CommandListener.java +++ b/src/main/java/buttondevteam/discordplugin/listeners/CommandListener.java @@ -22,7 +22,7 @@ public class CommandListener { if (!message.getContent().isPresent()) return false; //Pin messages and such, let the mcchat listener deal with it final MessageChannel channel = message.getChannel().block(); - @SuppressWarnings("OptionalGetWithoutIsPresent") val content = message.getContent().get(); + val content = message.getContent().get(); if (channel == null) return false; if (!mentionedonly) { //mentionedonly conditions are in CommonListeners if (!(channel instanceof PrivateChannel) @@ -32,10 +32,10 @@ public class CommandListener { channel.type().subscribe(); // Fun } final StringBuilder cmdwithargs = new StringBuilder(content); - val self=DiscordPlugin.dc.getSelf().block(); - if(self==null) return false; - val member=self.asMember(DiscordPlugin.mainServer.getId()).block(); - if(member==null) return false; + val self = DiscordPlugin.dc.getSelf().block(); + if (self == null) return false; + val member = self.asMember(DiscordPlugin.mainServer.getId()).block(); + if (member == null) return false; final String mention = self.getMention(); final String mentionNick = member.getNicknameMention(); boolean gotmention = checkanddeletemention(cmdwithargs, mention, message); @@ -57,6 +57,7 @@ public class CommandListener { } private static boolean checkanddeletemention(StringBuilder cmdwithargs, String mention, Message message) { + final char prefix = DiscordPlugin.getPrefix(); if (message.getContent().orElse("").startsWith(mention)) // TODO: Resolve mentions: Compound arguments, either a mention or text if (cmdwithargs.length() > mention.length() + 1) { int i = cmdwithargs.indexOf(" ", mention.length()); @@ -67,14 +68,16 @@ public class CommandListener { for (; i < cmdwithargs.length() && cmdwithargs.charAt(i) == ' '; i++) ; //Removes any space before the command cmdwithargs.delete(0, i); - cmdwithargs.insert(0, DiscordPlugin.getPrefix()); //Always use the prefix for processing + cmdwithargs.insert(0, prefix); //Always use the prefix for processing } else - cmdwithargs.replace(0, cmdwithargs.length(), DiscordPlugin.getPrefix() + "help"); + cmdwithargs.replace(0, cmdwithargs.length(), prefix + "help"); else { + if (cmdwithargs.length() == 0) + cmdwithargs.replace(0, cmdwithargs.length(), prefix + "help"); + else if (cmdwithargs.charAt(0) != prefix) + cmdwithargs.insert(0, prefix); return false; //Don't treat / as mention, mentions can be used in public mcchat } - if (cmdwithargs.length() == 0) - cmdwithargs.replace(0, cmdwithargs.length(), DiscordPlugin.getPrefix() + "help"); return true; } } diff --git a/src/main/java/buttondevteam/discordplugin/listeners/CommonListeners.java b/src/main/java/buttondevteam/discordplugin/listeners/CommonListeners.java index 48376b8..6c55615 100755 --- a/src/main/java/buttondevteam/discordplugin/listeners/CommonListeners.java +++ b/src/main/java/buttondevteam/discordplugin/listeners/CommonListeners.java @@ -27,48 +27,51 @@ public class CommonListeners { - CommandListener (with the correct prefix in #bot, or in private) */ public static void register(EventDispatcher dispatcher) { - dispatcher.on(MessageCreateEvent.class).subscribe(event->{ - if (DiscordPlugin.SafeMode) - return; + dispatcher.on(MessageCreateEvent.class).subscribe(event -> { + if (DiscordPlugin.SafeMode) + return; val author = event.getMessage().getAuthor(); if (!author.isPresent() || author.get().isBot()) - return; - if (FunModule.executeMemes(event.getMessage())) - return; - try { - boolean handled = false; - val commandChannel = DiscordPlugin.plugin.CommandChannel().get(); - if ((commandChannel != null && event.getMessage().getChannelId().asLong() == commandChannel.getId().asLong()) //If mentioned, that's higher than chat - || event.getMessage().getContent().orElse("").contains("channelcon")) //Only 'channelcon' is allowed in other channels - handled = CommandListener.runCommand(event.getMessage(), true); //#bot is handled here - if (handled) return; - val mcchat = Component.getComponents().get(MinecraftChatModule.class); - if (mcchat != null && mcchat.isEnabled()) //ComponentManager.isEnabled() searches the component again - handled = ((MinecraftChatModule) mcchat).getListener().handleDiscord(event); //Also runs Discord commands in chat channels - if (!handled) - handled = CommandListener.runCommand(event.getMessage(), false); - } catch (Exception e) { - TBMCCoreAPI.SendException("An error occured while handling a message!", e); - } - }); - dispatcher.on(PresenceUpdateEvent.class).subscribe(event->{ - if (DiscordPlugin.SafeMode) - return; - FunModule.handleFullHouse(event); - }); + return; + //System.out.println("Author: "+author.get()); + //System.out.println("Bot: "+author.get().isBot()); + if (FunModule.executeMemes(event.getMessage())) + return; + try { + boolean handled = false; + val commandChannel = DiscordPlugin.plugin.CommandChannel().get(); + if ((commandChannel != null && event.getMessage().getChannelId().asLong() == commandChannel.getId().asLong()) //If mentioned, that's higher than chat + || event.getMessage().getContent().orElse("").contains("channelcon")) //Only 'channelcon' is allowed in other channels + handled = CommandListener.runCommand(event.getMessage(), true); //#bot is handled here + if (handled) return; + //System.out.println("Message handling"); + val mcchat = Component.getComponents().get(MinecraftChatModule.class); + if (mcchat != null && mcchat.isEnabled()) //ComponentManager.isEnabled() searches the component again + handled = ((MinecraftChatModule) mcchat).getListener().handleDiscord(event); //Also runs Discord commands in chat channels + if (!handled) + handled = CommandListener.runCommand(event.getMessage(), false); + } catch (Exception e) { + TBMCCoreAPI.SendException("An error occured while handling a message!", e); + } + }); + dispatcher.on(PresenceUpdateEvent.class).subscribe(event -> { + if (DiscordPlugin.SafeMode) + return; + FunModule.handleFullHouse(event); + }); dispatcher.on(RoleCreateEvent.class).subscribe(GameRoleModule::handleRoleEvent); dispatcher.on(RoleDeleteEvent.class).subscribe(GameRoleModule::handleRoleEvent); dispatcher.on(RoleUpdateEvent.class).subscribe(GameRoleModule::handleRoleEvent); } - private static boolean debug = false; + private static boolean debug = false; - public static void debug(String debug) { - if (CommonListeners.debug) //Debug - DPUtils.getLogger().info(debug); - } + public static void debug(String debug) { + if (CommonListeners.debug) //Debug + DPUtils.getLogger().info(debug); + } - public static boolean debug() { - return debug = !debug; - } + public static boolean debug() { + return debug = !debug; + } } diff --git a/src/main/java/buttondevteam/discordplugin/mcchat/MCChatCustom.java b/src/main/java/buttondevteam/discordplugin/mcchat/MCChatCustom.java index c83232b..c9edaca 100644 --- a/src/main/java/buttondevteam/discordplugin/mcchat/MCChatCustom.java +++ b/src/main/java/buttondevteam/discordplugin/mcchat/MCChatCustom.java @@ -5,7 +5,6 @@ import buttondevteam.core.component.channel.ChatRoom; import buttondevteam.discordplugin.DiscordConnectedPlayer; import buttondevteam.lib.TBMCSystemChatEvent; import discord4j.core.object.entity.MessageChannel; -import discord4j.core.object.entity.TextChannel; import discord4j.core.object.entity.User; import discord4j.core.object.util.Snowflake; import lombok.NonNull; @@ -65,7 +64,7 @@ public class MCChatCustom { private CustomLMD(@NonNull MessageChannel channel, @NonNull User user, @NonNull String groupid, @NonNull Channel mcchannel, @NonNull DiscordConnectedPlayer dcp, int toggles, Set brtoggles) { - super((TextChannel) channel, user); + super(channel, user); groupID = groupid; this.mcchannel = mcchannel; this.dcp = dcp; diff --git a/src/main/java/buttondevteam/discordplugin/mcchat/MCChatListener.java b/src/main/java/buttondevteam/discordplugin/mcchat/MCChatListener.java index d89740c..f013c1b 100755 --- a/src/main/java/buttondevteam/discordplugin/mcchat/MCChatListener.java +++ b/src/main/java/buttondevteam/discordplugin/mcchat/MCChatListener.java @@ -236,6 +236,7 @@ public class MCChatListener implements Listener { if (CommandListener.runCommand(ev.getMessage(), true)) return true; //Allow running commands in chat channels MCChatUtils.resetLastMessage(channel); + //System.out.println("Message: "+ev.getMessage().getAuthor().toString()); recevents.add(ev); if (rectask != null) return true; diff --git a/src/main/java/buttondevteam/discordplugin/mcchat/MCChatPrivate.java b/src/main/java/buttondevteam/discordplugin/mcchat/MCChatPrivate.java index 452168a..1ef1111 100644 --- a/src/main/java/buttondevteam/discordplugin/mcchat/MCChatPrivate.java +++ b/src/main/java/buttondevteam/discordplugin/mcchat/MCChatPrivate.java @@ -7,7 +7,6 @@ import buttondevteam.discordplugin.DiscordPlugin; import buttondevteam.lib.player.TBMCPlayer; import discord4j.core.object.entity.MessageChannel; import discord4j.core.object.entity.PrivateChannel; -import discord4j.core.object.entity.TextChannel; import discord4j.core.object.entity.User; import lombok.val; import org.bukkit.Bukkit; @@ -44,7 +43,7 @@ public class MCChatPrivate { if (!start) MCChatUtils.lastmsgfromd.remove(channel.getId().asLong()); return start // - ? lastmsgPerUser.add(new MCChatUtils.LastMsgData((TextChannel) channel, user)) // Doesn't support group DMs + ? lastmsgPerUser.add(new MCChatUtils.LastMsgData(channel, user)) // Doesn't support group DMs : lastmsgPerUser.removeIf(lmd -> lmd.channel.getId().asLong() == channel.getId().asLong()); } diff --git a/src/main/java/buttondevteam/discordplugin/mcchat/MinecraftChatModule.java b/src/main/java/buttondevteam/discordplugin/mcchat/MinecraftChatModule.java index cc7e9dc..d7f1860 100644 --- a/src/main/java/buttondevteam/discordplugin/mcchat/MinecraftChatModule.java +++ b/src/main/java/buttondevteam/discordplugin/mcchat/MinecraftChatModule.java @@ -9,7 +9,6 @@ import buttondevteam.lib.TBMCSystemChatEvent; import buttondevteam.lib.architecture.Component; import buttondevteam.lib.architecture.ConfigData; import com.google.common.collect.Lists; -import discord4j.core.event.domain.message.MessageCreateEvent; import discord4j.core.object.entity.MessageChannel; import discord4j.core.object.util.Snowflake; import lombok.Getter; @@ -74,7 +73,6 @@ public class MinecraftChatModule extends Component { protected void enable() { if (DPUtils.disableIfConfigError(this, chatChannel())) return; listener = new MCChatListener(this); - DiscordPlugin.dc.getEventDispatcher().on(MessageCreateEvent.class).subscribe(listener::handleDiscord); 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()); diff --git a/src/main/java/buttondevteam/discordplugin/mccommands/DiscordMCCommand.java b/src/main/java/buttondevteam/discordplugin/mccommands/DiscordMCCommand.java index 6ff0ccc..0fd6fe3 100644 --- a/src/main/java/buttondevteam/discordplugin/mccommands/DiscordMCCommand.java +++ b/src/main/java/buttondevteam/discordplugin/mccommands/DiscordMCCommand.java @@ -104,9 +104,9 @@ public class DiscordMCCommand extends ICommand2MC { } DiscordPlugin.mainServer.getInvites().limitRequest(1) .switchIfEmpty(Mono.fromRunnable(() -> sender.sendMessage("§cNo invites found for the server."))) - .subscribe(inv -> {//TODO: Needs manage server perms + .subscribe(inv -> { sender.sendMessage("§bInvite link: https://discord.gg/" + inv.getCode()); - }); + }, e -> sender.sendMessage("§cThe invite link is not set and the bot has no permission to get it.")); } @Override