diff --git a/api/src/main/java/com/javadiscord/jdi/core/api/GuildScheduledEventRequest.java b/api/src/main/java/com/javadiscord/jdi/core/api/GuildScheduledEventRequest.java index 425f88af..60bfdc3f 100644 --- a/api/src/main/java/com/javadiscord/jdi/core/api/GuildScheduledEventRequest.java +++ b/api/src/main/java/com/javadiscord/jdi/core/api/GuildScheduledEventRequest.java @@ -2,10 +2,7 @@ import java.util.List; -import com.javadiscord.jdi.core.api.builders.CreateScheduledEventBuilder; -import com.javadiscord.jdi.core.api.builders.GetScheduledEventBuilder; -import com.javadiscord.jdi.core.api.builders.GetScheduledEventUsersBuilder; -import com.javadiscord.jdi.core.api.builders.ListScheduledEventsBuilder; +import com.javadiscord.jdi.core.api.builders.*; import com.javadiscord.jdi.core.models.scheduled_event.EventUser; import com.javadiscord.jdi.core.models.scheduled_event.ScheduledEvent; import com.javadiscord.jdi.internal.api.guild_scheduled_event.*; @@ -23,6 +20,10 @@ public AsyncResponse createScheduledEvent(CreateScheduledEventBu return responseParser.callAndParse(ScheduledEvent.class, builder.guildId(guildId).build()); } + public AsyncResponse modifyScheduledEvent(ModifyScheduledEventBuilder builder) { + return responseParser.callAndParse(ScheduledEvent.class, builder.build()); + } + public AsyncResponse deleteScheduledEvent(long scheduledEventId) { return responseParser.callAndParse( ScheduledEvent.class, new DeleteScheduledEventRequest(guildId, scheduledEventId) diff --git a/api/src/main/java/com/javadiscord/jdi/core/api/builders/ModifyScheduledEventBuilder.java b/api/src/main/java/com/javadiscord/jdi/core/api/builders/ModifyScheduledEventBuilder.java index f5a0eec6..f0f6a0e2 100644 --- a/api/src/main/java/com/javadiscord/jdi/core/api/builders/ModifyScheduledEventBuilder.java +++ b/api/src/main/java/com/javadiscord/jdi/core/api/builders/ModifyScheduledEventBuilder.java @@ -4,6 +4,7 @@ import com.javadiscord.jdi.core.models.guild.EntityMetadata; import com.javadiscord.jdi.core.models.guild.PrivacyLevel; +import com.javadiscord.jdi.core.models.scheduled_event.ScheduledEntityType; import com.javadiscord.jdi.internal.api.guild_scheduled_event.ModifyScheduledEventRequest; public class ModifyScheduledEventBuilder { @@ -14,9 +15,9 @@ public class ModifyScheduledEventBuilder { private Optional name; private Optional privacyLevel; private Optional scheduledStartTime; - private Optional scheduledEndTim; + private Optional scheduledEndTime; private Optional description; - private Optional entityType; + private Optional entityType; private Optional status; private Optional image; @@ -28,7 +29,7 @@ public ModifyScheduledEventBuilder(long guildId, long scheduledEventId) { this.name = Optional.empty(); this.privacyLevel = Optional.empty(); this.scheduledStartTime = Optional.empty(); - this.scheduledEndTim = Optional.empty(); + this.scheduledEndTime = Optional.empty(); this.description = Optional.empty(); this.entityType = Optional.empty(); this.status = Optional.empty(); @@ -60,8 +61,8 @@ public ModifyScheduledEventBuilder scheduledStartTime(long scheduledStartTime) { return this; } - public ModifyScheduledEventBuilder scheduledEndTim(long scheduledEndTim) { - this.scheduledEndTim = Optional.of(scheduledEndTim); + public ModifyScheduledEventBuilder scheduledEndTime(long scheduledEndTim) { + this.scheduledEndTime = Optional.of(scheduledEndTim); return this; } @@ -70,12 +71,12 @@ public ModifyScheduledEventBuilder description(String description) { return this; } - public ModifyScheduledEventBuilder entityType(Integer entityType) { + public ModifyScheduledEventBuilder entityType(ScheduledEntityType entityType) { this.entityType = Optional.of(entityType); return this; } - public ModifyScheduledEventBuilder status(Integer status) { + public ModifyScheduledEventBuilder status(int status) { this.status = Optional.of(status); return this; } @@ -86,6 +87,20 @@ public ModifyScheduledEventBuilder image(String image) { } public ModifyScheduledEventRequest build() { + if (entityType.isPresent() && entityType.get() == ScheduledEntityType.EXTERNAL) { + if (entityMetadata.isEmpty() || scheduledEndTime.isEmpty()) { + throw new IllegalArgumentException( + "When entityType is EXTERNAL, both entityMetadata and scheduledEndTime must" + + " be provided" + ); + } + if (channelId.isPresent()) { + throw new IllegalArgumentException( + "When entityType is EXTERNAL, channelId must not be provided" + ); + } + } + return new ModifyScheduledEventRequest( guildId, scheduledEventId, @@ -94,7 +109,7 @@ public ModifyScheduledEventRequest build() { name, privacyLevel, scheduledStartTime, - scheduledEndTim, + scheduledEndTime, description, entityType, status, 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 8e4dd41f..d7ed742e 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 @@ -5,6 +5,7 @@ import java.util.Optional; import com.javadiscord.jdi.core.models.guild.EntityMetadata; +import com.javadiscord.jdi.core.models.scheduled_event.ScheduledEntityType; import com.javadiscord.jdi.internal.api.DiscordRequest; import com.javadiscord.jdi.internal.api.DiscordRequestBuilder; @@ -18,30 +19,14 @@ public record ModifyScheduledEventRequest( Optional scheduledStartTime, Optional scheduledEndTime, Optional description, - Optional entityType, + Optional entityType, Optional status, Optional image ) implements DiscordRequest { @Override public DiscordRequestBuilder create() { Map body = new HashMap<>(); - - // check if entityType = 3 (EXTERNAL) - // channelId must be set to null - // entityMetadata (entity_metadata), scheduledEndTime are all required - if (entityType.isPresent() && entityType.get() == 3) { - if (entityMetadata.isEmpty() || scheduledEndTime.isEmpty()) { - throw new IllegalArgumentException( - "When entityType is EXTERNAL, both entityMetadata and scheduledEndTime must" - + " be provided" - ); - } - - body.put("channel_id", null); - } else { - channelId.ifPresent(val -> body.put("channel_id", val)); - } - + channelId.ifPresent(val -> body.put("channel_id", val)); entityMetadata.ifPresent(val -> body.put("entity_metadata", val)); name.ifPresent(val -> body.put("name", val)); privacyLevel.ifPresent(val -> body.put("privacy_level", val)); diff --git a/models/src/main/java/com/javadiscord/jdi/core/models/scheduled_event/ScheduledEntityType.java b/models/src/main/java/com/javadiscord/jdi/core/models/scheduled_event/ScheduledEntityType.java index 62511387..e87b06af 100644 --- a/models/src/main/java/com/javadiscord/jdi/core/models/scheduled_event/ScheduledEntityType.java +++ b/models/src/main/java/com/javadiscord/jdi/core/models/scheduled_event/ScheduledEntityType.java @@ -1,7 +1,21 @@ package com.javadiscord.jdi.core.models.scheduled_event; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; + public enum ScheduledEntityType { STAGE_INSTANCE, VOICE, - EXTERNAL + EXTERNAL; + + @JsonCreator + public static ScheduledEntityType fromIndex(int index) { + return ScheduledEntityType.values()[index - 1]; + } + + @JsonValue + public int toValue() { + return ordinal() + 1; + } + } diff --git a/models/src/main/java/com/javadiscord/jdi/core/models/scheduled_event/ScheduledEvent.java b/models/src/main/java/com/javadiscord/jdi/core/models/scheduled_event/ScheduledEvent.java index c94e402e..eeef2567 100644 --- a/models/src/main/java/com/javadiscord/jdi/core/models/scheduled_event/ScheduledEvent.java +++ b/models/src/main/java/com/javadiscord/jdi/core/models/scheduled_event/ScheduledEvent.java @@ -20,7 +20,7 @@ public record ScheduledEvent( @JsonProperty("privacy_level") PrivacyLevel privacyLevel, @JsonProperty("status") EventStatus status, @JsonProperty("entity_type") ScheduledEntityType entityType, - @JsonProperty("entity_id") Long entityId, + @JsonProperty("entity_id") long entityId, @JsonProperty("entity_metadata") EntityMetadata entityMetadata, @JsonProperty("creator") User creator, @JsonProperty("user_count") int userCount,