diff --git a/src/main/java/net/dv8tion/jda/api/interactions/components/ActionRow.java b/src/main/java/net/dv8tion/jda/api/interactions/components/ActionRow.java index efc958deb5..3ca53aa8fc 100644 --- a/src/main/java/net/dv8tion/jda/api/interactions/components/ActionRow.java +++ b/src/main/java/net/dv8tion/jda/api/interactions/components/ActionRow.java @@ -269,6 +269,13 @@ public ActionRow asEnabled() return withDisabled(false); } + @Nonnull + @Override + public ActionRow createCopy() + { + return ActionRow.of(components); + } + @Nonnull @Override public Component.Type getType() diff --git a/src/main/java/net/dv8tion/jda/api/interactions/components/LayoutComponent.java b/src/main/java/net/dv8tion/jda/api/interactions/components/LayoutComponent.java index a08ad51435..69fd15f0e9 100644 --- a/src/main/java/net/dv8tion/jda/api/interactions/components/LayoutComponent.java +++ b/src/main/java/net/dv8tion/jda/api/interactions/components/LayoutComponent.java @@ -190,6 +190,15 @@ default boolean isValid() return true; } + /** + * Creates a copy of this {@link LayoutComponent}. + *
This does not create copies of the contained components. + * + * @return A copy of this {@link LayoutComponent} + */ + @Nonnull + LayoutComponent createCopy(); + /** * Find and replace a component in this layout. *
This will locate and replace the existing component with the specified ID. If you provide null it will be removed instead. diff --git a/src/main/java/net/dv8tion/jda/api/utils/FileUpload.java b/src/main/java/net/dv8tion/jda/api/utils/FileUpload.java index db027de307..e5ee426d30 100644 --- a/src/main/java/net/dv8tion/jda/api/utils/FileUpload.java +++ b/src/main/java/net/dv8tion/jda/api/utils/FileUpload.java @@ -301,6 +301,17 @@ public String getName() return name; } + /** + * The description for the file. + * + * @return The description + */ + @Nullable + public String getDescription() + { + return description; + } + /** * The {@link InputStream} representing the data to upload as a file. * diff --git a/src/main/java/net/dv8tion/jda/api/utils/messages/MessageCreateRequest.java b/src/main/java/net/dv8tion/jda/api/utils/messages/MessageCreateRequest.java index 79a4a03bf3..18d49fc0d7 100644 --- a/src/main/java/net/dv8tion/jda/api/utils/messages/MessageCreateRequest.java +++ b/src/main/java/net/dv8tion/jda/api/utils/messages/MessageCreateRequest.java @@ -325,6 +325,10 @@ default R addFiles(@Nonnull FileUpload... files) default R applyData(@Nonnull MessageCreateData data) { Checks.notNull(data, "MessageCreateData"); + + final List layoutComponents = data.getComponents().stream() + .map(LayoutComponent::createCopy) + .collect(Collectors.toList()); return setContent(data.getContent()) .setAllowedMentions(data.getAllowedMentions()) .mentionUsers(data.getMentionedUsers()) @@ -332,7 +336,7 @@ default R applyData(@Nonnull MessageCreateData data) .mentionRepliedUser(data.isMentionRepliedUser()) .setEmbeds(data.getEmbeds()) .setTTS(data.isTTS()) - .setComponents(data.getComponents()) + .setComponents(layoutComponents) .setFiles(data.getFiles()); } @@ -377,7 +381,12 @@ default R applyEditData(@Nonnull MessageEditData data) if (data.isSet(MessageEditBuilder.EMBEDS)) setEmbeds(data.getEmbeds()); if (data.isSet(MessageEditBuilder.COMPONENTS)) - setComponents(data.getComponents()); + { + final List layoutComponents = data.getComponents().stream() + .map(LayoutComponent::createCopy) + .collect(Collectors.toList()); + setComponents(layoutComponents); + } if (data.isSet(MessageEditBuilder.ATTACHMENTS)) setFiles(data.getFiles()); if (data.isSet(MessageEditBuilder.MENTIONS)) diff --git a/src/main/java/net/dv8tion/jda/api/utils/messages/MessageEditBuilder.java b/src/main/java/net/dv8tion/jda/api/utils/messages/MessageEditBuilder.java index d12536be80..e7418c724f 100644 --- a/src/main/java/net/dv8tion/jda/api/utils/messages/MessageEditBuilder.java +++ b/src/main/java/net/dv8tion/jda/api/utils/messages/MessageEditBuilder.java @@ -32,6 +32,7 @@ import java.util.Collection; import java.util.Collections; import java.util.List; +import java.util.stream.Collectors; /** * Builder specialized for building a {@link MessageEditData}. @@ -247,7 +248,12 @@ public MessageEditBuilder applyData(@Nonnull MessageEditData data) if (data.isSet(EMBEDS)) this.setEmbeds(data.getEmbeds()); if (data.isSet(COMPONENTS)) - this.setComponents(data.getComponents()); + { + final List layoutComponents = data.getComponents().stream() + .map(LayoutComponent::createCopy) + .collect(Collectors.toList()); + this.setComponents(layoutComponents); + } if (data.isSet(ATTACHMENTS)) this.setAttachments(data.getAttachments()); if (data.isSet(MENTIONS)) diff --git a/src/main/java/net/dv8tion/jda/api/utils/messages/MessageEditRequest.java b/src/main/java/net/dv8tion/jda/api/utils/messages/MessageEditRequest.java index 640876e2a2..6a7368a859 100644 --- a/src/main/java/net/dv8tion/jda/api/utils/messages/MessageEditRequest.java +++ b/src/main/java/net/dv8tion/jda/api/utils/messages/MessageEditRequest.java @@ -17,6 +17,7 @@ package net.dv8tion.jda.api.utils.messages; import net.dv8tion.jda.api.entities.Message; +import net.dv8tion.jda.api.interactions.components.LayoutComponent; import net.dv8tion.jda.api.requests.RestAction; import net.dv8tion.jda.api.utils.AttachedFile; import net.dv8tion.jda.api.utils.FileUpload; @@ -29,6 +30,8 @@ import java.util.Arrays; import java.util.Collection; import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; /** * Specialized abstraction of setters for editing existing messages throughout the API. @@ -205,6 +208,9 @@ default R setFiles(@Nullable Collection files) @Nonnull default R applyCreateData(@Nonnull MessageCreateData data) { + final List layoutComponents = data.getComponents().stream() + .map(LayoutComponent::createCopy) + .collect(Collectors.toList()); return setReplace(true) .setContent(data.getContent()) .setAllowedMentions(data.getAllowedMentions()) @@ -212,7 +218,7 @@ default R applyCreateData(@Nonnull MessageCreateData data) .mentionRoles(data.getMentionedRoles()) .mentionRepliedUser(data.isMentionRepliedUser()) .setEmbeds(data.getEmbeds()) - .setComponents(data.getComponents()) + .setComponents(layoutComponents) .setFiles(data.getFiles()); }