diff --git a/api/src/main/java/com/discordsrv/api/discord/entity/channel/DiscordMessageChannel.java b/api/src/main/java/com/discordsrv/api/discord/entity/channel/DiscordMessageChannel.java index fa3f4195..27b17b5a 100644 --- a/api/src/main/java/com/discordsrv/api/discord/entity/channel/DiscordMessageChannel.java +++ b/api/src/main/java/com/discordsrv/api/discord/entity/channel/DiscordMessageChannel.java @@ -29,6 +29,7 @@ import com.discordsrv.api.discord.entity.message.ReceivedDiscordMessage; import com.discordsrv.api.discord.entity.message.SendableDiscordMessage; import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.io.InputStream; import java.util.Collections; @@ -86,7 +87,7 @@ public interface DiscordMessageChannel extends Snowflake { * @return a future returning the message after being edited */ @NotNull - CompletableFuture editMessageById(long id, @NotNull SendableDiscordMessage message); + CompletableFuture editMessageById(long id, @NotNull SendableDiscordMessage message, @Nullable Map attachments); /** * Returns the JDA representation of this object. This should not be used if it can be avoided. diff --git a/api/src/main/java/com/discordsrv/api/discord/entity/message/ReceivedDiscordMessage.java b/api/src/main/java/com/discordsrv/api/discord/entity/message/ReceivedDiscordMessage.java index d6cfc5cc..e67e5b50 100644 --- a/api/src/main/java/com/discordsrv/api/discord/entity/message/ReceivedDiscordMessage.java +++ b/api/src/main/java/com/discordsrv/api/discord/entity/message/ReceivedDiscordMessage.java @@ -34,7 +34,9 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Unmodifiable; +import java.io.InputStream; import java.util.List; +import java.util.Map; import java.util.concurrent.CompletableFuture; /** @@ -147,6 +149,10 @@ public interface ReceivedDiscordMessage extends Snowflake { @NotNull CompletableFuture delete(); + default CompletableFuture edit(@NotNull SendableDiscordMessage message) { + return edit(message, null); + } + /** * Edits this message to the provided message. * @@ -156,7 +162,7 @@ public interface ReceivedDiscordMessage extends Snowflake { * but the provided {@link SendableDiscordMessage} specifies a webhook username. */ @NotNull - CompletableFuture edit(SendableDiscordMessage message); + CompletableFuture edit(@NotNull SendableDiscordMessage message, @Nullable Map attachments); class Attachment { diff --git a/common/build.gradle b/common/build.gradle index d3104de3..98f9742a 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -42,12 +42,6 @@ dependencies { // DependencyDownload api(libs.dependencydownload.runtime) - // Discord Webhooks - runtimeDownloadApi(libs.webhooks) { - // okhttp is already included - exclude group: 'com.squareup.okhttp3', module: 'okhttp' - } - // Apache Commons runtimeDownloadApi(libs.commons.lang) runtimeDownloadApi(libs.commons.io) diff --git a/common/src/main/java/com/discordsrv/common/discord/api/DiscordAPIImpl.java b/common/src/main/java/com/discordsrv/common/discord/api/DiscordAPIImpl.java index 31a51aa3..e283f31f 100644 --- a/common/src/main/java/com/discordsrv/common/discord/api/DiscordAPIImpl.java +++ b/common/src/main/java/com/discordsrv/common/discord/api/DiscordAPIImpl.java @@ -18,8 +18,6 @@ package com.discordsrv.common.discord.api; -import club.minnced.discord.webhook.WebhookClient; -import club.minnced.discord.webhook.WebhookClientBuilder; import com.discordsrv.api.discord.DiscordAPI; import com.discordsrv.api.discord.connection.details.DiscordGatewayIntent; import com.discordsrv.api.discord.connection.jda.errorresponse.ErrorCallbackContext; @@ -68,7 +66,7 @@ public class DiscordAPIImpl implements DiscordAPI { private final DiscordSRV discordSRV; private final DiscordCommandRegistry commandRegistry; - private final AsyncLoadingCache cachedClients; + private final AsyncLoadingCache> cachedClients; private final List threadLookups = new CopyOnWriteArrayList<>(); public DiscordAPIImpl(DiscordSRV discordSRV) { @@ -79,11 +77,11 @@ public class DiscordAPIImpl implements DiscordAPI { .buildAsync(new WebhookCacheLoader()); } - public CompletableFuture queryWebhookClient(long channelId) { + public CompletableFuture> queryWebhookClient(long channelId) { return cachedClients.get(channelId); } - public AsyncLoadingCache getCachedClients() { + public AsyncLoadingCache> getCachedClients() { return cachedClients; } @@ -489,10 +487,10 @@ public class DiscordAPIImpl implements DiscordAPI { return commandRegistry; } - private class WebhookCacheLoader implements AsyncCacheLoader { + private class WebhookCacheLoader implements AsyncCacheLoader> { @Override - public @NonNull CompletableFuture asyncLoad(@NonNull Long channelId, @NonNull Executor executor) { + public @NonNull CompletableFuture> asyncLoad(@NonNull Long channelId, @NonNull Executor executor) { JDA jda = discordSRV.jda(); if (jda == null) { return notReady(); @@ -533,7 +531,7 @@ public class DiscordAPIImpl implements DiscordAPI { } } - private class WebhookCacheExpiry implements Expiry { + private class WebhookCacheExpiry implements Expiry> { private boolean isConfiguredChannel(Long channelId) { for (BaseChannelConfig config : discordSRV.config().channels.values()) { diff --git a/common/src/main/java/com/discordsrv/common/discord/api/entity/channel/AbstractDiscordGuildMessageChannel.java b/common/src/main/java/com/discordsrv/common/discord/api/entity/channel/AbstractDiscordGuildMessageChannel.java index db37887d..df79522d 100644 --- a/common/src/main/java/com/discordsrv/common/discord/api/entity/channel/AbstractDiscordGuildMessageChannel.java +++ b/common/src/main/java/com/discordsrv/common/discord/api/entity/channel/AbstractDiscordGuildMessageChannel.java @@ -18,9 +18,6 @@ package com.discordsrv.common.discord.api.entity.channel; -import club.minnced.discord.webhook.WebhookClient; -import club.minnced.discord.webhook.receive.ReadonlyMessage; -import club.minnced.discord.webhook.send.WebhookMessageBuilder; import com.discordsrv.api.discord.entity.channel.DiscordGuildMessageChannel; import com.discordsrv.api.discord.entity.guild.DiscordGuild; import com.discordsrv.api.discord.entity.message.ReceivedDiscordMessage; @@ -29,16 +26,22 @@ import com.discordsrv.common.DiscordSRV; import com.discordsrv.common.discord.api.entity.message.ReceivedDiscordMessageImpl; import com.discordsrv.common.discord.api.entity.message.util.SendableDiscordMessageUtil; import net.dv8tion.jda.api.entities.Message; +import net.dv8tion.jda.api.entities.WebhookClient; import net.dv8tion.jda.api.entities.channel.middleman.GuildMessageChannel; -import net.dv8tion.jda.api.requests.FluentRestAction; -import net.dv8tion.jda.api.requests.restaction.MessageCreateAction; +import net.dv8tion.jda.api.requests.RestAction; import net.dv8tion.jda.api.utils.FileUpload; +import net.dv8tion.jda.api.utils.messages.MessageCreateData; +import net.dv8tion.jda.api.utils.messages.MessageCreateRequest; +import net.dv8tion.jda.api.utils.messages.MessageEditData; +import net.dv8tion.jda.api.utils.messages.MessageEditRequest; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; import java.util.Map; import java.util.concurrent.CompletableFuture; -import java.util.function.BiFunction; public abstract class AbstractDiscordGuildMessageChannel extends AbstractDiscordMessageChannel @@ -51,7 +54,7 @@ public abstract class AbstractDiscordGuildMessageChannel queryWebhookClient() { + public CompletableFuture> queryWebhookClient() { return discordSRV.discordAPI().queryWebhookClient(getId()); } @@ -79,48 +82,71 @@ public abstract class AbstractDiscordGuildMessageChannel sendMessage( @NotNull SendableDiscordMessage message, @NotNull Map attachments ) { - return message(message, (webhookClient, webhookMessage) -> { - for (Map.Entry entry : attachments.entrySet()) { - webhookMessage.addFile(entry.getKey(), entry.getValue()); - } - return webhookClient.send(webhookMessage.build()); - }, (channel, msg) -> { - MessageCreateAction action = channel.sendMessage(SendableDiscordMessageUtil.toJDASend(msg)); - for (Map.Entry entry : attachments.entrySet()) { - action = action.addFiles(FileUpload.fromData(entry.getValue(), entry.getKey())); - } - return action; - }); + return sendInternal(message, attachments); + } + + @SuppressWarnings("unchecked") // Generics + private > & RestAction> CompletableFuture sendInternal(SendableDiscordMessage message, Map attachments) { + MessageCreateData createData = SendableDiscordMessageUtil.toJDASend(message); + + CompletableFuture createRequest; + if (message.isWebhookMessage()) { + createRequest = queryWebhookClient().thenApply(client -> (R) client.sendMessage(createData)); + } else { + createRequest = CompletableFuture.completedFuture(((R) channel.sendMessage(createData))); + } + + return createRequest + .thenApply(action -> { + for (Map.Entry entry : attachments.entrySet()) { + action = (R) action.addFiles(FileUpload.fromData(entry.getValue(), entry.getKey())); + } + return action; + }) + .thenCompose(RestAction::submit) + .thenApply(msg -> ReceivedDiscordMessageImpl.fromJDA(discordSRV, msg)); } @Override - public @NotNull CompletableFuture editMessageById(long id, @NotNull SendableDiscordMessage message) { - return message( - message, - (client, msg) -> client.edit(id, msg.build()), - (textChannel, msg) -> textChannel.editMessageById(id, SendableDiscordMessageUtil.toJDAEdit(msg)) - ); + public @NotNull CompletableFuture editMessageById( + long id, + @NotNull SendableDiscordMessage message, + @Nullable Map attachments + ) { + return editInternal(id, message, attachments); } - private CompletableFuture message( + @SuppressWarnings("unchecked") // Generics + private > & RestAction> CompletableFuture editInternal( + long id, SendableDiscordMessage message, - BiFunction> webhookFunction, - BiFunction> jdaFunction) { - return discordSRV.discordAPI().mapExceptions(() -> { - CompletableFuture future; - if (message.isWebhookMessage()) { - future = queryWebhookClient() - .thenCompose(client -> webhookFunction.apply( - client, SendableDiscordMessageUtil.toWebhook(message))) - .thenApply(msg -> ReceivedDiscordMessageImpl.fromWebhook(discordSRV, msg)); - } else { - future = jdaFunction - .apply(channel, message) - .submit() - .thenApply(msg -> ReceivedDiscordMessageImpl.fromJDA(discordSRV, msg)); - } - return future; - }); + Map attachments + ) { + MessageEditData editData = SendableDiscordMessageUtil.toJDAEdit(message); + + CompletableFuture editRequest; + if (message.isWebhookMessage()) { + editRequest = queryWebhookClient().thenApply(client -> (R) client.editMessageById(id, editData)); + } else { + editRequest = CompletableFuture.completedFuture(((R) channel.editMessageById(id, editData))); + } + + return editRequest + .thenApply(action -> { + if (attachments != null) { + List uploads = new ArrayList<>(); + for (Map.Entry entry : attachments.entrySet()) { + uploads.add(FileUpload.fromData(entry.getValue(), entry.getKey())); + } + action = (R) action.setFiles(uploads); + } else { + action = (R) action.setAttachments(); // TODO + } + + return action; + }) + .thenCompose(RestAction::submit) + .thenApply(msg -> ReceivedDiscordMessageImpl.fromJDA(discordSRV, msg)); } @Override @@ -131,7 +157,7 @@ public abstract class AbstractDiscordGuildMessageChannel client.delete(id)); + .thenCompose(client -> client.deleteMessageById(id).submit()); } return discordSRV.discordAPI().mapExceptions(future); } diff --git a/common/src/main/java/com/discordsrv/common/discord/api/entity/channel/DiscordDMChannelImpl.java b/common/src/main/java/com/discordsrv/common/discord/api/entity/channel/DiscordDMChannelImpl.java index 47f1ef90..a649afd5 100644 --- a/common/src/main/java/com/discordsrv/common/discord/api/entity/channel/DiscordDMChannelImpl.java +++ b/common/src/main/java/com/discordsrv/common/discord/api/entity/channel/DiscordDMChannelImpl.java @@ -30,6 +30,7 @@ import net.dv8tion.jda.api.entities.channel.concrete.PrivateChannel; import net.dv8tion.jda.api.requests.restaction.MessageCreateAction; import net.dv8tion.jda.api.utils.FileUpload; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.io.InputStream; import java.util.Map; @@ -80,7 +81,11 @@ public class DiscordDMChannelImpl extends AbstractDiscordMessageChannel editMessageById(long id, @NotNull SendableDiscordMessage message) { + public @NotNull CompletableFuture editMessageById( + long id, + @NotNull SendableDiscordMessage message, + @Nullable Map attachments + ) { if (message.isWebhookMessage()) { throw new IllegalArgumentException("Cannot send webhook messages to DMChannels"); } diff --git a/common/src/main/java/com/discordsrv/common/discord/api/entity/channel/DiscordThreadChannelImpl.java b/common/src/main/java/com/discordsrv/common/discord/api/entity/channel/DiscordThreadChannelImpl.java index e39b010e..69b41bc4 100644 --- a/common/src/main/java/com/discordsrv/common/discord/api/entity/channel/DiscordThreadChannelImpl.java +++ b/common/src/main/java/com/discordsrv/common/discord/api/entity/channel/DiscordThreadChannelImpl.java @@ -18,12 +18,13 @@ package com.discordsrv.common.discord.api.entity.channel; -import club.minnced.discord.webhook.WebhookClient; import com.discordsrv.api.discord.entity.channel.DiscordChannelType; import com.discordsrv.api.discord.entity.channel.DiscordThreadChannel; import com.discordsrv.api.discord.entity.channel.DiscordThreadContainer; import com.discordsrv.api.discord.entity.guild.DiscordGuild; import com.discordsrv.common.DiscordSRV; +import net.dv8tion.jda.api.entities.Message; +import net.dv8tion.jda.api.entities.WebhookClient; import net.dv8tion.jda.api.entities.channel.ChannelType; import net.dv8tion.jda.api.entities.channel.attribute.IThreadContainer; import net.dv8tion.jda.api.entities.channel.concrete.ThreadChannel; @@ -48,10 +49,10 @@ public class DiscordThreadChannelImpl extends AbstractDiscordGuildMessageChannel } @Override - public CompletableFuture queryWebhookClient() { + public CompletableFuture> queryWebhookClient() { return discordSRV.discordAPI() .queryWebhookClient(getParentChannel().getId()) - .thenApply(client -> client.onThread(getId())); + .thenApply(client -> null/* client.onThread(getId())*/); // TODO } @Override diff --git a/common/src/main/java/com/discordsrv/common/discord/api/entity/message/ReceivedDiscordMessageClusterImpl.java b/common/src/main/java/com/discordsrv/common/discord/api/entity/message/ReceivedDiscordMessageClusterImpl.java index bace4108..8688e8c0 100644 --- a/common/src/main/java/com/discordsrv/common/discord/api/entity/message/ReceivedDiscordMessageClusterImpl.java +++ b/common/src/main/java/com/discordsrv/common/discord/api/entity/message/ReceivedDiscordMessageClusterImpl.java @@ -54,7 +54,7 @@ public class ReceivedDiscordMessageClusterImpl implements ReceivedDiscordMessage public @NotNull CompletableFuture editAll(SendableDiscordMessage newMessage) { List> futures = new ArrayList<>(messages.size()); for (ReceivedDiscordMessage message : messages) { - futures.add(message.edit(newMessage)); + futures.add(message.edit(newMessage, null)); } return CompletableFutureUtil.combine(futures).thenApply(ReceivedDiscordMessageClusterImpl::new); diff --git a/common/src/main/java/com/discordsrv/common/discord/api/entity/message/ReceivedDiscordMessageImpl.java b/common/src/main/java/com/discordsrv/common/discord/api/entity/message/ReceivedDiscordMessageImpl.java index 484c7386..7d4ef528 100644 --- a/common/src/main/java/com/discordsrv/common/discord/api/entity/message/ReceivedDiscordMessageImpl.java +++ b/common/src/main/java/com/discordsrv/common/discord/api/entity/message/ReceivedDiscordMessageImpl.java @@ -18,12 +18,6 @@ package com.discordsrv.common.discord.api.entity.message; -import club.minnced.discord.webhook.WebhookClient; -import club.minnced.discord.webhook.receive.ReadonlyAttachment; -import club.minnced.discord.webhook.receive.ReadonlyEmbed; -import club.minnced.discord.webhook.receive.ReadonlyMessage; -import club.minnced.discord.webhook.send.WebhookEmbed; -import com.discordsrv.api.color.Color; import com.discordsrv.api.discord.entity.DiscordUser; import com.discordsrv.api.discord.entity.channel.DiscordDMChannel; import com.discordsrv.api.discord.entity.channel.DiscordMessageChannel; @@ -44,14 +38,17 @@ import com.discordsrv.common.future.util.CompletableFutureUtil; import net.dv8tion.jda.api.entities.Member; import net.dv8tion.jda.api.entities.Message; import net.dv8tion.jda.api.entities.MessageEmbed; +import net.dv8tion.jda.api.entities.WebhookClient; import net.dv8tion.jda.api.requests.ErrorResponse; import net.kyori.adventure.text.Component; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Unmodifiable; +import java.io.InputStream; import java.util.ArrayList; import java.util.List; +import java.util.Map; import java.util.concurrent.CompletableFuture; public class ReceivedDiscordMessageImpl implements ReceivedDiscordMessage { @@ -71,7 +68,7 @@ public class ReceivedDiscordMessageImpl implements ReceivedDiscordMessage { boolean self = false; if (webhookMessage) { - CompletableFuture clientFuture = discordSRV.discordAPI() + CompletableFuture> clientFuture = discordSRV.discordAPI() .getCachedClients() .getIfPresent(channel instanceof DiscordThreadChannel ? ((DiscordThreadChannel) channel).getParentChannel().getId() @@ -79,7 +76,7 @@ public class ReceivedDiscordMessageImpl implements ReceivedDiscordMessage { ); if (clientFuture != null) { - long clientId = clientFuture.join().getId(); + long clientId = clientFuture.join().getId(); // TODO self = clientId == user.getId(); } } else { @@ -113,71 +110,6 @@ public class ReceivedDiscordMessageImpl implements ReceivedDiscordMessage { ); } - public static ReceivedDiscordMessage fromWebhook(DiscordSRV discordSRV, ReadonlyMessage webhookMessage) { - List mappedEmbeds = new ArrayList<>(); - for (ReadonlyEmbed embed : webhookMessage.getEmbeds()) { - List fields = new ArrayList<>(); - for (WebhookEmbed.EmbedField field : embed.getFields()) { - fields.add(new DiscordMessageEmbed.Field(field.getName(), field.getValue(), field.isInline())); - } - - Integer color = embed.getColor(); - WebhookEmbed.EmbedAuthor author = embed.getAuthor(); - WebhookEmbed.EmbedTitle title = embed.getTitle(); - ReadonlyEmbed.EmbedImage thumbnail = embed.getThumbnail(); - ReadonlyEmbed.EmbedImage image = embed.getImage(); - WebhookEmbed.EmbedFooter footer = embed.getFooter(); - - mappedEmbeds.add(new DiscordMessageEmbed( - color != null ? new Color(color) : null, - author != null ? author.getName() : null, - author != null ? author.getUrl() : null, - author != null ? author.getIconUrl() : null, - title != null ? title.getText() : null, - title != null ? title.getUrl() : null, - embed.getDescription(), - fields, - thumbnail != null ? thumbnail.getUrl() : null, - image != null ? image.getUrl() : null, - embed.getTimestamp(), - footer != null ? footer.getText() : null, - footer != null ? footer.getIconUrl() : null - )); - } - - DiscordMessageChannel channel = discordSRV.discordAPI().getMessageChannelById( - webhookMessage.getChannelId()); - DiscordUser user = discordSRV.discordAPI().getUserById( - webhookMessage.getAuthor().getId()); - DiscordGuildMember member = channel instanceof DiscordTextChannel && user != null - ? ((DiscordTextChannel) channel).getGuild().getMemberById(user.getId()) : null; - - List attachments = new ArrayList<>(); - for (ReadonlyAttachment attachment : webhookMessage.getAttachments()) { - attachments.add(new Attachment( - attachment.getFileName(), - attachment.getUrl(), - attachment.getProxyUrl(), - attachment.getSize() - )); - } - - return new ReceivedDiscordMessageImpl( - discordSRV, - attachments, - true, // These are always from rest responses - channel, - null, - member, - user, - webhookMessage.getChannelId(), - webhookMessage.getId(), - webhookMessage.getContent(), - mappedEmbeds, - true - ); - } - private final DiscordSRV discordSRV; private final List attachments; private final boolean fromSelf; @@ -305,7 +237,10 @@ public class ReceivedDiscordMessageImpl implements ReceivedDiscordMessage { } @Override - public @NotNull CompletableFuture edit(SendableDiscordMessage message) { + public @NotNull CompletableFuture edit( + @NotNull SendableDiscordMessage message, + @Nullable Map attachments + ) { if (!webhookMessage && message.isWebhookMessage()) { throw new IllegalArgumentException("Cannot edit a non-webhook message into a webhook message"); } @@ -315,7 +250,7 @@ public class ReceivedDiscordMessageImpl implements ReceivedDiscordMessage { return CompletableFutureUtil.failed(new RestErrorResponseException(ErrorResponse.UNKNOWN_CHANNEL)); } - return textChannel.editMessageById(getId(), message); + return textChannel.editMessageById(getId(), message, attachments); } // diff --git a/common/src/main/java/com/discordsrv/common/discord/api/entity/message/util/SendableDiscordMessageUtil.java b/common/src/main/java/com/discordsrv/common/discord/api/entity/message/util/SendableDiscordMessageUtil.java index f7211d50..e945afd5 100644 --- a/common/src/main/java/com/discordsrv/common/discord/api/entity/message/util/SendableDiscordMessageUtil.java +++ b/common/src/main/java/com/discordsrv/common/discord/api/entity/message/util/SendableDiscordMessageUtil.java @@ -18,7 +18,6 @@ package com.discordsrv.common.discord.api.entity.message.util; -import club.minnced.discord.webhook.send.WebhookMessageBuilder; import com.discordsrv.api.discord.entity.interaction.component.actionrow.MessageActionRow; import com.discordsrv.api.discord.entity.message.AllowedMention; import com.discordsrv.api.discord.entity.message.DiscordMessageEmbed; @@ -91,10 +90,4 @@ public final class SendableDiscordMessageUtil { .setComponents(actionRows) .build(); } - - public static WebhookMessageBuilder toWebhook(@NotNull SendableDiscordMessage message) { - return WebhookMessageBuilder.fromJDA(null/*toJDA(message)*/) // TODO: lib update? lib replacement? - .setUsername(message.getWebhookUsername()) - .setAvatarUrl(message.getWebhookAvatarUrl()); - } } diff --git a/common/src/main/java/com/discordsrv/common/messageforwarding/discord/DiscordMessageMirroringModule.java b/common/src/main/java/com/discordsrv/common/messageforwarding/discord/DiscordMessageMirroringModule.java index 8d108567..d52d13ed 100644 --- a/common/src/main/java/com/discordsrv/common/messageforwarding/discord/DiscordMessageMirroringModule.java +++ b/common/src/main/java/com/discordsrv/common/messageforwarding/discord/DiscordMessageMirroringModule.java @@ -235,7 +235,7 @@ public class DiscordMessageMirroringModule extends AbstractModule { } SendableDiscordMessage sendableMessage = convert(message, channel, reference.config).build(); - channel.editMessageById(reference.messageId, sendableMessage).whenComplete((v, t) -> { + channel.editMessageById(reference.messageId, sendableMessage, null).whenComplete((v, t) -> { if (t != null) { discordSRV.logger().error("Failed to update mirrored message in " + channel); } diff --git a/settings.gradle b/settings.gradle index ac8aadaa..1dee920a 100644 --- a/settings.gradle +++ b/settings.gradle @@ -56,15 +56,12 @@ dependencyResolutionManagement { library('findbugs-annotations', 'com.google.code.findbugs', 'jsr305').version('3.0.2') // JDA - library('jda', 'net.dv8tion', 'JDA').version('5.0.0-beta.9') + library('jda', 'net.dv8tion', 'JDA').version('5.0.0-beta.10') library('okhttp', 'com.squareup.okhttp3', 'okhttp').version { prefer '3.14.9' reject '[4,)' // Kotlin } - // Discord Webhooks - library('webhooks', 'club.minnced', 'discord-webhooks').version('0.8.2') - // Apache commons library('commons-lang', 'org.apache.commons', 'commons-lang3').version('3.12.0') library('commons-io', 'commons-io', 'commons-io').version('2.11.0')