diff --git a/abstracto-application/abstracto-modules/assignable-roles/assignable-roles-impl/src/main/java/dev/sheldan/abstracto/assignableroles/command/CreateAssignableRolePost.java b/abstracto-application/abstracto-modules/assignable-roles/assignable-roles-impl/src/main/java/dev/sheldan/abstracto/assignableroles/command/CreateAssignableRolePost.java index 90094099d..b491cbeeb 100644 --- a/abstracto-application/abstracto-modules/assignable-roles/assignable-roles-impl/src/main/java/dev/sheldan/abstracto/assignableroles/command/CreateAssignableRolePost.java +++ b/abstracto-application/abstracto-modules/assignable-roles/assignable-roles-impl/src/main/java/dev/sheldan/abstracto/assignableroles/command/CreateAssignableRolePost.java @@ -12,6 +12,7 @@ import dev.sheldan.abstracto.core.command.config.validator.MaxStringLengthValida import dev.sheldan.abstracto.core.command.execution.CommandContext; import dev.sheldan.abstracto.core.command.execution.CommandResult; import dev.sheldan.abstracto.core.config.FeatureDefinition; +import dev.sheldan.abstracto.core.exception.EntityGuildMismatchException; import dev.sheldan.abstracto.core.models.database.AChannel; import dev.sheldan.abstracto.core.service.management.ChannelManagementService; import dev.sheldan.abstracto.core.service.management.ServerManagementService; @@ -40,6 +41,9 @@ public class CreateAssignableRolePost extends AbstractConditionableCommand { String name = (String) parameters.get(0); TextChannel channel = (TextChannel) parameters.get(1); String text = (String) parameters.get(2); + if(!channel.getGuild().equals(commandContext.getGuild())) { + throw new EntityGuildMismatchException(); + } AChannel chosenChannel = channelManagementService.loadChannel(channel.getIdLong()); service.createAssignableRolePlace(name, chosenChannel, text); return CommandResult.fromSuccess(); diff --git a/abstracto-application/abstracto-modules/assignable-roles/assignable-roles-impl/src/main/java/dev/sheldan/abstracto/assignableroles/command/MoveAssignableRolePlace.java b/abstracto-application/abstracto-modules/assignable-roles/assignable-roles-impl/src/main/java/dev/sheldan/abstracto/assignableroles/command/MoveAssignableRolePlace.java index 58f71be5a..943e7aa76 100644 --- a/abstracto-application/abstracto-modules/assignable-roles/assignable-roles-impl/src/main/java/dev/sheldan/abstracto/assignableroles/command/MoveAssignableRolePlace.java +++ b/abstracto-application/abstracto-modules/assignable-roles/assignable-roles-impl/src/main/java/dev/sheldan/abstracto/assignableroles/command/MoveAssignableRolePlace.java @@ -9,6 +9,7 @@ import dev.sheldan.abstracto.core.command.config.Parameter; import dev.sheldan.abstracto.core.command.execution.CommandContext; import dev.sheldan.abstracto.core.command.execution.CommandResult; import dev.sheldan.abstracto.core.config.FeatureDefinition; +import dev.sheldan.abstracto.core.exception.EntityGuildMismatchException; import dev.sheldan.abstracto.core.service.management.ServerManagementService; import net.dv8tion.jda.api.entities.TextChannel; import org.springframework.beans.factory.annotation.Autowired; @@ -35,6 +36,9 @@ public class MoveAssignableRolePlace extends AbstractConditionableCommand { List parameters = commandContext.getParameters().getParameters(); String name = (String) parameters.get(0); TextChannel newChannel = (TextChannel) parameters.get(1); + if(!newChannel.getGuild().equals(commandContext.getGuild())) { + throw new EntityGuildMismatchException(); + } placeManagementService.moveAssignableRolePlace(name, newChannel); return CommandResult.fromSuccess(); } diff --git a/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/java/dev/sheldan/abstracto/experience/command/DisableExpForRole.java b/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/java/dev/sheldan/abstracto/experience/command/DisableExpForRole.java index 36cbcc9c2..15d9906ff 100644 --- a/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/java/dev/sheldan/abstracto/experience/command/DisableExpForRole.java +++ b/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/java/dev/sheldan/abstracto/experience/command/DisableExpForRole.java @@ -7,6 +7,7 @@ import dev.sheldan.abstracto.core.command.config.Parameter; import dev.sheldan.abstracto.core.command.execution.CommandContext; import dev.sheldan.abstracto.core.command.execution.CommandResult; import dev.sheldan.abstracto.core.config.FeatureDefinition; +import dev.sheldan.abstracto.core.exception.EntityGuildMismatchException; import dev.sheldan.abstracto.core.models.database.ARole; import dev.sheldan.abstracto.core.service.management.RoleManagementService; import dev.sheldan.abstracto.experience.config.ExperienceFeatureDefinition; @@ -34,6 +35,9 @@ public class DisableExpForRole extends AbstractConditionableCommand { List parameters = commandContext.getParameters().getParameters(); ARole role = (ARole) parameters.get(0); ARole actualRole = roleManagementService.findRole(role.getId()); + if(!actualRole.getServer().getId().equals(commandContext.getGuild().getIdLong())) { + throw new EntityGuildMismatchException(); + } // as we mange experience disabled roles via the existence of them in a table, we should not do anything // in case it is used a second time as a disabled experience role if(!disabledExpRoleManagementService.isExperienceDisabledForRole(actualRole)) { diff --git a/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/java/dev/sheldan/abstracto/experience/command/DisableExpGain.java b/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/java/dev/sheldan/abstracto/experience/command/DisableExpGain.java index 957429010..17a1eeeca 100644 --- a/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/java/dev/sheldan/abstracto/experience/command/DisableExpGain.java +++ b/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/java/dev/sheldan/abstracto/experience/command/DisableExpGain.java @@ -7,6 +7,7 @@ import dev.sheldan.abstracto.core.command.config.Parameter; import dev.sheldan.abstracto.core.command.execution.CommandContext; import dev.sheldan.abstracto.core.command.execution.CommandResult; import dev.sheldan.abstracto.core.config.FeatureDefinition; +import dev.sheldan.abstracto.core.exception.EntityGuildMismatchException; import dev.sheldan.abstracto.core.models.database.AUserInAServer; import dev.sheldan.abstracto.core.service.management.UserInServerManagementService; import dev.sheldan.abstracto.experience.config.ExperienceFeatureDefinition; @@ -33,6 +34,9 @@ public class DisableExpGain extends AbstractConditionableCommand { @Override public CommandResult execute(CommandContext commandContext) { Member para = (Member) commandContext.getParameters().getParameters().get(0); + if(!para.getGuild().equals(commandContext.getGuild())) { + throw new EntityGuildMismatchException(); + } AUserInAServer userInAServer = userInServerManagementService.loadOrCreateUser(para); aUserExperienceService.disableExperienceForUser(userInAServer); return CommandResult.fromSuccess(); diff --git a/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/java/dev/sheldan/abstracto/experience/command/EnableExpForRole.java b/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/java/dev/sheldan/abstracto/experience/command/EnableExpForRole.java index ac5ab1481..8c96d1825 100644 --- a/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/java/dev/sheldan/abstracto/experience/command/EnableExpForRole.java +++ b/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/java/dev/sheldan/abstracto/experience/command/EnableExpForRole.java @@ -7,6 +7,7 @@ import dev.sheldan.abstracto.core.command.config.Parameter; import dev.sheldan.abstracto.core.command.execution.CommandContext; import dev.sheldan.abstracto.core.command.execution.CommandResult; import dev.sheldan.abstracto.core.config.FeatureDefinition; +import dev.sheldan.abstracto.core.exception.EntityGuildMismatchException; import dev.sheldan.abstracto.core.models.database.ARole; import dev.sheldan.abstracto.core.service.management.RoleManagementService; import dev.sheldan.abstracto.experience.config.ExperienceFeatureDefinition; @@ -33,6 +34,9 @@ public class EnableExpForRole extends AbstractConditionableCommand { public CommandResult execute(CommandContext commandContext) { ARole role = (ARole) commandContext.getParameters().getParameters().get(0); ARole actualRole = roleManagementService.findRole(role.getId()); + if(!actualRole.getServer().getId().equals(commandContext.getGuild().getIdLong())) { + throw new EntityGuildMismatchException(); + } // If its not disabled for the role, we can remove it if(disabledExpRoleManagementService.isExperienceDisabledForRole(actualRole)) { disabledExpRoleManagementService.removeRoleToBeDisabledForExp(actualRole); diff --git a/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/java/dev/sheldan/abstracto/experience/command/EnableExpGain.java b/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/java/dev/sheldan/abstracto/experience/command/EnableExpGain.java index e2b3f0ff1..b81f5b17a 100644 --- a/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/java/dev/sheldan/abstracto/experience/command/EnableExpGain.java +++ b/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/java/dev/sheldan/abstracto/experience/command/EnableExpGain.java @@ -7,6 +7,7 @@ import dev.sheldan.abstracto.core.command.config.Parameter; import dev.sheldan.abstracto.core.command.execution.CommandContext; import dev.sheldan.abstracto.core.command.execution.CommandResult; import dev.sheldan.abstracto.core.config.FeatureDefinition; +import dev.sheldan.abstracto.core.exception.EntityGuildMismatchException; import dev.sheldan.abstracto.core.models.database.AUserInAServer; import dev.sheldan.abstracto.core.service.management.UserInServerManagementService; import dev.sheldan.abstracto.experience.config.ExperienceFeatureDefinition; @@ -33,6 +34,9 @@ public class EnableExpGain extends AbstractConditionableCommand { @Override public CommandResult execute(CommandContext commandContext) { Member para = (Member) commandContext.getParameters().getParameters().get(0); + if(!para.getGuild().equals(commandContext.getGuild())) { + throw new EntityGuildMismatchException(); + } AUserInAServer userInAServer = userInServerManagementService.loadOrCreateUser(para); aUserExperienceService.enableExperienceForUser(userInAServer); return CommandResult.fromSuccess(); diff --git a/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/java/dev/sheldan/abstracto/experience/command/Rank.java b/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/java/dev/sheldan/abstracto/experience/command/Rank.java index 17d8c5aa6..fd13b4739 100644 --- a/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/java/dev/sheldan/abstracto/experience/command/Rank.java +++ b/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/java/dev/sheldan/abstracto/experience/command/Rank.java @@ -7,6 +7,7 @@ import dev.sheldan.abstracto.core.command.config.Parameter; import dev.sheldan.abstracto.core.command.execution.CommandContext; import dev.sheldan.abstracto.core.command.execution.CommandResult; import dev.sheldan.abstracto.core.config.FeatureDefinition; +import dev.sheldan.abstracto.core.exception.EntityGuildMismatchException; import dev.sheldan.abstracto.core.models.database.AUserInAServer; import dev.sheldan.abstracto.core.service.ChannelService; import dev.sheldan.abstracto.core.service.management.UserInServerManagementService; @@ -69,6 +70,9 @@ public class Rank extends AbstractConditionableCommand { public CompletableFuture executeAsync(CommandContext commandContext) { List parameters = commandContext.getParameters().getParameters(); Member parameter = !parameters.isEmpty() ? (Member) parameters.get(0) : commandContext.getAuthor(); + if(!parameter.getGuild().equals(commandContext.getGuild())) { + throw new EntityGuildMismatchException(); + } AUserInAServer aUserInAServer = userInServerManagementService.loadOrCreateUser(parameter); LeaderBoardEntry userRank = userExperienceService.getRankOfUserInServer(aUserInAServer); CompletableFuture> future = converter.fromLeaderBoardEntry(Arrays.asList(userRank)); diff --git a/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/java/dev/sheldan/abstracto/experience/command/SetExpRole.java b/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/java/dev/sheldan/abstracto/experience/command/SetExpRole.java index acfa9a768..f3cba8db8 100644 --- a/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/java/dev/sheldan/abstracto/experience/command/SetExpRole.java +++ b/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/java/dev/sheldan/abstracto/experience/command/SetExpRole.java @@ -9,6 +9,7 @@ import dev.sheldan.abstracto.core.command.config.validator.MinIntegerValueValida import dev.sheldan.abstracto.core.command.execution.CommandContext; import dev.sheldan.abstracto.core.command.execution.CommandResult; import dev.sheldan.abstracto.core.config.FeatureDefinition; +import dev.sheldan.abstracto.core.exception.EntityGuildMismatchException; import dev.sheldan.abstracto.core.service.RoleService; import dev.sheldan.abstracto.core.service.management.RoleManagementService; import dev.sheldan.abstracto.experience.config.ExperienceFeatureDefinition; @@ -43,6 +44,9 @@ public class SetExpRole extends AbstractConditionableCommand { public CompletableFuture executeAsync(CommandContext commandContext) { Integer level = (Integer) commandContext.getParameters().getParameters().get(0); Role role = (Role) commandContext.getParameters().getParameters().get(1); + if(!role.getGuild().equals(commandContext.getGuild())) { + throw new EntityGuildMismatchException(); + } log.info("Setting role {} to be used for level {} on server {}", role.getId(), level, role.getGuild().getId()); return experienceRoleService.setRoleToLevel(role, level, commandContext.getChannel().getIdLong()) .thenApply(aVoid -> CommandResult.fromSuccess()); diff --git a/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/java/dev/sheldan/abstracto/experience/command/UnSetExpRole.java b/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/java/dev/sheldan/abstracto/experience/command/UnSetExpRole.java index 9b585b421..ebb1484d2 100644 --- a/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/java/dev/sheldan/abstracto/experience/command/UnSetExpRole.java +++ b/abstracto-application/abstracto-modules/experience-tracking/experience-tracking-impl/src/main/java/dev/sheldan/abstracto/experience/command/UnSetExpRole.java @@ -7,6 +7,7 @@ import dev.sheldan.abstracto.core.command.config.Parameter; import dev.sheldan.abstracto.core.command.execution.CommandContext; import dev.sheldan.abstracto.core.command.execution.CommandResult; import dev.sheldan.abstracto.core.config.FeatureDefinition; +import dev.sheldan.abstracto.core.exception.EntityGuildMismatchException; import dev.sheldan.abstracto.core.models.database.ARole; import dev.sheldan.abstracto.core.service.management.RoleManagementService; import dev.sheldan.abstracto.experience.config.ExperienceFeatureDefinition; @@ -42,6 +43,9 @@ public class UnSetExpRole extends AbstractConditionableCommand { public CompletableFuture executeAsync(CommandContext commandContext) { ARole role = (ARole) commandContext.getParameters().getParameters().get(0); ARole actualRole = roleManagementService.findRole(role.getId()); + if(!role.getServer().getId().equals(commandContext.getGuild().getIdLong())) { + throw new EntityGuildMismatchException(); + } // do not check for the existence of the role, because if the role was deleted, users should be able // to get rid of it in the configuration Optional experienceRole = experienceRoleManagementService.getRoleInServerOptional(actualRole); diff --git a/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/java/dev/sheldan/abstracto/moderation/command/Kick.java b/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/java/dev/sheldan/abstracto/moderation/command/Kick.java index a9dee3519..19691f939 100644 --- a/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/java/dev/sheldan/abstracto/moderation/command/Kick.java +++ b/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/java/dev/sheldan/abstracto/moderation/command/Kick.java @@ -10,6 +10,7 @@ import dev.sheldan.abstracto.core.command.execution.CommandContext; import dev.sheldan.abstracto.core.command.execution.CommandResult; import dev.sheldan.abstracto.core.command.execution.ContextConverter; import dev.sheldan.abstracto.core.config.FeatureDefinition; +import dev.sheldan.abstracto.core.exception.EntityGuildMismatchException; import dev.sheldan.abstracto.moderation.config.ModerationModuleDefinition; import dev.sheldan.abstracto.moderation.config.feature.ModerationFeatureDefinition; import dev.sheldan.abstracto.moderation.model.template.command.KickLogModel; @@ -40,6 +41,9 @@ public class Kick extends AbstractConditionableCommand { public CompletableFuture executeAsync(CommandContext commandContext) { List parameters = commandContext.getParameters().getParameters(); Member member = (Member) parameters.get(0); + if(!member.getGuild().equals(commandContext.getGuild())) { + throw new EntityGuildMismatchException(); + } String defaultReason = templateService.renderSimpleTemplate(KICK_DEFAULT_REASON_TEMPLATE, commandContext.getGuild().getIdLong()); String reason = parameters.size() == 2 ? (String) parameters.get(1) : defaultReason; diff --git a/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/java/dev/sheldan/abstracto/moderation/command/Mute.java b/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/java/dev/sheldan/abstracto/moderation/command/Mute.java index 9f5364770..ea600f385 100644 --- a/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/java/dev/sheldan/abstracto/moderation/command/Mute.java +++ b/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/java/dev/sheldan/abstracto/moderation/command/Mute.java @@ -9,6 +9,7 @@ import dev.sheldan.abstracto.core.command.config.Parameter; import dev.sheldan.abstracto.core.command.execution.CommandContext; import dev.sheldan.abstracto.core.command.execution.CommandResult; import dev.sheldan.abstracto.core.config.FeatureDefinition; +import dev.sheldan.abstracto.core.exception.EntityGuildMismatchException; import dev.sheldan.abstracto.core.models.ServerChannelMessage; import dev.sheldan.abstracto.core.templating.service.TemplateService; import dev.sheldan.abstracto.moderation.config.ModerationModuleDefinition; @@ -43,6 +44,9 @@ public class Mute extends AbstractConditionableCommand { public CompletableFuture executeAsync(CommandContext commandContext) { List parameters = commandContext.getParameters().getParameters(); Member member = (Member) parameters.get(0); + if(!member.getGuild().equals(commandContext.getGuild())) { + throw new EntityGuildMismatchException(); + } Duration duration = (Duration) parameters.get(1); String defaultReason = templateService.renderSimpleTemplate(MUTE_DEFAULT_REASON_TEMPLATE, commandContext.getGuild().getIdLong()); String reason = parameters.size() == 3 ? (String) parameters.get(2) : defaultReason; diff --git a/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/java/dev/sheldan/abstracto/moderation/command/Purge.java b/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/java/dev/sheldan/abstracto/moderation/command/Purge.java index e956fefdb..b616a52ec 100644 --- a/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/java/dev/sheldan/abstracto/moderation/command/Purge.java +++ b/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/java/dev/sheldan/abstracto/moderation/command/Purge.java @@ -9,6 +9,7 @@ import dev.sheldan.abstracto.core.command.config.validator.MinIntegerValueValida import dev.sheldan.abstracto.core.command.execution.CommandContext; import dev.sheldan.abstracto.core.command.execution.CommandResult; import dev.sheldan.abstracto.core.config.FeatureDefinition; +import dev.sheldan.abstracto.core.exception.EntityGuildMismatchException; import dev.sheldan.abstracto.moderation.config.ModerationModuleDefinition; import dev.sheldan.abstracto.moderation.config.feature.ModerationFeatureDefinition; import dev.sheldan.abstracto.moderation.service.PurgeService; @@ -33,6 +34,9 @@ public class Purge extends AbstractConditionableCommand { Member memberToPurgeMessagesOf = null; if(commandContext.getParameters().getParameters().size() == 2) { memberToPurgeMessagesOf = (Member) commandContext.getParameters().getParameters().get(1); + if(!memberToPurgeMessagesOf.getGuild().equals(commandContext.getGuild())) { + throw new EntityGuildMismatchException(); + } } return purgeService.purgeMessagesInChannel(amountOfMessages, commandContext.getChannel(), commandContext.getMessage(), memberToPurgeMessagesOf) .thenApply(aVoid -> CommandResult.fromSelfDestruct()); diff --git a/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/java/dev/sheldan/abstracto/moderation/command/SetMuteRole.java b/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/java/dev/sheldan/abstracto/moderation/command/SetMuteRole.java index 883995521..2cf2e2e30 100644 --- a/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/java/dev/sheldan/abstracto/moderation/command/SetMuteRole.java +++ b/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/java/dev/sheldan/abstracto/moderation/command/SetMuteRole.java @@ -7,6 +7,7 @@ import dev.sheldan.abstracto.core.command.config.Parameter; import dev.sheldan.abstracto.core.command.execution.CommandContext; import dev.sheldan.abstracto.core.command.execution.CommandResult; import dev.sheldan.abstracto.core.config.FeatureDefinition; +import dev.sheldan.abstracto.core.exception.EntityGuildMismatchException; import dev.sheldan.abstracto.core.models.database.ARole; import dev.sheldan.abstracto.core.models.database.AServer; import dev.sheldan.abstracto.core.service.management.RoleManagementService; @@ -36,6 +37,9 @@ public class SetMuteRole extends AbstractConditionableCommand { @Override public CommandResult execute(CommandContext commandContext) { Role jdaRole = (Role) commandContext.getParameters().getParameters().get(0); + if(!jdaRole.getGuild().equals(commandContext.getGuild())) { + throw new EntityGuildMismatchException(); + } ARole role = roleManagementService.findRole(jdaRole.getIdLong()); AServer server = serverManagementService.loadServer(commandContext.getGuild()); muteRoleManagementService.setMuteRoleForServer(server, role); diff --git a/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/java/dev/sheldan/abstracto/moderation/command/SlowMode.java b/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/java/dev/sheldan/abstracto/moderation/command/SlowMode.java index 4da7aefba..016e78bcb 100644 --- a/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/java/dev/sheldan/abstracto/moderation/command/SlowMode.java +++ b/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/java/dev/sheldan/abstracto/moderation/command/SlowMode.java @@ -7,6 +7,7 @@ import dev.sheldan.abstracto.core.command.config.Parameter; import dev.sheldan.abstracto.core.command.execution.CommandContext; import dev.sheldan.abstracto.core.command.execution.CommandResult; import dev.sheldan.abstracto.core.config.FeatureDefinition; +import dev.sheldan.abstracto.core.exception.EntityGuildMismatchException; import dev.sheldan.abstracto.core.utils.ParseUtils; import dev.sheldan.abstracto.moderation.config.ModerationModuleDefinition; import dev.sheldan.abstracto.moderation.config.feature.ModerationFeatureDefinition; @@ -38,6 +39,9 @@ public class SlowMode extends AbstractConditionableCommand { } if(commandContext.getParameters().getParameters().size() == 2) { channel = (TextChannel) commandContext.getParameters().getParameters().get(1); + if(!channel.getGuild().equals(commandContext.getGuild())) { + throw new EntityGuildMismatchException(); + } } else { channel = commandContext.getChannel(); } diff --git a/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/java/dev/sheldan/abstracto/moderation/command/UnMute.java b/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/java/dev/sheldan/abstracto/moderation/command/UnMute.java index b897ca577..120d89831 100644 --- a/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/java/dev/sheldan/abstracto/moderation/command/UnMute.java +++ b/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/java/dev/sheldan/abstracto/moderation/command/UnMute.java @@ -7,6 +7,7 @@ import dev.sheldan.abstracto.core.command.config.Parameter; import dev.sheldan.abstracto.core.command.execution.CommandContext; import dev.sheldan.abstracto.core.command.execution.CommandResult; import dev.sheldan.abstracto.core.config.FeatureDefinition; +import dev.sheldan.abstracto.core.exception.EntityGuildMismatchException; import dev.sheldan.abstracto.core.models.database.AUserInAServer; import dev.sheldan.abstracto.core.service.management.UserInServerManagementService; import dev.sheldan.abstracto.moderation.config.ModerationModuleDefinition; @@ -37,6 +38,9 @@ public class UnMute extends AbstractConditionableCommand { public CompletableFuture executeAsync(CommandContext commandContext) { List parameters = commandContext.getParameters().getParameters(); Member member = (Member) parameters.get(0); + if(!member.getGuild().equals(commandContext.getGuild())) { + throw new EntityGuildMismatchException(); + } AUserInAServer userToUnMute = userInServerManagementService.loadOrCreateUser(member); return muteService.unMuteUser(userToUnMute).thenApply(aVoid -> CommandResult.fromSuccess() diff --git a/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/java/dev/sheldan/abstracto/moderation/command/UserNoteCommand.java b/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/java/dev/sheldan/abstracto/moderation/command/UserNoteCommand.java index 73769dfd8..c12c464e9 100644 --- a/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/java/dev/sheldan/abstracto/moderation/command/UserNoteCommand.java +++ b/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/java/dev/sheldan/abstracto/moderation/command/UserNoteCommand.java @@ -7,6 +7,7 @@ import dev.sheldan.abstracto.core.command.config.Parameter; import dev.sheldan.abstracto.core.command.execution.CommandContext; import dev.sheldan.abstracto.core.command.execution.CommandResult; import dev.sheldan.abstracto.core.config.FeatureDefinition; +import dev.sheldan.abstracto.core.exception.EntityGuildMismatchException; import dev.sheldan.abstracto.core.models.database.AUserInAServer; import dev.sheldan.abstracto.core.service.management.UserInServerManagementService; import dev.sheldan.abstracto.moderation.config.ModerationModuleDefinition; @@ -32,6 +33,9 @@ public class UserNoteCommand extends AbstractConditionableCommand { public CommandResult execute(CommandContext commandContext) { List parameters = commandContext.getParameters().getParameters(); Member member = (Member) parameters.get(0); + if(!member.getGuild().equals(commandContext.getGuild())) { + throw new EntityGuildMismatchException(); + } String text = (String) parameters.get(1); AUserInAServer userInAServer = userInServerManagementService.loadOrCreateUser(member); userNoteManagementService.createUserNote(userInAServer, text); diff --git a/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/java/dev/sheldan/abstracto/moderation/command/UserNotes.java b/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/java/dev/sheldan/abstracto/moderation/command/UserNotes.java index f9a32186b..408ea5901 100644 --- a/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/java/dev/sheldan/abstracto/moderation/command/UserNotes.java +++ b/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/java/dev/sheldan/abstracto/moderation/command/UserNotes.java @@ -8,6 +8,7 @@ import dev.sheldan.abstracto.core.command.execution.CommandContext; import dev.sheldan.abstracto.core.command.execution.CommandResult; import dev.sheldan.abstracto.core.command.execution.ContextConverter; import dev.sheldan.abstracto.core.config.FeatureDefinition; +import dev.sheldan.abstracto.core.exception.EntityGuildMismatchException; import dev.sheldan.abstracto.core.models.FullUserInServer; import dev.sheldan.abstracto.core.models.database.AServer; import dev.sheldan.abstracto.core.models.database.AUserInAServer; @@ -56,6 +57,9 @@ public class UserNotes extends AbstractConditionableCommand { ListNotesModel model = (ListNotesModel) ContextConverter.fromCommandContext(commandContext, ListNotesModel.class); if(parameters.size() == 1) { Member member = (Member) parameters.get(0); + if(!member.getGuild().equals(commandContext.getGuild())) { + throw new EntityGuildMismatchException(); + } AUserInAServer userInAServer = userInServerManagementService.loadOrCreateUser(member); userNotes = userNoteManagementService.loadNotesForUser(userInAServer); FullUserInServer specifiedUser = FullUserInServer diff --git a/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/java/dev/sheldan/abstracto/moderation/command/Warn.java b/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/java/dev/sheldan/abstracto/moderation/command/Warn.java index f8ce2ddc9..4a73fe4b4 100644 --- a/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/java/dev/sheldan/abstracto/moderation/command/Warn.java +++ b/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/java/dev/sheldan/abstracto/moderation/command/Warn.java @@ -10,6 +10,7 @@ import dev.sheldan.abstracto.core.command.execution.CommandContext; import dev.sheldan.abstracto.core.command.execution.CommandResult; import dev.sheldan.abstracto.core.command.execution.ContextConverter; import dev.sheldan.abstracto.core.config.FeatureDefinition; +import dev.sheldan.abstracto.core.exception.EntityGuildMismatchException; import dev.sheldan.abstracto.moderation.config.ModerationModuleDefinition; import dev.sheldan.abstracto.moderation.config.feature.ModerationFeatureDefinition; import dev.sheldan.abstracto.moderation.model.template.command.WarnContext; @@ -42,6 +43,9 @@ public class Warn extends AbstractConditionableCommand { public CompletableFuture executeAsync(CommandContext commandContext) { List parameters = commandContext.getParameters().getParameters(); Member member = (Member) parameters.get(0); + if(!member.getGuild().equals(commandContext.getGuild())) { + throw new EntityGuildMismatchException(); + } String defaultReason = templateService.renderSimpleTemplate(WARN_DEFAULT_REASON_TEMPLATE, commandContext.getGuild().getIdLong()); String reason = parameters.size() == 2 ? (String) parameters.get(1) : defaultReason; WarnContext warnLogModel = (WarnContext) ContextConverter.slimFromCommandContext(commandContext, WarnContext.class); diff --git a/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/java/dev/sheldan/abstracto/moderation/command/Warnings.java b/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/java/dev/sheldan/abstracto/moderation/command/Warnings.java index 0fc679b4c..78325050a 100644 --- a/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/java/dev/sheldan/abstracto/moderation/command/Warnings.java +++ b/abstracto-application/abstracto-modules/moderation/moderation-impl/src/main/java/dev/sheldan/abstracto/moderation/command/Warnings.java @@ -10,6 +10,7 @@ import dev.sheldan.abstracto.core.command.execution.CommandContext; import dev.sheldan.abstracto.core.command.execution.CommandResult; import dev.sheldan.abstracto.core.command.execution.ContextConverter; import dev.sheldan.abstracto.core.config.FeatureDefinition; +import dev.sheldan.abstracto.core.exception.EntityGuildMismatchException; import dev.sheldan.abstracto.core.models.database.AServer; import dev.sheldan.abstracto.core.service.PaginatorService; import dev.sheldan.abstracto.core.service.management.ServerManagementService; @@ -60,6 +61,9 @@ public class Warnings extends AbstractConditionableCommand { List warnsToDisplay; if(!commandContext.getParameters().getParameters().isEmpty()) { Member member = (Member) commandContext.getParameters().getParameters().get(0); + if(!member.getGuild().equals(commandContext.getGuild())) { + throw new EntityGuildMismatchException(); + } warnsToDisplay = warnManagementService.getAllWarnsForUser(userInServerManagementService.loadOrCreateUser(member)); } else { AServer server = serverManagementService.loadServer(commandContext.getGuild()); diff --git a/abstracto-application/abstracto-modules/modmail/modmail-impl/src/main/java/dev/sheldan/abstracto/modmail/command/Contact.java b/abstracto-application/abstracto-modules/modmail/modmail-impl/src/main/java/dev/sheldan/abstracto/modmail/command/Contact.java index 9ef544075..26d4608a9 100644 --- a/abstracto-application/abstracto-modules/modmail/modmail-impl/src/main/java/dev/sheldan/abstracto/modmail/command/Contact.java +++ b/abstracto-application/abstracto-modules/modmail/modmail-impl/src/main/java/dev/sheldan/abstracto/modmail/command/Contact.java @@ -8,6 +8,7 @@ import dev.sheldan.abstracto.core.command.execution.CommandContext; import dev.sheldan.abstracto.core.command.execution.CommandResult; import dev.sheldan.abstracto.core.command.execution.ContextConverter; import dev.sheldan.abstracto.core.config.FeatureDefinition; +import dev.sheldan.abstracto.core.exception.EntityGuildMismatchException; import dev.sheldan.abstracto.core.models.database.AUserInAServer; import dev.sheldan.abstracto.core.service.ChannelService; import dev.sheldan.abstracto.core.service.management.UserInServerManagementService; @@ -50,6 +51,9 @@ public class Contact extends AbstractConditionableCommand { @Override public CompletableFuture executeAsync(CommandContext commandContext) { Member targetUser = (Member) commandContext.getParameters().getParameters().get(0); + if(!targetUser.getGuild().equals(commandContext.getGuild())) { + throw new EntityGuildMismatchException(); + } AUserInAServer user = userManagementService.loadOrCreateUser(targetUser); // if this AUserInAServer already has an open thread, we should instead post a message // containing a link to the channel, instead of opening a new one diff --git a/abstracto-application/abstracto-modules/modmail/modmail-impl/src/main/java/dev/sheldan/abstracto/modmail/command/SetModMailRole.java b/abstracto-application/abstracto-modules/modmail/modmail-impl/src/main/java/dev/sheldan/abstracto/modmail/command/SetModMailRole.java index 6e8118199..f3223b661 100644 --- a/abstracto-application/abstracto-modules/modmail/modmail-impl/src/main/java/dev/sheldan/abstracto/modmail/command/SetModMailRole.java +++ b/abstracto-application/abstracto-modules/modmail/modmail-impl/src/main/java/dev/sheldan/abstracto/modmail/command/SetModMailRole.java @@ -7,6 +7,7 @@ import dev.sheldan.abstracto.core.command.config.Parameter; import dev.sheldan.abstracto.core.command.execution.CommandContext; import dev.sheldan.abstracto.core.command.execution.CommandResult; import dev.sheldan.abstracto.core.config.FeatureDefinition; +import dev.sheldan.abstracto.core.exception.EntityGuildMismatchException; import dev.sheldan.abstracto.core.models.database.ARole; import dev.sheldan.abstracto.core.service.management.RoleManagementService; import dev.sheldan.abstracto.modmail.config.ModMailFeatureDefinition; @@ -35,6 +36,9 @@ public class SetModMailRole extends AbstractConditionableCommand { @Override public CommandResult execute(CommandContext commandContext) { Role jdaRole = (Role) commandContext.getParameters().getParameters().get(0); + if(!jdaRole.getGuild().equals(commandContext.getGuild())) { + throw new EntityGuildMismatchException(); + } ARole role = roleManagementService.findRole(jdaRole.getIdLong()); modMailRoleService.addRoleToModMailRoles(role); return CommandResult.fromSuccess(); diff --git a/abstracto-application/abstracto-modules/utility/utility-impl/src/main/java/dev/sheldan/abstracto/utility/command/ShowAvatar.java b/abstracto-application/abstracto-modules/utility/utility-impl/src/main/java/dev/sheldan/abstracto/utility/command/ShowAvatar.java index 442157414..b1d55a674 100644 --- a/abstracto-application/abstracto-modules/utility/utility-impl/src/main/java/dev/sheldan/abstracto/utility/command/ShowAvatar.java +++ b/abstracto-application/abstracto-modules/utility/utility-impl/src/main/java/dev/sheldan/abstracto/utility/command/ShowAvatar.java @@ -9,6 +9,7 @@ import dev.sheldan.abstracto.core.command.execution.CommandContext; import dev.sheldan.abstracto.core.command.execution.CommandResult; import dev.sheldan.abstracto.core.command.execution.ContextConverter; import dev.sheldan.abstracto.core.config.FeatureDefinition; +import dev.sheldan.abstracto.core.exception.EntityGuildMismatchException; import dev.sheldan.abstracto.core.service.ChannelService; import dev.sheldan.abstracto.core.utils.FutureUtils; import dev.sheldan.abstracto.utility.config.UtilityFeatureDefinition; @@ -34,6 +35,9 @@ public class ShowAvatar extends AbstractConditionableCommand { public CompletableFuture executeAsync(CommandContext commandContext) { List parameters = commandContext.getParameters().getParameters(); Member memberToShow = parameters.size() == 1 ? (Member) parameters.get(0) : commandContext.getUserInitiatedContext().getMember(); + if(!memberToShow.getGuild().equals(commandContext.getGuild())) { + throw new EntityGuildMismatchException(); + } ShowAvatarModel model = (ShowAvatarModel) ContextConverter.fromCommandContext(commandContext, ShowAvatarModel.class); log.info("Showing avatar for member {} towards user {} in channel {} in server {}.", memberToShow.getId(), commandContext.getAuthor().getId(), commandContext.getChannel().getId(), commandContext.getGuild().getId()); diff --git a/abstracto-application/abstracto-modules/utility/utility-impl/src/main/java/dev/sheldan/abstracto/utility/command/UserInfo.java b/abstracto-application/abstracto-modules/utility/utility-impl/src/main/java/dev/sheldan/abstracto/utility/command/UserInfo.java index 9a0b8917e..034a87386 100644 --- a/abstracto-application/abstracto-modules/utility/utility-impl/src/main/java/dev/sheldan/abstracto/utility/command/UserInfo.java +++ b/abstracto-application/abstracto-modules/utility/utility-impl/src/main/java/dev/sheldan/abstracto/utility/command/UserInfo.java @@ -9,6 +9,7 @@ import dev.sheldan.abstracto.core.command.execution.CommandContext; import dev.sheldan.abstracto.core.command.execution.CommandResult; import dev.sheldan.abstracto.core.command.execution.ContextConverter; import dev.sheldan.abstracto.core.config.FeatureDefinition; +import dev.sheldan.abstracto.core.exception.EntityGuildMismatchException; import dev.sheldan.abstracto.core.service.ChannelService; import dev.sheldan.abstracto.core.service.MemberService; import dev.sheldan.abstracto.core.utils.FutureUtils; @@ -41,6 +42,9 @@ public class UserInfo extends AbstractConditionableCommand { public CompletableFuture executeAsync(CommandContext commandContext) { List parameters = commandContext.getParameters().getParameters(); Member memberToShow = parameters.size() == 1 ? (Member) parameters.get(0) : commandContext.getAuthor(); + if(!memberToShow.getGuild().equals(commandContext.getGuild())) { + throw new EntityGuildMismatchException(); + } UserInfoModel model = (UserInfoModel) ContextConverter.slimFromCommandContext(commandContext, UserInfoModel.class); if(!memberToShow.hasTimeJoined()) { log.info("Force reloading member {} in guild {} for user info.", memberToShow.getId(), memberToShow.getGuild().getId()); diff --git a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/commands/channels/AddToChannelGroup.java b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/commands/channels/AddToChannelGroup.java index 261eaa373..8ced5bb5f 100644 --- a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/commands/channels/AddToChannelGroup.java +++ b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/commands/channels/AddToChannelGroup.java @@ -8,6 +8,7 @@ import dev.sheldan.abstracto.core.command.config.features.CoreFeatureDefinition; import dev.sheldan.abstracto.core.command.execution.CommandContext; import dev.sheldan.abstracto.core.command.execution.CommandResult; import dev.sheldan.abstracto.core.config.FeatureDefinition; +import dev.sheldan.abstracto.core.exception.EntityGuildMismatchException; import dev.sheldan.abstracto.core.service.ChannelGroupService; import net.dv8tion.jda.api.entities.TextChannel; import org.springframework.beans.factory.annotation.Autowired; @@ -27,6 +28,9 @@ public class AddToChannelGroup extends AbstractConditionableCommand { public CommandResult execute(CommandContext commandContext) { String name = (String) commandContext.getParameters().getParameters().get(0); TextChannel channel = (TextChannel) commandContext.getParameters().getParameters().get(1); + if(!channel.getGuild().equals(commandContext.getGuild())) { + throw new EntityGuildMismatchException(); + } channelGroupService.addChannelToChannelGroup(name, channel); return CommandResult.fromSuccess(); } diff --git a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/commands/channels/PostTargetCommand.java b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/commands/channels/PostTargetCommand.java index 1b09c9dcf..39cdf4e0a 100644 --- a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/commands/channels/PostTargetCommand.java +++ b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/commands/channels/PostTargetCommand.java @@ -9,6 +9,7 @@ import dev.sheldan.abstracto.core.command.execution.CommandContext; import dev.sheldan.abstracto.core.command.execution.CommandResult; import dev.sheldan.abstracto.core.command.execution.ContextConverter; import dev.sheldan.abstracto.core.config.FeatureDefinition; +import dev.sheldan.abstracto.core.exception.EntityGuildMismatchException; import dev.sheldan.abstracto.core.exception.PostTargetNotValidException; import dev.sheldan.abstracto.core.models.database.AServer; import dev.sheldan.abstracto.core.models.database.PostTarget; @@ -80,6 +81,9 @@ public class PostTargetCommand extends AbstractConditionableCommand { throw new PostTargetNotValidException(targetName, postTargetService.getAvailablePostTargets()); } GuildChannel channel = (GuildChannel) commandContext.getParameters().getParameters().get(1); + if(!channel.getGuild().equals(commandContext.getGuild())) { + throw new EntityGuildMismatchException(); + } Guild guild = channel.getGuild(); postTargetManagement.createOrUpdate(targetName, guild.getIdLong(), channel.getIdLong()); return CompletableFuture.completedFuture(CommandResult.fromSuccess()); diff --git a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/commands/channels/RemoveFromChannelGroup.java b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/commands/channels/RemoveFromChannelGroup.java index c3b3a46b9..3bfc6664a 100644 --- a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/commands/channels/RemoveFromChannelGroup.java +++ b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/commands/channels/RemoveFromChannelGroup.java @@ -8,6 +8,7 @@ import dev.sheldan.abstracto.core.command.config.features.CoreFeatureDefinition; import dev.sheldan.abstracto.core.command.execution.CommandContext; import dev.sheldan.abstracto.core.command.execution.CommandResult; import dev.sheldan.abstracto.core.config.FeatureDefinition; +import dev.sheldan.abstracto.core.exception.EntityGuildMismatchException; import dev.sheldan.abstracto.core.models.database.AChannel; import dev.sheldan.abstracto.core.service.ChannelGroupService; import dev.sheldan.abstracto.core.service.management.ChannelManagementService; @@ -31,6 +32,9 @@ public class RemoveFromChannelGroup extends AbstractConditionableCommand { String name = (String) commandContext.getParameters().getParameters().get(0); AChannel fakeChannel = (AChannel) commandContext.getParameters().getParameters().get(1); AChannel actualChannel = channelManagementService.loadChannel(fakeChannel.getId()); + if(!actualChannel.getServer().getId().equals(commandContext.getGuild().getIdLong())) { + throw new EntityGuildMismatchException(); + } channelGroupService.removeChannelFromChannelGroup(name, actualChannel); return CommandResult.fromSuccess(); } diff --git a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/commands/config/features/AllowRole.java b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/commands/config/features/AllowRole.java index 70f794339..545f006aa 100644 --- a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/commands/config/features/AllowRole.java +++ b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/commands/config/features/AllowRole.java @@ -14,6 +14,7 @@ import dev.sheldan.abstracto.core.command.service.management.CommandManagementSe import dev.sheldan.abstracto.core.command.service.management.FeatureManagementService; import dev.sheldan.abstracto.core.commands.config.ConfigModuleDefinition; import dev.sheldan.abstracto.core.config.FeatureDefinition; +import dev.sheldan.abstracto.core.exception.EntityGuildMismatchException; import dev.sheldan.abstracto.core.models.database.ARole; import dev.sheldan.abstracto.core.service.FeatureConfigService; import dev.sheldan.abstracto.core.service.management.RoleManagementService; @@ -50,6 +51,9 @@ public class AllowRole extends AbstractConditionableCommand { String name = (String) commandContext.getParameters().getParameters().get(0); ARole fakeRole = (ARole) commandContext.getParameters().getParameters().get(1); ARole actualRole = roleManagementService.findRole(fakeRole.getId()); + if(!actualRole.getServer().getId().equals(commandContext.getGuild().getIdLong())) { + throw new EntityGuildMismatchException(); + } if(featureManagementService.featureExists(name)) { FeatureDefinition featureDefinition = featureFlagService.getFeatureEnum(name); commandService.allowFeatureForRole(featureDefinition, actualRole); diff --git a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/commands/config/features/DisAllowRole.java b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/commands/config/features/DisAllowRole.java index 826ecd7f5..919329fd1 100644 --- a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/commands/config/features/DisAllowRole.java +++ b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/commands/config/features/DisAllowRole.java @@ -14,6 +14,7 @@ import dev.sheldan.abstracto.core.command.service.management.CommandManagementSe import dev.sheldan.abstracto.core.command.service.management.FeatureManagementService; import dev.sheldan.abstracto.core.commands.config.ConfigModuleDefinition; import dev.sheldan.abstracto.core.config.FeatureDefinition; +import dev.sheldan.abstracto.core.exception.EntityGuildMismatchException; import dev.sheldan.abstracto.core.models.database.AFeature; import dev.sheldan.abstracto.core.models.database.ARole; import dev.sheldan.abstracto.core.service.management.RoleManagementService; @@ -47,6 +48,9 @@ public class DisAllowRole extends AbstractConditionableCommand { String name = (String) commandContext.getParameters().getParameters().get(0); ARole role = (ARole) commandContext.getParameters().getParameters().get(1); ARole actualRole = roleManagementService.findRole(role.getId()); + if(!actualRole.getServer().getId().equals(commandContext.getGuild().getIdLong())) { + throw new EntityGuildMismatchException(); + } if(featureManagementService.featureExists(name)) { AFeature feature = featureManagementService.getFeature(name); feature.getCommands().forEach(command -> diff --git a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/commands/config/features/MakeAffected.java b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/commands/config/features/MakeAffected.java index 6546e889c..1fe4a10c5 100644 --- a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/commands/config/features/MakeAffected.java +++ b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/commands/config/features/MakeAffected.java @@ -9,6 +9,7 @@ import dev.sheldan.abstracto.core.command.execution.CommandContext; import dev.sheldan.abstracto.core.command.execution.CommandResult; import dev.sheldan.abstracto.core.commands.config.ConfigModuleDefinition; import dev.sheldan.abstracto.core.config.FeatureDefinition; +import dev.sheldan.abstracto.core.exception.EntityGuildMismatchException; import dev.sheldan.abstracto.core.models.database.ARole; import dev.sheldan.abstracto.core.service.RoleImmunityService; import dev.sheldan.abstracto.core.service.management.RoleManagementService; @@ -32,6 +33,9 @@ public class MakeAffected extends AbstractConditionableCommand { String name = (String) commandContext.getParameters().getParameters().get(0); ARole role = (ARole) commandContext.getParameters().getParameters().get(1); ARole actualRole = roleManagementService.findRole(role.getId()); + if(!actualRole.getServer().getId().equals(commandContext.getGuild().getIdLong())) { + throw new EntityGuildMismatchException(); + } roleImmunityService.makeRoleAffected(actualRole, name); return CommandResult.fromSuccess(); } diff --git a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/commands/config/features/MakeImmune.java b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/commands/config/features/MakeImmune.java index cae0bf6dd..6893a7747 100644 --- a/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/commands/config/features/MakeImmune.java +++ b/abstracto-application/core/core-impl/src/main/java/dev/sheldan/abstracto/core/commands/config/features/MakeImmune.java @@ -9,6 +9,7 @@ import dev.sheldan.abstracto.core.command.execution.CommandContext; import dev.sheldan.abstracto.core.command.execution.CommandResult; import dev.sheldan.abstracto.core.commands.config.ConfigModuleDefinition; import dev.sheldan.abstracto.core.config.FeatureDefinition; +import dev.sheldan.abstracto.core.exception.EntityGuildMismatchException; import dev.sheldan.abstracto.core.service.RoleImmunityService; import net.dv8tion.jda.api.entities.Role; import org.springframework.beans.factory.annotation.Autowired; @@ -27,6 +28,9 @@ public class MakeImmune extends AbstractConditionableCommand { public CommandResult execute(CommandContext commandContext) { String name = (String) commandContext.getParameters().getParameters().get(0); Role role = (Role) commandContext.getParameters().getParameters().get(1); + if(!role.getGuild().equals(commandContext.getGuild())) { + throw new EntityGuildMismatchException(); + } roleImmunityService.makeRoleImmune(role, name); return CommandResult.fromSuccess(); } diff --git a/abstracto-application/core/core-int/src/main/java/dev/sheldan/abstracto/core/exception/EntityGuildMismatchException.java b/abstracto-application/core/core-int/src/main/java/dev/sheldan/abstracto/core/exception/EntityGuildMismatchException.java new file mode 100644 index 000000000..9b33d8f43 --- /dev/null +++ b/abstracto-application/core/core-int/src/main/java/dev/sheldan/abstracto/core/exception/EntityGuildMismatchException.java @@ -0,0 +1,13 @@ +package dev.sheldan.abstracto.core.exception; + +public class EntityGuildMismatchException extends AbstractoTemplatableException { + @Override + public String getTemplateName() { + return "entity_guild_mismatch_exception"; + } + + @Override + public Object getTemplateModel() { + return new Object(); + } +}