mirror of
https://github.com/Sheldan/abstracto.git
synced 2026-04-05 00:53:04 +00:00
added check to check if a role is in the server
added more log output
This commit is contained in:
@@ -8,6 +8,7 @@ import dev.sheldan.abstracto.core.command.execution.CommandContext;
|
|||||||
import dev.sheldan.abstracto.core.command.execution.CommandResult;
|
import dev.sheldan.abstracto.core.command.execution.CommandResult;
|
||||||
import dev.sheldan.abstracto.core.service.ConfigService;
|
import dev.sheldan.abstracto.core.service.ConfigService;
|
||||||
import dev.sheldan.abstracto.experience.config.ExperienceFeatures;
|
import dev.sheldan.abstracto.experience.config.ExperienceFeatures;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
@@ -15,6 +16,7 @@ import java.util.ArrayList;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
|
@Slf4j
|
||||||
public class ExpScale extends AbstractConditionableCommand {
|
public class ExpScale extends AbstractConditionableCommand {
|
||||||
|
|
||||||
public static final String EXP_MULTIPLIER_KEY = "expMultiplier";
|
public static final String EXP_MULTIPLIER_KEY = "expMultiplier";
|
||||||
@@ -24,7 +26,9 @@ public class ExpScale extends AbstractConditionableCommand {
|
|||||||
@Override
|
@Override
|
||||||
public CommandResult execute(CommandContext commandContext) {
|
public CommandResult execute(CommandContext commandContext) {
|
||||||
Double scale = (Double) commandContext.getParameters().getParameters().get(0);
|
Double scale = (Double) commandContext.getParameters().getParameters().get(0);
|
||||||
configService.setDoubleValue(EXP_MULTIPLIER_KEY, commandContext.getGuild().getIdLong(), scale);
|
Long guildId = commandContext.getGuild().getIdLong();
|
||||||
|
configService.setDoubleValue(EXP_MULTIPLIER_KEY, guildId, scale);
|
||||||
|
log.info("Setting experience scale to {} for {}", scale, guildId);
|
||||||
return CommandResult.fromSuccess();
|
return CommandResult.fromSuccess();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -6,10 +6,15 @@ import dev.sheldan.abstracto.core.command.config.HelpInfo;
|
|||||||
import dev.sheldan.abstracto.core.command.config.Parameter;
|
import dev.sheldan.abstracto.core.command.config.Parameter;
|
||||||
import dev.sheldan.abstracto.core.command.execution.CommandContext;
|
import dev.sheldan.abstracto.core.command.execution.CommandContext;
|
||||||
import dev.sheldan.abstracto.core.command.execution.CommandResult;
|
import dev.sheldan.abstracto.core.command.execution.CommandResult;
|
||||||
|
import dev.sheldan.abstracto.core.exception.AbstractoRunTimeException;
|
||||||
|
import dev.sheldan.abstracto.core.exception.RoleException;
|
||||||
import dev.sheldan.abstracto.core.models.database.ARole;
|
import dev.sheldan.abstracto.core.models.database.ARole;
|
||||||
|
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||||
|
import dev.sheldan.abstracto.core.service.RoleService;
|
||||||
import dev.sheldan.abstracto.core.service.management.RoleManagementService;
|
import dev.sheldan.abstracto.core.service.management.RoleManagementService;
|
||||||
import dev.sheldan.abstracto.experience.config.ExperienceFeatures;
|
import dev.sheldan.abstracto.experience.config.ExperienceFeatures;
|
||||||
import dev.sheldan.abstracto.experience.service.ExperienceRoleService;
|
import dev.sheldan.abstracto.experience.service.ExperienceRoleService;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
@@ -17,7 +22,8 @@ import java.util.ArrayList;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
public class SetRole extends AbstractConditionableCommand {
|
@Slf4j
|
||||||
|
public class SetExpRole extends AbstractConditionableCommand {
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private ExperienceRoleService experienceRoleService;
|
private ExperienceRoleService experienceRoleService;
|
||||||
@@ -25,13 +31,21 @@ public class SetRole extends AbstractConditionableCommand {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private RoleManagementService roleManagementService;
|
private RoleManagementService roleManagementService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private RoleService roleService;
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CommandResult execute(CommandContext commandContext) {
|
public CommandResult execute(CommandContext commandContext) {
|
||||||
Integer level = (Integer) commandContext.getParameters().getParameters().get(0);
|
Integer level = (Integer) commandContext.getParameters().getParameters().get(0);
|
||||||
Long roleId = (Long) commandContext.getParameters().getParameters().get(1);
|
Long roleId = (Long) commandContext.getParameters().getParameters().get(1);
|
||||||
ARole role = roleManagementService.findRole(roleId);
|
ARole role = roleManagementService.findRole(roleId);
|
||||||
experienceRoleService.setRoleToLevel(role, level, commandContext.getUserInitiatedContext().getServer());
|
AServer server = commandContext.getUserInitiatedContext().getServer();
|
||||||
|
if(!roleService.isRoleInServer(server, role)) {
|
||||||
|
throw new RoleException("Role not found.");
|
||||||
|
}
|
||||||
|
log.info("Setting role {} to be used for level {} on server {}", roleId, level, server.getId());
|
||||||
|
experienceRoleService.setRoleToLevel(role, level, server);
|
||||||
return CommandResult.fromSuccess();
|
return CommandResult.fromSuccess();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -40,9 +54,9 @@ public class SetRole extends AbstractConditionableCommand {
|
|||||||
List<Parameter> parameters = new ArrayList<>();
|
List<Parameter> parameters = new ArrayList<>();
|
||||||
parameters.add(Parameter.builder().name("level").type(Integer.class).build());
|
parameters.add(Parameter.builder().name("level").type(Integer.class).build());
|
||||||
parameters.add(Parameter.builder().name("roleId").type(Long.class).build());
|
parameters.add(Parameter.builder().name("roleId").type(Long.class).build());
|
||||||
HelpInfo helpInfo = HelpInfo.builder().longHelp("Sets the role to a certain level").usage("setRole <level> <roleId>").build();
|
HelpInfo helpInfo = HelpInfo.builder().longHelp("Sets the role to a certain level").usage("setExpRole <level> <roleId>").build();
|
||||||
return CommandConfiguration.builder()
|
return CommandConfiguration.builder()
|
||||||
.name("setRole")
|
.name("setExpRole")
|
||||||
.module(ExperienceModule.EXPERIENCE)
|
.module(ExperienceModule.EXPERIENCE)
|
||||||
.description("Sets the role to a certain level")
|
.description("Sets the role to a certain level")
|
||||||
.causesReaction(true)
|
.causesReaction(true)
|
||||||
@@ -6,8 +6,10 @@ import dev.sheldan.abstracto.core.command.config.HelpInfo;
|
|||||||
import dev.sheldan.abstracto.core.command.config.Parameter;
|
import dev.sheldan.abstracto.core.command.config.Parameter;
|
||||||
import dev.sheldan.abstracto.core.command.execution.CommandContext;
|
import dev.sheldan.abstracto.core.command.execution.CommandContext;
|
||||||
import dev.sheldan.abstracto.core.command.execution.CommandResult;
|
import dev.sheldan.abstracto.core.command.execution.CommandResult;
|
||||||
|
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||||
import dev.sheldan.abstracto.experience.config.ExperienceFeatures;
|
import dev.sheldan.abstracto.experience.config.ExperienceFeatures;
|
||||||
import dev.sheldan.abstracto.experience.service.ExperienceTrackerService;
|
import dev.sheldan.abstracto.experience.service.ExperienceTrackerService;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
@@ -15,6 +17,7 @@ import java.util.ArrayList;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
|
@Slf4j
|
||||||
public class SyncRoles extends AbstractConditionableCommand {
|
public class SyncRoles extends AbstractConditionableCommand {
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
@@ -22,7 +25,9 @@ public class SyncRoles extends AbstractConditionableCommand {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CommandResult execute(CommandContext commandContext) {
|
public CommandResult execute(CommandContext commandContext) {
|
||||||
experienceTrackerService.syncUserRolesWithFeedback(commandContext.getUserInitiatedContext().getServer(), commandContext.getUserInitiatedContext().getChannel());
|
AServer server = commandContext.getUserInitiatedContext().getServer();
|
||||||
|
log.info("Synchronizing roles on server {}", server.getId());
|
||||||
|
experienceTrackerService.syncUserRolesWithFeedback(server, commandContext.getUserInitiatedContext().getChannel());
|
||||||
return CommandResult.fromSuccess();
|
return CommandResult.fromSuccess();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ import java.util.ArrayList;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
public class UnSetRole extends AbstractConditionableCommand {
|
public class UnSetExpRole extends AbstractConditionableCommand {
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private RoleManagementService roleManagementService;
|
private RoleManagementService roleManagementService;
|
||||||
@@ -25,7 +25,6 @@ public class UnSetRole extends AbstractConditionableCommand {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private ExperienceRoleService experienceRoleService;
|
private ExperienceRoleService experienceRoleService;
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CommandResult execute(CommandContext commandContext) {
|
public CommandResult execute(CommandContext commandContext) {
|
||||||
Long roleId = (Long) commandContext.getParameters().getParameters().get(0);
|
Long roleId = (Long) commandContext.getParameters().getParameters().get(0);
|
||||||
@@ -38,9 +37,9 @@ public class UnSetRole extends AbstractConditionableCommand {
|
|||||||
public CommandConfiguration getConfiguration() {
|
public CommandConfiguration getConfiguration() {
|
||||||
List<Parameter> parameters = new ArrayList<>();
|
List<Parameter> parameters = new ArrayList<>();
|
||||||
parameters.add(Parameter.builder().name("roleId").type(Long.class).build());
|
parameters.add(Parameter.builder().name("roleId").type(Long.class).build());
|
||||||
HelpInfo helpInfo = HelpInfo.builder().longHelp("Removes the role from the experience tracking").usage("unsetRole <roleId>").build();
|
HelpInfo helpInfo = HelpInfo.builder().longHelp("Removes the role from the experience tracking").usage("unSetExpRole <roleId>").build();
|
||||||
return CommandConfiguration.builder()
|
return CommandConfiguration.builder()
|
||||||
.name("unsetRole")
|
.name("unSetExpRole")
|
||||||
.module(ExperienceModule.EXPERIENCE)
|
.module(ExperienceModule.EXPERIENCE)
|
||||||
.description("Removes the role from experience tracking")
|
.description("Removes the role from experience tracking")
|
||||||
.causesReaction(true)
|
.causesReaction(true)
|
||||||
@@ -20,7 +20,7 @@ public class ExperienceConfigListener implements ServerConfigListener {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateServerConfig(AServer server) {
|
public void updateServerConfig(AServer server) {
|
||||||
log.info("Setting up experience for {}", server.getId());
|
log.info("Setting up experience configuration for server {}.", server.getId());
|
||||||
service.createDoubleValueIfNotExist("minExp", server.getId(), experienceConfig.getMinExp().doubleValue());
|
service.createDoubleValueIfNotExist("minExp", server.getId(), experienceConfig.getMinExp().doubleValue());
|
||||||
service.createDoubleValueIfNotExist("maxExp", server.getId(), experienceConfig.getMaxExp().doubleValue());
|
service.createDoubleValueIfNotExist("maxExp", server.getId(), experienceConfig.getMaxExp().doubleValue());
|
||||||
service.createDoubleValueIfNotExist("expMultiplier", server.getId(), experienceConfig.getExpMultiplier().doubleValue());
|
service.createDoubleValueIfNotExist("expMultiplier", server.getId(), experienceConfig.getExpMultiplier().doubleValue());
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ public class ExperienceLevelLoader {
|
|||||||
public void handleContextRefreshEvent(ContextRefreshedEvent ctxStartEvt) {
|
public void handleContextRefreshEvent(ContextRefreshedEvent ctxStartEvt) {
|
||||||
Integer maxLevel = experienceConfig.getMaxLvl();
|
Integer maxLevel = experienceConfig.getMaxLvl();
|
||||||
Long experience = 0L;
|
Long experience = 0L;
|
||||||
|
log.info("Setting up experience level configuration.");
|
||||||
experienceLevelService.createExperienceLevel(0, 0L);
|
experienceLevelService.createExperienceLevel(0, 0L);
|
||||||
for (int i = 1; i < maxLevel; i++) {
|
for (int i = 1; i < maxLevel; i++) {
|
||||||
experience = experience + experienceLevelService.calculateExperienceForLevel(i - 1);
|
experience = experience + experienceLevelService.calculateExperienceForLevel(i - 1);
|
||||||
|
|||||||
@@ -28,9 +28,10 @@ public class ExperiencePersistingJob extends QuartzJobBean {
|
|||||||
@Override
|
@Override
|
||||||
protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
|
protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
|
||||||
HashMap<Long, List<AServer>> runtimeExperience = experienceTrackerService.getRuntimeExperience();
|
HashMap<Long, List<AServer>> runtimeExperience = experienceTrackerService.getRuntimeExperience();
|
||||||
log.info("Persisting experience");
|
log.info("Running experience persisting job.");
|
||||||
Long pastMinute = (Instant.now().getEpochSecond() / 60) - 1;
|
Long pastMinute = (Instant.now().getEpochSecond() / 60) - 1;
|
||||||
if(runtimeExperience.containsKey(pastMinute)) {
|
if(runtimeExperience.containsKey(pastMinute)) {
|
||||||
|
log.info("Found experience to persist.");
|
||||||
experienceTrackerService.handleExperienceGain(runtimeExperience.get(pastMinute));
|
experienceTrackerService.handleExperienceGain(runtimeExperience.get(pastMinute));
|
||||||
runtimeExperience.remove(pastMinute);
|
runtimeExperience.remove(pastMinute);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,12 +7,14 @@ import dev.sheldan.abstracto.experience.config.ExperienceFeatures;
|
|||||||
import dev.sheldan.abstracto.experience.models.database.AUserExperience;
|
import dev.sheldan.abstracto.experience.models.database.AUserExperience;
|
||||||
import dev.sheldan.abstracto.experience.service.ExperienceTrackerService;
|
import dev.sheldan.abstracto.experience.service.ExperienceTrackerService;
|
||||||
import dev.sheldan.abstracto.experience.service.management.UserExperienceManagementService;
|
import dev.sheldan.abstracto.experience.service.management.UserExperienceManagementService;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import net.dv8tion.jda.api.entities.Guild;
|
import net.dv8tion.jda.api.entities.Guild;
|
||||||
import net.dv8tion.jda.api.entities.Member;
|
import net.dv8tion.jda.api.entities.Member;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
|
@Slf4j
|
||||||
public class JoiningUserRoleListener implements JoinListener {
|
public class JoiningUserRoleListener implements JoinListener {
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
@@ -28,6 +30,7 @@ public class JoiningUserRoleListener implements JoinListener {
|
|||||||
public void execute(Member member, Guild guild, AUserInAServer aUserInAServer) {
|
public void execute(Member member, Guild guild, AUserInAServer aUserInAServer) {
|
||||||
AUserExperience userExperience = userExperienceManagementService.findUserInServer(aUserInAServer);
|
AUserExperience userExperience = userExperienceManagementService.findUserInServer(aUserInAServer);
|
||||||
if(userExperience != null) {
|
if(userExperience != null) {
|
||||||
|
log.info("User {} joined {} with previous experience. Setting up experience role again (if necessary).", member.getUser().getIdLong(), guild.getIdLong());
|
||||||
experienceTrackerService.syncForSingleUser(userExperience);
|
experienceTrackerService.syncForSingleUser(userExperience);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,10 +2,12 @@ package dev.sheldan.abstracto.experience.service;
|
|||||||
|
|
||||||
import dev.sheldan.abstracto.experience.models.database.AExperienceLevel;
|
import dev.sheldan.abstracto.experience.models.database.AExperienceLevel;
|
||||||
import dev.sheldan.abstracto.experience.service.management.ExperienceLevelManagementService;
|
import dev.sheldan.abstracto.experience.service.management.ExperienceLevelManagementService;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
|
@Slf4j
|
||||||
public class ExperienceLevelServiceBean implements ExperienceLevelService {
|
public class ExperienceLevelServiceBean implements ExperienceLevelService {
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
@@ -14,6 +16,7 @@ public class ExperienceLevelServiceBean implements ExperienceLevelService {
|
|||||||
@Override
|
@Override
|
||||||
public void createExperienceLevel(Integer level, Long experienceNeeded) {
|
public void createExperienceLevel(Integer level, Long experienceNeeded) {
|
||||||
if(!experienceLevelManagementService.levelExists(level)) {
|
if(!experienceLevelManagementService.levelExists(level)) {
|
||||||
|
log.trace("Creating new experience level {} with experience needed {}.", level, experienceNeeded);
|
||||||
experienceLevelManagementService.createExperienceLevel(level, experienceNeeded);
|
experienceLevelManagementService.createExperienceLevel(level, experienceNeeded);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,12 +7,14 @@ import dev.sheldan.abstracto.experience.models.database.AExperienceRole;
|
|||||||
import dev.sheldan.abstracto.experience.service.management.ExperienceLevelManagementService;
|
import dev.sheldan.abstracto.experience.service.management.ExperienceLevelManagementService;
|
||||||
import dev.sheldan.abstracto.experience.service.management.ExperienceRoleManagementService;
|
import dev.sheldan.abstracto.experience.service.management.ExperienceRoleManagementService;
|
||||||
import dev.sheldan.abstracto.experience.service.management.UserExperienceManagementService;
|
import dev.sheldan.abstracto.experience.service.management.UserExperienceManagementService;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
|
@Slf4j
|
||||||
public class ExperienceRoleServiceBean implements ExperienceRoleService {
|
public class ExperienceRoleServiceBean implements ExperienceRoleService {
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
@@ -38,6 +40,7 @@ public class ExperienceRoleServiceBean implements ExperienceRoleService {
|
|||||||
public void unsetRole(ARole role, AServer server) {
|
public void unsetRole(ARole role, AServer server) {
|
||||||
AExperienceRole roleInServer = experienceRoleManagementService.getRoleInServer(role, server);
|
AExperienceRole roleInServer = experienceRoleManagementService.getRoleInServer(role, server);
|
||||||
if(roleInServer.getUsers().size() > 0) {
|
if(roleInServer.getUsers().size() > 0) {
|
||||||
|
log.info("Recalculating the roles for {} users, because their current role was removed from experience tracking.", roleInServer.getUsers().size());
|
||||||
roleInServer.getUsers().forEach(userExperience -> {
|
roleInServer.getUsers().forEach(userExperience -> {
|
||||||
List<AExperienceRole> roles = experienceRoleManagementService.getExperienceRoleForServer(server);
|
List<AExperienceRole> roles = experienceRoleManagementService.getExperienceRoleForServer(server);
|
||||||
roles.removeIf(role1 -> role1.getId().equals(roleInServer.getId()));
|
roles.removeIf(role1 -> role1.getId().equals(roleInServer.getId()));
|
||||||
|
|||||||
@@ -60,6 +60,7 @@ public class ExperienceTrackerServiceBean implements ExperienceTrackerService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addExperience(AUserInAServer userInAServer) {
|
public void addExperience(AUserInAServer userInAServer) {
|
||||||
|
log.trace("Adding experience for user {} in server {}", userInAServer.getUserReference().getId(), userInAServer.getServerReference().getId());
|
||||||
Long second = Instant.now().getEpochSecond() / 60;
|
Long second = Instant.now().getEpochSecond() / 60;
|
||||||
if(runtimeExperience.containsKey(second)) {
|
if(runtimeExperience.containsKey(second)) {
|
||||||
List<AServer> existing = runtimeExperience.get(second);
|
List<AServer> existing = runtimeExperience.get(second);
|
||||||
@@ -115,11 +116,13 @@ public class ExperienceTrackerServiceBean implements ExperienceTrackerService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void increaseExpForUser(AUserExperience userInAServer, Long experience, List<AExperienceLevel> levels) {
|
public void increaseExpForUser(AUserExperience userInAServer, Long experience, List<AExperienceLevel> levels) {
|
||||||
|
AUserInAServer user = userInAServer.getUser();
|
||||||
|
log.trace("Increasing experience for user {} in server {} by {}.", user.getUserReference().getId(), user.getServerReference().getId(), experience);
|
||||||
userInAServer.setExperience(userInAServer.getExperience() + experience);
|
userInAServer.setExperience(userInAServer.getExperience() + experience);
|
||||||
Integer correctLevel = calculateLevel(userInAServer, levels);
|
Integer correctLevel = calculateLevel(userInAServer, levels);
|
||||||
Integer currentLevel = userInAServer.getCurrentLevel() != null ? userInAServer.getCurrentLevel().getLevel() : 0;
|
Integer currentLevel = userInAServer.getCurrentLevel() != null ? userInAServer.getCurrentLevel().getLevel() : 0;
|
||||||
if(!correctLevel.equals(currentLevel)) {
|
if(!correctLevel.equals(currentLevel)) {
|
||||||
log.info("User {} leveled from {} to {}", userInAServer.getUser().getUserReference().getId(), currentLevel, correctLevel);
|
log.info("User {} leveled from {} to {}", user.getUserReference().getId(), currentLevel, correctLevel);
|
||||||
userInAServer.setCurrentLevel(experienceLevelManagementService.getLevel(correctLevel));
|
userInAServer.setCurrentLevel(experienceLevelManagementService.getLevel(correctLevel));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -128,7 +131,7 @@ public class ExperienceTrackerServiceBean implements ExperienceTrackerService {
|
|||||||
@Override
|
@Override
|
||||||
public void handleExperienceGain(List<AServer> servers) {
|
public void handleExperienceGain(List<AServer> servers) {
|
||||||
servers.forEach(serverExp -> {
|
servers.forEach(serverExp -> {
|
||||||
log.debug("Handling experience for server {}", serverExp.getId());
|
log.trace("Handling experience for server {}", serverExp.getId());
|
||||||
int minExp = configService.getDoubleValue("minExp", serverExp.getId()).intValue();
|
int minExp = configService.getDoubleValue("minExp", serverExp.getId()).intValue();
|
||||||
int maxExp = configService.getDoubleValue("maxExp", serverExp.getId()).intValue();
|
int maxExp = configService.getDoubleValue("maxExp", serverExp.getId()).intValue();
|
||||||
Integer multiplier = configService.getDoubleValue("expMultiplier", serverExp.getId()).intValue();
|
Integer multiplier = configService.getDoubleValue("expMultiplier", serverExp.getId()).intValue();
|
||||||
@@ -136,10 +139,11 @@ public class ExperienceTrackerServiceBean implements ExperienceTrackerService {
|
|||||||
List<AExperienceLevel> levels = experienceLevelManagementService.getLevelConfig();
|
List<AExperienceLevel> levels = experienceLevelManagementService.getLevelConfig();
|
||||||
List<AExperienceRole> roles = experienceRoleManagementService.getExperienceRoleForServer(serverExp);
|
List<AExperienceRole> roles = experienceRoleManagementService.getExperienceRoleForServer(serverExp);
|
||||||
levels.sort(Comparator.comparing(AExperienceLevel::getExperienceNeeded));
|
levels.sort(Comparator.comparing(AExperienceLevel::getExperienceNeeded));
|
||||||
|
roles.sort(Comparator.comparing(role -> role.getLevel().getLevel()));
|
||||||
serverExp.getUsers().forEach(userInAServer -> {
|
serverExp.getUsers().forEach(userInAServer -> {
|
||||||
Integer gainedExperience = iterator.next();
|
Integer gainedExperience = iterator.next();
|
||||||
gainedExperience *= multiplier;
|
gainedExperience *= multiplier;
|
||||||
log.debug("Handling {}. The user gains {}", userInAServer.getUserReference().getId(), gainedExperience);
|
log.trace("Handling {}. The user gains {}", userInAServer.getUserReference().getId(), gainedExperience);
|
||||||
AUserExperience userExperience = userExperienceManagementService.findUserInServer(userInAServer);
|
AUserExperience userExperience = userExperienceManagementService.findUserInServer(userInAServer);
|
||||||
increaseExpForUser(userExperience, gainedExperience.longValue(), levels);
|
increaseExpForUser(userExperience, gainedExperience.longValue(), levels);
|
||||||
userExperience.setMessageCount(userExperience.getMessageCount() + 1);
|
userExperience.setMessageCount(userExperience.getMessageCount() + 1);
|
||||||
@@ -150,21 +154,23 @@ public class ExperienceTrackerServiceBean implements ExperienceTrackerService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void handleExperienceRoleForUser(AUserExperience userExperience, List<AExperienceRole> roles) {
|
public void handleExperienceRoleForUser(AUserExperience userExperience, List<AExperienceRole> roles) {
|
||||||
|
AUserInAServer user = userExperience.getUser();
|
||||||
|
log.trace("Updating experience role for user {} in server {}", user.getUserReference().getId(), user.getServerReference().getId());
|
||||||
AExperienceRole role = calculateRole(userExperience, roles);
|
AExperienceRole role = calculateRole(userExperience, roles);
|
||||||
boolean currentlyHasNoExperienceRole = userExperience.getCurrentExperienceRole() == null;
|
boolean currentlyHasNoExperienceRole = userExperience.getCurrentExperienceRole() == null;
|
||||||
if(role == null) {
|
if(role == null) {
|
||||||
if(!currentlyHasNoExperienceRole){
|
if(!currentlyHasNoExperienceRole){
|
||||||
roleService.removeRoleFromUser(userExperience.getUser(), userExperience.getCurrentExperienceRole().getRole());
|
roleService.removeRoleFromUser(user, userExperience.getCurrentExperienceRole().getRole());
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(currentlyHasNoExperienceRole || !role.getRole().getId().equals(userExperience.getCurrentExperienceRole().getRole().getId())) {
|
if(currentlyHasNoExperienceRole || !role.getRole().getId().equals(userExperience.getCurrentExperienceRole().getRole().getId())) {
|
||||||
log.info("User {} gets a new role {}", userExperience.getUser().getUserReference().getId(), role.getRole().getId());
|
log.info("User {} in server {} gets a new role {}", user.getUserReference().getId(), user.getServerReference().getId(), role.getRole().getId());
|
||||||
if(!currentlyHasNoExperienceRole) {
|
if(!currentlyHasNoExperienceRole) {
|
||||||
roleService.removeRoleFromUser(userExperience.getUser(), userExperience.getCurrentExperienceRole().getRole());
|
roleService.removeRoleFromUser(user, userExperience.getCurrentExperienceRole().getRole());
|
||||||
}
|
}
|
||||||
userExperience.setCurrentExperienceRole(role);
|
userExperience.setCurrentExperienceRole(role);
|
||||||
roleService.addRoleToUser(userExperience.getUser(), userExperience.getCurrentExperienceRole().getRole());
|
roleService.addRoleToUser(user, userExperience.getCurrentExperienceRole().getRole());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -175,7 +181,7 @@ public class ExperienceTrackerServiceBean implements ExperienceTrackerService {
|
|||||||
List<AExperienceRole> roles = experienceRoleManagementService.getExperienceRoleForServer(server);
|
List<AExperienceRole> roles = experienceRoleManagementService.getExperienceRoleForServer(server);
|
||||||
for (int i = 0; i < aUserExperiences.size(); i++) {
|
for (int i = 0; i < aUserExperiences.size(); i++) {
|
||||||
AUserExperience userExperience = aUserExperiences.get(i);
|
AUserExperience userExperience = aUserExperiences.get(i);
|
||||||
log.debug("Synchronizing {} out of {}", i, aUserExperiences.size());
|
log.trace("Synchronizing {} out of {}", i, aUserExperiences.size());
|
||||||
handleExperienceRoleForUser(userExperience, roles);
|
handleExperienceRoleForUser(userExperience, roles);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -189,13 +195,15 @@ public class ExperienceTrackerServiceBean implements ExperienceTrackerService {
|
|||||||
MessageToSend status = templateService.renderEmbedTemplate("status_message", statusModel);
|
MessageToSend status = templateService.renderEmbedTemplate("status_message", statusModel);
|
||||||
try {
|
try {
|
||||||
Message statusMessage = messageService.createStatusMessage(status, channel).get();
|
Message statusMessage = messageService.createStatusMessage(status, channel).get();
|
||||||
|
int interval = Math.min(aUserExperiences.size() / 10, 100);
|
||||||
for (int i = 0; i < aUserExperiences.size(); i++) {
|
for (int i = 0; i < aUserExperiences.size(); i++) {
|
||||||
if((i % 100) == 1) {
|
if((i % interval) == 1) {
|
||||||
|
log.trace("Updating feedback message with new index {} out of {}", i, aUserExperiences.size());
|
||||||
UserSyncStatusModel incrementalStatusModel = UserSyncStatusModel.builder().currentCount(i).totalUserCount(aUserExperiences.size()).build();
|
UserSyncStatusModel incrementalStatusModel = UserSyncStatusModel.builder().currentCount(i).totalUserCount(aUserExperiences.size()).build();
|
||||||
status = templateService.renderEmbedTemplate("status_message", incrementalStatusModel);
|
status = templateService.renderEmbedTemplate("status_message", incrementalStatusModel);
|
||||||
messageService.updateStatusMessage(channel, statusMessage.getIdLong(), status);
|
messageService.updateStatusMessage(channel, statusMessage.getIdLong(), status);
|
||||||
}
|
}
|
||||||
log.debug("Synchronizing {} out of {}", i, aUserExperiences.size());
|
log.trace("Synchronizing {} out of {}", i, aUserExperiences.size());
|
||||||
AUserExperience userExperience = aUserExperiences.get(i);
|
AUserExperience userExperience = aUserExperiences.get(i);
|
||||||
handleExperienceRoleForUser(userExperience, roles);
|
handleExperienceRoleForUser(userExperience, roles);
|
||||||
}
|
}
|
||||||
@@ -210,15 +218,15 @@ public class ExperienceTrackerServiceBean implements ExperienceTrackerService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void syncForSingleUser(AUserExperience userExperience) {
|
public void syncForSingleUser(AUserExperience userExperience) {
|
||||||
log.info("Synchronizing for user {}", userExperience.getUser().getUserReference().getId());
|
AUserInAServer user = userExperience.getUser();
|
||||||
List<AExperienceRole> roles = experienceRoleManagementService.getExperienceRoleForServer(userExperience.getUser().getServerReference());
|
log.info("Synchronizing for user {} in server {}", user.getUserReference().getId(), user.getServerReference().getId());
|
||||||
|
List<AExperienceRole> roles = experienceRoleManagementService.getExperienceRoleForServer(user.getServerReference());
|
||||||
handleExperienceRoleForUser(userExperience, roles);
|
handleExperienceRoleForUser(userExperience, roles);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public LeaderBoard findLeaderBoardData(AServer server, Integer page) {
|
public LeaderBoard findLeaderBoardData(AServer server, Integer page) {
|
||||||
List<AUserExperience> experiences = userExperienceManagementService.findLeaderboardUsersPaginated(server, page * 10, (page +1) * 10);
|
List<AUserExperience> experiences = userExperienceManagementService.findLeaderboardUsersPaginated(server, page * 10, (page +1) * 10);
|
||||||
log.info("We found {}", experiences.size());
|
|
||||||
List<LeaderBoardEntry> entries = new ArrayList<>();
|
List<LeaderBoardEntry> entries = new ArrayList<>();
|
||||||
for (int i = 0; i < experiences.size(); i++) {
|
for (int i = 0; i < experiences.size(); i++) {
|
||||||
AUserExperience userExperience = experiences.get(i);
|
AUserExperience userExperience = experiences.get(i);
|
||||||
@@ -229,6 +237,7 @@ public class ExperienceTrackerServiceBean implements ExperienceTrackerService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public LeaderBoardEntry getRankOfUserInServer(AUserInAServer userInAServer) {
|
public LeaderBoardEntry getRankOfUserInServer(AUserInAServer userInAServer) {
|
||||||
|
log.info("Retrieving rank for {}", userInAServer.getUserReference().getId());
|
||||||
AUserExperience experience = userExperienceManagementService.findUserInServer(userInAServer);
|
AUserExperience experience = userExperienceManagementService.findUserInServer(userInAServer);
|
||||||
LeaderBoardEntryResult rankOfUserInServer = userExperienceManagementService.getRankOfUserInServer(experience);
|
LeaderBoardEntryResult rankOfUserInServer = userExperienceManagementService.getRankOfUserInServer(experience);
|
||||||
AUserExperience aUserExperience = AUserExperience
|
AUserExperience aUserExperience = AUserExperience
|
||||||
|
|||||||
@@ -5,12 +5,14 @@ import dev.sheldan.abstracto.core.models.database.AServer;
|
|||||||
import dev.sheldan.abstracto.experience.models.database.AExperienceLevel;
|
import dev.sheldan.abstracto.experience.models.database.AExperienceLevel;
|
||||||
import dev.sheldan.abstracto.experience.models.database.AExperienceRole;
|
import dev.sheldan.abstracto.experience.models.database.AExperienceRole;
|
||||||
import dev.sheldan.abstracto.experience.repository.ExperienceRoleRepository;
|
import dev.sheldan.abstracto.experience.repository.ExperienceRoleRepository;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
|
@Slf4j
|
||||||
public class ExperienceRoleManagementServiceBean implements ExperienceRoleManagementService {
|
public class ExperienceRoleManagementServiceBean implements ExperienceRoleManagementService {
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
@@ -18,6 +20,7 @@ public class ExperienceRoleManagementServiceBean implements ExperienceRoleManage
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void unSetLevelInServer(AExperienceLevel level, AServer server) {
|
public void unSetLevelInServer(AExperienceLevel level, AServer server) {
|
||||||
|
log.trace("Removing all role assignments for level {}.", level.getLevel());
|
||||||
List<AExperienceRole> existingExperienceRoles = experienceRoleRepository.findByLevelAndRoleServer(level, server);
|
List<AExperienceRole> existingExperienceRoles = experienceRoleRepository.findByLevelAndRoleServer(level, server);
|
||||||
existingExperienceRoles.forEach(existingRole -> {
|
existingExperienceRoles.forEach(existingRole -> {
|
||||||
experienceRoleRepository.delete(existingRole);
|
experienceRoleRepository.delete(existingRole);
|
||||||
|
|||||||
@@ -43,6 +43,7 @@ public class JoinLogger implements JoinListener {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void execute(Member member, Guild guild, AUserInAServer aUserInAServer) {
|
public void execute(Member member, Guild guild, AUserInAServer aUserInAServer) {
|
||||||
|
log.info("User {} joined server {}.", aUserInAServer.getUserReference().getId(), aUserInAServer.getServerReference().getId());
|
||||||
HashMap<String, Object> parameters = getUserParameter(member.getUser());
|
HashMap<String, Object> parameters = getUserParameter(member.getUser());
|
||||||
String text = templateService.renderTemplateWithMap(USER_JOIN_TEMPLATE, parameters);;
|
String text = templateService.renderTemplateWithMap(USER_JOIN_TEMPLATE, parameters);;
|
||||||
postTargetService.sendTextInPostTarget(text, JOIN_LOG_TARGET, guild.getIdLong());
|
postTargetService.sendTextInPostTarget(text, JOIN_LOG_TARGET, guild.getIdLong());
|
||||||
|
|||||||
@@ -43,6 +43,7 @@ public class LeaveLogger implements LeaveListener {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void execute(Member member, Guild guild) {
|
public void execute(Member member, Guild guild) {
|
||||||
|
log.info("User {} left server {}.", member.getUser().getId(), guild.getIdLong());
|
||||||
String text = templateService.renderTemplateWithMap(USER_LEAVE_TEMPLATE, getUserParameter(member.getUser()));
|
String text = templateService.renderTemplateWithMap(USER_LEAVE_TEMPLATE, getUserParameter(member.getUser()));
|
||||||
postTargetService.sendTextInPostTarget(text, LEAVE_LOG_TARGET, guild.getIdLong());
|
postTargetService.sendTextInPostTarget(text, LEAVE_LOG_TARGET, guild.getIdLong());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ public class MessageDeleteLogListener implements MessageDeletedListener {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void execute(CachedMessage messageFromCache) {
|
public void execute(CachedMessage messageFromCache) {
|
||||||
|
log.trace("Message {} in channel {} in guild {} was deleted.", messageFromCache.getMessageId(), messageFromCache.getChannelId(), messageFromCache.getServerId());
|
||||||
MessageDeletedLog logModel = (MessageDeletedLog) contextUtils.fromMessage(messageFromCache, MessageDeletedLog.class);
|
MessageDeletedLog logModel = (MessageDeletedLog) contextUtils.fromMessage(messageFromCache, MessageDeletedLog.class);
|
||||||
logModel.setMessage(messageFromCache);
|
logModel.setMessage(messageFromCache);
|
||||||
String simpleMessageUpdatedMessage = templateService.renderTemplate(MESSAGE_DELETED_TEMPLATE, logModel);
|
String simpleMessageUpdatedMessage = templateService.renderTemplate(MESSAGE_DELETED_TEMPLATE, logModel);
|
||||||
|
|||||||
@@ -34,9 +34,10 @@ public class MessageEditedListener implements MessageTextUpdatedListener {
|
|||||||
@Transactional
|
@Transactional
|
||||||
public void execute(CachedMessage messageBefore, Message messageAfter) {
|
public void execute(CachedMessage messageBefore, Message messageAfter) {
|
||||||
if(messageBefore.getContent().equals(messageAfter.getContentRaw())){
|
if(messageBefore.getContent().equals(messageAfter.getContentRaw())){
|
||||||
log.debug("Message content was the same. Possible reason was: message was not in cache.");
|
log.trace("Message content was the same. Possible reason was: message was not in cache.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
log.trace("Message {} in channel {} in guild {} was edited.", messageBefore.getMessageId(), messageBefore.getChannelId(), messageBefore.getServerId());
|
||||||
MessageEditedLog log = MessageEditedLog.
|
MessageEditedLog log = MessageEditedLog.
|
||||||
builder().
|
builder().
|
||||||
messageAfter(messageAfter)
|
messageAfter(messageAfter)
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ public class KickServiceBean implements KickService {
|
|||||||
@Override
|
@Override
|
||||||
public void kickMember(Member member, String reason, KickLogModel kickLogModel) {
|
public void kickMember(Member member, String reason, KickLogModel kickLogModel) {
|
||||||
Optional<Guild> guildById = botService.getGuildById(kickLogModel.getGuild().getIdLong());
|
Optional<Guild> guildById = botService.getGuildById(kickLogModel.getGuild().getIdLong());
|
||||||
|
log.info("Kicking user {} from guild {}", member.getUser().getIdLong(), member.getGuild().getIdLong());
|
||||||
if(guildById.isPresent()) {
|
if(guildById.isPresent()) {
|
||||||
guildById.get().kick(member, reason).queue();
|
guildById.get().kick(member, reason).queue();
|
||||||
this.sendKickLog(kickLogModel);
|
this.sendKickLog(kickLogModel);
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ public class SlowModeServiceBean implements SlowModeService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setSlowMode(TextChannel channel, Duration duration) {
|
public void setSlowMode(TextChannel channel, Duration duration) {
|
||||||
|
log.info("Setting slow mode to {} in channel {} in server {}", duration.toString(), channel.getIdLong(), channel.getGuild().getId());
|
||||||
long seconds = duration.getSeconds();
|
long seconds = duration.getSeconds();
|
||||||
if(seconds > TextChannel.MAX_SLOWMODE) {
|
if(seconds > TextChannel.MAX_SLOWMODE) {
|
||||||
throw new IllegalArgumentException("Slow mode duration must be < " + TextChannel.MAX_SLOWMODE + " seconds.");
|
throw new IllegalArgumentException("Slow mode duration must be < " + TextChannel.MAX_SLOWMODE + " seconds.");
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ public class StarboardConfigListener implements ServerConfigListener {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateServerConfig(AServer server) {
|
public void updateServerConfig(AServer server) {
|
||||||
|
log.info("Creating starboard config for server {}", server.getId());
|
||||||
for (int i = 0; i < starboardConfig.getLvl().size(); i++) {
|
for (int i = 0; i < starboardConfig.getLvl().size(); i++) {
|
||||||
Integer value = starboardConfig.getLvl().get(i);
|
Integer value = starboardConfig.getLvl().get(i);
|
||||||
configManagementService.createIfNotExists(server.getId(), "starLvl" + ( i + 1 ), Double.valueOf(value));
|
configManagementService.createIfNotExists(server.getId(), "starLvl" + ( i + 1 ), Double.valueOf(value));
|
||||||
|
|||||||
@@ -24,8 +24,8 @@ public class ReminderJob extends QuartzJobBean {
|
|||||||
@Override
|
@Override
|
||||||
protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
|
protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
|
||||||
try {
|
try {
|
||||||
reminderService.executeReminder(reminderId);
|
|
||||||
log.info("executing reminder job for reminder {}", reminderId);
|
log.info("executing reminder job for reminder {}", reminderId);
|
||||||
|
reminderService.executeReminder(reminderId);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("Reminder job failed to execute.", e);
|
log.error("Reminder job failed to execute.", e);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package dev.sheldan.abstracto.utility.listener.embed;
|
|||||||
import dev.sheldan.abstracto.core.listener.ReactedAddedListener;
|
import dev.sheldan.abstracto.core.listener.ReactedAddedListener;
|
||||||
import dev.sheldan.abstracto.core.models.cache.CachedMessage;
|
import dev.sheldan.abstracto.core.models.cache.CachedMessage;
|
||||||
import dev.sheldan.abstracto.core.models.database.AEmote;
|
import dev.sheldan.abstracto.core.models.database.AEmote;
|
||||||
|
import dev.sheldan.abstracto.core.models.database.AUser;
|
||||||
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
||||||
import dev.sheldan.abstracto.core.service.BotService;
|
import dev.sheldan.abstracto.core.service.BotService;
|
||||||
import dev.sheldan.abstracto.core.service.EmoteService;
|
import dev.sheldan.abstracto.core.service.EmoteService;
|
||||||
@@ -48,12 +49,14 @@ public class MessageEmbedRemovalReactionListener implements ReactedAddedListener
|
|||||||
AEmote aEmote = emoteService.getEmoteOrFakeEmote(REMOVAL_EMOTE, guildId);
|
AEmote aEmote = emoteService.getEmoteOrFakeEmote(REMOVAL_EMOTE, guildId);
|
||||||
MessageReaction.ReactionEmote reactionEmote = reaction.getReactionEmote();
|
MessageReaction.ReactionEmote reactionEmote = reaction.getReactionEmote();
|
||||||
Optional<Emote> emoteInGuild = botService.getEmote(guildId, aEmote);
|
Optional<Emote> emoteInGuild = botService.getEmote(guildId, aEmote);
|
||||||
|
log.trace("Removing embed in message {} in channel {} in server {} because of a user reaction.", message.getMessageId(), message.getChannelId(), message.getServerId());
|
||||||
if(EmoteUtils.isReactionEmoteAEmote(reactionEmote, aEmote, emoteInGuild.orElse(null))) {
|
if(EmoteUtils.isReactionEmoteAEmote(reactionEmote, aEmote, emoteInGuild.orElse(null))) {
|
||||||
Optional<EmbeddedMessage> embeddedMessageOptional = messageEmbedPostManagementService.findEmbeddedPostByMessageId(message.getMessageId());
|
Optional<EmbeddedMessage> embeddedMessageOptional = messageEmbedPostManagementService.findEmbeddedPostByMessageId(message.getMessageId());
|
||||||
if(embeddedMessageOptional.isPresent()) {
|
if(embeddedMessageOptional.isPresent()) {
|
||||||
EmbeddedMessage embeddedMessage = embeddedMessageOptional.get();
|
EmbeddedMessage embeddedMessage = embeddedMessageOptional.get();
|
||||||
if(embeddedMessage.getEmbeddedUser().getUserReference().getId().equals(userAdding.getUserReference().getId())
|
AUser userReacting = userAdding.getUserReference();
|
||||||
|| embeddedMessage.getEmbeddingUser().getUserReference().getId().equals(userAdding.getUserReference().getId())
|
if(embeddedMessage.getEmbeddedUser().getUserReference().getId().equals(userReacting.getId())
|
||||||
|
|| embeddedMessage.getEmbeddingUser().getUserReference().getId().equals(userReacting.getId())
|
||||||
) {
|
) {
|
||||||
messageService.deleteMessageInChannelInServer(message.getServerId(), message.getChannelId(), message.getMessageId()).thenAccept(aVoid -> {
|
messageService.deleteMessageInChannelInServer(message.getServerId(), message.getChannelId(), message.getMessageId()).thenAccept(aVoid -> {
|
||||||
messageEmbedPostManagementService.deleteEmbeddedMessageTransactional(embeddedMessage);
|
messageEmbedPostManagementService.deleteEmbeddedMessageTransactional(embeddedMessage);
|
||||||
|
|||||||
@@ -74,6 +74,7 @@ public class StarboardListener implements ReactedAddedListener, ReactedRemovedLi
|
|||||||
MessageReaction.ReactionEmote reactionEmote = addedReaction.getReactionEmote();
|
MessageReaction.ReactionEmote reactionEmote = addedReaction.getReactionEmote();
|
||||||
Optional<Emote> emoteInGuild = botService.getEmote(guildId, aEmote);
|
Optional<Emote> emoteInGuild = botService.getEmote(guildId, aEmote);
|
||||||
if(EmoteUtils.isReactionEmoteAEmote(reactionEmote, aEmote, emoteInGuild.orElse(null))) {
|
if(EmoteUtils.isReactionEmoteAEmote(reactionEmote, aEmote, emoteInGuild.orElse(null))) {
|
||||||
|
log.trace("User {} in server {} reacted with star to put a message {} on starboard.", userAdding.getUserReference().getId(), userAdding.getServerReference().getId(), message.getMessageId());
|
||||||
Optional<CachedReaction> reactionOptional = EmoteUtils.getReactionFromMessageByEmote(message, aEmote);
|
Optional<CachedReaction> reactionOptional = EmoteUtils.getReactionFromMessageByEmote(message, aEmote);
|
||||||
updateStarboardPost(message, reactionOptional.orElse(null), userAdding, true);
|
updateStarboardPost(message, reactionOptional.orElse(null), userAdding, true);
|
||||||
}
|
}
|
||||||
@@ -85,28 +86,31 @@ public class StarboardListener implements ReactedAddedListener, ReactedRemovedLi
|
|||||||
List<AUser> userExceptAuthor = getUsersExcept(reaction.getUsers(), message.getAuthorId());
|
List<AUser> userExceptAuthor = getUsersExcept(reaction.getUsers(), message.getAuthorId());
|
||||||
Double starMinimum = getFromConfig("starLvl1", message.getServerId());
|
Double starMinimum = getFromConfig("starLvl1", message.getServerId());
|
||||||
if (userExceptAuthor.size() >= starMinimum) {
|
if (userExceptAuthor.size() >= starMinimum) {
|
||||||
|
log.info("Post reached starboard minimum. Message {} in channel {} in server {} will be starred/updated.",
|
||||||
|
message.getMessageId(), message.getChannelId(), message.getServerId());
|
||||||
AUserInAServer author = userManagementService.loadUser(message.getServerId(), message.getAuthorId());
|
AUserInAServer author = userManagementService.loadUser(message.getServerId(), message.getAuthorId());
|
||||||
if(starboardPostOptional.isPresent()) {
|
if(starboardPostOptional.isPresent()) {
|
||||||
StarboardPost starboardPost = starboardPostOptional.get();
|
StarboardPost starboardPost = starboardPostOptional.get();
|
||||||
starboardPost.setIgnored(false);
|
starboardPost.setIgnored(false);
|
||||||
starboardService.updateStarboardPost(starboardPost, message, userExceptAuthor);
|
starboardService.updateStarboardPost(starboardPost, message, userExceptAuthor);
|
||||||
if(adding) {
|
if(adding) {
|
||||||
|
log.trace("Adding reactor {} from message {}", userReacting.getUserReference().getId(), message.getMessageId());
|
||||||
starboardPostReactorManagementService.addReactor(starboardPost, userReacting.getUserReference());
|
starboardPostReactorManagementService.addReactor(starboardPost, userReacting.getUserReference());
|
||||||
} else {
|
} else {
|
||||||
|
log.trace("Removing reactor {} from message {}", userReacting.getUserReference().getId(), message.getMessageId());
|
||||||
starboardPostReactorManagementService.removeReactor(starboardPost, userReacting.getUserReference());
|
starboardPostReactorManagementService.removeReactor(starboardPost, userReacting.getUserReference());
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
log.info("Creating starboard post for message {} in channel {} in server {}", message.getMessageId(), message.getChannelId(), message.getServerId());
|
||||||
starboardService.createStarboardPost(message, userExceptAuthor, userReacting, author);
|
starboardService.createStarboardPost(message, userExceptAuthor, userReacting, author);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if(starboardPostOptional.isPresent()) {
|
log.info("Removing starboard post for message {} in channel {} in server {}. It fell under the threshold {}", message.getMessageId(), message.getChannelId(), message.getServerId(), starMinimum);
|
||||||
this.completelyRemoveStarboardPost(starboardPostOptional.get());
|
starboardPostOptional.ifPresent(this::completelyRemoveStarboardPost);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if(starboardPostOptional.isPresent()) {
|
log.info("Removing starboard post for message {} in channel {} in server {}", message.getMessageId(), message.getChannelId(), message.getServerId());
|
||||||
this.completelyRemoveStarboardPost(starboardPostOptional.get());
|
starboardPostOptional.ifPresent(this::completelyRemoveStarboardPost);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -127,6 +131,8 @@ public class StarboardListener implements ReactedAddedListener, ReactedRemovedLi
|
|||||||
MessageReaction.ReactionEmote reactionEmote = removedReaction.getReactionEmote();
|
MessageReaction.ReactionEmote reactionEmote = removedReaction.getReactionEmote();
|
||||||
Optional<Emote> emoteInGuild = botService.getEmote(guildId, aEmote);
|
Optional<Emote> emoteInGuild = botService.getEmote(guildId, aEmote);
|
||||||
if(EmoteUtils.isReactionEmoteAEmote(reactionEmote, aEmote, emoteInGuild.orElse(null))) {
|
if(EmoteUtils.isReactionEmoteAEmote(reactionEmote, aEmote, emoteInGuild.orElse(null))) {
|
||||||
|
log.trace("User {} in server {} removed star reaction from message {} on starboard.",
|
||||||
|
userRemoving.getUserReference().getId(), userRemoving.getServerReference().getId(), message.getMessageId());
|
||||||
Optional<CachedReaction> reactionOptional = EmoteUtils.getReactionFromMessageByEmote(message, aEmote);
|
Optional<CachedReaction> reactionOptional = EmoteUtils.getReactionFromMessageByEmote(message, aEmote);
|
||||||
updateStarboardPost(message, reactionOptional.orElse(null), userRemoving, false);
|
updateStarboardPost(message, reactionOptional.orElse(null), userRemoving, false);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,12 +5,14 @@ import dev.sheldan.abstracto.core.models.cache.CachedMessage;
|
|||||||
import dev.sheldan.abstracto.utility.config.UtilityFeatures;
|
import dev.sheldan.abstracto.utility.config.UtilityFeatures;
|
||||||
import dev.sheldan.abstracto.utility.models.database.StarboardPost;
|
import dev.sheldan.abstracto.utility.models.database.StarboardPost;
|
||||||
import dev.sheldan.abstracto.utility.service.management.StarboardPostManagementService;
|
import dev.sheldan.abstracto.utility.service.management.StarboardPostManagementService;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
|
@Slf4j
|
||||||
public class StarboardPostDeletedListener implements MessageDeletedListener {
|
public class StarboardPostDeletedListener implements MessageDeletedListener {
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
@@ -20,6 +22,9 @@ public class StarboardPostDeletedListener implements MessageDeletedListener {
|
|||||||
public void execute(CachedMessage messageBefore) {
|
public void execute(CachedMessage messageBefore) {
|
||||||
Optional<StarboardPost> byStarboardPostId = starboardPostManagementService.findByStarboardPostId(messageBefore.getMessageId());
|
Optional<StarboardPost> byStarboardPostId = starboardPostManagementService.findByStarboardPostId(messageBefore.getMessageId());
|
||||||
if(byStarboardPostId.isPresent()) {
|
if(byStarboardPostId.isPresent()) {
|
||||||
|
StarboardPost post = byStarboardPostId.get();
|
||||||
|
// TODO channel missing
|
||||||
|
log.info("Removing starboard post: message {}, channel {}, server {}, because the message was deleted", post.getPostMessageId(), messageBefore.getChannelId(), post.getAuthor().getId());
|
||||||
starboardPostManagementService.setStarboardPostIgnored(messageBefore.getMessageId(), true);
|
starboardPostManagementService.setStarboardPostIgnored(messageBefore.getMessageId(), true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -110,7 +110,8 @@ public class MessageEmbedServiceBean implements MessageEmbedService {
|
|||||||
MessageEmbeddedModel messageEmbeddedModel = buildTemplateParameter(embeddingMessage, cachedMessage);
|
MessageEmbeddedModel messageEmbeddedModel = buildTemplateParameter(embeddingMessage, cachedMessage);
|
||||||
MessageToSend embed = templateService.renderEmbedTemplate(MESSAGE_EMBED_TEMPLATE, messageEmbeddedModel);
|
MessageToSend embed = templateService.renderEmbedTemplate(MESSAGE_EMBED_TEMPLATE, messageEmbeddedModel);
|
||||||
List<CompletableFuture<Message>> completableFutures = channelService.sendMessageToEndInTextChannel(embed, target);
|
List<CompletableFuture<Message>> completableFutures = channelService.sendMessageToEndInTextChannel(embed, target);
|
||||||
|
log.trace("Embedding message {} from channel {} from server {}, because of user {}", cachedMessage.getMessageId(),
|
||||||
|
cachedMessage.getChannelId(), cachedMessage.getServerId(), cause.getUserReference().getId());
|
||||||
CompletableFuture.allOf(completableFutures.toArray(new CompletableFuture[0])).thenAccept(aVoid -> {
|
CompletableFuture.allOf(completableFutures.toArray(new CompletableFuture[0])).thenAccept(aVoid -> {
|
||||||
try {
|
try {
|
||||||
Message createdMessage = completableFutures.get(0).get();
|
Message createdMessage = completableFutures.get(0).get();
|
||||||
|
|||||||
@@ -73,13 +73,17 @@ public class RemindServiceBean implements ReminderService {
|
|||||||
reminderModel.setReminder(reminder);
|
reminderModel.setReminder(reminder);
|
||||||
MessageToSend message = templateService.renderEmbedTemplate(REMINDER_EMBED_KEY, reminderModel);
|
MessageToSend message = templateService.renderEmbedTemplate(REMINDER_EMBED_KEY, reminderModel);
|
||||||
channelService.sendMessageToEndInAChannel(message, reminderModel.getChannel());
|
channelService.sendMessageToEndInAChannel(message, reminderModel.getChannel());
|
||||||
|
log.info("Creating reminder for user {} in guild {} due at {}.",
|
||||||
|
user.getUserReference().getId(), user.getServerReference().getId(), remindAt);
|
||||||
|
|
||||||
if(remindIn.getSeconds() < 60) {
|
if(remindIn.getSeconds() < 60) {
|
||||||
|
log.trace("Directly scheduling the reminder, because it was below the threshold.");
|
||||||
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
|
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
|
||||||
scheduler.schedule(() -> {
|
scheduler.schedule(() -> {
|
||||||
self.executeReminder(reminder.getId());
|
self.executeReminder(reminder.getId());
|
||||||
}, remindIn.toNanos(), TimeUnit.NANOSECONDS);
|
}, remindIn.toNanos(), TimeUnit.NANOSECONDS);
|
||||||
} else {
|
} else {
|
||||||
|
log.trace("Starting scheduled job to execute reminder.");
|
||||||
JobDataMap parameters = new JobDataMap();
|
JobDataMap parameters = new JobDataMap();
|
||||||
parameters.putAsString("reminderId", reminder.getId());
|
parameters.putAsString("reminderId", reminder.getId());
|
||||||
schedulerService.executeJobWithParametersOnce("reminderJob", "utility", parameters, Date.from(reminder.getTargetDate()));
|
schedulerService.executeJobWithParametersOnce("reminderJob", "utility", parameters, Date.from(reminder.getTargetDate()));
|
||||||
@@ -92,6 +96,7 @@ public class RemindServiceBean implements ReminderService {
|
|||||||
Reminder reminderToRemindFor = reminderManagementService.loadReminder(reminderId);
|
Reminder reminderToRemindFor = reminderManagementService.loadReminder(reminderId);
|
||||||
AServer server = reminderToRemindFor.getServer();
|
AServer server = reminderToRemindFor.getServer();
|
||||||
AChannel channel = reminderToRemindFor.getChannel();
|
AChannel channel = reminderToRemindFor.getChannel();
|
||||||
|
log.info("Executing reminder {}.", reminderId);
|
||||||
Optional<Guild> guildToAnswerIn = botService.getGuildById(server.getId());
|
Optional<Guild> guildToAnswerIn = botService.getGuildById(server.getId());
|
||||||
if(guildToAnswerIn.isPresent()) {
|
if(guildToAnswerIn.isPresent()) {
|
||||||
Optional<TextChannel> channelToAnswerIn = botService.getTextChannelFromServer(server.getId(), channel.getId());
|
Optional<TextChannel> channelToAnswerIn = botService.getTextChannelFromServer(server.getId(), channel.getId());
|
||||||
@@ -99,6 +104,7 @@ public class RemindServiceBean implements ReminderService {
|
|||||||
if(channelToAnswerIn.isPresent()) {
|
if(channelToAnswerIn.isPresent()) {
|
||||||
AUser userReference = reminderToRemindFor.getRemindedUser().getUserReference();
|
AUser userReference = reminderToRemindFor.getRemindedUser().getUserReference();
|
||||||
Member memberInServer = botService.getMemberInServer(server.getId(), userReference.getId());
|
Member memberInServer = botService.getMemberInServer(server.getId(), userReference.getId());
|
||||||
|
log.trace("Reminding user {}", memberInServer.getUser().getIdLong());
|
||||||
ExecutedReminderModel build = ExecutedReminderModel
|
ExecutedReminderModel build = ExecutedReminderModel
|
||||||
.builder()
|
.builder()
|
||||||
.reminder(reminderToRemindFor)
|
.reminder(reminderToRemindFor)
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package dev.sheldan.abstracto.core.service;
|
|||||||
import dev.sheldan.abstracto.core.exception.GuildException;
|
import dev.sheldan.abstracto.core.exception.GuildException;
|
||||||
import dev.sheldan.abstracto.core.exception.RoleException;
|
import dev.sheldan.abstracto.core.exception.RoleException;
|
||||||
import dev.sheldan.abstracto.core.models.database.ARole;
|
import dev.sheldan.abstracto.core.models.database.ARole;
|
||||||
|
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||||
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
||||||
import dev.sheldan.abstracto.core.service.management.RoleManagementService;
|
import dev.sheldan.abstracto.core.service.management.RoleManagementService;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
@@ -69,4 +70,14 @@ public class RoleServiceBean implements RoleService {
|
|||||||
throw new RoleException(String.format("Cannot find role %s to mark as deleted.", id));
|
throw new RoleException(String.format("Cannot find role %s to mark as deleted.", id));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isRoleInServer(AServer server, ARole role) {
|
||||||
|
Optional<Guild> guildById = botService.getGuildById(server.getId());
|
||||||
|
if(guildById.isPresent()) {
|
||||||
|
return guildById.get().getRoleById(role.getId()) != null;
|
||||||
|
} else {
|
||||||
|
throw new GuildException(String.format("Failed to load guild %s.", server.getId()));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -69,7 +69,7 @@ public class StartupServiceBean implements Startup {
|
|||||||
availableServers.forEach(aLong -> {
|
availableServers.forEach(aLong -> {
|
||||||
AServer newAServer = serverManagementService.loadOrCreate(aLong);
|
AServer newAServer = serverManagementService.loadOrCreate(aLong);
|
||||||
Guild newGuild = instance.getGuildById(aLong);
|
Guild newGuild = instance.getGuildById(aLong);
|
||||||
log.debug("Synchronizing server: {}", aLong);
|
log.trace("Synchronizing server: {}", aLong);
|
||||||
if(newGuild != null){
|
if(newGuild != null){
|
||||||
synchronizeRolesOf(newGuild, newAServer);
|
synchronizeRolesOf(newGuild, newAServer);
|
||||||
synchronizeChannelsOf(newGuild, newAServer);
|
synchronizeChannelsOf(newGuild, newAServer);
|
||||||
@@ -89,7 +89,7 @@ public class StartupServiceBean implements Startup {
|
|||||||
Set<Long> newRoles = SetUtils.disjunction(availableRoles, knownRolesId);
|
Set<Long> newRoles = SetUtils.disjunction(availableRoles, knownRolesId);
|
||||||
newRoles.forEach(aLong -> {
|
newRoles.forEach(aLong -> {
|
||||||
ARole newRole = roleManagementService.createRole(aLong, existingAServer);
|
ARole newRole = roleManagementService.createRole(aLong, existingAServer);
|
||||||
log.debug("Adding new role: {}", aLong);
|
log.trace("Adding new role: {}", aLong);
|
||||||
existingAServer.getRoles().add(newRole);
|
existingAServer.getRoles().add(newRole);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -102,7 +102,7 @@ public class StartupServiceBean implements Startup {
|
|||||||
Set<Long> newChannels = SetUtils.difference(existingChannelsIds, knownChannelsIds);
|
Set<Long> newChannels = SetUtils.difference(existingChannelsIds, knownChannelsIds);
|
||||||
newChannels.forEach(aLong -> {
|
newChannels.forEach(aLong -> {
|
||||||
GuildChannel channel1 = available.stream().filter(channel -> channel.getIdLong() == aLong).findFirst().get();
|
GuildChannel channel1 = available.stream().filter(channel -> channel.getIdLong() == aLong).findFirst().get();
|
||||||
log.debug("Adding new channel: {}", aLong);
|
log.trace("Adding new channel: {}", aLong);
|
||||||
AChannelType type = AChannel.getAChannelType(channel1.getType());
|
AChannelType type = AChannel.getAChannelType(channel1.getType());
|
||||||
AChannel newChannel = channelManagementService.createChannel(channel1.getIdLong(), type);
|
AChannel newChannel = channelManagementService.createChannel(channel1.getIdLong(), type);
|
||||||
serverManagementService.addChannelToServer(existingServer, newChannel);
|
serverManagementService.addChannelToServer(existingServer, newChannel);
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package dev.sheldan.abstracto.core.service;
|
package dev.sheldan.abstracto.core.service;
|
||||||
|
|
||||||
import dev.sheldan.abstracto.core.models.database.ARole;
|
import dev.sheldan.abstracto.core.models.database.ARole;
|
||||||
|
import dev.sheldan.abstracto.core.models.database.AServer;
|
||||||
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
||||||
import net.dv8tion.jda.api.entities.Role;
|
import net.dv8tion.jda.api.entities.Role;
|
||||||
|
|
||||||
@@ -9,4 +10,5 @@ public interface RoleService {
|
|||||||
void removeRoleFromUser(AUserInAServer aUserInAServer, ARole role);
|
void removeRoleFromUser(AUserInAServer aUserInAServer, ARole role);
|
||||||
void markDeleted(Role role);
|
void markDeleted(Role role);
|
||||||
void markDeleted(Long id);
|
void markDeleted(Long id);
|
||||||
|
boolean isRoleInServer(AServer server, ARole role);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ public class TemplateSeedDataLoader {
|
|||||||
try {
|
try {
|
||||||
String templateKey = FilenameUtils.getBaseName(resource.getFilename());
|
String templateKey = FilenameUtils.getBaseName(resource.getFilename());
|
||||||
String templateContent = IOUtils.toString(resource.getURI(), Charset.defaultCharset());
|
String templateContent = IOUtils.toString(resource.getURI(), Charset.defaultCharset());
|
||||||
log.debug("Creating template {}", templateKey);
|
log.trace("Creating template {}", templateKey);
|
||||||
service.createTemplate(templateKey, templateContent);
|
service.createTemplate(templateKey, templateContent);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
|||||||
Reference in New Issue
Block a user