mirror of
https://github.com/Sheldan/abstracto.git
synced 2026-04-16 04:21:49 +00:00
[AB-270] adding a channel group to define the channels in which experience gain is disabled
adding a service method to enable migration
This commit is contained in:
@@ -34,9 +34,13 @@ public class ExperienceTrackerListener implements AsyncMessageReceivedListener {
|
|||||||
if(!message.isFromGuild() || message.isWebhookMessage() || message.getType().isSystem() || message.getAuthor().isBot()) {
|
if(!message.isFromGuild() || message.isWebhookMessage() || message.getType().isSystem() || message.getAuthor().isBot()) {
|
||||||
return DefaultListenerResult.IGNORED;
|
return DefaultListenerResult.IGNORED;
|
||||||
}
|
}
|
||||||
|
if(userExperienceService.experienceGainEnabledInChannel(message.getChannel())) {
|
||||||
AUserInAServer cause = userInServerManagementService.loadOrCreateUser(model.getServerId(), model.getMessage().getAuthor().getIdLong());
|
AUserInAServer cause = userInServerManagementService.loadOrCreateUser(model.getServerId(), model.getMessage().getAuthor().getIdLong());
|
||||||
userExperienceService.addExperience(cause);
|
userExperienceService.addExperience(cause);
|
||||||
return DefaultListenerResult.PROCESSED;
|
return DefaultListenerResult.PROCESSED;
|
||||||
|
} else {
|
||||||
|
return DefaultListenerResult.IGNORED;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -1,15 +1,9 @@
|
|||||||
package dev.sheldan.abstracto.experience.service;
|
package dev.sheldan.abstracto.experience.service;
|
||||||
|
|
||||||
import dev.sheldan.abstracto.core.models.database.AChannel;
|
import dev.sheldan.abstracto.core.models.database.*;
|
||||||
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.property.SystemConfigProperty;
|
import dev.sheldan.abstracto.core.models.property.SystemConfigProperty;
|
||||||
import dev.sheldan.abstracto.core.service.*;
|
import dev.sheldan.abstracto.core.service.*;
|
||||||
import dev.sheldan.abstracto.core.service.management.ChannelManagementService;
|
import dev.sheldan.abstracto.core.service.management.*;
|
||||||
import dev.sheldan.abstracto.core.service.management.DefaultConfigManagementService;
|
|
||||||
import dev.sheldan.abstracto.core.service.management.ServerManagementService;
|
|
||||||
import dev.sheldan.abstracto.core.service.management.UserInServerManagementService;
|
|
||||||
import dev.sheldan.abstracto.core.utils.CompletableFutureList;
|
import dev.sheldan.abstracto.core.utils.CompletableFutureList;
|
||||||
import dev.sheldan.abstracto.core.utils.FutureUtils;
|
import dev.sheldan.abstracto.core.utils.FutureUtils;
|
||||||
import dev.sheldan.abstracto.experience.config.ExperienceFeatureConfig;
|
import dev.sheldan.abstracto.experience.config.ExperienceFeatureConfig;
|
||||||
@@ -26,6 +20,7 @@ import dev.sheldan.abstracto.core.templating.service.TemplateService;
|
|||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import net.dv8tion.jda.api.entities.Member;
|
import net.dv8tion.jda.api.entities.Member;
|
||||||
import net.dv8tion.jda.api.entities.Message;
|
import net.dv8tion.jda.api.entities.Message;
|
||||||
|
import net.dv8tion.jda.api.entities.MessageChannel;
|
||||||
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 org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
@@ -82,6 +77,9 @@ public class AUserExperienceServiceBean implements AUserExperienceService {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private ChannelManagementService channelManagementService;
|
private ChannelManagementService channelManagementService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ChannelGroupService channelGroupService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private DefaultConfigManagementService defaultConfigManagementService;
|
private DefaultConfigManagementService defaultConfigManagementService;
|
||||||
|
|
||||||
@@ -457,6 +455,33 @@ public class AUserExperienceServiceBean implements AUserExperienceService {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean experienceGainEnabledInChannel(MessageChannel messageChannel) {
|
||||||
|
AChannel channel = channelManagementService.loadChannel(messageChannel.getIdLong());
|
||||||
|
List<AChannelGroup> channelGroups = channelGroupService.getChannelGroupsOfChannelWithType(channel, EXPERIENCE_GAIN_CHANNEL_GROUP_KEY);
|
||||||
|
if(!channelGroups.isEmpty()) {
|
||||||
|
return channelGroups.stream().noneMatch(AChannelGroup::getEnabled);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public AUserExperience createUserExperienceForUser(AUserInAServer aUserInAServer, Long experience, Long messageCount) {
|
||||||
|
List<AExperienceLevel> levels = experienceLevelManagementService.getLevelConfig();
|
||||||
|
levels.sort(Comparator.comparing(AExperienceLevel::getExperienceNeeded));
|
||||||
|
return createUserExperienceForUser(aUserInAServer, experience, messageCount, levels);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public AUserExperience createUserExperienceForUser(AUserInAServer aUserInAServer, Long experience, Long messageCount, List<AExperienceLevel> levels) {
|
||||||
|
AExperienceLevel level = calculateLevel(levels, experience);
|
||||||
|
AUserExperience userExperience = userExperienceManagementService.createUserInServer(aUserInAServer);
|
||||||
|
userExperience.setCurrentLevel(level);
|
||||||
|
userExperience.setExperience(experience);
|
||||||
|
userExperience.setMessageCount(messageCount);
|
||||||
|
return userExperience;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CompletableFutureList<RoleCalculationResult> executeActionOnUserExperiencesWithFeedBack(List<AUserExperience> experiences, AChannel channel, Function<AUserExperience, CompletableFuture<RoleCalculationResult>> toExecute) {
|
public CompletableFutureList<RoleCalculationResult> executeActionOnUserExperiencesWithFeedBack(List<AUserExperience> experiences, AChannel channel, Function<AUserExperience, CompletableFuture<RoleCalculationResult>> toExecute) {
|
||||||
List<CompletableFuture<RoleCalculationResult>> futures = new ArrayList<>();
|
List<CompletableFuture<RoleCalculationResult>> futures = new ArrayList<>();
|
||||||
|
|||||||
@@ -0,0 +1,14 @@
|
|||||||
|
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
|
||||||
|
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
||||||
|
xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
|
||||||
|
xmlns:pro="http://www.liquibase.org/xml/ns/pro"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog dbchangelog.xsd
|
||||||
|
http://www.liquibase.org/xml/ns/dbchangelog-ext dbchangelog.xsd
|
||||||
|
http://www.liquibase.org/xml/ns/pro dbchangelog.xsd" >
|
||||||
|
<changeSet author="Sheldan" id="experience_gain_channel_group_type-insertion">
|
||||||
|
<insert tableName="channel_group_type">
|
||||||
|
<column name="group_type_key" value="experienceGain"/>
|
||||||
|
</insert>
|
||||||
|
</changeSet>
|
||||||
|
</databaseChangeLog>
|
||||||
@@ -11,4 +11,5 @@
|
|||||||
<include file="module.xml" relativeToChangelogFile="true"/>
|
<include file="module.xml" relativeToChangelogFile="true"/>
|
||||||
<include file="command.xml" relativeToChangelogFile="true"/>
|
<include file="command.xml" relativeToChangelogFile="true"/>
|
||||||
<include file="experience_job.xml" relativeToChangelogFile="true"/>
|
<include file="experience_job.xml" relativeToChangelogFile="true"/>
|
||||||
|
<include file="channel_group_types.xml" relativeToChangelogFile="true"/>
|
||||||
</databaseChangeLog>
|
</databaseChangeLog>
|
||||||
@@ -11,6 +11,7 @@ import dev.sheldan.abstracto.experience.model.ServerExperience;
|
|||||||
import dev.sheldan.abstracto.experience.model.database.AExperienceLevel;
|
import dev.sheldan.abstracto.experience.model.database.AExperienceLevel;
|
||||||
import dev.sheldan.abstracto.experience.model.database.AExperienceRole;
|
import dev.sheldan.abstracto.experience.model.database.AExperienceRole;
|
||||||
import dev.sheldan.abstracto.experience.model.database.AUserExperience;
|
import dev.sheldan.abstracto.experience.model.database.AUserExperience;
|
||||||
|
import net.dv8tion.jda.api.entities.MessageChannel;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
@@ -22,6 +23,7 @@ import java.util.function.Function;
|
|||||||
* user in the guild and retrieving {@link LeaderBoard leaderboard} data.
|
* user in the guild and retrieving {@link LeaderBoard leaderboard} data.
|
||||||
*/
|
*/
|
||||||
public interface AUserExperienceService {
|
public interface AUserExperienceService {
|
||||||
|
String EXPERIENCE_GAIN_CHANNEL_GROUP_KEY = "experienceGain";
|
||||||
/**
|
/**
|
||||||
* Adds the given {@link AUserInAServer userInAServer} to the list of user who gained experience in the current minute.
|
* Adds the given {@link AUserInAServer userInAServer} to the list of user who gained experience in the current minute.
|
||||||
* Does not add the user to the list of users, if it is already in there.
|
* Does not add the user to the list of users, if it is already in there.
|
||||||
@@ -150,4 +152,9 @@ public interface AUserExperienceService {
|
|||||||
* @param results The list of {@link RoleCalculationResult} which should be updated in the database
|
* @param results The list of {@link RoleCalculationResult} which should be updated in the database
|
||||||
*/
|
*/
|
||||||
void syncRolesInStorage(List<RoleCalculationResult> results);
|
void syncRolesInStorage(List<RoleCalculationResult> results);
|
||||||
|
|
||||||
|
boolean experienceGainEnabledInChannel(MessageChannel messageChannel);
|
||||||
|
|
||||||
|
AUserExperience createUserExperienceForUser(AUserInAServer aUserInAServer, Long experience, Long messageCount);
|
||||||
|
AUserExperience createUserExperienceForUser(AUserInAServer aUserInAServer, Long experience, Long messageCount, List<AExperienceLevel> levels);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user