[AB-247/AB-252] fixing issue with set experience role failing to consider the correct experience roles

adding levelRoles command
ignoring bots from experience gain
adding a bit more logging to user experience handling
This commit is contained in:
Sheldan
2021-05-26 01:22:37 +02:00
parent c4fe73b3f8
commit 184271ff7c
27 changed files with 353 additions and 126 deletions

View File

@@ -0,0 +1,23 @@
package dev.sheldan.abstracto.experience.exception;
import dev.sheldan.abstracto.core.exception.AbstractoRunTimeException;
import dev.sheldan.abstracto.core.templating.Templatable;
import org.springframework.stereotype.Component;
@Component
public class ExperienceRoleNotFoundException extends AbstractoRunTimeException implements Templatable {
public ExperienceRoleNotFoundException() {
super("Experience role was not found for role.");
}
@Override
public String getTemplateName() {
return "experience_role_not_found_exception";
}
@Override
public Object getTemplateModel() {
return new Object();
}
}

View File

@@ -0,0 +1,13 @@
package dev.sheldan.abstracto.experience.model.template;
import lombok.Builder;
import lombok.Getter;
import net.dv8tion.jda.api.entities.Role;
@Getter
@Builder
public class LevelRole {
private Role role;
private Long roleId;
private Integer level;
}

View File

@@ -0,0 +1,14 @@
package dev.sheldan.abstracto.experience.model.template;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
import java.util.List;
@Getter
@Setter
@Builder
public class LevelRolesModel {
private List<LevelRole> levelRoles;
}

View File

@@ -5,6 +5,7 @@ import dev.sheldan.abstracto.core.models.database.AServer;
import dev.sheldan.abstracto.experience.model.database.AExperienceLevel;
import dev.sheldan.abstracto.experience.model.database.AExperienceRole;
import dev.sheldan.abstracto.experience.model.database.AUserExperience;
import dev.sheldan.abstracto.experience.model.template.LevelRole;
import net.dv8tion.jda.api.entities.Role;
import java.util.List;
@@ -38,7 +39,10 @@ public interface ExperienceRoleService {
* @return A {@link CompletableFuture future} which completes, after all the updates on the {@link net.dv8tion.jda.api.entities.Member}
* have been completed
*/
CompletableFuture<Void> unsetRole(ARole role, Long channelId);
CompletableFuture<Void> unsetRoles(ARole role, Long channelId);
List<AExperienceRole> getExperienceRolesAtLevel(Integer level, AServer server);
CompletableFuture<Void> unsetRoles(List<ARole> roles, Long channelId);
CompletableFuture<Void> unsetRoles(List<ARole> roles, Long channelId, AExperienceRole toAdd);
/**
* Calculates the appropriate {@link AExperienceRole experienceRole} based on the provided list of {@link AExperienceRole experienceRole}
@@ -57,4 +61,5 @@ public interface ExperienceRoleService {
* @return The next {@link AExperienceLevel} a {@link AExperienceRole} is awarded at, this will be null if there are no roles or there is no further role to reach
*/
AExperienceLevel getLevelOfNextRole(AExperienceLevel startLevel, AServer server);
List<LevelRole> loadLevelRoleConfigForServer(AServer server);
}

View File

@@ -29,7 +29,8 @@ public interface ExperienceLevelManagementService {
* @param level The {@link AExperienceLevel level} of the wanted level number
* @return Returns an optional containing the {@link AExperienceLevel level} if it exists, and empty otherwise
*/
Optional<AExperienceLevel> getLevel(Integer level);
Optional<AExperienceLevel> getLevelOptional(Integer level);
AExperienceLevel getLevel(Integer level);
/**
* Loads the complete level configuration and returns all found {@link AExperienceLevel levels} from the database.

View File

@@ -23,13 +23,14 @@ public interface ExperienceRoleManagementService {
* @return the created or updated {@link AExperienceRole experienceRole}
*/
AExperienceRole setLevelToRole(AExperienceLevel level, ARole role);
List<AExperienceRole> getExperienceRolesAtLevelInServer(AExperienceLevel level, AServer server);
/**
* Deletes *all* (if there are multiple by some chance) roles which were set to be given at the provided {@link AExperienceLevel level} in the {@link AServer server}
* @param level The level to remove the roles for
* @param server The server in which this should happen
*/
void removeAllRoleAssignmentsForLevelInServer(AExperienceLevel level, AServer server);
void removeAllRoleAssignmentsForLevelInServerExceptRole(AExperienceLevel level, AServer server, ARole role);
/**
* Deletes a singular {@link AExperienceRole experienceRole} directly.