From bfa4960cfd4b4f3b04dd5c4db15d04e78f4edcb6 Mon Sep 17 00:00:00 2001 From: Pedro <3602279+Doc94@users.noreply.github.com> Date: Sun, 9 Apr 2023 11:43:41 -0400 Subject: [PATCH] Implement structure for Onboarding data (#141) * Implement structure for Onboarding data * Rename OnboardingData::defaultChannelsIds to OnboardingData::defaultChannelIds * Add tests --- .../discordjson/json/OnboardingData.java | 29 ++++++++++ .../json/OnboardingPromptData.java | 35 ++++++++++++ .../json/OnboardingPromptOptionData.java | 34 ++++++++++++ .../json/rest/RestDeserializationTest.java | 6 +++ .../rest/GuildOnboardingDataResponse.json | 53 +++++++++++++++++++ 5 files changed, 157 insertions(+) create mode 100644 src/main/java/discord4j/discordjson/json/OnboardingData.java create mode 100644 src/main/java/discord4j/discordjson/json/OnboardingPromptData.java create mode 100644 src/main/java/discord4j/discordjson/json/OnboardingPromptOptionData.java create mode 100644 src/test/resources/rest/GuildOnboardingDataResponse.json diff --git a/src/main/java/discord4j/discordjson/json/OnboardingData.java b/src/main/java/discord4j/discordjson/json/OnboardingData.java new file mode 100644 index 00000000..c7b073f5 --- /dev/null +++ b/src/main/java/discord4j/discordjson/json/OnboardingData.java @@ -0,0 +1,29 @@ +package discord4j.discordjson.json; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import discord4j.discordjson.Id; +import java.util.List; +import org.immutables.value.Value; + +@Value.Immutable +@JsonSerialize(as = ImmutableOnboardingData.class) +@JsonDeserialize(as = ImmutableOnboardingData.class) +public interface OnboardingData { + + static ImmutableOnboardingData.Builder builder() { + return ImmutableOnboardingData.builder(); + } + + @JsonProperty("guild_id") + Id guildId(); + + List prompts(); + + @JsonProperty("default_channel_ids") + List defaultChannelIds(); + + boolean enabled(); + +} diff --git a/src/main/java/discord4j/discordjson/json/OnboardingPromptData.java b/src/main/java/discord4j/discordjson/json/OnboardingPromptData.java new file mode 100644 index 00000000..b63faa7c --- /dev/null +++ b/src/main/java/discord4j/discordjson/json/OnboardingPromptData.java @@ -0,0 +1,35 @@ +package discord4j.discordjson.json; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import discord4j.discordjson.Id; +import java.util.List; +import org.immutables.value.Value; + +@Value.Immutable +@JsonSerialize(as = ImmutableOnboardingPromptData.class) +@JsonDeserialize(as = ImmutableOnboardingPromptData.class) +public interface OnboardingPromptData { + + static ImmutableOnboardingPromptData.Builder builder() { + return ImmutableOnboardingPromptData.builder(); + } + + Id id(); + + int type(); + + List options(); + + String title(); + + @JsonProperty("single_select") + boolean singleSelect(); + + boolean required(); + + @JsonProperty("in_onboarding") + boolean inOnboarding(); + +} diff --git a/src/main/java/discord4j/discordjson/json/OnboardingPromptOptionData.java b/src/main/java/discord4j/discordjson/json/OnboardingPromptOptionData.java new file mode 100644 index 00000000..7804e541 --- /dev/null +++ b/src/main/java/discord4j/discordjson/json/OnboardingPromptOptionData.java @@ -0,0 +1,34 @@ +package discord4j.discordjson.json; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import discord4j.discordjson.Id; +import java.util.List; +import java.util.Optional; +import org.immutables.value.Value; + +@Value.Immutable +@JsonSerialize(as = ImmutableOnboardingPromptOptionData.class) +@JsonDeserialize(as = ImmutableOnboardingPromptOptionData.class) +public interface OnboardingPromptOptionData { + + static ImmutableOnboardingPromptOptionData.Builder builder() { + return ImmutableOnboardingPromptOptionData.builder(); + } + + Id id(); + + @JsonProperty("channel_ids") + List channelsIds(); + + @JsonProperty("role_ids") + List rolesIds(); + + EmojiData emoji(); + + String title(); + + Optional description(); + +} diff --git a/src/test/java/discord4j/discordjson/json/rest/RestDeserializationTest.java b/src/test/java/discord4j/discordjson/json/rest/RestDeserializationTest.java index 0867ed0d..37c00374 100644 --- a/src/test/java/discord4j/discordjson/json/rest/RestDeserializationTest.java +++ b/src/test/java/discord4j/discordjson/json/rest/RestDeserializationTest.java @@ -196,4 +196,10 @@ public void readApplicationCommandData() throws IOException { ApplicationCommandData[] data = read("/rest/ApplicationCommandData.json", ApplicationCommandData[].class); log.info("{}", Arrays.asList(data)); } + + @Test + public void readGuildOnboardingData() throws IOException { + OnboardingData data = read("/rest/GuildOnboardingDataResponse.json", OnboardingData.class); + log.info("{}", data); + } } diff --git a/src/test/resources/rest/GuildOnboardingDataResponse.json b/src/test/resources/rest/GuildOnboardingDataResponse.json new file mode 100644 index 00000000..4a88b826 --- /dev/null +++ b/src/test/resources/rest/GuildOnboardingDataResponse.json @@ -0,0 +1,53 @@ +{ + "guild_id": "960007075288915998", + "prompts": [ + { + "id": "1067461047608422473", + "title": "What do you want to do in this community?", + "options": [ + { + "id": "1067461047608422476", + "title": "Chat with Friends", + "description": "", + "emoji": { + "id": "1070002302032826408", + "name": "chat", + "animated": false + }, + "role_ids": [], + "channel_ids": [ + "962007075288916001" + ] + }, + { + "id": "1070004843541954678", + "title": "Get Gud", + "description": "We have excellent teachers!", + "emoji": { + "id": null, + "name": "😀", + "animated": false + }, + "role_ids": [ + "982014491980083211" + ], + "channel_ids": [] + } + ], + "single_select": false, + "required": false, + "in_onboarding": true, + "type": 0 + } + ], + "default_channel_ids": [ + "998678771706110023", + "998678693058719784", + "1070008122577518632", + "998678764340912138", + "998678704446263309", + "998678683592171602", + "998678699715067986" + ], + "enabled": true +}