added command to sync roles for the whole server

added command to remove a role from the experience roles
added leaderboard command
added rank command
fixed missfire configuration for cron jobs (they should not be executed)
added ability to configure recovery for jobs
added tracking of message count
added join listener to automatically give the appropriate role for a joined user
added parameter to join listener containing the userInAServer
re-added command exception templates
added method to create a status message (basically only a single message is returned and expected)
added method to edit a single message in a channel to channel service
fixed cases in which there are no embeds, but we still used the embed principle of sending messages (only text was send)
added more functions to channel service to send messages with
moved joined listeners to their separate transaction
This commit is contained in:
Sheldan
2020-04-12 19:35:42 +02:00
parent 6a31dfde8a
commit edb270e887
53 changed files with 828 additions and 25 deletions

View File

@@ -0,0 +1,10 @@
package dev.sheldan.abstracto.experience;
public interface LeaderBoardEntryResult {
Long getId();
Long getUserInServerId();
Long getExperience();
Integer getLevel();
Long getMessageCount();
Integer getRank();
}

View File

@@ -0,0 +1,14 @@
package dev.sheldan.abstracto.experience.models;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
import java.util.List;
@Getter
@Setter
@Builder
public class LeaderBoard {
private List<LeaderBoardEntry> entries;
}

View File

@@ -0,0 +1,14 @@
package dev.sheldan.abstracto.experience.models;
import dev.sheldan.abstracto.experience.models.database.AUserExperience;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
@Builder
public class LeaderBoardEntry {
private AUserExperience experience;
private Integer rank;
}

View File

@@ -1,6 +1,5 @@
package dev.sheldan.abstracto.experience.models.database;
import dev.sheldan.abstracto.core.models.database.ARole;
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import lombok.*;
@@ -24,6 +23,8 @@ public class AUserExperience {
private Long experience;
private Long messageCount;
@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "level_id")
private AExperienceLevel currentLevel;

View File

@@ -0,0 +1,16 @@
package dev.sheldan.abstracto.experience.models.templates;
import dev.sheldan.abstracto.experience.models.database.AUserExperience;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
import net.dv8tion.jda.api.entities.Member;
@Getter
@Setter
@Builder
public class LeaderBoardEntryModel {
private AUserExperience experience;
private Member member;
private Integer rank;
}

View File

@@ -0,0 +1,16 @@
package dev.sheldan.abstracto.experience.models.templates;
import dev.sheldan.abstracto.core.models.context.UserInitiatedServerContext;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.SuperBuilder;
import java.util.List;
@Getter
@Setter
@SuperBuilder
public class LeaderBoardModel extends UserInitiatedServerContext {
private List<LeaderBoardEntryModel> userExperiences;
private LeaderBoardEntryModel userExecuting;
}

View File

@@ -0,0 +1,14 @@
package dev.sheldan.abstracto.experience.models.templates;
import dev.sheldan.abstracto.core.models.context.UserInitiatedServerContext;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.SuperBuilder;
@Getter
@Setter
@SuperBuilder
public class RankModel extends UserInitiatedServerContext {
private LeaderBoardEntryModel rankUser;
private Long experienceToNextLevel;
}

View File

@@ -0,0 +1,13 @@
package dev.sheldan.abstracto.experience.models.templates;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
@Builder
public class UserSyncStatusModel {
private Integer currentCount;
private Integer totalUserCount;
}

View File

@@ -3,4 +3,5 @@ package dev.sheldan.abstracto.experience.service;
public interface ExperienceLevelService {
void createExperienceLevel(Integer level, Long experienceNeeded);
Long calculateExperienceForLevel(Integer level);
Long calculateExperienceToNextLevel(Integer level, Long currentExperience);
}

View File

@@ -2,8 +2,8 @@ package dev.sheldan.abstracto.experience.service;
import dev.sheldan.abstracto.core.models.database.ARole;
import dev.sheldan.abstracto.core.models.database.AServer;
import dev.sheldan.abstracto.experience.models.database.AExperienceRole;
public interface ExperienceRoleService {
void setRoleToLevel(ARole role, Integer level, AServer server);
void unsetRole(ARole role, AServer server);
}

View File

@@ -1,7 +1,10 @@
package dev.sheldan.abstracto.experience.service;
import dev.sheldan.abstracto.core.models.database.AChannel;
import dev.sheldan.abstracto.core.models.database.AServer;
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import dev.sheldan.abstracto.experience.models.LeaderBoard;
import dev.sheldan.abstracto.experience.models.LeaderBoardEntry;
import dev.sheldan.abstracto.experience.models.database.AExperienceLevel;
import dev.sheldan.abstracto.experience.models.database.AExperienceRole;
import dev.sheldan.abstracto.experience.models.database.AUserExperience;
@@ -17,4 +20,9 @@ public interface ExperienceTrackerService {
void increaseExpForUser(AUserExperience userInAServer, Long experience, List<AExperienceLevel> levels);
void handleExperienceGain(List<AServer> serverExp);
void handleExperienceRoleForUser(AUserExperience userExperience, List<AExperienceRole> roles);
void syncUserRoles(AServer server);
void syncUserRolesWithFeedback(AServer server, AChannel channel);
void syncForSingleUser(AUserExperience userExperience);
LeaderBoard findLeaderBoardData(AServer server, Integer page);
LeaderBoardEntry getRankOfUserInServer(AUserInAServer userInAServer);
}

View File

@@ -10,5 +10,7 @@ import java.util.List;
public interface ExperienceRoleManagementService {
void setLevelToRole(AExperienceLevel level, ARole role, AServer server);
void unSetLevelInServer(AExperienceLevel level, AServer server);
void unsetRole(AExperienceRole role);
AExperienceRole getRoleInServer(ARole role, AServer server);
List<AExperienceRole> getExperienceRoleForServer(AServer server);
}

View File

@@ -1,12 +1,21 @@
package dev.sheldan.abstracto.experience.service.management;
import dev.sheldan.abstracto.core.models.database.AServer;
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import dev.sheldan.abstracto.experience.LeaderBoardEntryResult;
import dev.sheldan.abstracto.experience.models.LeaderBoardEntry;
import dev.sheldan.abstracto.experience.models.database.AUserExperience;
import org.springframework.data.domain.Pageable;
import java.util.List;
public interface UserExperienceManagementService {
void setExperienceTo(AUserExperience aUserInAServer, Long experience);
AUserExperience findUserInServer(AUserInAServer aUserInAServer);
AUserExperience createUserInServer(AUserInAServer aUserInAServer);
void saveUser(AUserExperience userExperience);
List<AUserExperience> loadAllUsers(AServer server);
List<AUserExperience> findLeaderboardUsersPaginated(AServer server, Integer start, Integer end);
LeaderBoardEntryResult getRankOfUserInServer(AUserExperience userExperience);
}