Skip to content

Commit 7a36e17

Browse files
fix: Don't allow unregistering whilst the user has submissions.
1 parent b280c45 commit 7a36e17

File tree

1 file changed

+37
-5
lines changed

1 file changed

+37
-5
lines changed

src/main/java/net/modgarden/gardenbot/commands/event/UnregisterHandler.java

Lines changed: 37 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,33 +5,61 @@
55
import net.dv8tion.jda.api.entities.User;
66
import net.modgarden.gardenbot.GardenBot;
77
import net.modgarden.gardenbot.interaction.SlashCommandInteraction;
8+
import net.modgarden.gardenbot.interaction.response.EmbedResponse;
89
import net.modgarden.gardenbot.interaction.response.MessageResponse;
910
import net.modgarden.gardenbot.interaction.response.Response;
1011
import net.modgarden.gardenbot.util.ModGardenAPIClient;
1112

1213
import java.io.IOException;
1314
import java.io.InputStream;
15+
import java.io.InputStreamReader;
1416
import java.net.http.HttpResponse;
1517

1618
public class UnregisterHandler {
1719
public static Response handleEventUnregister(SlashCommandInteraction interaction) {
1820
interaction.event().deferReply(true).queue();
19-
User user = interaction.event().getUser();
21+
User discordUser = interaction.event().getUser();
2022
Guild guild = interaction.event().getGuild();
2123

24+
ModGardenUser user;
2225
try {
23-
HttpResponse<InputStream> stream = ModGardenAPIClient.get("user/" + user.getId() + "?service=discord", HttpResponse.BodyHandlers.ofInputStream());
24-
if (stream.statusCode() != 200) {
26+
HttpResponse<InputStream> userResult = ModGardenAPIClient.get("user/" + discordUser.getId() + "?service=discord", HttpResponse.BodyHandlers.ofInputStream());
27+
if (userResult.statusCode() != 200) {
2528
return new MessageResponse()
2629
.setMessage("You do not have a Mod Garden account.\nPlease create one with **/account create**.")
2730
.markEphemeral();
2831
}
32+
try (InputStreamReader userReader = new InputStreamReader(userResult.body())) {
33+
user = GardenBot.GSON.fromJson(userReader, ModGardenUser.class);
34+
}
2935
} catch (IOException | InterruptedException ex) {
3036
GardenBot.LOG.error("", ex);
37+
return new EmbedResponse()
38+
.setTitle("Encountered an exception whilst attempting to unregister from a Mod Garden event.")
39+
.setDescription(ex.getMessage() + "\nPlease report this to a team member.")
40+
.setColor(0xFF0000);
41+
}
42+
43+
try {
44+
HttpResponse<InputStream> eventSubmissionsResult = ModGardenAPIClient.get(
45+
"user/" + user.id + "/submissions/mod-garden-nature",
46+
HttpResponse.BodyHandlers.ofInputStream()
47+
);
48+
if (eventSubmissionsResult.statusCode() == 200) {
49+
try (InputStreamReader eventSubmissionsReader = new InputStreamReader(eventSubmissionsResult.body())) {
50+
JsonElement eventSubmissions = JsonParser.parseReader(eventSubmissionsReader);
51+
if (eventSubmissions.isJsonArray() && !eventSubmissions.getAsJsonArray().isEmpty()) {
52+
return new MessageResponse()
53+
.setMessage("You may not unregister whilst you have submissions to Mod Garden: Nature.")
54+
.markEphemeral();
55+
}
56+
}
57+
}
58+
}catch (IOException | InterruptedException ex) {
59+
GardenBot.LOG.error("", ex);
3160
}
3261

3362
if (guild != null && guild.getId().equals(GardenBot.DOTENV.get("GUILD_ID"))) {
34-
// TODO: Unhardcode from Mod Garden: Nature and save data into backend user.
3563
Role role = guild.getRoleById("1320329531990741053");
3664
if (role == null) {
3765
return new MessageResponse()
@@ -43,7 +71,7 @@ public static Response handleEventUnregister(SlashCommandInteraction interaction
4371
.setMessage("You not a Mod Garden: Nature participant.")
4472
.markEphemeral();
4573
}
46-
guild.removeRoleFromMember(user, role).complete();
74+
guild.removeRoleFromMember(discordUser, role).complete();
4775
return new MessageResponse()
4876
.setMessage("Successfully removed you as a participant from Mod Garden: Nature.")
4977
.markEphemeral();
@@ -52,4 +80,8 @@ public static Response handleEventUnregister(SlashCommandInteraction interaction
5280
.setMessage("This command needs to be run inside the Mod Garden Discord server.")
5381
.markEphemeral();
5482
}
83+
84+
private static class ModGardenUser {
85+
String id;
86+
}
5587
}

0 commit comments

Comments
 (0)