Skip to content

Commit

Permalink
feat(guilds): implemented support for incident actions
Browse files Browse the repository at this point in the history
  • Loading branch information
seailz committed Sep 29, 2023
1 parent a877d2e commit e0df2fe
Show file tree
Hide file tree
Showing 3 changed files with 109 additions and 3 deletions.
40 changes: 37 additions & 3 deletions src/main/java/com/seailz/discordjar/model/guild/Guild.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import com.seailz.discordjar.model.emoji.Emoji;
import com.seailz.discordjar.model.emoji.sticker.Sticker;
import com.seailz.discordjar.model.guild.filter.ExplicitContentFilterLevel;
import com.seailz.discordjar.model.guild.incident.IncidentsData;
import com.seailz.discordjar.model.guild.mfa.MFALevel;
import com.seailz.discordjar.model.guild.notification.DefaultMessageNotificationLevel;
import com.seailz.discordjar.model.guild.premium.PremiumTier;
Expand Down Expand Up @@ -98,6 +99,8 @@ public class Guild implements Compilerable, Snowflake, CDNAble {
private final boolean premiumProgressBarEnabled;
private final String safetyAlertChannelId;
private Channel safetyAlertChannel = null;
private final IncidentsData incidentsData;

private final DiscordJar discordJar;
private final JsonCache roleCache;

Expand Down Expand Up @@ -143,7 +146,7 @@ public Guild(
List<Sticker> stickers,
boolean premiumProgressBarEnabled,
String safetyAlertChannelId,
DiscordJar discordJar,
IncidentsData incidentsData, DiscordJar discordJar,
JsonCache roleCache
) {
this.id = id;
Expand Down Expand Up @@ -187,6 +190,7 @@ public Guild(
this.stickers = stickers;
this.premiumProgressBarEnabled = premiumProgressBarEnabled;
this.safetyAlertChannelId = safetyAlertChannelId;
this.incidentsData = incidentsData;
this.discordJar = discordJar;
this.roleCache = roleCache;
}
Expand Down Expand Up @@ -330,6 +334,9 @@ public List<Sticker> stickers() {
public boolean premiumProgressBarEnabled() {
return premiumProgressBarEnabled;
}
public IncidentsData incidentsData() {
return incidentsData;
}

public DiscordJar discordJar() {
return discordJar;
Expand Down Expand Up @@ -381,7 +388,8 @@ public JSONObject compile() {
.put("welcome_screen", welcomeScreen)
.put("stickers", stickers)
.put("premium_progress_bar_enabled", premiumProgressBarEnabled)
.put("safety_alerts_channel_id", safetyAlertChannelId);
.put("safety_alerts_channel_id", safetyAlertChannelId)
.put("incidents_data", incidentsData.compile());
}

@NotNull
Expand Down Expand Up @@ -671,6 +679,8 @@ public static Guild decompile(JSONObject obj, DiscordJar discordJar) {
safetyAlertsChannelId = obj.getString("safety_alerts_channel_id");
}

IncidentsData incidentsData = obj.has("incidents_data") && !obj.isNull("incidents_data") ? IncidentsData.decompile(obj.getJSONObject("incidents_data")) : null;

Guild g = new Guild(
id,
name,
Expand Down Expand Up @@ -713,7 +723,7 @@ public static Guild decompile(JSONObject obj, DiscordJar discordJar) {
stickers,
premiumProgressBarEnabled,
safetyAlertsChannelId,
discordJar,
incidentsData, discordJar,
JsonCache.newc(new DiscordRequest(
new JSONObject(),
new HashMap<>(),
Expand Down Expand Up @@ -1730,6 +1740,30 @@ public Response<Void> deleteScheduledEvent(String id) {
return res;
}

public Response<Void> modifyGuildIncidentActions(@NotNull IncidentsData incidentsData) {
Response<Void> res = new Response<>();
new java.lang.Thread(() -> {
try {
new DiscordRequest(
incidentsData.compile(),
new HashMap<>(),
URLS.PATCH.GUILD.MODIFY_GUILD_INCIDENT_ACTIONS.replace("{guild.id}", this.id),
discordJar,
URLS.PATCH.GUILD.MODIFY_GUILD_INCIDENT_ACTIONS,
RequestMethod.PATCH
).invoke();
res.complete(null);
} catch (DiscordRequest.UnhandledDiscordAPIErrorException e) {
res.completeError(new Response.Error(
e.getCode(),
e.getMessage(),
e.getBody()
));
}
}).start();
return res;
}

public @NotNull ModifyScheduledEventAction modifyScheduledEvent(String id) {
return new ModifyScheduledEventAction(discordJar, this.id, id);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
package com.seailz.discordjar.model.guild.incident;

import com.seailz.discordjar.core.Compilerable;
import org.jetbrains.annotations.NotNull;
import org.joda.time.DateTime;
import org.json.JSONObject;

/**
* Represents an IncidentsData object.
* <br> Each value is nullable & has a limit of 24 hours into the future.
*/
public record IncidentsData(
DateTime invitesDisabledUntil,
DateTime dmsDisabledUntil
) implements Compilerable {

public boolean areInvitesDisabled() {
if (invitesDisabledUntil == null) return false;
return invitesDisabledUntil.isAfterNow();
}

public boolean areDmsDisabled() {
if (dmsDisabledUntil == null) return false;
return dmsDisabledUntil.isAfterNow();
}

@Override
public JSONObject compile() {
return new JSONObject()
.put("invites_disabled_until", invitesDisabledUntil.toString())
.put("dms_disabled_until", dmsDisabledUntil.toString());
}

public static IncidentsData decompile(@NotNull JSONObject obj) {
DateTime invitesDisabledUntil = obj.has("invites_disabled_until") && !obj.isNull("invites_disabled_until") ? DateTime.parse(obj.getString("invites_disabled_until")) : null;
DateTime dmsDisabledUntil = obj.has("dms_disabled_until") && !obj.isNull("dms_disabled_until") ? DateTime.parse(obj.getString("dms_disabled_until")) : null;

return new IncidentsData(
invitesDisabledUntil,
dmsDisabledUntil
);
}

public static IncidentsData none() {
return new IncidentsData(
null,
null
);
}

public static IncidentsData invitesDisabled23Hours() {
return new IncidentsData(
DateTime.now().plusHours(23),
null
);
}

public static IncidentsData dmsDisabled23Hours() {
return new IncidentsData(
null,
DateTime.now().plusHours(23)
);
}

public static IncidentsData allDisabled23Hours() {
return new IncidentsData(
DateTime.now().plusHours(23),
DateTime.now().plusHours(23)
);
}
}
1 change: 1 addition & 0 deletions src/main/java/com/seailz/discordjar/utils/URLS.java
Original file line number Diff line number Diff line change
Expand Up @@ -445,6 +445,7 @@ public static class COMMANDS {

public static class PATCH {
public static class GUILD {
public static String MODIFY_GUILD_INCIDENT_ACTIONS = "/guilds/{guild.id}/incident-actions";
public static class SCHEDULED_EVENTS {
public static String MODIFY_GUILD_SCHEDULED_EVENT = "/guilds/{guild.id}/scheduled-events/{event.id}";
}
Expand Down

0 comments on commit e0df2fe

Please sign in to comment.