JDA 5.0.0-alpha.19

This commit is contained in:
Vankka 2022-09-15 23:23:46 +03:00
parent dbce0832a3
commit f7a015d47d
No known key found for this signature in database
GPG Key ID: 6E50CB7A29B96AD0
23 changed files with 85 additions and 56 deletions

View File

@ -24,7 +24,7 @@
package com.discordsrv.api.discord.entity.channel;
import com.discordsrv.api.discord.entity.JDAEntity;
import net.dv8tion.jda.api.entities.ChannelType;
import net.dv8tion.jda.api.entities.channel.ChannelType;
/**
* Represents a Discord channel type.

View File

@ -25,7 +25,7 @@ package com.discordsrv.api.discord.entity.channel;
import com.discordsrv.api.discord.entity.DiscordUser;
import com.discordsrv.api.discord.entity.JDAEntity;
import net.dv8tion.jda.api.entities.PrivateChannel;
import net.dv8tion.jda.api.entities.channel.concrete.PrivateChannel;
import org.jetbrains.annotations.Nullable;
/**

View File

@ -27,7 +27,7 @@ import com.discordsrv.api.DiscordSRVApi;
import com.discordsrv.api.discord.entity.Snowflake;
import com.discordsrv.api.discord.entity.message.ReceivedDiscordMessage;
import com.discordsrv.api.discord.entity.message.SendableDiscordMessage;
import net.dv8tion.jda.api.entities.MessageChannel;
import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel;
import org.jetbrains.annotations.NotNull;
import java.io.InputStream;

View File

@ -24,7 +24,7 @@
package com.discordsrv.api.discord.entity.channel;
import com.discordsrv.api.discord.entity.JDAEntity;
import net.dv8tion.jda.api.entities.NewsChannel;
import net.dv8tion.jda.api.entities.channel.concrete.NewsChannel;
public interface DiscordNewsChannel extends DiscordGuildMessageChannel, DiscordThreadContainer, JDAEntity<NewsChannel> {

View File

@ -24,7 +24,7 @@
package com.discordsrv.api.discord.entity.channel;
import com.discordsrv.api.discord.entity.JDAEntity;
import net.dv8tion.jda.api.entities.TextChannel;
import net.dv8tion.jda.api.entities.channel.concrete.TextChannel;
import org.jetbrains.annotations.Nullable;
/**

View File

@ -24,7 +24,7 @@
package com.discordsrv.api.discord.entity.channel;
import com.discordsrv.api.discord.entity.JDAEntity;
import net.dv8tion.jda.api.entities.ThreadChannel;
import net.dv8tion.jda.api.entities.channel.concrete.ThreadChannel;
import org.jetbrains.annotations.NotNull;
public interface DiscordThreadChannel extends DiscordGuildMessageChannel, JDAEntity<ThreadChannel> {

View File

@ -27,7 +27,10 @@ import com.discordsrv.common.function.OrDefault;
import com.discordsrv.common.module.type.AbstractModule;
import net.dv8tion.jda.api.JDA;
import net.dv8tion.jda.api.Permission;
import net.dv8tion.jda.api.entities.*;
import net.dv8tion.jda.api.entities.Guild;
import net.dv8tion.jda.api.entities.IPermissionHolder;
import net.dv8tion.jda.api.entities.Role;
import net.dv8tion.jda.api.entities.channel.concrete.TextChannel;
import net.dv8tion.jda.api.requests.restaction.PermissionOverrideAction;
import java.util.ArrayList;
@ -71,7 +74,7 @@ public class ChannelLockingModule extends AbstractModule<DiscordSRV> {
for (DiscordThreadChannel thread : discordSRV.discordAPI().findThreads(config, channelConfig)) {
thread.asJDA().getManager()
.setArchived(true)
.reason("DiscordSRV shutdown behaviour")
.reason("DiscordSRV channel locking")
.queue();
}
}
@ -144,7 +147,7 @@ public class ChannelLockingModule extends AbstractModule<DiscordSRV> {
} else {
action = action.deny(permissions);
}
action.reason("DiscordSRV shutdown behaviour").queue();
action.reason("DiscordSRV channel locking").queue();
}
private void doForAllChannels(BiConsumer<OrDefault<BaseChannelConfig>, IChannelConfig> channelConsumer) {

View File

@ -24,8 +24,8 @@ import com.discordsrv.common.config.main.ChannelUpdaterConfig;
import com.discordsrv.common.logging.NamedLogger;
import com.discordsrv.common.module.type.AbstractModule;
import net.dv8tion.jda.api.JDA;
import net.dv8tion.jda.api.entities.GuildChannel;
import net.dv8tion.jda.api.entities.TextChannel;
import net.dv8tion.jda.api.entities.channel.concrete.TextChannel;
import net.dv8tion.jda.api.entities.channel.middleman.GuildChannel;
import net.dv8tion.jda.api.managers.channel.ChannelManager;
import net.dv8tion.jda.api.managers.channel.concrete.TextChannelManager;
import org.apache.commons.lang3.StringUtils;

View File

@ -29,7 +29,7 @@ import com.discordsrv.common.component.util.ComponentUtil;
import com.discordsrv.common.config.main.channels.DiscordToMinecraftChatConfig;
import com.discordsrv.common.function.OrDefault;
import dev.vankka.mcdiscordreserializer.renderer.implementation.DefaultMinecraftRenderer;
import net.dv8tion.jda.api.entities.GuildChannel;
import net.dv8tion.jda.api.entities.channel.middleman.GuildChannel;
import net.dv8tion.jda.api.utils.MiscUtil;
import net.kyori.adventure.text.Component;
import org.jetbrains.annotations.NotNull;

View File

@ -47,6 +47,11 @@ import com.github.benmanes.caffeine.cache.AsyncLoadingCache;
import com.github.benmanes.caffeine.cache.Expiry;
import net.dv8tion.jda.api.JDA;
import net.dv8tion.jda.api.entities.*;
import net.dv8tion.jda.api.entities.channel.concrete.NewsChannel;
import net.dv8tion.jda.api.entities.channel.concrete.PrivateChannel;
import net.dv8tion.jda.api.entities.channel.concrete.TextChannel;
import net.dv8tion.jda.api.entities.channel.concrete.ThreadChannel;
import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel;
import net.dv8tion.jda.api.exceptions.ErrorResponseException;
import net.dv8tion.jda.api.requests.ErrorResponse;
import net.dv8tion.jda.api.requests.GatewayIntent;

View File

@ -28,9 +28,11 @@ import com.discordsrv.api.discord.entity.message.SendableDiscordMessage;
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.GuildMessageChannel;
import net.dv8tion.jda.api.entities.Message;
import net.dv8tion.jda.api.requests.restaction.MessageAction;
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.utils.FileUpload;
import org.jetbrains.annotations.NotNull;
import java.io.InputStream;
@ -78,9 +80,9 @@ public abstract class AbstractDiscordGuildMessageChannel<T extends GuildMessageC
}
return webhookClient.send(webhookMessage.build());
}, (channel, msg) -> {
MessageAction action = channel.sendMessage(msg);
MessageCreateAction action = channel.sendMessage(SendableDiscordMessageUtil.toJDASend(msg));
for (Map.Entry<String, InputStream> entry : attachments.entrySet()) {
action = action.addFile(entry.getValue(), entry.getKey());
action = action.addFiles(FileUpload.fromData(entry.getValue(), entry.getKey()));
}
return action;
});
@ -91,14 +93,14 @@ public abstract class AbstractDiscordGuildMessageChannel<T extends GuildMessageC
return message(
message,
(client, msg) -> client.edit(id, msg.build()),
(textChannel, msg) -> textChannel.editMessageById(id, msg)
(textChannel, msg) -> textChannel.editMessageById(id, SendableDiscordMessageUtil.toJDAEdit(msg))
);
}
private CompletableFuture<ReceivedDiscordMessage> message(
SendableDiscordMessage message,
BiFunction<WebhookClient, WebhookMessageBuilder, CompletableFuture<ReadonlyMessage>> webhookFunction,
BiFunction<T, Message, MessageAction> jdaFunction) {
BiFunction<T, SendableDiscordMessage, FluentRestAction<? extends Message, ?>> jdaFunction) {
return discordSRV.discordAPI().mapExceptions(() -> {
CompletableFuture<ReceivedDiscordMessage> future;
if (message.isWebhookMessage()) {
@ -108,7 +110,7 @@ public abstract class AbstractDiscordGuildMessageChannel<T extends GuildMessageC
.thenApply(msg -> ReceivedDiscordMessageImpl.fromWebhook(discordSRV, msg));
} else {
future = jdaFunction
.apply(channel, SendableDiscordMessageUtil.toJDA(message))
.apply(channel, message)
.submit()
.thenApply(msg -> ReceivedDiscordMessageImpl.fromJDA(discordSRV, msg));
}

View File

@ -20,7 +20,7 @@ package com.discordsrv.common.discord.api.entity.channel;
import com.discordsrv.api.discord.entity.channel.DiscordMessageChannel;
import com.discordsrv.common.DiscordSRV;
import net.dv8tion.jda.api.entities.*;
import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel;
import java.util.Objects;

View File

@ -22,9 +22,9 @@ import com.discordsrv.api.discord.entity.channel.DiscordGuildMessageChannel;
import com.discordsrv.api.discord.entity.channel.DiscordThreadChannel;
import com.discordsrv.api.discord.entity.channel.DiscordThreadContainer;
import com.discordsrv.common.DiscordSRV;
import net.dv8tion.jda.api.entities.GuildMessageChannel;
import net.dv8tion.jda.api.entities.IThreadContainer;
import net.dv8tion.jda.api.entities.ThreadChannel;
import net.dv8tion.jda.api.entities.channel.attribute.IThreadContainer;
import net.dv8tion.jda.api.entities.channel.concrete.ThreadChannel;
import net.dv8tion.jda.api.entities.channel.middleman.GuildMessageChannel;
import net.dv8tion.jda.api.requests.restaction.ThreadChannelAction;
import net.dv8tion.jda.api.requests.restaction.pagination.ThreadChannelPaginationAction;
import org.jetbrains.annotations.NotNull;

View File

@ -25,9 +25,10 @@ import com.discordsrv.api.discord.entity.message.SendableDiscordMessage;
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.PrivateChannel;
import net.dv8tion.jda.api.entities.User;
import net.dv8tion.jda.api.requests.restaction.MessageAction;
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 java.io.InputStream;
@ -59,9 +60,9 @@ public class DiscordDMChannelImpl extends AbstractDiscordMessageChannel<PrivateC
throw new IllegalArgumentException("Cannot send webhook messages to DMChannels");
}
MessageAction action = channel.sendMessage(SendableDiscordMessageUtil.toJDA(message));
MessageCreateAction action = channel.sendMessage(SendableDiscordMessageUtil.toJDASend(message));
for (Map.Entry<String, InputStream> entry : attachments.entrySet()) {
action = action.addFile(entry.getValue(), entry.getKey());
action = action.addFiles(FileUpload.fromData(entry.getValue(), entry.getKey()));
}
CompletableFuture<ReceivedDiscordMessage> future = action.submit()
@ -85,7 +86,7 @@ public class DiscordDMChannelImpl extends AbstractDiscordMessageChannel<PrivateC
}
CompletableFuture<ReceivedDiscordMessage> future = channel
.editMessageById(id, SendableDiscordMessageUtil.toJDA(message))
.editMessageById(id, SendableDiscordMessageUtil.toJDAEdit(message))
.submit()
.thenApply(msg -> ReceivedDiscordMessageImpl.fromJDA(discordSRV, msg));

View File

@ -20,7 +20,7 @@ package com.discordsrv.common.discord.api.entity.channel;
import com.discordsrv.api.discord.entity.channel.DiscordNewsChannel;
import com.discordsrv.common.DiscordSRV;
import net.dv8tion.jda.api.entities.NewsChannel;
import net.dv8tion.jda.api.entities.channel.concrete.NewsChannel;
public class DiscordNewsChannelImpl extends AbstractDiscordThreadedGuildMessageChannel<NewsChannel> implements DiscordNewsChannel {

View File

@ -20,7 +20,7 @@ package com.discordsrv.common.discord.api.entity.channel;
import com.discordsrv.api.discord.entity.channel.DiscordTextChannel;
import com.discordsrv.common.DiscordSRV;
import net.dv8tion.jda.api.entities.TextChannel;
import net.dv8tion.jda.api.entities.channel.concrete.TextChannel;
import org.jetbrains.annotations.Nullable;
public class DiscordTextChannelImpl extends AbstractDiscordThreadedGuildMessageChannel<TextChannel> implements DiscordTextChannel {

View File

@ -24,10 +24,10 @@ 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.ChannelType;
import net.dv8tion.jda.api.entities.IThreadContainer;
import net.dv8tion.jda.api.entities.MessageChannel;
import net.dv8tion.jda.api.entities.ThreadChannel;
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;
import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel;
import org.jetbrains.annotations.NotNull;
import java.util.concurrent.CompletableFuture;

View File

@ -67,7 +67,7 @@ public class DiscordInteractionHookImpl implements DiscordInteractionHook {
@Override
public CompletableFuture<ReceivedDiscordMessage> editOriginal(SendableDiscordMessage message) {
return hook.editOriginal(SendableDiscordMessageUtil.toJDA(message)).submit()
return hook.editOriginal(SendableDiscordMessageUtil.toJDAEdit(message)).submit()
.thenApply(msg -> ReceivedDiscordMessageImpl.fromJDA(discordSRV, msg));
}
@ -76,7 +76,7 @@ public class DiscordInteractionHookImpl implements DiscordInteractionHook {
if (!(hook instanceof IReplyCallback)) {
throw new IllegalStateException("This interaction cannot be replied to");
}
return ((IReplyCallback) hook).reply(SendableDiscordMessageUtil.toJDA(message)).submit()
return ((IReplyCallback) hook).reply(SendableDiscordMessageUtil.toJDASend(message)).submit()
.thenApply(hook -> new DiscordInteractionHookImpl(discordSRV, hook));
}
@ -85,7 +85,7 @@ public class DiscordInteractionHookImpl implements DiscordInteractionHook {
if (!(hook instanceof IReplyCallback)) {
throw new IllegalStateException("This interaction cannot be replied to");
}
return ((IReplyCallback) hook).reply(SendableDiscordMessageUtil.toJDA(message)).setEphemeral(true).submit()
return ((IReplyCallback) hook).reply(SendableDiscordMessageUtil.toJDASend(message)).setEphemeral(true).submit()
.thenApply(hook -> new DiscordInteractionHookImpl(discordSRV, hook));
}

View File

@ -23,10 +23,10 @@ import com.discordsrv.api.discord.entity.interaction.component.actionrow.Message
import com.discordsrv.api.discord.entity.message.AllowedMention;
import com.discordsrv.api.discord.entity.message.DiscordMessageEmbed;
import com.discordsrv.api.discord.entity.message.SendableDiscordMessage;
import net.dv8tion.jda.api.MessageBuilder;
import net.dv8tion.jda.api.entities.Message;
import net.dv8tion.jda.api.entities.MessageEmbed;
import net.dv8tion.jda.api.interactions.components.ActionRow;
import net.dv8tion.jda.api.utils.messages.*;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
@ -37,7 +37,8 @@ public final class SendableDiscordMessageUtil {
private SendableDiscordMessageUtil() {}
public static Message toJDA(@NotNull SendableDiscordMessage message) {
@SuppressWarnings("unchecked")
private static <T extends AbstractMessageBuilder<?, ?>> T jdaBuilder(@NotNull SendableDiscordMessage message, T builder) {
List<Message.MentionType> allowedTypes = new ArrayList<>();
List<Long> allowedUsers = new ArrayList<>();
List<Long> allowedRoles = new ArrayList<>();
@ -61,23 +62,38 @@ public final class SendableDiscordMessageUtil {
embeds.add(embed.toJDA());
}
return (T) builder
.setContent(message.getContent().orElse(null))
.setEmbeds(embeds)
.setAllowedMentions(allowedTypes)
.mentionUsers(allowedUsers.stream().mapToLong(l -> l).toArray())
.mentionRoles(allowedRoles.stream().mapToLong(l -> l).toArray());
}
public static MessageCreateData toJDASend(@NotNull SendableDiscordMessage message) {
List<ActionRow> actionRows = new ArrayList<>();
for (MessageActionRow actionRow : message.getActionRows()) {
actionRows.add(actionRow.asJDA());
}
return new MessageBuilder()
.setContent(message.getContent().orElse(null))
.setEmbeds(embeds)
.setAllowedMentions(allowedTypes)
.mentionUsers(allowedUsers.stream().mapToLong(l -> l).toArray())
.mentionRoles(allowedRoles.stream().mapToLong(l -> l).toArray())
.setActionRows(actionRows)
return jdaBuilder(message, new MessageCreateBuilder())
.addComponents(actionRows)
.build();
}
public static MessageEditData toJDAEdit(@NotNull SendableDiscordMessage message) {
List<ActionRow> actionRows = new ArrayList<>();
for (MessageActionRow actionRow : message.getActionRows()) {
actionRows.add(actionRow.asJDA());
}
return jdaBuilder(message, new MessageEditBuilder())
.setComponents(actionRows)
.build();
}
public static WebhookMessageBuilder toWebhook(@NotNull SendableDiscordMessage message) {
return WebhookMessageBuilder.fromJDA(toJDA(message))
return WebhookMessageBuilder.fromJDA(null/*toJDA(message)*/) // TODO: lib update? lib replacement?
.setUsername(message.getWebhookUsername().orElse(null))
.setAvatarUrl(message.getWebhookAvatarUrl().orElse(null));
}

