55import net .dv8tion .jda .api .entities .User ;
66import net .modgarden .gardenbot .GardenBot ;
77import net .modgarden .gardenbot .interaction .SlashCommandInteraction ;
8+ import net .modgarden .gardenbot .interaction .response .EmbedResponse ;
89import net .modgarden .gardenbot .interaction .response .MessageResponse ;
910import net .modgarden .gardenbot .interaction .response .Response ;
1011import net .modgarden .gardenbot .util .ModGardenAPIClient ;
1112
1213import java .io .IOException ;
1314import java .io .InputStream ;
15+ import java .io .InputStreamReader ;
1416import java .net .http .HttpResponse ;
1517
1618public 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.\n Please 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 () + "\n Please 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