Skip to content

Commit 80afa81

Browse files
authored
81 implement guild template api (#122)
1 parent 1b7d23f commit 80afa81

12 files changed

+302
-0
lines changed
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package com.javadiscord.jdi.core.api;
2+
3+
import java.util.List;
4+
5+
import com.javadiscord.jdi.core.api.builders.CreateGuildFromTemplateBuilder;
6+
import com.javadiscord.jdi.core.api.builders.CreateGuildTemplateBuilder;
7+
import com.javadiscord.jdi.core.api.builders.ModifyGuildTemplateBuilder;
8+
import com.javadiscord.jdi.core.models.guild.Guild;
9+
import com.javadiscord.jdi.core.models.guild_template.GuildTemplate;
10+
import com.javadiscord.jdi.internal.api.guild_template.*;
11+
12+
public class GuildTemplateRequest {
13+
private final DiscordResponseParser responseParser;
14+
private final long guildId;
15+
16+
public GuildTemplateRequest(DiscordResponseParser responseParser, long guildId) {
17+
this.responseParser = responseParser;
18+
this.guildId = guildId;
19+
}
20+
21+
public AsyncResponse<Guild> createGuildFromTemplate(CreateGuildFromTemplateBuilder builder) {
22+
return responseParser.callAndParse(
23+
Guild.class, builder.build()
24+
);
25+
}
26+
27+
public AsyncResponse<GuildTemplate> createGuildTemplate(CreateGuildTemplateBuilder builder) {
28+
return responseParser.callAndParse(
29+
GuildTemplate.class, builder.guildId(guildId).build()
30+
);
31+
}
32+
33+
public AsyncResponse<GuildTemplate> deleteGuildTemplate(String templateCode) {
34+
return responseParser.callAndParse(
35+
GuildTemplate.class, new DeleteGuildTemplateRequest(guildId, templateCode)
36+
);
37+
}
38+
39+
public AsyncResponse<GuildTemplate> getGuildTemplate(String templateCode) {
40+
return responseParser
41+
.callAndParse(GuildTemplate.class, new GetGuildTemplateRequest(templateCode));
42+
}
43+
44+
public AsyncResponse<List<GuildTemplate>> getGuildTemplates() {
45+
return responseParser
46+
.callAndParseList(GuildTemplate.class, new GetGuildTemplatesRequest(guildId));
47+
}
48+
49+
public AsyncResponse<GuildTemplate> modifyGuildTemplate(ModifyGuildTemplateBuilder builder) {
50+
return responseParser.callAndParse(
51+
GuildTemplate.class, builder.guildId(guildId).build()
52+
);
53+
}
54+
55+
public AsyncResponse<GuildTemplate> syncGuildTemplate(String templateCode) {
56+
return responseParser
57+
.callAndParse(GuildTemplate.class, new SyncGuildTemplateRequest(guildId, templateCode));
58+
}
59+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package com.javadiscord.jdi.core.api.builders;
2+
3+
import java.util.Optional;
4+
5+
import com.javadiscord.jdi.internal.api.guild_template.CreateGuildFromTemplateRequest;
6+
7+
public class CreateGuildFromTemplateBuilder {
8+
private final String templateCode;
9+
private final String name;
10+
private Optional<String> icon;
11+
12+
public CreateGuildFromTemplateBuilder(String templateCode, String name) {
13+
this.templateCode = templateCode;
14+
this.name = name;
15+
this.icon = Optional.empty();
16+
}
17+
18+
public CreateGuildFromTemplateBuilder icon(String icon) {
19+
this.icon = Optional.of(icon);
20+
return this;
21+
}
22+
23+
public CreateGuildFromTemplateRequest build() {
24+
return new CreateGuildFromTemplateRequest(templateCode, name, icon);
25+
}
26+
27+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package com.javadiscord.jdi.core.api.builders;
2+
3+
import java.util.Optional;
4+
5+
import com.javadiscord.jdi.internal.api.guild_template.CreateGuildTemplateRequest;
6+
7+
public class CreateGuildTemplateBuilder {
8+
private final String name;
9+
private Optional<String> description;
10+
11+
private long guildId;
12+
13+
public CreateGuildTemplateBuilder(String name) {
14+
this.name = name;
15+
this.description = Optional.empty();
16+
}
17+
18+
public CreateGuildTemplateBuilder description(String description) {
19+
this.description = Optional.of(description);
20+
return this;
21+
}
22+
23+
public CreateGuildTemplateBuilder guildId(long guildId) {
24+
this.guildId = guildId;
25+
return this;
26+
}
27+
28+
public CreateGuildTemplateRequest build() {
29+
return new CreateGuildTemplateRequest(guildId, name, description);
30+
}
31+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package com.javadiscord.jdi.core.api.builders;
2+
3+
import java.util.Optional;
4+
5+
import com.javadiscord.jdi.internal.api.guild_template.ModifyGuildTemplateRequest;
6+
7+
public class ModifyGuildTemplateBuilder {
8+
private final String templateCode;
9+
private Optional<String> name;
10+
private Optional<String> description;
11+
private long guildId;
12+
13+
public ModifyGuildTemplateBuilder(String templateCode) {
14+
this.templateCode = templateCode;
15+
this.name = Optional.empty();
16+
this.description = Optional.empty();
17+
}
18+
19+
public ModifyGuildTemplateBuilder name(String name) {
20+
this.name = Optional.of(name);
21+
return this;
22+
}
23+
24+
public ModifyGuildTemplateBuilder description(String description) {
25+
this.description = Optional.of(description);
26+
return this;
27+
}
28+
29+
public ModifyGuildTemplateBuilder guildId(long guildId) {
30+
this.guildId = guildId;
31+
return this;
32+
}
33+
34+
public ModifyGuildTemplateRequest build() {
35+
return new ModifyGuildTemplateRequest(guildId, templateCode, name, description);
36+
}
37+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package com.javadiscord.jdi.internal.api.guild_template;
2+
3+
import java.util.HashMap;
4+
import java.util.Map;
5+
import java.util.Optional;
6+
7+
import com.javadiscord.jdi.internal.api.DiscordRequest;
8+
import com.javadiscord.jdi.internal.api.DiscordRequestBuilder;
9+
10+
public record CreateGuildFromTemplateRequest(
11+
String templateCode,
12+
String name,
13+
Optional<String> icon
14+
) implements DiscordRequest {
15+
16+
@Override
17+
public DiscordRequestBuilder create() {
18+
Map<String, String> body = new HashMap<>();
19+
body.put("name", name);
20+
icon.ifPresent(it -> body.put("icon", it));
21+
22+
return new DiscordRequestBuilder()
23+
.post()
24+
.path("/guilds/templates/%s".formatted(templateCode))
25+
.body(body);
26+
}
27+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package com.javadiscord.jdi.internal.api.guild_template;
2+
3+
import java.util.HashMap;
4+
import java.util.Map;
5+
import java.util.Optional;
6+
7+
import com.javadiscord.jdi.internal.api.DiscordRequest;
8+
import com.javadiscord.jdi.internal.api.DiscordRequestBuilder;
9+
10+
public record CreateGuildTemplateRequest(
11+
long guildId,
12+
String name,
13+
Optional<String> description
14+
) implements DiscordRequest {
15+
16+
@Override
17+
public DiscordRequestBuilder create() {
18+
Map<String, String> body = new HashMap<>();
19+
body.put("name", name);
20+
description.ifPresent(d -> body.put("description", d));
21+
22+
return new DiscordRequestBuilder()
23+
.post()
24+
.path("/guilds/%s/templates".formatted(guildId))
25+
.body(body);
26+
}
27+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.javadiscord.jdi.internal.api.guild_template;
2+
3+
import com.javadiscord.jdi.internal.api.DiscordRequest;
4+
import com.javadiscord.jdi.internal.api.DiscordRequestBuilder;
5+
6+
public record DeleteGuildTemplateRequest(
7+
long guildId,
8+
String templateCode
9+
) implements DiscordRequest {
10+
11+
@Override
12+
public DiscordRequestBuilder create() {
13+
return new DiscordRequestBuilder()
14+
.delete()
15+
.path("/guilds/%s/templates/%s".formatted(guildId, templateCode));
16+
}
17+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.javadiscord.jdi.internal.api.guild_template;
2+
3+
import com.javadiscord.jdi.internal.api.DiscordRequest;
4+
import com.javadiscord.jdi.internal.api.DiscordRequestBuilder;
5+
6+
public record GetGuildTemplateRequest(String templateCode) implements DiscordRequest {
7+
8+
@Override
9+
public DiscordRequestBuilder create() {
10+
return new DiscordRequestBuilder()
11+
.get()
12+
.path("/guilds/templates/%s".formatted(templateCode));
13+
}
14+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package com.javadiscord.jdi.internal.api.guild_template;
2+
3+
import com.javadiscord.jdi.internal.api.DiscordRequest;
4+
import com.javadiscord.jdi.internal.api.DiscordRequestBuilder;
5+
6+
public record GetGuildTemplatesRequest(long guildId) implements DiscordRequest {
7+
8+
@Override
9+
public DiscordRequestBuilder create() {
10+
return new DiscordRequestBuilder().get().path("/guilds/%s/templates".formatted(guildId));
11+
}
12+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package com.javadiscord.jdi.internal.api.guild_template;
2+
3+
import java.util.HashMap;
4+
import java.util.Map;
5+
import java.util.Optional;
6+
7+
import com.javadiscord.jdi.internal.api.DiscordRequest;
8+
import com.javadiscord.jdi.internal.api.DiscordRequestBuilder;
9+
10+
public record ModifyGuildTemplateRequest(
11+
long guildId,
12+
String templateCode,
13+
Optional<String> name,
14+
Optional<String> description
15+
) implements DiscordRequest {
16+
17+
@Override
18+
public DiscordRequestBuilder create() {
19+
Map<String, String> body = new HashMap<>();
20+
name.ifPresent(n -> body.put("name", n));
21+
description.ifPresent(desc -> body.put("description", desc));
22+
23+
return new DiscordRequestBuilder()
24+
.patch()
25+
.path("/guilds/%s/templates/%s".formatted(guildId, templateCode))
26+
.body(body);
27+
}
28+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.javadiscord.jdi.internal.api.guild_template;
2+
3+
import com.javadiscord.jdi.internal.api.DiscordRequest;
4+
import com.javadiscord.jdi.internal.api.DiscordRequestBuilder;
5+
6+
public record SyncGuildTemplateRequest(
7+
long guildId,
8+
String templateCode
9+
) implements DiscordRequest {
10+
11+
@Override
12+
public DiscordRequestBuilder create() {
13+
return new DiscordRequestBuilder()
14+
.put()
15+
.path("/guilds/%s/templates/%s".formatted(guildId, templateCode));
16+
}
17+
}

core/src/main/java/com/javadiscord/jdi/core/Guild.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ public class Guild {
1616
private final EmojiRequest emojiRequest;
1717
private final GuildRequest guildRequest;
1818
private final GuildScheduledEventRequest guildScheduledEventRequest;
19+
private final GuildTemplateRequest guildTemplateRequest;
1920
private final InviteRequest inviteRequest;
2021
private final PollRequest pollRequest;
2122
private final StageRequest stageRequest;
@@ -43,6 +44,7 @@ public Guild(com.javadiscord.jdi.core.models.guild.Guild guild, Cache cache, Dis
4344
this.guildRequest = new GuildRequest(discordResponseParser, guildId);
4445
this.guildScheduledEventRequest =
4546
new GuildScheduledEventRequest(discordResponseParser, guildId);
47+
this.guildTemplateRequest = new GuildTemplateRequest(discordResponseParser, guildId);
4648
this.inviteRequest = new InviteRequest(discordResponseParser, guildId);
4749
this.pollRequest = new PollRequest(discordResponseParser, guildId);
4850
this.stageRequest = new StageRequest(discordResponseParser, guildId);
@@ -95,6 +97,10 @@ public GuildScheduledEventRequest scheduledEvent() {
9597
return guildScheduledEventRequest;
9698
}
9799

100+
public GuildTemplateRequest guildTemplate() {
101+
return guildTemplateRequest;
102+
}
103+
98104
public InviteRequest invite() {
99105
return inviteRequest;
100106
}

0 commit comments

Comments
 (0)