added command to specifically disable/experience for a user

This commit is contained in:
Sheldan
2020-05-17 01:24:27 +02:00
parent 59ff1f1f40
commit cf1816597c
14 changed files with 154 additions and 6 deletions

View File

@@ -0,0 +1,57 @@
package dev.sheldan.abstracto.experience.commands;
import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand;
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
import dev.sheldan.abstracto.core.command.config.HelpInfo;
import dev.sheldan.abstracto.core.command.config.Parameter;
import dev.sheldan.abstracto.core.command.execution.CommandContext;
import dev.sheldan.abstracto.core.command.execution.CommandResult;
import dev.sheldan.abstracto.core.config.FeatureEnum;
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import dev.sheldan.abstracto.core.service.management.UserInServerManagementService;
import dev.sheldan.abstracto.experience.config.features.ExperienceFeature;
import dev.sheldan.abstracto.experience.service.AUserExperienceService;
import net.dv8tion.jda.api.entities.Member;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
@Component
public class DisableExpGain extends AbstractConditionableCommand {
@Autowired
private AUserExperienceService aUserExperienceService;
@Autowired
private UserInServerManagementService userInServerManagementService;
@Override
public CommandResult execute(CommandContext commandContext) {
Member para = (Member) commandContext.getParameters().getParameters().get(0);
AUserInAServer userInAServer = userInServerManagementService.loadUser(para);
aUserExperienceService.disableExperienceForUser(userInAServer);
return CommandResult.fromSuccess();
}
@Override
public CommandConfiguration getConfiguration() {
List<Parameter> parameters = new ArrayList<>();
parameters.add(Parameter.builder().name("user").templated(true).type(Member.class).build());
HelpInfo helpInfo = HelpInfo.builder().templated(true).build();
return CommandConfiguration.builder()
.name("disableExpGain")
.module(ExperienceModule.EXPERIENCE)
.causesReaction(true)
.templated(true)
.parameters(parameters)
.help(helpInfo)
.build();
}
@Override
public FeatureEnum getFeature() {
return ExperienceFeature.EXPERIENCE;
}
}

View File

@@ -0,0 +1,57 @@
package dev.sheldan.abstracto.experience.commands;
import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand;
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
import dev.sheldan.abstracto.core.command.config.HelpInfo;
import dev.sheldan.abstracto.core.command.config.Parameter;
import dev.sheldan.abstracto.core.command.execution.CommandContext;
import dev.sheldan.abstracto.core.command.execution.CommandResult;
import dev.sheldan.abstracto.core.config.FeatureEnum;
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import dev.sheldan.abstracto.core.service.management.UserInServerManagementService;
import dev.sheldan.abstracto.experience.config.features.ExperienceFeature;
import dev.sheldan.abstracto.experience.service.AUserExperienceService;
import net.dv8tion.jda.api.entities.Member;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
@Component
public class EnableExpGain extends AbstractConditionableCommand {
@Autowired
private AUserExperienceService aUserExperienceService;
@Autowired
private UserInServerManagementService userInServerManagementService;
@Override
public CommandResult execute(CommandContext commandContext) {
Member para = (Member) commandContext.getParameters().getParameters().get(0);
AUserInAServer userInAServer = userInServerManagementService.loadUser(para);
aUserExperienceService.enableExperienceForUser(userInAServer);
return CommandResult.fromSuccess();
}
@Override
public CommandConfiguration getConfiguration() {
List<Parameter> parameters = new ArrayList<>();
parameters.add(Parameter.builder().name("user").templated(true).type(Member.class).build());
HelpInfo helpInfo = HelpInfo.builder().templated(true).build();
return CommandConfiguration.builder()
.name("enableExpGain")
.module(ExperienceModule.EXPERIENCE)
.causesReaction(true)
.templated(true)
.parameters(parameters)
.help(helpInfo)
.build();
}
@Override
public FeatureEnum getFeature() {
return ExperienceFeature.EXPERIENCE;
}
}

View File

