From 56d13ebf9f29572f900b11091319df2f8e7da1ac Mon Sep 17 00:00:00 2001 From: NorbiPeti Date: Wed, 7 Oct 2020 22:27:20 +0200 Subject: [PATCH] Update to Discord4J v3.1.1 It wasn't as complicated as I expected --- pom.xml | 7 +--- .../discordplugin/ChromaBot.java | 26 +++++++------- .../buttondevteam/discordplugin/DPUtils.java | 8 ++--- .../discordplugin/DiscordConnectedPlayer.java | 3 +- .../discordplugin/DiscordPlayerSender.java | 2 +- .../discordplugin/DiscordPlugin.java | 36 +++++++++---------- .../discordplugin/DiscordSender.java | 2 +- .../discordplugin/DiscordSenderBase.java | 6 ++-- .../announcer/AnnouncerModule.java | 6 ++-- .../broadcaster/PlayerListWatcher.java | 4 --- .../commands/UserinfoCommand.java | 4 +-- .../exceptions/DebugMessageListener.java | 2 +- .../exceptions/ExceptionListenerModule.java | 8 ++--- .../discordplugin/fun/FunModule.java | 9 +++-- .../listeners/CommandListener.java | 12 +++---- .../listeners/CommonListeners.java | 4 +-- .../discordplugin/listeners/MCListener.java | 5 ++- .../mcchat/ChannelconCommand.java | 7 ++-- .../discordplugin/mcchat/MCChatCommand.java | 2 +- .../discordplugin/mcchat/MCChatCustom.java | 6 ++-- .../discordplugin/mcchat/MCChatListener.java | 22 +++++++----- .../discordplugin/mcchat/MCChatPrivate.java | 4 +-- .../discordplugin/mcchat/MCChatUtils.java | 9 +++-- .../discordplugin/mcchat/MCListener.java | 2 +- .../mcchat/MinecraftChatModule.java | 10 +++--- .../playerfaker/DiscordInventory.java | 3 ++ .../playerfaker/ServerWatcher.java | 33 ----------------- .../discordplugin/role/GameRoleModule.java | 11 +++--- 28 files changed, 111 insertions(+), 142 deletions(-) diff --git a/pom.xml b/pom.xml index 309105f..dba7d8d 100755 --- a/pom.xml +++ b/pom.xml @@ -155,7 +155,7 @@ com.discord4j discord4j-core - 3.0.15 + 3.1.1 @@ -217,11 +217,6 @@ mockito-core 3.5.13 - - org.mockito - mockito-inline - 3.5.10 - diff --git a/src/main/java/buttondevteam/discordplugin/ChromaBot.java b/src/main/java/buttondevteam/discordplugin/ChromaBot.java index 6f74671..e392fe8 100755 --- a/src/main/java/buttondevteam/discordplugin/ChromaBot.java +++ b/src/main/java/buttondevteam/discordplugin/ChromaBot.java @@ -2,7 +2,7 @@ package buttondevteam.discordplugin; import buttondevteam.discordplugin.mcchat.MCChatUtils; import discord4j.core.object.entity.Message; -import discord4j.core.object.entity.MessageChannel; +import discord4j.core.object.entity.channel.MessageChannel; import lombok.Getter; import org.bukkit.scheduler.BukkitScheduler; import reactor.core.publisher.Mono; @@ -19,9 +19,8 @@ public class ChromaBot { /** * This will set the instance field. - * - * @param dp - * The Discord plugin + * + * @param dp The Discord plugin */ ChromaBot(DiscordPlugin dp) { instance = this; @@ -34,23 +33,22 @@ public class ChromaBot { /** * Send a message to the chat channels and private chats. - * - * @param message - * The message to send, duh (use {@link MessageChannel#createMessage(String)}) + * + * @param message The message to send, duh (use {@link MessageChannel#createMessage(String)}) */ public void sendMessage(Function, Mono> message) { MCChatUtils.forAllMCChat(ch -> message.apply(ch).subscribe()); } - /** - * Send a message to the chat channels, private chats and custom chats. - * - * @param message The message to send, duh - * @param toggle The toggle type for channelcon - */ + /** + * Send a message to the chat channels, private chats and custom chats. + * + * @param message The message to send, duh + * @param toggle The toggle type for channelcon + */ public void sendMessageCustomAsWell(Function, Mono> message, @Nullable ChannelconBroadcast toggle) { MCChatUtils.forCustomAndAllMCChat(ch -> message.apply(ch).subscribe(), toggle, false); - } + } public void updatePlayerList() { MCChatUtils.updatePlayerList(); diff --git a/src/main/java/buttondevteam/discordplugin/DPUtils.java b/src/main/java/buttondevteam/discordplugin/DPUtils.java index d118672..7c4181a 100755 --- a/src/main/java/buttondevteam/discordplugin/DPUtils.java +++ b/src/main/java/buttondevteam/discordplugin/DPUtils.java @@ -5,11 +5,11 @@ import buttondevteam.lib.architecture.Component; import buttondevteam.lib.architecture.ConfigData; import buttondevteam.lib.architecture.IHaveConfig; import buttondevteam.lib.architecture.ReadOnlyConfigData; +import discord4j.common.util.Snowflake; import discord4j.core.object.entity.Guild; import discord4j.core.object.entity.Message; -import discord4j.core.object.entity.MessageChannel; import discord4j.core.object.entity.Role; -import discord4j.core.object.util.Snowflake; +import discord4j.core.object.entity.channel.MessageChannel; import discord4j.core.spec.EmbedCreateSpec; import lombok.val; import reactor.core.publisher.Mono; @@ -23,8 +23,8 @@ import java.util.regex.Pattern; public final class DPUtils { - public static final Pattern URL_PATTERN = Pattern.compile("https?://\\S*"); - public static final Pattern FORMAT_PATTERN = Pattern.compile("[*_~]"); + private static final Pattern URL_PATTERN = Pattern.compile("https?://\\S*"); + private static final Pattern FORMAT_PATTERN = Pattern.compile("[*_~]"); public static EmbedCreateSpec embedWithHead(EmbedCreateSpec ecs, String displayname, String playername, String profileUrl) { return ecs.setAuthor(displayname, profileUrl, "https://minotar.net/avatar/" + playername + "/32.png"); diff --git a/src/main/java/buttondevteam/discordplugin/DiscordConnectedPlayer.java b/src/main/java/buttondevteam/discordplugin/DiscordConnectedPlayer.java index 16c4f2e..2993126 100644 --- a/src/main/java/buttondevteam/discordplugin/DiscordConnectedPlayer.java +++ b/src/main/java/buttondevteam/discordplugin/DiscordConnectedPlayer.java @@ -3,8 +3,8 @@ package buttondevteam.discordplugin; import buttondevteam.discordplugin.mcchat.MinecraftChatModule; import buttondevteam.discordplugin.playerfaker.DiscordInventory; import buttondevteam.discordplugin.playerfaker.VCMDWrapper; -import discord4j.core.object.entity.MessageChannel; import discord4j.core.object.entity.User; +import discord4j.core.object.entity.channel.MessageChannel; import lombok.Getter; import lombok.Setter; import lombok.experimental.Delegate; @@ -161,6 +161,7 @@ public abstract class DiscordConnectedPlayer extends DiscordSenderBase implement } @Override + @Deprecated public double getMaxHealth() { return 20; } diff --git a/src/main/java/buttondevteam/discordplugin/DiscordPlayerSender.java b/src/main/java/buttondevteam/discordplugin/DiscordPlayerSender.java index 4bff6f0..ac3ae1c 100755 --- a/src/main/java/buttondevteam/discordplugin/DiscordPlayerSender.java +++ b/src/main/java/buttondevteam/discordplugin/DiscordPlayerSender.java @@ -2,8 +2,8 @@ package buttondevteam.discordplugin; import buttondevteam.discordplugin.mcchat.MinecraftChatModule; import buttondevteam.discordplugin.playerfaker.VCMDWrapper; -import discord4j.core.object.entity.MessageChannel; import discord4j.core.object.entity.User; +import discord4j.core.object.entity.channel.MessageChannel; import lombok.Getter; import org.bukkit.entity.Player; import org.mockito.Mockito; diff --git a/src/main/java/buttondevteam/discordplugin/DiscordPlugin.java b/src/main/java/buttondevteam/discordplugin/DiscordPlugin.java index 60e1044..f6c6382 100755 --- a/src/main/java/buttondevteam/discordplugin/DiscordPlugin.java +++ b/src/main/java/buttondevteam/discordplugin/DiscordPlugin.java @@ -19,8 +19,9 @@ import buttondevteam.lib.architecture.ConfigData; import buttondevteam.lib.architecture.IHaveConfig; import buttondevteam.lib.player.ChromaGamerBase; import com.google.common.io.Files; -import discord4j.core.DiscordClient; +import discord4j.common.util.Snowflake; import discord4j.core.DiscordClientBuilder; +import discord4j.core.GatewayDiscordClient; import discord4j.core.event.domain.guild.GuildCreateEvent; import discord4j.core.event.domain.lifecycle.ReadyEvent; import discord4j.core.object.entity.Guild; @@ -28,7 +29,7 @@ import discord4j.core.object.entity.Role; import discord4j.core.object.presence.Activity; import discord4j.core.object.presence.Presence; import discord4j.core.object.reaction.ReactionEmoji; -import discord4j.core.object.util.Snowflake; +import discord4j.rest.util.Color; import discord4j.store.jdk.JdkStoreService; import lombok.Getter; import lombok.val; @@ -38,7 +39,6 @@ import org.bukkit.entity.Player; import org.mockito.internal.util.MockUtil; import reactor.core.publisher.Mono; -import java.awt.*; import java.io.File; import java.nio.charset.StandardCharsets; import java.util.List; @@ -47,7 +47,7 @@ import java.util.stream.Collectors; @ButtonPlugin.ConfigOpts(disableConfigGen = true) public class DiscordPlugin extends ButtonPlugin { - public static DiscordClient dc; + public static GatewayDiscordClient dc; public static DiscordPlugin plugin; public static boolean SafeMode = true; @Getter @@ -138,19 +138,18 @@ public class DiscordPlugin extends ButtonPlugin { return; } } - val cb = DiscordClientBuilder.create(token); - cb.setInitialPresence(Presence.doNotDisturb(Activity.playing("booting"))); + val cb = DiscordClientBuilder.create(token).build().gateway(); + cb.setInitialStatus(si -> Presence.doNotDisturb(Activity.playing("booting"))); cb.setStoreService(new JdkStoreService()); //The default doesn't work for some reason - it's waaay faster now - dc = cb.build(); - 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(this::handleReady); /* All guilds have been received, client is fully connected */ - //dc.getEventDispatcher().on(DisconnectEvent.class); - dc.login().subscribe(); + cb.login().subscribe(dc -> { + DiscordPlugin.dc = dc; //Set to gateway client + dc.on(ReadyEvent.class) // Listen for ReadyEvent(s) + .map(event -> event.getGuilds().size()) // Get how many guilds the bot is in + .flatMap(size -> dc + .on(GuildCreateEvent.class) // Listen for GuildCreateEvent(s) + .take(size) // Take only the first `size` GuildCreateEvent(s) to be received + .collectList()).subscribe(this::handleReady); // Take all received GuildCreateEvents and make it a List + }); /* All guilds have been received, client is fully connected */ } catch (Exception e) { TBMCCoreAPI.SendException("Failed to enable the Discord plugin!", e); getLogger().severe("You may be able to reset the plugin using /discord reset"); @@ -170,9 +169,8 @@ public class DiscordPlugin extends ButtonPlugin { if (mainServer == null) { if (event.size() == 0) { getLogger().severe("Main server not found! Invite the bot and do /discord reset"); - dc.getApplicationInfo().subscribe(info -> { - getLogger().severe("Click here: https://discordapp.com/oauth2/authorize?client_id=" + info.getId().asString() + "&scope=bot&permissions=268509264"); - }); + dc.getApplicationInfo().subscribe(info -> + getLogger().severe("Click here: https://discordapp.com/oauth2/authorize?client_id=" + info.getId().asString() + "&scope=bot&permissions=268509264")); saveConfig(); //Put default there return; //We should have all guilds by now, no need to retry } diff --git a/src/main/java/buttondevteam/discordplugin/DiscordSender.java b/src/main/java/buttondevteam/discordplugin/DiscordSender.java index 0381e66..0ef62a9 100755 --- a/src/main/java/buttondevteam/discordplugin/DiscordSender.java +++ b/src/main/java/buttondevteam/discordplugin/DiscordSender.java @@ -1,8 +1,8 @@ package buttondevteam.discordplugin; import discord4j.core.object.entity.Member; -import discord4j.core.object.entity.MessageChannel; import discord4j.core.object.entity.User; +import discord4j.core.object.entity.channel.MessageChannel; import lombok.val; import org.bukkit.Bukkit; import org.bukkit.Server; diff --git a/src/main/java/buttondevteam/discordplugin/DiscordSenderBase.java b/src/main/java/buttondevteam/discordplugin/DiscordSenderBase.java index c453394..13bdd76 100755 --- a/src/main/java/buttondevteam/discordplugin/DiscordSenderBase.java +++ b/src/main/java/buttondevteam/discordplugin/DiscordSenderBase.java @@ -1,8 +1,8 @@ package buttondevteam.discordplugin; import buttondevteam.lib.TBMCCoreAPI; -import discord4j.core.object.entity.MessageChannel; import discord4j.core.object.entity.User; +import discord4j.core.object.entity.channel.MessageChannel; import org.bukkit.Bukkit; import org.bukkit.command.CommandSender; import org.bukkit.scheduler.BukkitTask; @@ -24,7 +24,7 @@ public abstract class DiscordSenderBase implements CommandSender { /** * Returns the user. May be null. - * + * * @return The user or null. */ public User getUser() { @@ -58,7 +58,7 @@ public abstract class DiscordSenderBase implements CommandSender { msgtosend += "\n" + sendmsg; if (sendtask == null) sendtask = Bukkit.getScheduler().runTaskLaterAsynchronously(DiscordPlugin.plugin, () -> { - channel.createMessage((user != null ? user.getMention() + "\n":"") + msgtosend.trim()).subscribe(); + channel.createMessage((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/announcer/AnnouncerModule.java b/src/main/java/buttondevteam/discordplugin/announcer/AnnouncerModule.java index 2b68de0..e86b336 100644 --- a/src/main/java/buttondevteam/discordplugin/announcer/AnnouncerModule.java +++ b/src/main/java/buttondevteam/discordplugin/announcer/AnnouncerModule.java @@ -14,7 +14,7 @@ import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import discord4j.core.object.entity.Message; -import discord4j.core.object.entity.MessageChannel; +import discord4j.core.object.entity.channel.MessageChannel; import lombok.val; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; @@ -34,14 +34,14 @@ public class AnnouncerModule extends Component { /** * Channel where distinguished (moderator) posts go. */ - public ReadOnlyConfigData> modChannel() { + private ReadOnlyConfigData> modChannel() { return DPUtils.channelData(getConfig(), "modChannel"); } /** * Automatically unpins all messages except the last few. Set to 0 or >50 to disable */ - public ConfigData keepPinned() { + private ConfigData keepPinned() { return getConfig().getData("keepPinned", (short) 40); } diff --git a/src/main/java/buttondevteam/discordplugin/broadcaster/PlayerListWatcher.java b/src/main/java/buttondevteam/discordplugin/broadcaster/PlayerListWatcher.java index c8aa8bd..8e3cba8 100755 --- a/src/main/java/buttondevteam/discordplugin/broadcaster/PlayerListWatcher.java +++ b/src/main/java/buttondevteam/discordplugin/broadcaster/PlayerListWatcher.java @@ -91,11 +91,7 @@ public class PlayerListWatcher { if (fHandle == null) { assert lookupConstructor != null; var lookup = lookupConstructor.newInstance(mock.getClass()); - //var mcl = method.getDeclaringClass(); fHandle = lookup.unreflectSpecial(method, mock.getClass()); //Special: super.method() - /*if (mcl.getSimpleName().contains("Mock")) //inline mock - lookup.findSpecial(mcl, method.getName(), ) - fHandle.type()*/ } return fHandle.invoke(mock, invocation.getArgument(0)); //Invoke with our instance, so it passes that to advancement data, we have the fields as well } diff --git a/src/main/java/buttondevteam/discordplugin/commands/UserinfoCommand.java b/src/main/java/buttondevteam/discordplugin/commands/UserinfoCommand.java index 40f98cb..7a68b0c 100755 --- a/src/main/java/buttondevteam/discordplugin/commands/UserinfoCommand.java +++ b/src/main/java/buttondevteam/discordplugin/commands/UserinfoCommand.java @@ -28,8 +28,8 @@ public class UserinfoCommand extends ICommand2DC { if (user == null || user.length() == 0) target = message.getAuthor().orElse(null); else { - @SuppressWarnings("OptionalGetWithoutIsPresent") final User firstmention = message.getUserMentions() - .filter(m -> !m.getId().asString().equals(DiscordPlugin.dc.getSelfId().get().asString())).blockFirst(); + final User firstmention = message.getUserMentions() + .filter(m -> !m.getId().asString().equals(DiscordPlugin.dc.getSelfId().asString())).blockFirst(); if (firstmention != null) target = firstmention; else if (user.contains("#")) { diff --git a/src/main/java/buttondevteam/discordplugin/exceptions/DebugMessageListener.java b/src/main/java/buttondevteam/discordplugin/exceptions/DebugMessageListener.java index 0f05934..f90f0f3 100755 --- a/src/main/java/buttondevteam/discordplugin/exceptions/DebugMessageListener.java +++ b/src/main/java/buttondevteam/discordplugin/exceptions/DebugMessageListener.java @@ -3,7 +3,7 @@ package buttondevteam.discordplugin.exceptions; import buttondevteam.core.ComponentManager; import buttondevteam.discordplugin.DiscordPlugin; import buttondevteam.lib.TBMCDebugMessageEvent; -import discord4j.core.object.entity.MessageChannel; +import discord4j.core.object.entity.channel.MessageChannel; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import reactor.core.publisher.Mono; diff --git a/src/main/java/buttondevteam/discordplugin/exceptions/ExceptionListenerModule.java b/src/main/java/buttondevteam/discordplugin/exceptions/ExceptionListenerModule.java index 6263e85..d72dffb 100755 --- a/src/main/java/buttondevteam/discordplugin/exceptions/ExceptionListenerModule.java +++ b/src/main/java/buttondevteam/discordplugin/exceptions/ExceptionListenerModule.java @@ -9,9 +9,9 @@ import buttondevteam.lib.architecture.Component; import buttondevteam.lib.architecture.ConfigData; import buttondevteam.lib.architecture.ReadOnlyConfigData; import discord4j.core.object.entity.Guild; -import discord4j.core.object.entity.GuildChannel; -import discord4j.core.object.entity.MessageChannel; import discord4j.core.object.entity.Role; +import discord4j.core.object.entity.channel.GuildChannel; +import discord4j.core.object.entity.channel.MessageChannel; import org.apache.commons.lang.exception.ExceptionUtils; import org.bukkit.Bukkit; import org.bukkit.event.EventHandler; @@ -27,8 +27,8 @@ import java.util.stream.Collectors; * Listens for errors from the Chroma plugins and posts them to Discord, ignoring repeating errors so it's not that spammy. */ public class ExceptionListenerModule extends Component implements Listener { - private List lastthrown = new ArrayList<>(); - private List lastsourcemsg = new ArrayList<>(); + private final List lastthrown = new ArrayList<>(); + private final List lastsourcemsg = new ArrayList<>(); @EventHandler public void onException(TBMCExceptionEvent e) { diff --git a/src/main/java/buttondevteam/discordplugin/fun/FunModule.java b/src/main/java/buttondevteam/discordplugin/fun/FunModule.java index 189a026..d05bd2c 100644 --- a/src/main/java/buttondevteam/discordplugin/fun/FunModule.java +++ b/src/main/java/buttondevteam/discordplugin/fun/FunModule.java @@ -9,7 +9,12 @@ import buttondevteam.lib.architecture.ConfigData; import buttondevteam.lib.architecture.ReadOnlyConfigData; import com.google.common.collect.Lists; import discord4j.core.event.domain.PresenceUpdateEvent; -import discord4j.core.object.entity.*; +import discord4j.core.object.entity.Guild; +import discord4j.core.object.entity.Member; +import discord4j.core.object.entity.Message; +import discord4j.core.object.entity.Role; +import discord4j.core.object.entity.channel.GuildChannel; +import discord4j.core.object.entity.channel.MessageChannel; import discord4j.core.object.presence.Status; import lombok.val; import org.bukkit.Bukkit; @@ -89,7 +94,7 @@ public class FunModule extends Component implements Listener { public static boolean executeMemes(Message message) { val fm = ComponentManager.getIfEnabled(FunModule.class); if (fm == null) return false; - String msglowercased = message.getContent().orElse("").toLowerCase(); + String msglowercased = message.getContent().toLowerCase(); lastlist++; if (lastlist > 5) { ListC = 0; diff --git a/src/main/java/buttondevteam/discordplugin/listeners/CommandListener.java b/src/main/java/buttondevteam/discordplugin/listeners/CommandListener.java index 1892e99..30dc153 100644 --- a/src/main/java/buttondevteam/discordplugin/listeners/CommandListener.java +++ b/src/main/java/buttondevteam/discordplugin/listeners/CommandListener.java @@ -6,9 +6,9 @@ import buttondevteam.discordplugin.commands.Command2DCSender; import buttondevteam.discordplugin.util.Timings; import buttondevteam.lib.TBMCCoreAPI; import discord4j.core.object.entity.Message; -import discord4j.core.object.entity.MessageChannel; -import discord4j.core.object.entity.PrivateChannel; 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; @@ -25,9 +25,9 @@ public class CommandListener { public static Mono runCommand(Message message, MessageChannel commandChannel, boolean mentionedonly) { Timings timings = CommonListeners.timings; Mono ret = Mono.just(true); - if (!message.getContent().isPresent()) + if (message.getContent().length() == 0) return ret; //Pin messages and such, let the mcchat listener deal with it - val content = message.getContent().get(); + val content = message.getContent(); timings.printElapsed("A"); return message.getChannel().flatMap(channel -> { Mono tmp = ret; @@ -74,7 +74,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 (message.getContent().startsWith(mention)) // TODO: Resolve mentions: Compound arguments, either a mention or text if (cmdwithargs.length() > mention.length() + 1) { int i = cmdwithargs.indexOf(" ", mention.length()); if (i == -1) @@ -89,7 +89,7 @@ public class CommandListener { cmdwithargs.replace(0, cmdwithargs.length(), prefix + "help"); else { if (cmdwithargs.length() == 0) - cmdwithargs.replace(0, cmdwithargs.length(), prefix + "help"); + cmdwithargs.replace(0, 0, 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 diff --git a/src/main/java/buttondevteam/discordplugin/listeners/CommonListeners.java b/src/main/java/buttondevteam/discordplugin/listeners/CommonListeners.java index 510e71a..fc94aff 100755 --- a/src/main/java/buttondevteam/discordplugin/listeners/CommonListeners.java +++ b/src/main/java/buttondevteam/discordplugin/listeners/CommonListeners.java @@ -14,7 +14,7 @@ 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 discord4j.core.object.entity.PrivateChannel; +import discord4j.core.object.entity.channel.PrivateChannel; import lombok.val; import reactor.core.publisher.Mono; @@ -47,7 +47,7 @@ public class CommonListeners { return commandCh.filterWhen(ch -> 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().orElse("").contains("channelcon")) //Only 'channelcon' is allowed in other channels + || event.getMessage().getContent().contains("channelcon")) //Only 'channelcon' is allowed in other channels .flatMap(shouldRun -> { //Only continue if this doesn't handle the event if (!shouldRun) return Mono.just(true); //The condition is only for the first command execution, not mcchat diff --git a/src/main/java/buttondevteam/discordplugin/listeners/MCListener.java b/src/main/java/buttondevteam/discordplugin/listeners/MCListener.java index 313e4e8..e333941 100755 --- a/src/main/java/buttondevteam/discordplugin/listeners/MCListener.java +++ b/src/main/java/buttondevteam/discordplugin/listeners/MCListener.java @@ -6,13 +6,12 @@ import buttondevteam.discordplugin.commands.ConnectCommand; import buttondevteam.lib.TBMCCommandPreprocessEvent; import buttondevteam.lib.player.TBMCPlayerGetInfoEvent; import buttondevteam.lib.player.TBMCPlayerJoinEvent; +import discord4j.common.util.Snowflake; import discord4j.core.object.entity.Member; import discord4j.core.object.entity.User; -import discord4j.core.object.util.Snowflake; import lombok.val; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; -import org.bukkit.event.server.ServerCommandEvent; import reactor.core.publisher.Mono; public class MCListener implements Listener { @@ -53,7 +52,7 @@ public class MCListener implements Listener { } @EventHandler - public void onCommandPreprocess(TBMCCommandPreprocessEvent e){ + public void onCommandPreprocess(TBMCCommandPreprocessEvent e) { DiscordPlugin.Restart = !e.getMessage().equalsIgnoreCase("/stop"); // The variable is always true except if stopped } } diff --git a/src/main/java/buttondevteam/discordplugin/mcchat/ChannelconCommand.java b/src/main/java/buttondevteam/discordplugin/mcchat/ChannelconCommand.java index e8307f3..1fae7e1 100644 --- a/src/main/java/buttondevteam/discordplugin/mcchat/ChannelconCommand.java +++ b/src/main/java/buttondevteam/discordplugin/mcchat/ChannelconCommand.java @@ -9,11 +9,11 @@ import buttondevteam.lib.TBMCSystemChatEvent; import buttondevteam.lib.chat.Command2; import buttondevteam.lib.chat.CommandClass; import buttondevteam.lib.player.TBMCPlayer; -import discord4j.core.object.entity.GuildChannel; import discord4j.core.object.entity.Message; -import discord4j.core.object.entity.MessageChannel; import discord4j.core.object.entity.User; -import discord4j.core.object.util.Permission; +import discord4j.core.object.entity.channel.GuildChannel; +import discord4j.core.object.entity.channel.MessageChannel; +import discord4j.rest.util.Permission; import lombok.RequiredArgsConstructor; import lombok.val; import org.bukkit.Bukkit; @@ -149,6 +149,7 @@ public class ChannelconCommand extends ICommand2DC { DPUtils.reply(message, channel, "you can only use this command in a server!").subscribe(); return true; } + //noinspection OptionalGetWithoutIsPresent var perms = ((GuildChannel) channel).getEffectivePermissions(message.getAuthor().map(User::getId).get()).block(); if (!perms.contains(Permission.ADMINISTRATOR) && !perms.contains(Permission.MANAGE_CHANNELS)) { DPUtils.reply(message, channel, "you need to have manage permissions for this channel!").subscribe(); diff --git a/src/main/java/buttondevteam/discordplugin/mcchat/MCChatCommand.java b/src/main/java/buttondevteam/discordplugin/mcchat/MCChatCommand.java index 4319cf9..476be5f 100755 --- a/src/main/java/buttondevteam/discordplugin/mcchat/MCChatCommand.java +++ b/src/main/java/buttondevteam/discordplugin/mcchat/MCChatCommand.java @@ -8,7 +8,7 @@ import buttondevteam.discordplugin.commands.ICommand2DC; import buttondevteam.lib.TBMCCoreAPI; import buttondevteam.lib.chat.Command2; import buttondevteam.lib.chat.CommandClass; -import discord4j.core.object.entity.PrivateChannel; +import discord4j.core.object.entity.channel.PrivateChannel; import lombok.RequiredArgsConstructor; import lombok.val; diff --git a/src/main/java/buttondevteam/discordplugin/mcchat/MCChatCustom.java b/src/main/java/buttondevteam/discordplugin/mcchat/MCChatCustom.java index 74ef5b4..ee368f5 100644 --- a/src/main/java/buttondevteam/discordplugin/mcchat/MCChatCustom.java +++ b/src/main/java/buttondevteam/discordplugin/mcchat/MCChatCustom.java @@ -4,9 +4,9 @@ import buttondevteam.core.component.channel.Channel; import buttondevteam.core.component.channel.ChatRoom; import buttondevteam.discordplugin.DiscordConnectedPlayer; import buttondevteam.lib.TBMCSystemChatEvent; -import discord4j.core.object.entity.MessageChannel; +import discord4j.common.util.Snowflake; import discord4j.core.object.entity.User; -import discord4j.core.object.util.Snowflake; +import discord4j.core.object.entity.channel.MessageChannel; import lombok.NonNull; import lombok.val; @@ -62,7 +62,7 @@ public class MCChatCustom { public Set brtoggles; private CustomLMD(@NonNull MessageChannel channel, @NonNull User user, - @NonNull String groupid, @NonNull Channel mcchannel, @NonNull DiscordConnectedPlayer dcp, int toggles, Set brtoggles) { + @NonNull String groupid, @NonNull Channel mcchannel, @NonNull DiscordConnectedPlayer dcp, int toggles, Set brtoggles) { super(channel, user); groupID = groupid; this.mcchannel = mcchannel; diff --git a/src/main/java/buttondevteam/discordplugin/mcchat/MCChatListener.java b/src/main/java/buttondevteam/discordplugin/mcchat/MCChatListener.java index 5efaf1c..66b207c 100755 --- a/src/main/java/buttondevteam/discordplugin/mcchat/MCChatListener.java +++ b/src/main/java/buttondevteam/discordplugin/mcchat/MCChatListener.java @@ -13,11 +13,17 @@ import buttondevteam.lib.chat.ChatMessage; import buttondevteam.lib.chat.TBMCChatAPI; import buttondevteam.lib.player.TBMCPlayer; import com.vdurmont.emoji.EmojiParser; +import discord4j.common.util.Snowflake; import discord4j.core.event.domain.message.MessageCreateEvent; import discord4j.core.object.Embed; -import discord4j.core.object.entity.*; -import discord4j.core.object.util.Snowflake; +import discord4j.core.object.entity.Attachment; +import discord4j.core.object.entity.Guild; +import discord4j.core.object.entity.Message; +import discord4j.core.object.entity.User; +import discord4j.core.object.entity.channel.GuildChannel; +import discord4j.core.object.entity.channel.PrivateChannel; import discord4j.core.spec.EmbedCreateSpec; +import discord4j.rest.util.Color; import lombok.val; import org.bukkit.Bukkit; import org.bukkit.entity.Player; @@ -26,7 +32,6 @@ import org.bukkit.event.Listener; import org.bukkit.scheduler.BukkitTask; import reactor.core.publisher.Mono; -import java.awt.*; import java.time.Instant; import java.util.AbstractMap; import java.util.concurrent.LinkedBlockingQueue; @@ -72,11 +77,11 @@ public class MCChatListener implements Listener { time = se.getValue(); final String authorPlayer = "[" + DPUtils.sanitizeStringNoEscape(e.getChannel().DisplayName().get()) + "] " // - + ("Minecraft".equals(e.getOrigin()) ? "" : "[" + e.getOrigin().substring(0, 1) + "]") // + + ("Minecraft".equals(e.getOrigin()) ? "" : "[" + e.getOrigin().charAt(0) + "]") // + (DPUtils.sanitizeStringNoEscape(ChromaUtils.getDisplayName(e.getSender()))); val color = e.getChannel().Color().get(); final Consumer embed = ecs -> { - ecs.setDescription(e.getMessage()).setColor(new Color(color.getRed(), + ecs.setDescription(e.getMessage()).setColor(Color.of(color.getRed(), color.getGreen(), color.getBlue())); String url = module.profileURL().get(); if (e.getSender() instanceof Player) @@ -235,9 +240,8 @@ public class MCChatListener implements Listener { }).filter(channel -> { timings.printElapsed("Filter 2"); return !(channel instanceof PrivateChannel //Only in private chat - && ev.getMessage().getContent().isPresent() - && ev.getMessage().getContent().get().length() < "/mcchat<>".length() - && ev.getMessage().getContent().get().replace(prefix + "", "") + && ev.getMessage().getContent().length() < "/mcchat<>".length() + && 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)) @@ -268,7 +272,7 @@ public class MCChatListener implements Listener { return; } val sender = event.getMessage().getAuthor().orElse(null); - String dmessage = event.getMessage().getContent().orElse(""); + String dmessage = event.getMessage().getContent(); try { final DiscordSenderBase dsender = MCChatUtils.getSender(event.getMessage().getChannelId(), sender); val user = dsender.getChromaUser(); diff --git a/src/main/java/buttondevteam/discordplugin/mcchat/MCChatPrivate.java b/src/main/java/buttondevteam/discordplugin/mcchat/MCChatPrivate.java index 0ecddee..80f1748 100644 --- a/src/main/java/buttondevteam/discordplugin/mcchat/MCChatPrivate.java +++ b/src/main/java/buttondevteam/discordplugin/mcchat/MCChatPrivate.java @@ -4,9 +4,9 @@ import buttondevteam.core.ComponentManager; import buttondevteam.discordplugin.DiscordConnectedPlayer; import buttondevteam.discordplugin.DiscordPlayer; import buttondevteam.lib.player.TBMCPlayer; -import discord4j.core.object.entity.MessageChannel; -import discord4j.core.object.entity.PrivateChannel; import discord4j.core.object.entity.User; +import discord4j.core.object.entity.channel.MessageChannel; +import discord4j.core.object.entity.channel.PrivateChannel; import lombok.val; import org.bukkit.Bukkit; diff --git a/src/main/java/buttondevteam/discordplugin/mcchat/MCChatUtils.java b/src/main/java/buttondevteam/discordplugin/mcchat/MCChatUtils.java index 51f9209..163f148 100644 --- a/src/main/java/buttondevteam/discordplugin/mcchat/MCChatUtils.java +++ b/src/main/java/buttondevteam/discordplugin/mcchat/MCChatUtils.java @@ -7,8 +7,13 @@ import buttondevteam.discordplugin.broadcaster.GeneralEventBroadcasterModule; import buttondevteam.lib.TBMCCoreAPI; import buttondevteam.lib.TBMCSystemChatEvent; import com.google.common.collect.Sets; -import discord4j.core.object.entity.*; -import discord4j.core.object.util.Snowflake; +import discord4j.common.util.Snowflake; +import discord4j.core.object.entity.Message; +import discord4j.core.object.entity.User; +import discord4j.core.object.entity.channel.Channel; +import discord4j.core.object.entity.channel.MessageChannel; +import discord4j.core.object.entity.channel.PrivateChannel; +import discord4j.core.object.entity.channel.TextChannel; import io.netty.util.collection.LongObjectHashMap; import lombok.RequiredArgsConstructor; import lombok.val; diff --git a/src/main/java/buttondevteam/discordplugin/mcchat/MCListener.java b/src/main/java/buttondevteam/discordplugin/mcchat/MCListener.java index 7bef834..2049a61 100644 --- a/src/main/java/buttondevteam/discordplugin/mcchat/MCListener.java +++ b/src/main/java/buttondevteam/discordplugin/mcchat/MCListener.java @@ -7,8 +7,8 @@ import buttondevteam.lib.player.TBMCPlayer; import buttondevteam.lib.player.TBMCPlayerBase; import buttondevteam.lib.player.TBMCYEEHAWEvent; import com.earth2me.essentials.CommandSource; +import discord4j.common.util.Snowflake; import discord4j.core.object.entity.Role; -import discord4j.core.object.util.Snowflake; import lombok.RequiredArgsConstructor; import lombok.val; import net.ess3.api.events.AfkStatusChangeEvent; diff --git a/src/main/java/buttondevteam/discordplugin/mcchat/MinecraftChatModule.java b/src/main/java/buttondevteam/discordplugin/mcchat/MinecraftChatModule.java index de4dfdd..c49de62 100644 --- a/src/main/java/buttondevteam/discordplugin/mcchat/MinecraftChatModule.java +++ b/src/main/java/buttondevteam/discordplugin/mcchat/MinecraftChatModule.java @@ -13,8 +13,8 @@ import buttondevteam.lib.architecture.Component; import buttondevteam.lib.architecture.ConfigData; import buttondevteam.lib.architecture.ReadOnlyConfigData; import com.google.common.collect.Lists; -import discord4j.core.object.entity.MessageChannel; -import discord4j.core.object.util.Snowflake; +import discord4j.common.util.Snowflake; +import discord4j.core.object.entity.channel.MessageChannel; import lombok.Getter; import lombok.val; import org.bukkit.Bukkit; @@ -116,17 +116,15 @@ public class MinecraftChatModule extends Component { } /** - * Whether players logged on from Discord should be recognised by other plugins. Some plugins might break if it's turned off. + * Whether players logged on from Discord (mcchat command) should be recognised by other plugins. Some plugins might break if it's turned off. * But it's really hacky. */ - public final ConfigData addFakePlayersToBukkit = getConfig().getData("addFakePlayersToBukkit", true); + private final ConfigData addFakePlayersToBukkit = getConfig().getData("addFakePlayersToBukkit", true); @Override protected void enable() { if (DPUtils.disableIfConfigErrorRes(this, chatChannel(), chatChannelMono())) return; - /*clientID = DiscordPlugin.dc.getApplicationInfo().blockOptional().map(info->info.getId().asString()) - .orElse("Unknown"); //Need to block because otherwise it may not be set in time*/ 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 diff --git a/src/main/java/buttondevteam/discordplugin/playerfaker/DiscordInventory.java b/src/main/java/buttondevteam/discordplugin/playerfaker/DiscordInventory.java index ab22f52..1c0ebb3 100644 --- a/src/main/java/buttondevteam/discordplugin/playerfaker/DiscordInventory.java +++ b/src/main/java/buttondevteam/discordplugin/playerfaker/DiscordInventory.java @@ -113,6 +113,7 @@ public class DiscordInventory implements Inventory { } @Override + @Deprecated public HashMap all(int materialId) { return new HashMap<>(); } @@ -128,6 +129,7 @@ public class DiscordInventory implements Inventory { } @Override + @Deprecated public int first(int materialId) { return -1; } @@ -148,6 +150,7 @@ public class DiscordInventory implements Inventory { } @Override + @Deprecated public void remove(int materialId) { } diff --git a/src/main/java/buttondevteam/discordplugin/playerfaker/ServerWatcher.java b/src/main/java/buttondevteam/discordplugin/playerfaker/ServerWatcher.java index c65a113..4bb9a45 100644 --- a/src/main/java/buttondevteam/discordplugin/playerfaker/ServerWatcher.java +++ b/src/main/java/buttondevteam/discordplugin/playerfaker/ServerWatcher.java @@ -17,8 +17,6 @@ public class ServerWatcher { private List playerList; private final List fakePlayers = new ArrayList<>(); private Server origServer; - //private ByteBuddy byteBuddy; - //private AsmVisitorWrapper mockTransformer; @IgnoreForBinding public void enableDisable(boolean enable) throws Exception { @@ -27,17 +25,6 @@ public class ServerWatcher { if (enable) { var serverClass = Bukkit.getServer().getClass(); var originalServer = serverField.get(null); - //var impl = MethodDelegation.to(this); - //var names = Arrays.stream(ServerWatcher.class.getMethods()).map(Method::getName).toArray(String[]::new); - /*if (byteBuddy == null) { - byteBuddy = new ByteBuddy() - .with(TypeValidation.DISABLED) - .with(Implementation.Context.Disabled.Factory.INSTANCE) - .with(MethodGraph.Compiler.ForDeclaredMethods.INSTANCE) - .ignore(isSynthetic().and(not(isConstructor())).or(isDefaultFinalizer())); - - mockTransformer=new InlineByteBuddyMockMaker().createMock() - }*/ DelegatingMockMaker.getInstance().setMockMaker(new InlineByteBuddyMockMaker()); var settings = Mockito.withSettings().stubOnly() .defaultAnswer(invocation -> { @@ -91,26 +78,6 @@ public class ServerWatcher { serverField.set(null, origServer); } - /*@Override - public byte[] transform(ClassLoader loader, String className, Class classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer) throws IllegalClassFormatException { - if (classBeingRedefined == null) - return null; - try { - return byteBuddy - .redefine( - classBeingRedefined, - ClassFileLocator.Simple.of(classBeingRedefined.getName(), classfileBuffer) - ) - //.visit(new InlineBytecodeGenerator.ParameterWritingVisitorWrapper(classBeingRedefined)) - .visit(mockTransformer) - .make() - .getBytes(); - } catch (Throwable throwable) { - TBMCCoreAPI.SendException("Failed to transform class!", throwable); - return null; - } - }*/ - @RequiredArgsConstructor public static class AppendListView extends AbstractSequentialList { private final List originalList; diff --git a/src/main/java/buttondevteam/discordplugin/role/GameRoleModule.java b/src/main/java/buttondevteam/discordplugin/role/GameRoleModule.java index 3139298..6bc8187 100644 --- a/src/main/java/buttondevteam/discordplugin/role/GameRoleModule.java +++ b/src/main/java/buttondevteam/discordplugin/role/GameRoleModule.java @@ -3,20 +3,19 @@ package buttondevteam.discordplugin.role; import buttondevteam.core.ComponentManager; import buttondevteam.discordplugin.DPUtils; import buttondevteam.discordplugin.DiscordPlugin; -import buttondevteam.lib.TBMCCoreAPI; import buttondevteam.lib.architecture.Component; import buttondevteam.lib.architecture.ReadOnlyConfigData; 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 discord4j.core.object.entity.channel.MessageChannel; +import discord4j.rest.util.Color; import lombok.val; import org.bukkit.Bukkit; import reactor.core.publisher.Mono; -import java.awt.*; import java.util.Collections; import java.util.List; import java.util.function.Predicate; @@ -52,8 +51,8 @@ public class GameRoleModule extends Component { * Defaults to the second to last in the upper row - #95a5a6. */ private final ReadOnlyConfigData roleColor = getConfig().getConfig("roleColor") - .def(new Color(149, 165, 166, 0)) - .getter(rgb -> new Color(Integer.parseInt(((String) rgb).substring(1), 16), true)) + .def(Color.of(149, 165, 166)) + .getter(rgb -> Color.of(Integer.parseInt(((String) rgb).substring(1), 16))) .setter(color -> String.format("#%08x", color.getRGB())).buildReadOnly(); public static void handleRoleEvent(RoleEvent roleEvent) { @@ -119,7 +118,7 @@ public class GameRoleModule extends Component { val rc = roleColor.get(); return Mono.just(r.getColor().equals(rc)).filter(b -> b).flatMap(b -> DiscordPlugin.dc.getSelf().flatMap(u -> u.asMember(DiscordPlugin.mainServer.getId())) - .flatMap(m -> m.hasHigherRoles(Collections.singleton(r)))) //Below one of our roles + .flatMap(m -> m.hasHigherRoles(Collections.singleton(r.getId())))) //Below one of our roles .defaultIfEmpty(false); } }