View File

@ -41,20 +41,22 @@ import com.neovisionaries.ws.client.WebSocketFrame;
import net.dv8tion.jda.api.JDA;
import net.dv8tion.jda.api.JDABuilder;
import net.dv8tion.jda.api.entities.*;
import net.dv8tion.jda.api.entities.channel.concrete.PrivateChannel;
import net.dv8tion.jda.api.entities.channel.concrete.TextChannel;
import net.dv8tion.jda.api.events.DisconnectEvent;
import net.dv8tion.jda.api.events.ShutdownEvent;
import net.dv8tion.jda.api.events.StatusChangeEvent;
import net.dv8tion.jda.api.exceptions.ErrorResponseException;
import net.dv8tion.jda.api.exceptions.InvalidTokenException;
import net.dv8tion.jda.api.exceptions.RateLimitedException;
import net.dv8tion.jda.api.requests.*;
import net.dv8tion.jda.api.utils.AllowedMentions;
import net.dv8tion.jda.api.utils.ChunkingFilter;
import net.dv8tion.jda.api.utils.MemberCachePolicy;
import net.dv8tion.jda.api.utils.messages.MessageRequest;
import net.dv8tion.jda.internal.entities.ReceivedMessage;
import net.dv8tion.jda.internal.hooks.EventManagerProxy;
import org.jetbrains.annotations.NotNull;
import javax.security.auth.login.LoginException;
import java.io.InterruptedIOException;
import java.util.*;
import java.util.concurrent.*;
@ -68,7 +70,7 @@ public class JDAConnectionManager implements DiscordConnectionManager {
static {
PRIVILEGED_INTENTS.put(GatewayIntent.GUILD_MEMBERS, "Server Members Intent");
PRIVILEGED_INTENTS.put(GatewayIntent.GUILD_PRESENCES, "Presence Intent");
PRIVILEGED_INTENTS.put(GatewayIntent.GUILD_MESSAGES, "Message Content Intent");
PRIVILEGED_INTENTS.put(GatewayIntent.MESSAGE_CONTENT, "Message Content Intent");
}
private final DiscordSRV discordSRV;
@ -97,7 +99,7 @@ public class JDAConnectionManager implements DiscordConnectionManager {
RestAction.setDefaultFailure(failureCallback);
// Disable all mentions by default for safety
AllowedMentions.setDefaultMentions(Collections.emptyList());
MessageRequest.setDefaultMentions(Collections.emptyList());
discordSRV.eventBus().subscribe(this);
}
@ -276,7 +278,7 @@ public class JDAConnectionManager implements DiscordConnectionManager {
try {
instance = jdaBuilder.build();
} catch (LoginException ignored) {
} catch (InvalidTokenException ignored) {
invalidToken();
} catch (Throwable t) {
discordSRV.logger().error("Could not create JDA instance due to an unknown error", t);

View File

@ -26,9 +26,9 @@ import com.discordsrv.common.config.main.DiscordInviteConfig;
import com.discordsrv.common.module.type.AbstractModule;
import net.dv8tion.jda.api.JDA;
import net.dv8tion.jda.api.Permission;
import net.dv8tion.jda.api.entities.BaseGuildMessageChannel;
import net.dv8tion.jda.api.entities.Guild;
import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.channel.attribute.IInviteContainer;
import java.util.List;
@ -81,7 +81,7 @@ public class DiscordInviteModule extends AbstractModule<DiscordSRV> {
return;
}
BaseGuildMessageChannel channel = guild.getRulesChannel();
IInviteContainer channel = guild.getRulesChannel();
if (channel == null) {
channel = guild.getDefaultChannel();
}

View File

@ -39,9 +39,9 @@ import com.discordsrv.common.config.main.channels.base.BaseChannelConfig;
import com.discordsrv.common.function.OrDefault;
import dev.vankka.mcdiscordreserializer.discord.DiscordSerializer;
import net.dv8tion.jda.api.entities.Guild;
import net.dv8tion.jda.api.entities.GuildChannel;
import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.Role;
import net.dv8tion.jda.api.entities.channel.middleman.GuildChannel;
import net.dv8tion.jda.api.events.channel.ChannelCreateEvent;
import net.dv8tion.jda.api.events.channel.ChannelDeleteEvent;
import net.dv8tion.jda.api.events.channel.update.ChannelUpdateNameEvent;

View File

@ -52,7 +52,7 @@ dependencyResolutionManagement {
library('findbugs-annotations', 'com.google.code.findbugs', 'jsr305').version('3.0.2')
// JDA
library('jda', 'net.dv8tion', 'JDA').version('5.0.0-alpha.13')
library('jda', 'net.dv8tion', 'JDA').version('5.0.0-alpha.19')
library('okhttp', 'com.squareup.okhttp3', 'okhttp').version {
prefer '3.12.13'
reject '[4,)' // Kotlin