add check to see if the bot can give the role when adding a new role to the auto role list

This commit is contained in:
Lee 2024-06-25 16:45:59 +01:00
parent e0fca911d9
commit 055c8709f8
4 changed files with 33 additions and 7 deletions

@ -0,0 +1,22 @@
package cc.fascinated.bat.common;
import cc.fascinated.bat.model.BatGuild;
import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.Role;
/**
* @author Fascinated (fascinated7)
*/
public class RoleUtils {
/**
* Checks if a member has permission to give the role to another member
*
* @param guild the guild to check
* @param member the member to check
* @param role the role to check
* @return if the member has permission to give the role
*/
public static boolean hasPermissionToGiveRole(BatGuild guild, Member member, Role role) {
return member.getRoles().stream().anyMatch(r -> r.getPosition() > role.getPosition());
}
}

@ -1,9 +1,7 @@
package cc.fascinated.bat.features; package cc.fascinated.bat.features;
import cc.fascinated.bat.service.CommandService;
import lombok.Getter; import lombok.Getter;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
/** /**
@ -13,9 +11,6 @@ import org.springframework.stereotype.Component;
@Getter @Getter
@Component @Component
public abstract class Feature { public abstract class Feature {
@Autowired
private CommandService commandService;
/** /**
* The name of the feature * The name of the feature
*/ */

@ -2,9 +2,11 @@ package cc.fascinated.bat.features.autorole.command;
import cc.fascinated.bat.command.BatSubCommand; import cc.fascinated.bat.command.BatSubCommand;
import cc.fascinated.bat.common.EmbedUtils; import cc.fascinated.bat.common.EmbedUtils;
import cc.fascinated.bat.common.RoleUtils;
import cc.fascinated.bat.features.autorole.profile.AutoRoleProfile; import cc.fascinated.bat.features.autorole.profile.AutoRoleProfile;
import cc.fascinated.bat.model.BatGuild; import cc.fascinated.bat.model.BatGuild;
import cc.fascinated.bat.model.BatUser; import cc.fascinated.bat.model.BatUser;
import cc.fascinated.bat.service.DiscordService;
import cc.fascinated.bat.service.GuildService; import cc.fascinated.bat.service.GuildService;
import lombok.NonNull; import lombok.NonNull;
import net.dv8tion.jda.api.entities.Member; import net.dv8tion.jda.api.entities.Member;
@ -54,10 +56,17 @@ public class AddSubCommand extends BatSubCommand {
return; return;
} }
if (!RoleUtils.hasPermissionToGiveRole(guild, guild.getDiscordGuild().getSelfMember(), role)) {
interaction.replyEmbeds(EmbedUtils.errorEmbed()
.setDescription("I do not have permission to give the role %s".formatted(role.getAsMention()))
.build()).queue();
return;
}
profile.addRole(role.getId()); profile.addRole(role.getId());
guildService.saveGuild(guild); guildService.saveGuild(guild);
interaction.replyEmbeds(EmbedUtils.successEmbed() interaction.replyEmbeds(EmbedUtils.successEmbed()
.setDescription("Successfully added the role %s to the auto roles list".formatted(role.getAsMention())) .setDescription("Successfully added the %s role to the auto roles list".formatted(role.getAsMention()))
.build()).queue(); .build()).queue();
} }
} }

@ -48,7 +48,7 @@ public class RemoveSubCommand extends BatSubCommand {
profile.removeRole(role.getId()); profile.removeRole(role.getId());
guildService.saveGuild(guild); guildService.saveGuild(guild);
interaction.replyEmbeds(EmbedUtils.errorEmbed() interaction.replyEmbeds(EmbedUtils.successEmbed()
.setDescription("Successfully removed the role %s from the auto roles list".formatted(role.getAsMention())) .setDescription("Successfully removed the role %s from the auto roles list".formatted(role.getAsMention()))
.build()).queue(); .build()).queue();
} }