[AB-47] adding feature to define custom actions once members reach a certain level

This commit is contained in:
Sheldan
2024-02-28 21:26:42 +01:00
parent c11ddd84ab
commit 93b02d37ed
43 changed files with 1476 additions and 53 deletions

View File

@@ -3,18 +3,14 @@ package dev.sheldan.abstracto.core.command.handler;
import dev.sheldan.abstracto.core.command.Command;
import dev.sheldan.abstracto.core.command.CommandConstants;
import dev.sheldan.abstracto.core.command.config.Parameter;
import dev.sheldan.abstracto.core.command.exception.AbstractoTemplatedException;
import dev.sheldan.abstracto.core.command.execution.ParameterPieceType;
import dev.sheldan.abstracto.core.command.execution.UnparsedCommandParameterPiece;
import dev.sheldan.abstracto.core.command.handler.provided.RoleParameterHandler;
import dev.sheldan.abstracto.core.utils.ParseUtils;
import net.dv8tion.jda.api.entities.Message;
import net.dv8tion.jda.api.entities.Role;
import org.apache.commons.lang3.math.NumberUtils;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.regex.Matcher;
@Component
public class RoleParameterHandlerImpl implements RoleParameterHandler {
@Override
@@ -25,29 +21,7 @@ public class RoleParameterHandlerImpl implements RoleParameterHandler {
@Override
public Object handle(UnparsedCommandParameterPiece input, CommandParameterIterators iterators, Parameter param, Message context, Command command) {
String inputString = ((String) input.getValue()).trim();
Matcher matcher = Message.MentionType.ROLE.getPattern().matcher(inputString);
Role foundRole;
if(matcher.matches() && iterators.getRoleIterator().hasNext()) {
foundRole = iterators.getRoleIterator().next();
} else {
if(NumberUtils.isParsable(inputString)) {
long roleId = Long.parseLong(inputString);
foundRole = context.getGuild().getRoleById(roleId);
} else {
List<Role> roles = context.getGuild().getRolesByName(inputString, true);
if(roles.isEmpty()) {
throw new AbstractoTemplatedException("No role found with name.", "no_role_found_by_name_exception");
}
if(roles.size() > 1) {
throw new AbstractoTemplatedException("Multiple roles found with name.", "multiple_roles_found_by_name_exception");
}
foundRole = roles.get(0);
}
}
if(foundRole != null && foundRole.isPublicRole()) {
throw new AbstractoTemplatedException("Public role cannot be used for role parameter.", "everyone_role_not_allowed_exception");
}
return foundRole;
return ParseUtils.parseRoleFromText(inputString, context.getGuild());
}
@Override

View File

@@ -16,6 +16,7 @@ import dev.sheldan.abstracto.core.utils.CompletableFutureList;
import dev.sheldan.abstracto.core.utils.FileService;
import lombok.extern.slf4j.Slf4j;
import net.dv8tion.jda.api.EmbedBuilder;
import net.dv8tion.jda.api.Permission;
import net.dv8tion.jda.api.entities.*;
import net.dv8tion.jda.api.entities.channel.concrete.Category;
import net.dv8tion.jda.api.entities.channel.concrete.TextChannel;
@@ -727,6 +728,26 @@ public class ChannelServiceBean implements ChannelService {
}
}
@Override
public CompletableFuture<Void> addMemberViewToChannel(Guild guild, Long channelId, Long memberId, Collection<Permission> permissions) {
return guild.getGuildChannelById(channelId)
.getPermissionContainer()
.getPermissionContainer()
.getManager()
.putMemberPermissionOverride(memberId, permissions, new ArrayList<>())
.submit();
}
@Override
public CompletableFuture<Void> removeChannelOverrideForMember(Guild guild, Long channelId, Long memberId) {
return guild
.getGuildChannelById(channelId)
.getPermissionContainer()
.getManager()
.removePermissionOverride(memberId)
.submit();
}
@PostConstruct
public void postConstruct() {

View File

@@ -40,6 +40,9 @@ public class RoleServiceBean implements RoleService {
@Autowired
private RoleManagementService roleManagementService;
@Autowired
private MemberService memberService;
@Autowired
private MetricService metricService;
@@ -97,6 +100,22 @@ public class RoleServiceBean implements RoleService {
return updateRolesObj(member, rolesObjToRemove, rolesObjToAdd);
}
@Override
public CompletableFuture<Void> updateRolesIds(AUserInAServer aUserInAServer, List<Long> rolesToAdd, List<Long> rolesToRemove) {
Guild guild = guildService.getGuildById(aUserInAServer.getServerReference().getId());
List<Role> rolesObjToAdd = rolesToAdd
.stream()
.map(guild::getRoleById)
.toList();
List<Role> rolesObjToRemove = rolesToRemove
.stream()
.map(guild::getRoleById)
.toList();
Member member = memberService.getMemberInServer(aUserInAServer);
return guild.modifyMemberRoles(member, rolesObjToAdd, rolesObjToRemove).submit();
}
@Override
public CompletableFuture<Void> updateRolesObj(Member member, List<Role> rolesToRemove, List<Role> rolesToAdd) {
return member.getGuild().modifyMemberRoles(member, rolesToAdd, rolesToRemove).submit();
@@ -129,6 +148,16 @@ public class RoleServiceBean implements RoleService {
return removeRoleFromUserFuture(guild, role, member.getIdLong());
}
@Override
public CompletableFuture<Void> removeRoleFromMemberAsync(AUserInAServer user, ARole role) {
Optional<Guild> guildById = guildService.getGuildByIdOptional(user.getServerReference().getId());
if(guildById.isPresent()) {
return removeRoleFromUserFuture(guildById.get(), role, user.getUserReference().getId());
} else {
throw new GuildNotFoundException(user.getServerReference().getId());
}
}
@Override
public CompletableFuture<Void> removeRoleFromMemberAsync(Member member, Long roleId) {
Role role = member.getGuild().getRoleById(roleId);

View File

@@ -1,17 +0,0 @@
package dev.sheldan.abstracto.core.utils;
import dev.sheldan.abstracto.core.Prioritized;
import lombok.NoArgsConstructor;
import java.util.Comparator;
import java.util.List;
@NoArgsConstructor
public class BeanUtils {
public static <T extends Prioritized> void sortPrioritizedListeners(List<T> prioritized) {
if(prioritized != null) {
prioritized.sort(Comparator.comparing(Prioritized::getPriority).reversed());
}
}
}