Skip to content

Commit 136213f

Browse files
feat: Add `/event register and /event unregister commands. Update wording in some commands.
1 parent 70fa95a commit 136213f

8 files changed

Lines changed: 135 additions & 11 deletions

File tree

src/main/java/net/modgarden/gardenbot/GardenBotCommands.java

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22

33
import net.dv8tion.jda.api.interactions.commands.OptionType;
44
import net.modgarden.gardenbot.commands.account.*;
5+
import net.modgarden.gardenbot.commands.event.RegisterHandler;
6+
import net.modgarden.gardenbot.commands.event.SubmitHandler;
7+
import net.modgarden.gardenbot.commands.event.UnregisterHandler;
58
import net.modgarden.gardenbot.interaction.command.SlashCommand;
69
import net.modgarden.gardenbot.interaction.command.SlashCommandDispatcher;
710
import net.modgarden.gardenbot.interaction.command.SlashCommandOption;
@@ -12,7 +15,7 @@ public static void registerAll() {
1215
SlashCommandDispatcher.register(new SlashCommand("account", "Manage your Mod Garden account.",
1316
new SlashCommand.SubCommand(
1417
"create",
15-
"Registers a Mod Garden account for yourself.", RegisterCommandHandler::handleAccountCreation
18+
"Registers a Mod Garden account for yourself.", CreateCommandHandler::handleAccountCreation
1619
)));
1720
SlashCommandDispatcher.register(new SlashCommand("link", "Link your account with different services.",
1821
new SlashCommand.SubCommand(
@@ -62,6 +65,17 @@ public static void registerAll() {
6265
));
6366

6467

68+
SlashCommandDispatcher.register(new SlashCommand("event", "Actions relating to Mod Garden events.",
69+
new SlashCommand.SubCommand(
70+
"register",
71+
"Registers you to a current Mod Garden event.",
72+
RegisterHandler::handleEventRegister
73+
),
74+
new SlashCommand.SubCommand(
75+
"unregister",
76+
"Unregisters you from a current Mod Garden event.",
77+
UnregisterHandler::handleEventUnregister
78+
)));
6579
SlashCommandDispatcher.register(new SlashCommand("submit", "Submit your project to a current Mod Garden event.",
6680
new SlashCommand.SubCommand(
6781
"modrinth",

src/main/java/net/modgarden/gardenbot/commands/account/RegisterCommandHandler.java renamed to src/main/java/net/modgarden/gardenbot/commands/account/CreateCommandHandler.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,15 @@
1313
import java.io.InputStream;
1414
import java.net.http.HttpResponse;
1515

16-
public class RegisterCommandHandler {
16+
public class CreateCommandHandler {
1717
public static Response handleAccountCreation(SlashCommandInteraction interaction) {
1818
User user = interaction.event().getUser();
1919

2020
try {
2121
HttpResponse<InputStream> stream = ModGardenAPIClient.get("user/" + user.getId() + "?service=discord", HttpResponse.BodyHandlers.ofInputStream());
2222
if (stream.statusCode() == 200) {
2323
return new MessageResponse()
24-
.setMessage("You are already registered with Mod Garden.")
24+
.setMessage("You already have an account with Mod Garden.")
2525
.markEphemeral();
2626
}
2727
} catch (IOException | InterruptedException ex) {

src/main/java/net/modgarden/gardenbot/commands/account/LinkCommandHandler.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ public static Response handleModrinthLink(SlashCommandInteraction interaction) {
3232
.markEphemeral();
3333
} else if (stream.statusCode() == 404) {
3434
return new MessageResponse()
35-
.setMessage("You do not have a Mod Garden account.\nPlease register with **/register**.")
35+
.setMessage("You do not have a Mod Garden account.\nPlease create one with **/account create**.")
3636
.markEphemeral();
3737
} else {
3838
JsonElement json = JsonParser.parseReader(new InputStreamReader(stream.body()));
@@ -76,7 +76,7 @@ public static Response handleMinecraftLink(SlashCommandInteraction interaction)
7676
HttpResponse<InputStream> stream = ModGardenAPIClient.get("user/" + user.getId() + "?service=discord", HttpResponse.BodyHandlers.ofInputStream());
7777
if (stream.statusCode() == 404) {
7878
return new MessageResponse()
79-
.setMessage("You do not have a Mod Garden account.\nPlease register with **/register**.");
79+
.setMessage("You do not have a Mod Garden account.\nPlease create one with **/account create**.");
8080
} else if (stream.statusCode() != 200) {
8181
JsonElement json = JsonParser.parseReader(new InputStreamReader(stream.body()));
8282
String errorDescription = json.isJsonObject() && json.getAsJsonObject().has("description") ?

src/main/java/net/modgarden/gardenbot/commands/account/ProfileCommandHandler.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public static Response handleModifyUsername(SlashCommandInteraction interaction)
3030
HttpResponse<InputStream> userStream = ModGardenAPIClient.get("user/" + user.getId() + "?service=discord", HttpResponse.BodyHandlers.ofInputStream());
3131
if (userStream.statusCode() == 404) {
3232
return new MessageResponse()
33-
.setMessage("You do not have a Mod Garden account.\nPlease register with **/register**.")
33+
.setMessage("You do not have a Mod Garden account.\nPlease create one with **/account create**.")
3434
.markEphemeral();
3535
} else if (userStream.statusCode() != 200) {
3636
JsonElement json = JsonParser.parseReader(new InputStreamReader(userStream.body()));
@@ -101,7 +101,7 @@ public static Response handleModifyDisplayName(SlashCommandInteraction interacti
101101
HttpResponse<InputStream> userStream = ModGardenAPIClient.get("user/" + user.getId() + "?service=discord", HttpResponse.BodyHandlers.ofInputStream());
102102
if (userStream.statusCode() == 404) {
103103
return new MessageResponse()
104-
.setMessage("You do not have a Mod Garden account.\nPlease register with **/register**.")
104+
.setMessage("You do not have a Mod Garden account.\nPlease create one with **/account create**.")
105105
.markEphemeral();
106106
} else if (userStream.statusCode() != 200) {
107107
JsonElement json = JsonParser.parseReader(new InputStreamReader(userStream.body()));
@@ -172,7 +172,7 @@ public static Response handleModifyPronouns(SlashCommandInteraction interaction)
172172
HttpResponse<InputStream> userStream = ModGardenAPIClient.get("user/" + user.getId() + "?service=discord", HttpResponse.BodyHandlers.ofInputStream());
173173
if (userStream.statusCode() == 404) {
174174
return new MessageResponse()
175-
.setMessage("You do not have a Mod Garden account.\nPlease register with **/register**.")
175+
.setMessage("You do not have a Mod Garden account.\nPlease create one with **/account create**.")
176176
.markEphemeral();
177177
} else if (userStream.statusCode() != 200) {
178178
JsonElement json = JsonParser.parseReader(new InputStreamReader(userStream.body()));
@@ -244,7 +244,7 @@ public static Response removePronouns(SlashCommandInteraction interaction) {
244244
HttpResponse<InputStream> userStream = ModGardenAPIClient.get("user/" + user.getId() + "?service=discord", HttpResponse.BodyHandlers.ofInputStream());
245245
if (userStream.statusCode() == 404) {
246246
return new MessageResponse()
247-
.setMessage("You do not have a Mod Garden account.\nPlease register with **/register**.")
247+
.setMessage("You do not have a Mod Garden account.\nPlease create one with **/account create**.")
248248
.markEphemeral();
249249
} else if (userStream.statusCode() != 200) {
250250
JsonElement json = JsonParser.parseReader(new InputStreamReader(userStream.body()));

src/main/java/net/modgarden/gardenbot/commands/account/UnlinkCommandHandler.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public static Response handleModrinthUnlink(SlashCommandInteraction interaction)
3131
}
3232
} else if (stream.statusCode() == 404) {
3333
return new MessageResponse()
34-
.setMessage("You do not have a Mod Garden account.\nPlease register with **/register**.")
34+
.setMessage("You do not have a Mod Garden account.\nPlease create one with **/account create**.")
3535
.markEphemeral();
3636
}
3737
JsonElement json = JsonParser.parseReader(new InputStreamReader(stream.body()));
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package net.modgarden.gardenbot.commands.event;
2+
3+
import net.dv8tion.jda.api.entities.Guild;
4+
import net.dv8tion.jda.api.entities.Role;
5+
import net.dv8tion.jda.api.entities.User;
6+
import net.modgarden.gardenbot.GardenBot;
7+
import net.modgarden.gardenbot.interaction.SlashCommandInteraction;
8+
import net.modgarden.gardenbot.interaction.response.MessageResponse;
9+
import net.modgarden.gardenbot.interaction.response.Response;
10+
import net.modgarden.gardenbot.util.ModGardenAPIClient;
11+
12+
import java.io.IOException;
13+
import java.io.InputStream;
14+
import java.net.http.HttpResponse;
15+
16+
public class RegisterHandler {
17+
public static Response handleEventRegister(SlashCommandInteraction interaction) {
18+
interaction.event().deferReply(true).queue();
19+
User user = interaction.event().getUser();
20+
Guild guild = interaction.event().getGuild();
21+
22+
try {
23+
HttpResponse<InputStream> stream = ModGardenAPIClient.get("user/" + user.getId() + "?service=discord", HttpResponse.BodyHandlers.ofInputStream());
24+
if (stream.statusCode() != 200) {
25+
return new MessageResponse()
26+
.setMessage("You do not have a Mod Garden account.\nPlease create one with **/account create**.")
27+
.markEphemeral();
28+
}
29+
} catch (IOException | InterruptedException ex) {
30+
GardenBot.LOG.error("", ex);
31+
}
32+
33+
if (guild != null && guild.getId().equals(GardenBot.DOTENV.get("GUILD_ID"))) {
34+
// TODO: Unhardcode from Mod Garden: Nature and save data into backend user.
35+
Role role = guild.getRoleById("1320329531990741053");
36+
if (role == null) {
37+
return new MessageResponse()
38+
.setMessage("Non-existent role, please report this to a team member.")
39+
.markEphemeral();
40+
}
41+
if (guild.getMembersWithRoles(role).contains(interaction.event().getMember())) {
42+
return new MessageResponse()
43+
.setMessage("You are already a Mod Garden: Nature participant.")
44+
.markEphemeral();
45+
}
46+
guild.addRoleToMember(user, role).complete();
47+
return new MessageResponse()
48+
.setMessage("Successfully added you as a participant to Mod Garden: Nature.")
49+
.markEphemeral();
50+
}
51+
return new MessageResponse()
52+
.setMessage("This command needs to be run inside the Mod Garden Discord server.")
53+
.markEphemeral();
54+
}
55+
}

src/main/java/net/modgarden/gardenbot/commands/account/SubmitHandler.java renamed to src/main/java/net/modgarden/gardenbot/commands/event/SubmitHandler.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package net.modgarden.gardenbot.commands.account;
1+
package net.modgarden.gardenbot.commands.event;
22

33
import com.google.gson.JsonElement;
44
import com.google.gson.JsonObject;
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package net.modgarden.gardenbot.commands.event;
2+
3+
import net.dv8tion.jda.api.entities.Guild;
4+
import net.dv8tion.jda.api.entities.Role;
5+
import net.dv8tion.jda.api.entities.User;
6+
import net.modgarden.gardenbot.GardenBot;
7+
import net.modgarden.gardenbot.interaction.SlashCommandInteraction;
8+
import net.modgarden.gardenbot.interaction.response.MessageResponse;
9+
import net.modgarden.gardenbot.interaction.response.Response;
10+
import net.modgarden.gardenbot.util.ModGardenAPIClient;
11+
12+
import java.io.IOException;
13+
import java.io.InputStream;
14+
import java.net.http.HttpResponse;
15+
16+
public class UnregisterHandler {
17+
public static Response handleEventUnregister(SlashCommandInteraction interaction) {
18+
interaction.event().deferReply(true).queue();
19+
User user = interaction.event().getUser();
20+
Guild guild = interaction.event().getGuild();
21+
22+
try {
23+
HttpResponse<InputStream> stream = ModGardenAPIClient.get("user/" + user.getId() + "?service=discord", HttpResponse.BodyHandlers.ofInputStream());
24+
if (stream.statusCode() != 200) {
25+
return new MessageResponse()
26+
.setMessage("You do not have a Mod Garden account.\nPlease create one with **/account create**.")
27+
.markEphemeral();
28+
}
29+
} catch (IOException | InterruptedException ex) {
30+
GardenBot.LOG.error("", ex);
31+
}
32+
33+
if (guild != null && guild.getId().equals(GardenBot.DOTENV.get("GUILD_ID"))) {
34+
// TODO: Unhardcode from Mod Garden: Nature and save data into backend user.
35+
Role role = guild.getRoleById("1320329531990741053");
36+
if (role == null) {
37+
return new MessageResponse()
38+
.setMessage("Non-existent role, please report this to a team member.")
39+
.markEphemeral();
40+
}
41+
if (!guild.getMembersWithRoles(role).contains(interaction.event().getMember())) {
42+
return new MessageResponse()
43+
.setMessage("You not a Mod Garden: Nature participant.")
44+
.markEphemeral();
45+
}
46+
guild.removeRoleFromMember(user, role).complete();
47+
return new MessageResponse()
48+
.setMessage("Successfully removed you as a participant from Mod Garden: Nature.")
49+
.markEphemeral();
50+
}
51+
return new MessageResponse()
52+
.setMessage("This command needs to be run inside the Mod Garden Discord server.")
53+
.markEphemeral();
54+
}
55+
}

0 commit comments

Comments
 (0)