mirror of
https://github.com/Sheldan/abstracto.git
synced 2026-01-25 03:04:50 +00:00
[AB-47] adding feature to define custom actions once members reach a certain level
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user