From b343df5fde92ea149ced7a47c0f682aeec86f86a Mon Sep 17 00:00:00 2001 From: Suraj Kumar Date: Thu, 23 May 2024 14:51:26 +0100 Subject: [PATCH 1/3] Create builders --- .../CreateGuildFromTemplateBuilder.java | 27 ++++++++++++++ .../builders/CreateGuildTemplateBuilder.java | 31 ++++++++++++++++ .../builders/ModifyGuildTemplateBuilder.java | 37 +++++++++++++++++++ 3 files changed, 95 insertions(+) create mode 100644 api/src/main/java/com/javadiscord/jdi/core/api/builders/CreateGuildFromTemplateBuilder.java create mode 100644 api/src/main/java/com/javadiscord/jdi/core/api/builders/CreateGuildTemplateBuilder.java create mode 100644 api/src/main/java/com/javadiscord/jdi/core/api/builders/ModifyGuildTemplateBuilder.java diff --git a/api/src/main/java/com/javadiscord/jdi/core/api/builders/CreateGuildFromTemplateBuilder.java b/api/src/main/java/com/javadiscord/jdi/core/api/builders/CreateGuildFromTemplateBuilder.java new file mode 100644 index 00000000..16ee3475 --- /dev/null +++ b/api/src/main/java/com/javadiscord/jdi/core/api/builders/CreateGuildFromTemplateBuilder.java @@ -0,0 +1,27 @@ +package com.javadiscord.jdi.core.api.builders; + +import java.util.Optional; + +import com.javadiscord.jdi.internal.api.guild_template.CreateGuildFromTemplateRequest; + +public class CreateGuildFromTemplateBuilder { + private final String templateCode; + private final String name; + private Optional icon; + + public CreateGuildFromTemplateBuilder(String templateCode, String name) { + this.templateCode = templateCode; + this.name = name; + this.icon = Optional.empty(); + } + + public CreateGuildFromTemplateBuilder icon(String icon) { + this.icon = Optional.of(icon); + return this; + } + + public CreateGuildFromTemplateRequest build() { + return new CreateGuildFromTemplateRequest(templateCode, name, icon); + } + +} diff --git a/api/src/main/java/com/javadiscord/jdi/core/api/builders/CreateGuildTemplateBuilder.java b/api/src/main/java/com/javadiscord/jdi/core/api/builders/CreateGuildTemplateBuilder.java new file mode 100644 index 00000000..37cc8a57 --- /dev/null +++ b/api/src/main/java/com/javadiscord/jdi/core/api/builders/CreateGuildTemplateBuilder.java @@ -0,0 +1,31 @@ +package com.javadiscord.jdi.core.api.builders; + +import java.util.Optional; + +import com.javadiscord.jdi.internal.api.guild_template.CreateGuildTemplateRequest; + +public class CreateGuildTemplateBuilder { + private final String name; + private Optional description; + + private long guildId; + + public CreateGuildTemplateBuilder(String name) { + this.name = name; + this.description = Optional.empty(); + } + + public CreateGuildTemplateBuilder description(String description) { + this.description = Optional.of(description); + return this; + } + + public CreateGuildTemplateBuilder guildId(long guildId) { + this.guildId = guildId; + return this; + } + + public CreateGuildTemplateRequest build() { + return new CreateGuildTemplateRequest(guildId, name, description); + } +} diff --git a/api/src/main/java/com/javadiscord/jdi/core/api/builders/ModifyGuildTemplateBuilder.java b/api/src/main/java/com/javadiscord/jdi/core/api/builders/ModifyGuildTemplateBuilder.java new file mode 100644 index 00000000..9f57ff3a --- /dev/null +++ b/api/src/main/java/com/javadiscord/jdi/core/api/builders/ModifyGuildTemplateBuilder.java @@ -0,0 +1,37 @@ +package com.javadiscord.jdi.core.api.builders; + +import java.util.Optional; + +import com.javadiscord.jdi.internal.api.guild_template.ModifyGuildTemplateRequest; + +public class ModifyGuildTemplateBuilder { + private final String templateCode; + private Optional name; + private Optional description; + private long guildId; + + public ModifyGuildTemplateBuilder(String templateCode) { + this.templateCode = templateCode; + this.name = Optional.empty(); + this.description = Optional.empty(); + } + + public ModifyGuildTemplateBuilder name(String name) { + this.name = Optional.of(name); + return this; + } + + public ModifyGuildTemplateBuilder description(String description) { + this.description = Optional.of(description); + return this; + } + + public ModifyGuildTemplateBuilder guildId(long guildId) { + this.guildId = guildId; + return this; + } + + public ModifyGuildTemplateRequest build() { + return new ModifyGuildTemplateRequest(guildId, templateCode, name, description); + } +} From 23b6f8939fb353382d532e1f470cf34e573e450b Mon Sep 17 00:00:00 2001 From: Suraj Kumar Date: Thu, 23 May 2024 14:51:55 +0100 Subject: [PATCH 2/3] Create Guild Template Requests --- .../jdi/core/api/GuildTemplateRequest.java | 59 +++++++++++++++++++ .../CreateGuildFromTemplateRequest.java | 27 +++++++++ .../CreateGuildTemplateRequest.java | 27 +++++++++ .../DeleteGuildTemplateRequest.java | 17 ++++++ .../GetGuildTemplateRequest.java | 14 +++++ .../GetGuildTemplatesRequest.java | 12 ++++ .../ModifyGuildTemplateRequest.java | 28 +++++++++ .../SyncGuildTemplateRequest.java | 17 ++++++ 8 files changed, 201 insertions(+) create mode 100644 api/src/main/java/com/javadiscord/jdi/core/api/GuildTemplateRequest.java create mode 100644 api/src/main/java/com/javadiscord/jdi/internal/api/guild_template/CreateGuildFromTemplateRequest.java create mode 100644 api/src/main/java/com/javadiscord/jdi/internal/api/guild_template/CreateGuildTemplateRequest.java create mode 100644 api/src/main/java/com/javadiscord/jdi/internal/api/guild_template/DeleteGuildTemplateRequest.java create mode 100644 api/src/main/java/com/javadiscord/jdi/internal/api/guild_template/GetGuildTemplateRequest.java create mode 100644 api/src/main/java/com/javadiscord/jdi/internal/api/guild_template/GetGuildTemplatesRequest.java create mode 100644 api/src/main/java/com/javadiscord/jdi/internal/api/guild_template/ModifyGuildTemplateRequest.java create mode 100644 api/src/main/java/com/javadiscord/jdi/internal/api/guild_template/SyncGuildTemplateRequest.java diff --git a/api/src/main/java/com/javadiscord/jdi/core/api/GuildTemplateRequest.java b/api/src/main/java/com/javadiscord/jdi/core/api/GuildTemplateRequest.java new file mode 100644 index 00000000..c439b747 --- /dev/null +++ b/api/src/main/java/com/javadiscord/jdi/core/api/GuildTemplateRequest.java @@ -0,0 +1,59 @@ +package com.javadiscord.jdi.core.api; + +import java.util.List; + +import com.javadiscord.jdi.core.api.builders.CreateGuildFromTemplateBuilder; +import com.javadiscord.jdi.core.api.builders.CreateGuildTemplateBuilder; +import com.javadiscord.jdi.core.api.builders.ModifyGuildTemplateBuilder; +import com.javadiscord.jdi.core.models.guild.Guild; +import com.javadiscord.jdi.core.models.guild_template.GuildTemplate; +import com.javadiscord.jdi.internal.api.guild_template.*; + +public class GuildTemplateRequest { + private final DiscordResponseParser responseParser; + private final long guildId; + + public GuildTemplateRequest(DiscordResponseParser responseParser, long guildId) { + this.responseParser = responseParser; + this.guildId = guildId; + } + + public AsyncResponse createGuildFromTemplate(CreateGuildFromTemplateBuilder builder) { + return responseParser.callAndParse( + Guild.class, builder.build() + ); + } + + public AsyncResponse createGuildTemplate(CreateGuildTemplateBuilder builder) { + return responseParser.callAndParse( + GuildTemplate.class, builder.guildId(guildId).build() + ); + } + + public AsyncResponse deleteGuildTemplate(String templateCode) { + return responseParser.callAndParse( + GuildTemplate.class, new DeleteGuildTemplateRequest(guildId, templateCode) + ); + } + + public AsyncResponse getGuildTemplate(String templateCode) { + return responseParser + .callAndParse(GuildTemplate.class, new GetGuildTemplateRequest(templateCode)); + } + + public AsyncResponse> getGuildTemplates() { + return responseParser + .callAndParseList(GuildTemplate.class, new GetGuildTemplatesRequest(guildId)); + } + + public AsyncResponse modifyGuildTemplate(ModifyGuildTemplateBuilder builder) { + return responseParser.callAndParse( + GuildTemplate.class, builder.guildId(guildId).build() + ); + } + + public AsyncResponse syncGuildTemplate(String templateCode) { + return responseParser + .callAndParse(GuildTemplate.class, new SyncGuildTemplateRequest(guildId, templateCode)); + } +} diff --git a/api/src/main/java/com/javadiscord/jdi/internal/api/guild_template/CreateGuildFromTemplateRequest.java b/api/src/main/java/com/javadiscord/jdi/internal/api/guild_template/CreateGuildFromTemplateRequest.java new file mode 100644 index 00000000..078e7a6a --- /dev/null +++ b/api/src/main/java/com/javadiscord/jdi/internal/api/guild_template/CreateGuildFromTemplateRequest.java @@ -0,0 +1,27 @@ +package com.javadiscord.jdi.internal.api.guild_template; + +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; + +import com.javadiscord.jdi.internal.api.DiscordRequest; +import com.javadiscord.jdi.internal.api.DiscordRequestBuilder; + +public record CreateGuildFromTemplateRequest( + String templateCode, + String name, + Optional icon +) implements DiscordRequest { + + @Override + public DiscordRequestBuilder create() { + Map body = new HashMap<>(); + body.put("name", name); + icon.ifPresent(it -> body.put("icon", it)); + + return new DiscordRequestBuilder() + .post() + .path("/guilds/templates/%s".formatted(templateCode)) + .body(body); + } +} diff --git a/api/src/main/java/com/javadiscord/jdi/internal/api/guild_template/CreateGuildTemplateRequest.java b/api/src/main/java/com/javadiscord/jdi/internal/api/guild_template/CreateGuildTemplateRequest.java new file mode 100644 index 00000000..5a1a2f43 --- /dev/null +++ b/api/src/main/java/com/javadiscord/jdi/internal/api/guild_template/CreateGuildTemplateRequest.java @@ -0,0 +1,27 @@ +package com.javadiscord.jdi.internal.api.guild_template; + +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; + +import com.javadiscord.jdi.internal.api.DiscordRequest; +import com.javadiscord.jdi.internal.api.DiscordRequestBuilder; + +public record CreateGuildTemplateRequest( + long guildId, + String name, + Optional description +) implements DiscordRequest { + + @Override + public DiscordRequestBuilder create() { + Map body = new HashMap<>(); + body.put("name", name); + description.ifPresent(d -> body.put("description", d)); + + return new DiscordRequestBuilder() + .post() + .path("/guilds/%s/templates".formatted(guildId)) + .body(body); + } +} diff --git a/api/src/main/java/com/javadiscord/jdi/internal/api/guild_template/DeleteGuildTemplateRequest.java b/api/src/main/java/com/javadiscord/jdi/internal/api/guild_template/DeleteGuildTemplateRequest.java new file mode 100644 index 00000000..292ac93a --- /dev/null +++ b/api/src/main/java/com/javadiscord/jdi/internal/api/guild_template/DeleteGuildTemplateRequest.java @@ -0,0 +1,17 @@ +package com.javadiscord.jdi.internal.api.guild_template; + +import com.javadiscord.jdi.internal.api.DiscordRequest; +import com.javadiscord.jdi.internal.api.DiscordRequestBuilder; + +public record DeleteGuildTemplateRequest( + long guildId, + String templateCode +) implements DiscordRequest { + + @Override + public DiscordRequestBuilder create() { + return new DiscordRequestBuilder() + .delete() + .path("/guilds/%s/templates/%s".formatted(guildId, templateCode)); + } +} diff --git a/api/src/main/java/com/javadiscord/jdi/internal/api/guild_template/GetGuildTemplateRequest.java b/api/src/main/java/com/javadiscord/jdi/internal/api/guild_template/GetGuildTemplateRequest.java new file mode 100644 index 00000000..5ca506eb --- /dev/null +++ b/api/src/main/java/com/javadiscord/jdi/internal/api/guild_template/GetGuildTemplateRequest.java @@ -0,0 +1,14 @@ +package com.javadiscord.jdi.internal.api.guild_template; + +import com.javadiscord.jdi.internal.api.DiscordRequest; +import com.javadiscord.jdi.internal.api.DiscordRequestBuilder; + +public record GetGuildTemplateRequest(String templateCode) implements DiscordRequest { + + @Override + public DiscordRequestBuilder create() { + return new DiscordRequestBuilder() + .get() + .path("/guilds/templates/%s".formatted(templateCode)); + } +} diff --git a/api/src/main/java/com/javadiscord/jdi/internal/api/guild_template/GetGuildTemplatesRequest.java b/api/src/main/java/com/javadiscord/jdi/internal/api/guild_template/GetGuildTemplatesRequest.java new file mode 100644 index 00000000..b2db23bd --- /dev/null +++ b/api/src/main/java/com/javadiscord/jdi/internal/api/guild_template/GetGuildTemplatesRequest.java @@ -0,0 +1,12 @@ +package com.javadiscord.jdi.internal.api.guild_template; + +import com.javadiscord.jdi.internal.api.DiscordRequest; +import com.javadiscord.jdi.internal.api.DiscordRequestBuilder; + +public record GetGuildTemplatesRequest(long guildId) implements DiscordRequest { + + @Override + public DiscordRequestBuilder create() { + return new DiscordRequestBuilder().get().path("/guilds/%s/templates".formatted(guildId)); + } +} diff --git a/api/src/main/java/com/javadiscord/jdi/internal/api/guild_template/ModifyGuildTemplateRequest.java b/api/src/main/java/com/javadiscord/jdi/internal/api/guild_template/ModifyGuildTemplateRequest.java new file mode 100644 index 00000000..0d4e1363 --- /dev/null +++ b/api/src/main/java/com/javadiscord/jdi/internal/api/guild_template/ModifyGuildTemplateRequest.java @@ -0,0 +1,28 @@ +package com.javadiscord.jdi.internal.api.guild_template; + +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; + +import com.javadiscord.jdi.internal.api.DiscordRequest; +import com.javadiscord.jdi.internal.api.DiscordRequestBuilder; + +public record ModifyGuildTemplateRequest( + long guildId, + String templateCode, + Optional name, + Optional description +) implements DiscordRequest { + + @Override + public DiscordRequestBuilder create() { + Map body = new HashMap<>(); + name.ifPresent(n -> body.put("name", n)); + description.ifPresent(desc -> body.put("description", desc)); + + return new DiscordRequestBuilder() + .patch() + .path("/guilds/%s/templates/%s".formatted(guildId, templateCode)) + .body(body); + } +} diff --git a/api/src/main/java/com/javadiscord/jdi/internal/api/guild_template/SyncGuildTemplateRequest.java b/api/src/main/java/com/javadiscord/jdi/internal/api/guild_template/SyncGuildTemplateRequest.java new file mode 100644 index 00000000..1c3e07ac --- /dev/null +++ b/api/src/main/java/com/javadiscord/jdi/internal/api/guild_template/SyncGuildTemplateRequest.java @@ -0,0 +1,17 @@ +package com.javadiscord.jdi.internal.api.guild_template; + +import com.javadiscord.jdi.internal.api.DiscordRequest; +import com.javadiscord.jdi.internal.api.DiscordRequestBuilder; + +public record SyncGuildTemplateRequest( + long guildId, + String templateCode +) implements DiscordRequest { + + @Override + public DiscordRequestBuilder create() { + return new DiscordRequestBuilder() + .put() + .path("/guilds/%s/templates/%s".formatted(guildId, templateCode)); + } +} From b936058acccef4f6784fdc06580b300b7f853cd9 Mon Sep 17 00:00:00 2001 From: Suraj Kumar Date: Thu, 23 May 2024 14:52:10 +0100 Subject: [PATCH 3/3] Add entry point to Guild --- core/src/main/java/com/javadiscord/jdi/core/Guild.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/core/src/main/java/com/javadiscord/jdi/core/Guild.java b/core/src/main/java/com/javadiscord/jdi/core/Guild.java index fa4adf0d..5b684774 100644 --- a/core/src/main/java/com/javadiscord/jdi/core/Guild.java +++ b/core/src/main/java/com/javadiscord/jdi/core/Guild.java @@ -16,6 +16,7 @@ public class Guild { private final EmojiRequest emojiRequest; private final GuildRequest guildRequest; private final GuildScheduledEventRequest guildScheduledEventRequest; + private final GuildTemplateRequest guildTemplateRequest; private final InviteRequest inviteRequest; private final PollRequest pollRequest; private final StageRequest stageRequest; @@ -43,6 +44,7 @@ public Guild(com.javadiscord.jdi.core.models.guild.Guild guild, Cache cache, Dis this.guildRequest = new GuildRequest(discordResponseParser, guildId); this.guildScheduledEventRequest = new GuildScheduledEventRequest(discordResponseParser, guildId); + this.guildTemplateRequest = new GuildTemplateRequest(discordResponseParser, guildId); this.inviteRequest = new InviteRequest(discordResponseParser, guildId); this.pollRequest = new PollRequest(discordResponseParser, guildId); this.stageRequest = new StageRequest(discordResponseParser, guildId); @@ -95,6 +97,10 @@ public GuildScheduledEventRequest scheduledEvent() { return guildScheduledEventRequest; } + public GuildTemplateRequest guildTemplate() { + return guildTemplateRequest; + } + public InviteRequest invite() { return inviteRequest; }