Skip to content

Commit bf06967

Browse files
committed
feat: team modify command
fix: team invite endpoint incorrect
1 parent f0ea495 commit bf06967

11 files changed

Lines changed: 274 additions & 24 deletions

File tree

src/main/java/net/modgarden/gardenbot/client/ModGarden.java

Lines changed: 39 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import net.modgarden.gardenbot.client.mod_garden.project.ModGardenSubmission;
1818
import net.modgarden.gardenbot.client.mod_garden.project.SubmissionPlatform;
1919
import net.modgarden.gardenbot.client.mod_garden.project.ProjectMetadata;
20+
import net.modgarden.gardenbot.client.mod_garden.project.patch.ProjectTeamPatch;
2021
import net.modgarden.gardenbot.client.mod_garden.request.*;
2122
import net.modgarden.gardenbot.client.mod_garden.role.ModGardenRole;
2223
import net.modgarden.gardenbot.client.mod_garden.role.RoleIntegrations;
@@ -823,20 +824,51 @@ public static void transferProjectOwnership(ModGardenProject project, ModGardenU
823824
}
824825
}
825826

827+
public static void modifyTeamMembers(ModGardenProject project, ProjectTeamPatch patch) throws HypertextException {
828+
JsonElement requestJson = GardenBot.GSON.toJsonTree(
829+
patch,
830+
ProjectTeamPatch.class
831+
);
832+
833+
try {
834+
HttpResponse<?> response = patch(
835+
"v2/projects/" + project.id(),
836+
HttpRequest.BodyPublishers.ofString(requestJson.toString()),
837+
HttpResponse.BodyHandlers.discarding()
838+
);
839+
840+
if (response.statusCode() == 404) {
841+
throw new HypertextException(404, "Project not found");
842+
}
843+
} catch (IOException | InterruptedException e) {
844+
throw new InternalServerException(e.getMessage());
845+
}
846+
}
847+
826848
public static void addTeamMembers(ModGardenProject project, Map<ModGardenUser, String> usersToRole) throws HypertextException {
827849
JsonElement requestJson = GardenBot.GSON.toJsonTree(
828-
usersToRole.entrySet()
829-
.stream()
830-
.map(entry -> Map.entry(entry.getKey().id(), entry.getValue()))
831-
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)),
832-
Map.class
850+
new ProjectTeamPatch(
851+
usersToRole.entrySet()
852+
.stream()
853+
.map(entry -> Map.entry(entry.getKey().id(), entry.getValue()))
854+
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)),
855+
usersToRole.keySet()
856+
.stream()
857+
.map(user -> Map.entry(user.id(), "0"))
858+
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue))
859+
),
860+
ProjectTeamPatch.class
833861
);
834862
try {
835-
patch(
836-
"v2/projects/" + project.id() + "/members",
863+
HttpResponse<?> response = patch(
864+
"v2/projects/" + project.id(),
837865
HttpRequest.BodyPublishers.ofString(requestJson.toString()),
838866
HttpResponse.BodyHandlers.discarding()
839867
);
868+
869+
if (response.statusCode() == 404) {
870+
throw new HypertextException(404, "Project not found");
871+
}
840872
} catch (IOException | InterruptedException e) {
841873
throw new InternalServerException(e.getMessage());
842874
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package net.modgarden.gardenbot.client.mod_garden.project.patch;
2+
3+
import java.util.Map;
4+
5+
public record ProjectTeamPatch(Map<String, String> team, Map<String, String> permissions) {
6+
}

src/main/java/net/modgarden/gardenbot/command/SlashCommandOption.java

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,7 @@
44
import java.util.Collections;
55
import java.util.List;
66
import java.util.Locale;
7-
import java.util.function.Supplier;
87

9-
import net.dv8tion.jda.api.interactions.DiscordLocale;
108
import net.dv8tion.jda.api.interactions.commands.Command;
119
import net.dv8tion.jda.api.interactions.commands.OptionMapping;
1210
import net.dv8tion.jda.api.interactions.commands.OptionType;
@@ -16,6 +14,7 @@
1614
import net.modgarden.gardenbot.client.mod_garden.role.ModGardenRole;
1715
import net.modgarden.gardenbot.util.FallibleSupplier;
1816
import net.modgarden.gardenbot.util.permission.Permission;
17+
import net.modgarden.gardenbot.util.permission.PermissionScope;
1918
import org.jetbrains.annotations.NotNull;
2019

2120
public record SlashCommandOption(OptionType type,
@@ -72,7 +71,8 @@ public static List<Command.Choice> pickChoices(
7271
@NotNull
7372
public static List<Command.Choice> getPermissionsChoices(
7473
AutoCompletionGetter autoCompletionGetter,
75-
String optionName
74+
String optionName,
75+
PermissionScope scope
7676
) {
7777
String permissions = autoCompletionGetter.getOption(optionName, OptionMapping::getAsString);
7878

@@ -84,6 +84,7 @@ public static List<Command.Choice> getPermissionsChoices(
8484
String currentPermissionFriendlyName = splitPermissions.getLast();
8585
Permission currentPermission = Permission.fromName(currentPermissionFriendlyName);
8686
List<Command.Choice> choices = new ArrayList<>();
87+
choices.add(new Command.Choice("None", 0));
8788
List<String> splitPermissionNames = new ArrayList<>(splitPermissions.size());
8889
splitPermissions.removeLast();
8990

@@ -92,10 +93,20 @@ public static List<Command.Choice> getPermissionsChoices(
9293
}
9394

9495
for (String name : splitPermissions) {
95-
splitPermissionNames.add(Permission.fromName(name).getFriendlyName());
96+
Permission permission = Permission.fromName(name);
97+
98+
if (!permission.getScope().matches(scope)) {
99+
continue;
100+
}
101+
102+
splitPermissionNames.add(permission.getFriendlyName());
96103
}
97104

98105
for (Permission permission : Permission.values()) {
106+
if (!permission.getScope().matches(scope)) {
107+
continue;
108+
}
109+
99110
if (splitPermissionNames.contains(permission.getFriendlyName())) {
100111
continue;
101112
}

src/main/java/net/modgarden/gardenbot/command/admin/role/AdminRoleCopyCommand.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,10 @@
1414
import net.modgarden.gardenbot.client.mod_garden.role.ModGardenRole;
1515
import net.modgarden.gardenbot.command.AutoCompletionGetter;
1616
import net.modgarden.gardenbot.command.SlashCommandOption;
17-
import net.modgarden.gardenbot.command.admin.AdminSlashCommand;
1817
import net.modgarden.gardenbot.interaction.SlashCommandInteraction;
1918
import net.modgarden.gardenbot.response.MessageResponse;
2019
import net.modgarden.gardenbot.response.Response;
20+
import net.modgarden.gardenbot.util.permission.PermissionScope;
2121
import org.jetbrains.annotations.NotNull;
2222

2323
public class AdminRoleCopyCommand extends AdminRoleSlashCommand {
@@ -41,7 +41,7 @@ public List<Command.Choice> getAutoCompleteChoices(
4141
User user,
4242
AutoCompletionGetter autoCompletionGetter
4343
) throws HypertextException {
44-
return SlashCommandOption.getPermissionsChoices(autoCompletionGetter, "permissions");
44+
return SlashCommandOption.getPermissionsChoices(autoCompletionGetter, "permissions", PermissionScope.USER);
4545
}
4646

4747
@NotNull

src/main/java/net/modgarden/gardenbot/command/admin/role/AdminRoleCreateCommand.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,14 @@
1717
import net.modgarden.gardenbot.client.mod_garden.role.integration.DiscordRoleIntegration;
1818
import net.modgarden.gardenbot.command.AutoCompletionGetter;
1919
import net.modgarden.gardenbot.command.SlashCommandOption;
20-
import net.modgarden.gardenbot.command.admin.AdminSlashCommand;
2120
import net.modgarden.gardenbot.interaction.SlashCommandInteraction;
2221
import net.modgarden.gardenbot.response.MessageResponse;
2322
import net.modgarden.gardenbot.response.Response;
2423
import net.modgarden.gardenbot.util.permission.Permission;
24+
import net.modgarden.gardenbot.util.permission.PermissionScope;
25+
import net.modgarden.gardenbot.util.permission.Permissions;
2526
import org.jetbrains.annotations.NotNull;
27+
import org.jetbrains.annotations.Nullable;
2628

2729
public class AdminRoleCreateCommand extends AdminRoleSlashCommand {
2830
public AdminRoleCreateCommand() {
@@ -46,7 +48,11 @@ public AdminRoleCreateCommand() {
4648
}
4749

4850
@NotNull
49-
public static BigInteger parsePermissions(String permissions) {
51+
public static BigInteger parsePermissions(@Nullable String permissions) {
52+
if (permissions == null) {
53+
return Permissions.NIL;
54+
}
55+
5056
BigInteger permissionBits = BigInteger.valueOf(0);
5157
String[] splitPermissions = permissions.split(",");
5258

@@ -66,7 +72,7 @@ public List<Command.Choice> getAutoCompleteChoices(
6672
User user,
6773
AutoCompletionGetter autoCompletionGetter
6874
) throws HypertextException {
69-
return SlashCommandOption.getPermissionsChoices(autoCompletionGetter, "permissions");
75+
return SlashCommandOption.getPermissionsChoices(autoCompletionGetter, "permissions", PermissionScope.USER);
7076
}
7177

7278
@NotNull

src/main/java/net/modgarden/gardenbot/command/admin/role/AdminRoleModifyCommand.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import java.math.BigInteger;
66
import java.sql.SQLException;
77
import java.util.List;
8-
import java.util.Objects;
98

109
import net.dv8tion.jda.api.entities.Role;
1110
import net.dv8tion.jda.api.entities.User;
@@ -14,18 +13,17 @@
1413
import net.dv8tion.jda.api.interactions.commands.OptionType;
1514
import net.modgarden.gardenbot.client.ModGarden;
1615
import net.modgarden.gardenbot.client.exception.HypertextException;
17-
import net.modgarden.gardenbot.client.exception.InternalServerException;
1816
import net.modgarden.gardenbot.client.exception.NotFoundException;
1917
import net.modgarden.gardenbot.client.mod_garden.role.ModGardenRole;
2018
import net.modgarden.gardenbot.client.mod_garden.role.RoleIntegrations;
2119
import net.modgarden.gardenbot.client.mod_garden.role.integration.DiscordRoleIntegration;
2220
import net.modgarden.gardenbot.command.AutoCompletionGetter;
2321
import net.modgarden.gardenbot.command.SlashCommandOption;
24-
import net.modgarden.gardenbot.command.admin.AdminSlashCommand;
2522
import net.modgarden.gardenbot.interaction.SlashCommandInteraction;
2623
import net.modgarden.gardenbot.response.MessageResponse;
2724
import net.modgarden.gardenbot.response.Response;
2825
import net.modgarden.gardenbot.util.NullableWrapper;
26+
import net.modgarden.gardenbot.util.permission.PermissionScope;
2927
import org.jetbrains.annotations.NotNull;
3028

3129
public class AdminRoleModifyCommand extends AdminRoleSlashCommand {
@@ -64,7 +62,7 @@ public List<Command.Choice> getAutoCompleteChoices(
6462
) throws HypertextException {
6563
return SlashCommandOption.pickChoices(
6664
() -> SlashCommandOption.getRoleIdChoices(focusedOption, autoCompletionGetter, "role"),
67-
() -> SlashCommandOption.getPermissionsChoices(autoCompletionGetter, "permissions")
65+
() -> SlashCommandOption.getPermissionsChoices(autoCompletionGetter, "permissions", PermissionScope.USER)
6866
);
6967
}
7068

src/main/java/net/modgarden/gardenbot/command/team/TeamCommandGroup.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@ public TeamCommandGroup() {
2525
super(
2626
"team",
2727
"Modify the team of a Mod Garden project.",
28-
TeamInviteCommand::new
28+
TeamInviteCommand::new,
29+
TeamModifyCommand::new
2930
);
3031
}
3132

0 commit comments

Comments
 (0)