From b07e4d3d176f8ac19ae51c7b65791eb8d44eaa56 Mon Sep 17 00:00:00 2001 From: freya02 <41875020+freya022@users.noreply.github.com> Date: Thu, 1 Sep 2022 15:22:49 +0200 Subject: [PATCH 1/7] `MessageCreateRequest#applyData`: create copies of layout components & files --- .../jda/api/interactions/components/ActionRow.java | 7 +++++++ .../api/interactions/components/LayoutComponent.java | 9 +++++++++ .../java/net/dv8tion/jda/api/utils/FileUpload.java | 10 ++++++++++ .../jda/api/utils/messages/MessageCreateRequest.java | 11 +++++++++-- 4 files changed, 35 insertions(+), 2 deletions(-) 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 b50a9dd846..aa0f0427de 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 @@ -262,6 +262,13 @@ public ActionRow asEnabled() return withDisabled(false); } + @Nonnull + @Override + public LayoutComponent 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 d87963f7af..f83cc78128 100644 --- a/src/main/java/net/dv8tion/jda/api/utils/FileUpload.java +++ b/src/main/java/net/dv8tion/jda/api/utils/FileUpload.java @@ -300,6 +300,16 @@ public String getName() return name; } + /** + * The description for the file. + * + * @return The description + */ + 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 e673d30028..d00590ae45 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,11 +325,18 @@ 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()); + final List files = data.getFiles().stream() + .map(f -> FileUpload.fromData(f.getData(), f.getName()).setDescription(f.getDescription())) + .collect(Collectors.toList()); return setContent(data.getContent()) .setEmbeds(data.getEmbeds()) .setTTS(data.isTTS()) - .setComponents(data.getComponents()) - .setFiles(data.getFiles()); + .setComponents(layoutComponents) + .setFiles(files); } @Nonnull From 81fc096fb87ca810e4081d4713955c848342cb47 Mon Sep 17 00:00:00 2001 From: freya02 <41875020+freya022@users.noreply.github.com> Date: Sat, 5 Nov 2022 20:53:08 +0100 Subject: [PATCH 2/7] Don't copy files --- .../jda/api/utils/messages/MessageCreateRequest.java | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) 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 d00590ae45..0c7ff6725b 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 @@ -313,6 +313,8 @@ default R addFiles(@Nonnull FileUpload... files) /** * Applies the provided {@link MessageCreateData} to this request. * + *

Note that files will not be copied. + * * @param data * The message create data to apply * @@ -329,14 +331,10 @@ default R applyData(@Nonnull MessageCreateData data) final List layoutComponents = data.getComponents().stream() .map(LayoutComponent::createCopy) .collect(Collectors.toList()); - final List files = data.getFiles().stream() - .map(f -> FileUpload.fromData(f.getData(), f.getName()).setDescription(f.getDescription())) - .collect(Collectors.toList()); return setContent(data.getContent()) .setEmbeds(data.getEmbeds()) .setTTS(data.isTTS()) - .setComponents(layoutComponents) - .setFiles(files); + .setComponents(layoutComponents); } @Nonnull From d9363bc35392555d528aa4f4ea9f4c649442ca0c Mon Sep 17 00:00:00 2001 From: freya02 <41875020+freya022@users.noreply.github.com> Date: Sun, 6 Nov 2022 15:10:15 +0100 Subject: [PATCH 3/7] Update src/main/java/net/dv8tion/jda/api/utils/FileUpload.java MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Florian Spieß --- src/main/java/net/dv8tion/jda/api/utils/FileUpload.java | 1 + 1 file changed, 1 insertion(+) 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 1403801566..e5ee426d30 100644 --- a/src/main/java/net/dv8tion/jda/api/utils/FileUpload.java +++ b/src/main/java/net/dv8tion/jda/api/utils/FileUpload.java @@ -306,6 +306,7 @@ public String getName() * * @return The description */ + @Nullable public String getDescription() { return description; From 870f8dba42e6ea6c841dbeee52b54a0af9375963 Mon Sep 17 00:00:00 2001 From: freya02 <41875020+freya022@users.noreply.github.com> Date: Sun, 6 Nov 2022 15:10:22 +0100 Subject: [PATCH 4/7] Update src/main/java/net/dv8tion/jda/api/interactions/components/ActionRow.java MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Florian Spieß --- .../net/dv8tion/jda/api/interactions/components/ActionRow.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 4af2c42d0e..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 @@ -271,7 +271,7 @@ public ActionRow asEnabled() @Nonnull @Override - public LayoutComponent createCopy() + public ActionRow createCopy() { return ActionRow.of(components); } From 1d387911ca179606bdd0bc72d963f34cc4b0537a Mon Sep 17 00:00:00 2001 From: freya02 <41875020+freya022@users.noreply.github.com> Date: Sun, 6 Nov 2022 15:13:11 +0100 Subject: [PATCH 5/7] Add back #setFiles idk --- .../dv8tion/jda/api/utils/messages/MessageCreateRequest.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) 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 5473736343..c699cc58b1 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 @@ -313,7 +313,7 @@ default R addFiles(@Nonnull FileUpload... files) /** * Applies the provided {@link MessageCreateData} to this request. * - *

Note that files will not be copied. + *

Note that files will be copied but the input streams themselves can only be consumed once. * * @param data * The message create data to apply @@ -338,7 +338,8 @@ default R applyData(@Nonnull MessageCreateData data) .mentionRepliedUser(data.isMentionRepliedUser()) .setEmbeds(data.getEmbeds()) .setTTS(data.isTTS()) - .setComponents(layoutComponents); + .setComponents(layoutComponents) + .setFiles(data.getFiles()); } @Nonnull From f5d1fd4675c2646a4b3143360e21bd70edbe8384 Mon Sep 17 00:00:00 2001 From: freya02 <41875020+freya022@users.noreply.github.com> Date: Sun, 6 Nov 2022 15:16:30 +0100 Subject: [PATCH 6/7] Copy components in other copy methods --- .../jda/api/utils/messages/MessageCreateRequest.java | 7 ++++++- .../jda/api/utils/messages/MessageEditBuilder.java | 8 +++++++- .../jda/api/utils/messages/MessageEditRequest.java | 8 +++++++- 3 files changed, 20 insertions(+), 3 deletions(-) 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 c699cc58b1..43e1e3f727 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 @@ -383,7 +383,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()); } From 0366474e4097a260182d4385fe40483ae0b1c1ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20Spie=C3=9F?= Date: Sun, 6 Nov 2022 15:24:30 +0100 Subject: [PATCH 7/7] Update src/main/java/net/dv8tion/jda/api/utils/messages/MessageCreateRequest.java --- .../dv8tion/jda/api/utils/messages/MessageCreateRequest.java | 2 -- 1 file changed, 2 deletions(-) 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 43e1e3f727..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 @@ -313,8 +313,6 @@ default R addFiles(@Nonnull FileUpload... files) /** * Applies the provided {@link MessageCreateData} to this request. * - *

Note that files will be copied but the input streams themselves can only be consumed once. - * * @param data * The message create data to apply *