@@ -71,7 +71,6 @@ public class AUserExperienceServiceBean implements AUserExperienceService {
*/
@Override
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;
if(runtimeExperience.containsKey(second)) {
List<AServer> existing = runtimeExperience.get(second);
@@ -156,9 +155,13 @@ public class AUserExperienceServiceBean implements AUserExperienceService {
gainedExperience = (int) Math.floor(gainedExperience * multiplier);
log.trace("Handling {}. The user gains {}", userInAServer.getUserReference().getId(), gainedExperience);
AUserExperience aUserExperience = userExperienceManagementService.incrementExpForUser(userInAServer, gainedExperience.longValue(), 1L);
updateUserlevel(aUserExperience, levels);
updateUserRole(aUserExperience, roles);
userExperienceManagementService.saveUser(aUserExperience);
if(!aUserExperience.getExperienceGainDisabled()) {
updateUserlevel(aUserExperience, levels);
updateUserRole(aUserExperience, roles);
userExperienceManagementService.saveUser(aUserExperience);
} else {
log.trace("Experience gain was disabled. User did not gain any experience.");
}
});
});
}
@@ -248,6 +251,18 @@ public class AUserExperienceServiceBean implements AUserExperienceService {
}
}
@Override
public void disableExperienceForUser(AUserInAServer userInAServer) {
AUserExperience userExperience = userExperienceManagementService.findUserInServer(userInAServer);
userExperience.setExperienceGainDisabled(true);
}
@Override
public void enableExperienceForUser(AUserInAServer userInAServer) {
AUserExperience userExperience = userExperienceManagementService.findUserInServer(userInAServer);
userExperience.setExperienceGainDisabled(false);
}
private MessageToSend getUserSyncStatusUpdateModel(Integer current, Integer total) {
UserSyncStatusModel statusModel = UserSyncStatusModel.builder().currentCount(current).totalUserCount(total).build();
return templateService.renderEmbedTemplate("user_sync_status_message", statusModel);

View File

@@ -37,6 +37,7 @@ public class UserExperienceManagementServiceBean implements UserExperienceManage
.builder()
.experience(0L)
.messageCount(0L)
.experienceGainDisabled(false)
.user(aUserInAServer)
.id(aUserInAServer.getUserInServerId())
.currentLevel(startingLevel)
@@ -60,8 +61,10 @@ public class UserExperienceManagementServiceBean implements UserExperienceManage
Optional<AUserExperience> byId = repository.findById(user.getUserInServerId());
if(byId.isPresent()) {
AUserExperience userExperience = byId.get();
userExperience.setMessageCount(userExperience.getMessageCount() + messageCount);
userExperience.setExperience(userExperience.getExperience() + experience);
if(!userExperience.getExperienceGainDisabled()) {
userExperience.setMessageCount(userExperience.getMessageCount() + messageCount);
userExperience.setExperience(userExperience.getExperience() + experience);
}
return userExperience;
} else {
AExperienceLevel startingLevel = experienceLevelManagementService.getLevel(0).orElseThrow(() -> new AbstractoRunTimeException(String.format("Could not find level %s", 0)));

View File

@@ -45,6 +45,11 @@ public class AUserExperience implements Serializable {
*/
private Long messageCount;
/**
* Whether or not the experience gain has been disabled for this user
*/
private Boolean experienceGainDisabled;
/**
* The {@link AExperienceLevel } which the user currently has.
*/

View File

@@ -125,4 +125,7 @@ public interface AUserExperienceService {
* @param toExecute The {@link Consumer} which should be executed on each element of the passed list
*/
void executeActionOnUserExperiencesWithFeedBack(List<AUserExperience> experiences, AChannel channel, Consumer<AUserExperience> toExecute);
void disableExperienceForUser(AUserInAServer userInAServer);
void enableExperienceForUser(AUserInAServer userInAServer);
}

View File

@@ -0,0 +1 @@
Disables the experience gain for one specific user. This user will not gain experience and will not gain ranks.

View File

@@ -0,0 +1 @@
Enables the experience gain for one specific user. This user will gain experience and will gain ranks.