From 12ca6fbfb578af189bae6655d3982dc2f013ba6a Mon Sep 17 00:00:00 2001 From: NorbiPeti Date: Wed, 17 Apr 2019 16:51:42 +0200 Subject: [PATCH] More converting --- .../buttondevteam/discordplugin/DPUtils.java | 74 ++++++++++--------- .../discordplugin/DiscordPlugin.java | 13 ++-- .../listeners/CommonListeners.java | 30 ++++---- .../discordplugin/role/GameRoleModule.java | 51 ++++++++----- 4 files changed, 93 insertions(+), 75 deletions(-) diff --git a/src/main/java/buttondevteam/discordplugin/DPUtils.java b/src/main/java/buttondevteam/discordplugin/DPUtils.java index 4b40968..9130495 100755 --- a/src/main/java/buttondevteam/discordplugin/DPUtils.java +++ b/src/main/java/buttondevteam/discordplugin/DPUtils.java @@ -4,12 +4,10 @@ import buttondevteam.lib.TBMCCoreAPI; import buttondevteam.lib.architecture.Component; import buttondevteam.lib.architecture.ConfigData; import buttondevteam.lib.architecture.IHaveConfig; -import discord4j.core.object.entity.Channel; -import discord4j.core.object.entity.Guild; -import discord4j.core.object.entity.Role; +import discord4j.core.object.entity.*; import discord4j.core.object.util.Snowflake; +import discord4j.core.spec.EmbedCreateSpec; import lombok.val; -import sx.blah.discord.util.EmbedBuilder; import javax.annotation.Nullable; import java.util.logging.Logger; @@ -17,39 +15,39 @@ import java.util.regex.Matcher; public final class DPUtils { - public static EmbedBuilder embedWithHead(EmbedBuilder builder, String playername) { - return builder.withAuthorIcon("https://minotar.net/avatar/" + playername + "/32.png"); + public static EmbedCreateSpec embedWithHead(EmbedCreateSpec ecs, String playername, String profileUrl) { + return ecs.setAuthor(playername, profileUrl, "https://minotar.net/avatar/" + playername + "/32.png"); } - /** - * Removes §[char] colour codes from strings & escapes them for Discord
- * Ensure that this method only gets called once (escaping) - */ - public static String sanitizeString(String string) { - return escape(sanitizeStringNoEscape(string)); - } + /** + * Removes §[char] colour codes from strings & escapes them for Discord
+ * Ensure that this method only gets called once (escaping) + */ + public static String sanitizeString(String string) { + return escape(sanitizeStringNoEscape(string)); + } - /** - * Removes §[char] colour codes from strings - */ - public static String sanitizeStringNoEscape(String string) { - String sanitizedString = ""; - boolean random = false; - for (int i = 0; i < string.length(); i++) { - if (string.charAt(i) == '§') { - i++;// Skips the data value, the 4 in "§4Alisolarflare" - random = string.charAt(i) == 'k'; - } else { - if (!random) // Skip random/obfuscated characters - sanitizedString += string.charAt(i); - } - } - return sanitizedString; - } + /** + * Removes §[char] colour codes from strings + */ + public static String sanitizeStringNoEscape(String string) { + StringBuilder sanitizedString = new StringBuilder(); + boolean random = false; + for (int i = 0; i < string.length(); i++) { + if (string.charAt(i) == '§') { + i++;// Skips the data value, the 4 in "§4Alisolarflare" + random = string.charAt(i) == 'k'; + } else { + if (!random) // Skip random/obfuscated characters + sanitizedString.append(string.charAt(i)); + } + } + return sanitizedString.toString(); + } - public static String escape(String message) { - return message.replaceAll("([*_~])", Matcher.quoteReplacement("\\")+"$1"); - } + public static String escape(String message) { + return message.replaceAll("([*_~])", Matcher.quoteReplacement("\\") + "$1"); + } public static Logger getLogger() { if (DiscordPlugin.plugin == null || DiscordPlugin.plugin.getLogger() == null) @@ -57,8 +55,14 @@ public final class DPUtils { return DiscordPlugin.plugin.getLogger(); } - public static ConfigData channelData(IHaveConfig config, String key, long defID) { - return config.getDataPrimDef(key, defID, id -> DiscordPlugin.dc.getChannelById(Snowflake.of((long) id)).block(), ch -> ch.getId().asLong()); //We can afford to search for the channel in the cache once (instead of using mainServer) + 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(); + if (ch instanceof MessageChannel) + return (MessageChannel) ch; + else + return null; + }, ch -> ch.getId().asLong()); //We can afford to search for the channel in the cache once (instead of using mainServer) } public static ConfigData roleData(IHaveConfig config, String key, String defName) { diff --git a/src/main/java/buttondevteam/discordplugin/DiscordPlugin.java b/src/main/java/buttondevteam/discordplugin/DiscordPlugin.java index cb73ea1..ccde74e 100755 --- a/src/main/java/buttondevteam/discordplugin/DiscordPlugin.java +++ b/src/main/java/buttondevteam/discordplugin/DiscordPlugin.java @@ -111,7 +111,7 @@ public class DiscordPlugin extends ButtonPlugin { private static volatile BukkitTask task; private static volatile boolean sent = false; - public void handleReady(ReadyEvent event) { + private void handleReady(ReadyEvent event) { try { dc.updatePresence(Presence.doNotDisturb(Activity.playing("booting"))).subscribe(); val tries = new AtomicInteger(); @@ -159,11 +159,11 @@ public class DiscordPlugin extends ButtonPlugin { getManager().registerCommand(new DebugCommand()); getManager().registerCommand(new ConnectCommand()); if (DiscordMCCommand.resetting) //These will only execute if the chat is enabled - ChromaBot.getInstance().sendMessageCustomAsWell("", new EmbedBuilder().withColor(Color.CYAN) - .withTitle("Discord plugin restarted - chat connected.").build(), ChannelconBroadcast.RESTART); //Really important to note the chat, hmm + 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("", new EmbedBuilder().withColor(Color.YELLOW) - .withTitle("Server recovered from a crash - chat connected.").build(), ChannelconBroadcast.RESTART); + 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]); @@ -188,8 +188,7 @@ public class DiscordPlugin extends ButtonPlugin { TBMCCoreAPI.SendUnsentDebugMessages(); } }, 0, 10); - for (IListener listener : CommonListeners.getListeners()) - dc.getDispatcher().registerListener(listener); + CommonListeners.register(dc.getEventDispatcher()); TBMCCoreAPI.RegisterEventsForExceptions(new MCListener(), this); getCommand2MC().registerCommand(new DiscordMCCommand()); TBMCCoreAPI.RegisterUserClass(DiscordPlayer.class); diff --git a/src/main/java/buttondevteam/discordplugin/listeners/CommonListeners.java b/src/main/java/buttondevteam/discordplugin/listeners/CommonListeners.java index 5350b32..44e0118 100755 --- a/src/main/java/buttondevteam/discordplugin/listeners/CommonListeners.java +++ b/src/main/java/buttondevteam/discordplugin/listeners/CommonListeners.java @@ -7,6 +7,12 @@ import buttondevteam.discordplugin.mcchat.MinecraftChatModule; import buttondevteam.discordplugin.role.GameRoleModule; import buttondevteam.lib.TBMCCoreAPI; import buttondevteam.lib.architecture.Component; +import discord4j.core.event.EventDispatcher; +import discord4j.core.event.domain.PresenceUpdateEvent; +import discord4j.core.event.domain.message.MessageCreateEvent; +import discord4j.core.event.domain.role.RoleCreateEvent; +import discord4j.core.event.domain.role.RoleDeleteEvent; +import discord4j.core.event.domain.role.RoleUpdateEvent; import lombok.val; import sx.blah.discord.api.events.IListener; import sx.blah.discord.handle.impl.events.guild.channel.message.MessageReceivedEvent; @@ -26,10 +32,8 @@ public class CommonListeners { - Minecraft chat (is enabled in the channel and message isn't [/]mcchat) - CommandListener (with the correct prefix in #bot, or in private) */ - public static IListener[] getListeners() { - return new IListener[]{new IListener() { - @Override - public void handle(MessageReceivedEvent event) { + public static void register(EventDispatcher dispatcher) { + dispatcher.on(MessageCreateEvent.class).subscribe(event->{ if (DiscordPlugin.SafeMode) return; if (event.getMessage().getAuthor().isBot()) @@ -39,8 +43,8 @@ public class CommonListeners { try { boolean handled = false; val commandChannel = DiscordPlugin.plugin.CommandChannel().get(); - if ((commandChannel != null && event.getChannel().getLongID() == commandChannel.getLongID()) //If mentioned, that's higher than chat - || event.getMessage().getContent().contains("channelcon")) //Only 'channelcon' is allowed in other channels + 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); @@ -51,17 +55,15 @@ public class CommonListeners { } catch (Exception e) { TBMCCoreAPI.SendException("An error occured while handling a message!", e); } - } - }, new IListener() { - @Override - public void handle(PresenceUpdateEvent event) { + }); + dispatcher.on(PresenceUpdateEvent.class).subscribe(event->{ if (DiscordPlugin.SafeMode) return; FunModule.handleFullHouse(event); - } - }, (IListener) GameRoleModule::handleRoleEvent, // - (IListener) GameRoleModule::handleRoleEvent, // - (IListener) GameRoleModule::handleRoleEvent}; + }); + 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; diff --git a/src/main/java/buttondevteam/discordplugin/role/GameRoleModule.java b/src/main/java/buttondevteam/discordplugin/role/GameRoleModule.java index 8806647..03056dd 100644 --- a/src/main/java/buttondevteam/discordplugin/role/GameRoleModule.java +++ b/src/main/java/buttondevteam/discordplugin/role/GameRoleModule.java @@ -5,6 +5,12 @@ import buttondevteam.discordplugin.DPUtils; import buttondevteam.discordplugin.DiscordPlugin; import buttondevteam.lib.architecture.Component; import buttondevteam.lib.architecture.ConfigData; +import discord4j.core.event.domain.role.RoleCreateEvent; +import discord4j.core.event.domain.role.RoleDeleteEvent; +import discord4j.core.event.domain.role.RoleEvent; +import discord4j.core.event.domain.role.RoleUpdateEvent; +import discord4j.core.object.entity.MessageChannel; +import discord4j.core.object.entity.Role; import lombok.val; import org.bukkit.Bukkit; import sx.blah.discord.handle.impl.events.guild.role.RoleCreateEvent; @@ -24,7 +30,7 @@ public class GameRoleModule extends Component { @Override protected void enable() { getPlugin().getManager().registerCommand(new RoleCommand(this)); - GameRoles = DiscordPlugin.mainServer.getRoles().stream().filter(this::isGameRole).map(IRole::getName).collect(Collectors.toList()); + GameRoles = DiscordPlugin.mainServer.getRoles().filter(this::isGameRole).map(Role::getName).collect(Collectors.toList()).block(); } @Override @@ -32,7 +38,7 @@ public class GameRoleModule extends Component { } - private ConfigData logChannel() { + private ConfigData logChannel() { return DPUtils.channelData(getConfig(), "logChannel", 239519012529111040L); } @@ -43,41 +49,48 @@ public class GameRoleModule extends Component { val logChannel = grm.logChannel().get(); if (roleEvent instanceof RoleCreateEvent) { Bukkit.getScheduler().runTaskLaterAsynchronously(DiscordPlugin.plugin, () -> { - if (roleEvent.getRole().isDeleted() || !grm.isGameRole(roleEvent.getRole())) + Role role=((RoleCreateEvent) roleEvent).getRole(); + if (!grm.isGameRole(role)) return; //Deleted or not a game role - GameRoles.add(roleEvent.getRole().getName()); + GameRoles.add(role.getName()); if (logChannel != null) - DiscordPlugin.sendMessageToChannel(logChannel, "Added " + roleEvent.getRole().getName() + " as game role. If you don't want this, change the role's color from the default."); + logChannel.createMessage("Added " + role.getName() + " as game role. If you don't want this, change the role's color from the default.").subscribe(); }, 100); } else if (roleEvent instanceof RoleDeleteEvent) { - if (GameRoles.remove(roleEvent.getRole().getName()) && logChannel != null) - DiscordPlugin.sendMessageToChannel(logChannel, "Removed " + roleEvent.getRole().getName() + " as a game role."); + Role role=((RoleDeleteEvent) roleEvent).getRole().orElse(null); + if(role==null) return; + if (GameRoles.remove(role.getName()) && logChannel != null) + logChannel, "Removed " + role.getName() + " as a game role."); } else if (roleEvent instanceof RoleUpdateEvent) { val event = (RoleUpdateEvent) roleEvent; - if (!grm.isGameRole(event.getNewRole())) { - if (GameRoles.remove(event.getOldRole().getName()) && logChannel != null) - DiscordPlugin.sendMessageToChannel(logChannel, "Removed " + event.getOldRole().getName() + " as a game role because it's color changed."); + if(!event.getOld().isPresent()) { + DPUtils.getLogger().warning("Old role not stored, cannot update game role!"); + return; + } + Role or=event.getOld().get(); + if (!grm.isGameRole(event.getCurrent())) { + if (GameRoles.remove(or.getName()) && logChannel != null) + logChannel.createMessage("Removed " + or.getName() + " as a game role because it's color changed.").subscribe(); } else { - if (GameRoles.contains(event.getOldRole().getName()) && event.getOldRole().getName().equals(event.getNewRole().getName())) + if (GameRoles.contains(or.getName()) && or.getName().equals(event.getCurrent().getName())) return; - boolean removed = GameRoles.remove(event.getOldRole().getName()); //Regardless of whether it was a game role - GameRoles.add(event.getNewRole().getName()); //Add it because it has no color + boolean removed = GameRoles.remove(or.getName()); //Regardless of whether it was a game role + GameRoles.add(event.getCurrent().getName()); //Add it because it has no color if (logChannel != null) { if (removed) - DiscordPlugin.sendMessageToChannel(logChannel, "Changed game role from " + event.getOldRole().getName() + " to " + event.getNewRole().getName() + "."); + logChannel.createMessage("Changed game role from " + or.getName() + " to " + event.getCurrent().getName() + ".").subscribe(); else - DiscordPlugin.sendMessageToChannel(logChannel, "Added " + event.getNewRole().getName() + " as game role because it has the default color."); + logChannel.createMessage("Added " + event.getCurrent().getName() + " as game role because it has the default color.").subscribe(); } } } } - private boolean isGameRole(IRole r) { - if (r.getGuild().getLongID() != DiscordPlugin.mainServer.getLongID()) + private boolean isGameRole(Role r) { + if (r.getGuildId().asLong() != DiscordPlugin.mainServer.getId().asLong()) return false; //Only allow on the main server val rc = new Color(149, 165, 166, 0); return r.getColor().equals(rc) - && DiscordPlugin.dc.getOurUser().getRolesForGuild(DiscordPlugin.mainServer) - .stream().anyMatch(or -> r.getPosition() < or.getPosition()); //Below one of our roles + && DiscordPlugin.dc.getSelf().block().asMember(DiscordPlugin.mainServer.getId()).block().hasHigherRoles(r); //Below one of our roles } }