diff --git a/api/src/main/java/com/javadiscord/jdi/internal/api/channel/StartThreadInForumOrMediaChannelRequest.java b/api/src/main/java/com/javadiscord/jdi/internal/api/channel/StartThreadInForumOrMediaChannelRequest.java index c3af4e58..d6e3f279 100644 --- a/api/src/main/java/com/javadiscord/jdi/internal/api/channel/StartThreadInForumOrMediaChannelRequest.java +++ b/api/src/main/java/com/javadiscord/jdi/internal/api/channel/StartThreadInForumOrMediaChannelRequest.java @@ -1,5 +1,6 @@ package com.javadiscord.jdi.internal.api.channel; +import com.javadiscord.jdi.core.models.guild.ForumMediaThreadMessageParam; import com.javadiscord.jdi.internal.api.DiscordRequest; import com.javadiscord.jdi.internal.api.DiscordRequestBuilder; @@ -13,7 +14,7 @@ public record StartThreadInForumOrMediaChannelRequest( String name, Optional autoArchiveDuration, Optional rateLimitPerUser, - Object message, // TODO: Create Forum and Media Thread Message Params Object + ForumMediaThreadMessageParam message, Optional> appliedTags, Optional files, // TODO: Create Files object Optional payloadJson) diff --git a/api/src/main/java/com/javadiscord/jdi/internal/api/guild/GetGuildWidgetImageRequest.java b/api/src/main/java/com/javadiscord/jdi/internal/api/guild/GetGuildWidgetImageRequest.java index 8c9dc4da..f2e9b9be 100644 --- a/api/src/main/java/com/javadiscord/jdi/internal/api/guild/GetGuildWidgetImageRequest.java +++ b/api/src/main/java/com/javadiscord/jdi/internal/api/guild/GetGuildWidgetImageRequest.java @@ -1,20 +1,20 @@ package com.javadiscord.jdi.internal.api.guild; +import com.javadiscord.jdi.core.models.guild.WidgetStyle; import com.javadiscord.jdi.internal.api.DiscordRequest; import com.javadiscord.jdi.internal.api.DiscordRequestBuilder; import java.util.Optional; -public record GetGuildWidgetImageRequest(long guildId, Optional style // TODO: - // https://discord.com/developers/docs/resources/guild#get-guild-widget-image-widget-style-options - ) implements DiscordRequest { +public record GetGuildWidgetImageRequest(long guildId, Optional style) + implements DiscordRequest { @Override public DiscordRequestBuilder create() { DiscordRequestBuilder discordRequestBuilder = new DiscordRequestBuilder().get().path("/guilds/%s/widget.png".formatted(guildId)); - style.ifPresent(val -> discordRequestBuilder.queryParam("style", val)); + style.ifPresent(val -> discordRequestBuilder.queryParam("style", val.name().toLowerCase())); return discordRequestBuilder; } diff --git a/api/src/main/java/com/javadiscord/jdi/internal/api/guild/ModifyGuildMemberRequest.java b/api/src/main/java/com/javadiscord/jdi/internal/api/guild/ModifyGuildMemberRequest.java index 6b478317..91a5a730 100644 --- a/api/src/main/java/com/javadiscord/jdi/internal/api/guild/ModifyGuildMemberRequest.java +++ b/api/src/main/java/com/javadiscord/jdi/internal/api/guild/ModifyGuildMemberRequest.java @@ -17,7 +17,6 @@ public record ModifyGuildMemberRequest( Optional mute, Optional deafen, Optional channelId, - // TODO: figure out how to correctly pass a timestamp to discord via the request Optional communicationDisabledUntil, Optional flags) implements DiscordRequest { diff --git a/api/src/main/java/com/javadiscord/jdi/internal/api/guild_scheduled_event/ModifyScheduledEventRequest.java b/api/src/main/java/com/javadiscord/jdi/internal/api/guild_scheduled_event/ModifyScheduledEventRequest.java index c8c9d9a4..f3cc0555 100644 --- a/api/src/main/java/com/javadiscord/jdi/internal/api/guild_scheduled_event/ModifyScheduledEventRequest.java +++ b/api/src/main/java/com/javadiscord/jdi/internal/api/guild_scheduled_event/ModifyScheduledEventRequest.java @@ -31,7 +31,6 @@ public DiscordRequestBuilder create() { // entityMetadata (entity_metadata), scheduledEndTime are all required if (entityType.isPresent() && entityType.get() == 3) { if (entityMetadata.isEmpty() || scheduledEndTime.isEmpty()) { - // TODO: replace with custom exceptions when implemented throw new IllegalArgumentException( "When entityType is EXTERNAL, both entityMetadata and scheduledEndTime must" + " be provided"); 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..0d00dcc3 --- /dev/null +++ b/api/src/main/java/com/javadiscord/jdi/internal/api/guild_template/CreateGuildFromTemplateRequest.java @@ -0,0 +1,24 @@ +package com.javadiscord.jdi.internal.api.guild_template; + +import com.javadiscord.jdi.internal.api.DiscordRequest; +import com.javadiscord.jdi.internal.api.DiscordRequestBuilder; + +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; + +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..5da04510 --- /dev/null +++ b/api/src/main/java/com/javadiscord/jdi/internal/api/guild_template/CreateGuildTemplateRequest.java @@ -0,0 +1,24 @@ +package com.javadiscord.jdi.internal.api.guild_template; + +import com.javadiscord.jdi.internal.api.DiscordRequest; +import com.javadiscord.jdi.internal.api.DiscordRequestBuilder; + +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; + +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..b2ce5547 --- /dev/null +++ b/api/src/main/java/com/javadiscord/jdi/internal/api/guild_template/DeleteGuildTemplateRequest.java @@ -0,0 +1,15 @@ +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..e7d85e28 --- /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..d2bbece8 --- /dev/null +++ b/api/src/main/java/com/javadiscord/jdi/internal/api/guild_template/ModifyGuildTemplateRequest.java @@ -0,0 +1,25 @@ +package com.javadiscord.jdi.internal.api.guild_template; + +import com.javadiscord.jdi.internal.api.DiscordRequest; +import com.javadiscord.jdi.internal.api.DiscordRequestBuilder; + +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; + +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..87195222 --- /dev/null +++ b/api/src/main/java/com/javadiscord/jdi/internal/api/guild_template/SyncGuildTemplateRequest.java @@ -0,0 +1,15 @@ +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)); + } +} diff --git a/api/src/main/java/com/javadiscord/jdi/internal/api/stage/CreateStageRequest.java b/api/src/main/java/com/javadiscord/jdi/internal/api/stage/CreateStageRequest.java index 8b33dc03..abb12cc7 100644 --- a/api/src/main/java/com/javadiscord/jdi/internal/api/stage/CreateStageRequest.java +++ b/api/src/main/java/com/javadiscord/jdi/internal/api/stage/CreateStageRequest.java @@ -12,12 +12,12 @@ public record CreateStageRequest( String topic, int privacyLevel, Optional sendStartNotification, - Optional guildScheduledEventId) + Optional guildScheduledEventId, + Optional auditLogeReason) implements DiscordRequest { @Override public DiscordRequestBuilder create() { - // TODO: X-Audit-Log-Reason header Map body = new HashMap<>(); body.put("channel_id", channelId); body.put("topic", topic); @@ -25,6 +25,13 @@ public DiscordRequestBuilder create() { sendStartNotification.ifPresent(val -> body.put("send_start_notification", val)); guildScheduledEventId.ifPresent(val -> body.put("guild_scheduled_event_id", val)); - return new DiscordRequestBuilder().post().path("/stage-instances").body(body); + DiscordRequestBuilder builder = new DiscordRequestBuilder(); + builder.post(); + builder.path("/stage-instances"); + builder.body(body); + + auditLogeReason.ifPresent(val -> builder.putHeader("X-Audit-Log-Reason", val)); + + return builder; } } diff --git a/models/src/main/java/com/javadiscord/jdi/core/models/guild/AllowedMentionType.java b/models/src/main/java/com/javadiscord/jdi/core/models/guild/AllowedMentionType.java new file mode 100644 index 00000000..d5bea523 --- /dev/null +++ b/models/src/main/java/com/javadiscord/jdi/core/models/guild/AllowedMentionType.java @@ -0,0 +1,7 @@ +package com.javadiscord.jdi.core.models.guild; + +public enum AllowedMentionType { + ROLES, + USERS, + EVERYONE +} diff --git a/models/src/main/java/com/javadiscord/jdi/core/models/guild/AllowedMentions.java b/models/src/main/java/com/javadiscord/jdi/core/models/guild/AllowedMentions.java new file mode 100644 index 00000000..965aa2c3 --- /dev/null +++ b/models/src/main/java/com/javadiscord/jdi/core/models/guild/AllowedMentions.java @@ -0,0 +1,13 @@ +package com.javadiscord.jdi.core.models.guild; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; + +import java.util.List; + +@JsonIgnoreProperties(ignoreUnknown = true) +public record AllowedMentions( + @JsonProperty("parse") List mentionTypes, + @JsonProperty("roles") List roles, + @JsonProperty("users") List users, + @JsonProperty("replied_user") boolean repliedUser) {} diff --git a/models/src/main/java/com/javadiscord/jdi/core/models/guild/ForumMediaThreadMessageParam.java b/models/src/main/java/com/javadiscord/jdi/core/models/guild/ForumMediaThreadMessageParam.java new file mode 100644 index 00000000..2a43c2c2 --- /dev/null +++ b/models/src/main/java/com/javadiscord/jdi/core/models/guild/ForumMediaThreadMessageParam.java @@ -0,0 +1,18 @@ +package com.javadiscord.jdi.core.models.guild; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.javadiscord.jdi.core.models.message.MessageAttachment; +import com.javadiscord.jdi.core.models.message.embed.Embed; + +import java.util.List; + +@JsonIgnoreProperties(ignoreUnknown = true) +public record ForumMediaThreadMessageParam( + @JsonProperty("content") String content, + @JsonProperty("embeds") List embeds, + @JsonProperty("allowed_mentions") List allowedMentions, + @JsonProperty("components") List components, + @JsonProperty("sticker_ids") List stickerIds, + @JsonProperty("attachments") List attachments, + @JsonProperty("flags") int flags) {} diff --git a/models/src/main/java/com/javadiscord/jdi/core/models/guild/Integration.java b/models/src/main/java/com/javadiscord/jdi/core/models/guild/Integration.java index 22848baa..8b927464 100644 --- a/models/src/main/java/com/javadiscord/jdi/core/models/guild/Integration.java +++ b/models/src/main/java/com/javadiscord/jdi/core/models/guild/Integration.java @@ -7,8 +7,6 @@ import java.time.OffsetDateTime; -// TODO: finish implementation -// https://discord.com/developers/docs/resources/guild#integration-object @JsonIgnoreProperties(ignoreUnknown = true) public record Integration( @JsonProperty("id") long id, diff --git a/models/src/main/java/com/javadiscord/jdi/core/models/guild/WidgetStyle.java b/models/src/main/java/com/javadiscord/jdi/core/models/guild/WidgetStyle.java new file mode 100644 index 00000000..7366a6dc --- /dev/null +++ b/models/src/main/java/com/javadiscord/jdi/core/models/guild/WidgetStyle.java @@ -0,0 +1,9 @@ +package com.javadiscord.jdi.core.models.guild; + +public enum WidgetStyle { + SHIELD, + BANNER1, + BANNER2, + BANNER3, + BANNER4, +}