mirror of
https://github.com/Sheldan/abstracto.git
synced 2026-03-10 09:21:34 +00:00
added command to specifically disable/experience for a user
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
@@ -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)));
|
||||
|
||||
@@ -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.
|
||||
*/
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
Disables experience gain for a particular member
|
||||
@@ -0,0 +1 @@
|
||||
Disables the experience gain for one specific user. This user will not gain experience and will not gain ranks.
|
||||
@@ -0,0 +1 @@
|
||||
The user to disable experience gain for.
|
||||
@@ -0,0 +1 @@
|
||||
disableExpGain <user>
|
||||
@@ -0,0 +1 @@
|
||||
Enables experience gain for a particular member
|
||||
@@ -0,0 +1 @@
|
||||
Enables the experience gain for one specific user. This user will gain experience and will gain ranks.
|
||||
@@ -0,0 +1 @@
|
||||
The user to enable experience gain for.
|
||||
@@ -0,0 +1 @@
|
||||
enableExpGain <user>
|
||||
Reference in New Issue
Block a user