fixed some code smells

This commit is contained in:
Sheldan
2020-04-27 20:23:02 +02:00
parent e08086b6a9
commit 8e7bc7d98f
91 changed files with 251 additions and 268 deletions

View File

@@ -50,7 +50,7 @@ public class LeaderBoardCommand extends AbstractConditionableCommand {
public CommandResult execute(CommandContext commandContext) { public CommandResult execute(CommandContext commandContext) {
List<Object> parameters = commandContext.getParameters().getParameters(); List<Object> parameters = commandContext.getParameters().getParameters();
// parameter is optional, in case its not present, we default to the 0th page // parameter is optional, in case its not present, we default to the 0th page
Integer page = parameters.size() > 0 ? (Integer) parameters.get(0) : 0; Integer page = !parameters.isEmpty() ? (Integer) parameters.get(0) : 0;
LeaderBoard leaderBoard = userExperienceService.findLeaderBoardData(commandContext.getUserInitiatedContext().getServer(), page); LeaderBoard leaderBoard = userExperienceService.findLeaderBoardData(commandContext.getUserInitiatedContext().getServer(), page);
LeaderBoardModel leaderBoardModel = (LeaderBoardModel) ContextConverter.fromCommandContext(commandContext, LeaderBoardModel.class); LeaderBoardModel leaderBoardModel = (LeaderBoardModel) ContextConverter.fromCommandContext(commandContext, LeaderBoardModel.class);
leaderBoardModel.setUserExperiences(converter.fromLeaderBoard(leaderBoard)); leaderBoardModel.setUserExperiences(converter.fromLeaderBoard(leaderBoard));

View File

@@ -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.command.execution.ContextConverter; import dev.sheldan.abstracto.core.command.execution.ContextConverter;
import dev.sheldan.abstracto.core.config.FeatureEnum; import dev.sheldan.abstracto.core.config.FeatureEnum;
import dev.sheldan.abstracto.core.service.ChannelService;
import dev.sheldan.abstracto.experience.config.features.ExperienceFeature; import dev.sheldan.abstracto.experience.config.features.ExperienceFeature;
import dev.sheldan.abstracto.experience.converter.LeaderBoardModelConverter; import dev.sheldan.abstracto.experience.converter.LeaderBoardModelConverter;
import dev.sheldan.abstracto.experience.models.LeaderBoardEntry; import dev.sheldan.abstracto.experience.models.LeaderBoardEntry;
@@ -39,6 +40,10 @@ public class Rank extends AbstractConditionableCommand {
@Autowired @Autowired
private ExperienceLevelService experienceLevelService; private ExperienceLevelService experienceLevelService;
@Autowired
protected ChannelService channelService;
@Override @Override
public CommandResult execute(CommandContext commandContext) { public CommandResult execute(CommandContext commandContext) {
RankModel rankModel = (RankModel) ContextConverter.fromCommandContext(commandContext, RankModel.class); RankModel rankModel = (RankModel) ContextConverter.fromCommandContext(commandContext, RankModel.class);

View File

@@ -176,25 +176,19 @@ public class AUserExperienceServiceBean implements AUserExperienceService {
Member member = botService.getMemberInServer(user.getServerReference(), user.getUserReference()); Member member = botService.getMemberInServer(user.getServerReference(), user.getUserReference());
boolean currentlyHasNoExperienceRole = userExperience.getCurrentExperienceRole() == null; boolean currentlyHasNoExperienceRole = userExperience.getCurrentExperienceRole() == null;
if(role == null) { if(role == null) {
if(!currentlyHasNoExperienceRole){ if(!currentlyHasNoExperienceRole && botService.isUserInGuild(userExperience.getUser())){
if(botService.isUserInGuild(userExperience.getUser())) { roleService.removeRoleFromUser(user, userExperience.getCurrentExperienceRole().getRole());
roleService.removeRoleFromUser(user, userExperience.getCurrentExperienceRole().getRole());
}
} }
userExperience.setCurrentExperienceRole(null); userExperience.setCurrentExperienceRole(null);
return; return;
} }
boolean userHasRoleAlready = roleService.memberHasRole(member, role.getRole()); boolean userHasRoleAlready = roleService.memberHasRole(member, role.getRole());
if(!userHasRoleAlready) { if(!userHasRoleAlready && (currentlyHasNoExperienceRole || !role.getRole().getId().equals(userExperience.getCurrentExperienceRole().getRole().getId()))) {
if(currentlyHasNoExperienceRole || !role.getRole().getId().equals(userExperience.getCurrentExperienceRole().getRole().getId())) { log.info("User {} in server {} gets a new role {}", user.getUserReference().getId(), user.getServerReference().getId(), role.getRole().getId());
log.info("User {} in server {} gets a new role {}", user.getUserReference().getId(), user.getServerReference().getId(), role.getRole().getId()); if(!currentlyHasNoExperienceRole && botService.isUserInGuild(userExperience.getUser())) {
if(!currentlyHasNoExperienceRole) { roleService.removeRoleFromUser(user, userExperience.getCurrentExperienceRole().getRole());
if(botService.isUserInGuild(userExperience.getUser())) {
roleService.removeRoleFromUser(user, userExperience.getCurrentExperienceRole().getRole());
}
}
roleService.addRoleToUser(user, role.getRole());
} }
roleService.addRoleToUser(user, role.getRole());
} }
userExperience.setCurrentExperienceRole(role); userExperience.setCurrentExperienceRole(role);
} }
@@ -226,9 +220,7 @@ public class AUserExperienceServiceBean implements AUserExperienceService {
List<AUserExperience> aUserExperiences = userExperienceManagementService.loadAllUsers(server); List<AUserExperience> aUserExperiences = userExperienceManagementService.loadAllUsers(server);
log.info("Found {} users to synchronize", aUserExperiences.size()); log.info("Found {} users to synchronize", aUserExperiences.size());
List<AExperienceRole> roles = experienceRoleManagementService.getExperienceRolesForServer(server); List<AExperienceRole> roles = experienceRoleManagementService.getExperienceRolesForServer(server);
executeActionOnUserExperiencesWithFeedBack(aUserExperiences, channel, (AUserExperience experience) -> { executeActionOnUserExperiencesWithFeedBack(aUserExperiences, channel, (AUserExperience experience) -> updateUserRole(experience, roles));
updateUserRole(experience, roles);
});
} }
@Override @Override

View File

@@ -55,14 +55,13 @@ public class ExperienceRoleServiceBean implements ExperienceRoleService {
public void unsetRole(ARole role, AServer server, AChannel feedbackChannel) { public void unsetRole(ARole role, AServer server, AChannel feedbackChannel) {
AExperienceRole roleInServer = experienceRoleManagementService.getRoleInServer(role, server); AExperienceRole roleInServer = experienceRoleManagementService.getRoleInServer(role, server);
if(roleInServer != null) { if(roleInServer != null) {
if(roleInServer.getUsers().size() > 0) { if(!roleInServer.getUsers().isEmpty()) {
log.info("Recalculating the roles for {} users, because their current role was removed from experience tracking.", roleInServer.getUsers().size()); log.info("Recalculating the roles for {} users, because their current role was removed from experience tracking.", roleInServer.getUsers().size());
List<AExperienceRole> roles = experienceRoleManagementService.getExperienceRolesForServer(server); List<AExperienceRole> roles = experienceRoleManagementService.getExperienceRolesForServer(server);
roles.removeIf(role1 -> role1.getId().equals(roleInServer.getId())); roles.removeIf(role1 -> role1.getId().equals(roleInServer.getId()));
userExperienceService.executeActionOnUserExperiencesWithFeedBack(roleInServer.getUsers(), feedbackChannel, (AUserExperience ex) -> { userExperienceService.executeActionOnUserExperiencesWithFeedBack(roleInServer.getUsers(), feedbackChannel,
userExperienceService.updateUserRole(ex, roles); (AUserExperience ex) -> userExperienceService.updateUserRole(ex, roles));
});
} }
experienceRoleManagementService.unsetRole(roleInServer); experienceRoleManagementService.unsetRole(roleInServer);
} }
@@ -76,7 +75,7 @@ public class ExperienceRoleServiceBean implements ExperienceRoleService {
*/ */
@Override @Override
public AExperienceRole calculateRole(AUserExperience userExperience, List<AExperienceRole> roles) { public AExperienceRole calculateRole(AUserExperience userExperience, List<AExperienceRole> roles) {
if(roles.size() == 0) { if(roles.isEmpty()) {
return null; return null;
} }
AExperienceRole lastRole = null; AExperienceRole lastRole = null;

View File

@@ -27,9 +27,7 @@ public class ExperienceRoleManagementServiceBean implements ExperienceRoleManage
public void removeAllRoleAssignmentsForLevelInServer(AExperienceLevel level, AServer server) { public void removeAllRoleAssignmentsForLevelInServer(AExperienceLevel level, AServer server) {
log.trace("Removing all role assignments for level {}.", level.getLevel()); 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);
});
} }
@Override @Override

View File

@@ -6,8 +6,6 @@ import org.springframework.stereotype.Component;
@Component @Component
public class ExperienceFeatureDisplay implements FeatureDisplay { public class ExperienceFeatureDisplay implements FeatureDisplay {
public static String EXPERIENCE = "experience";
@Override @Override
public FeatureEnum getFeature() { public FeatureEnum getFeature() {
return ExperienceFeature.EXPERIENCE; return ExperienceFeature.EXPERIENCE;

View File

@@ -5,6 +5,7 @@ import lombok.*;
import javax.persistence.Entity; import javax.persistence.Entity;
import javax.persistence.Id; import javax.persistence.Id;
import javax.persistence.Table; import javax.persistence.Table;
import java.io.Serializable;
/** /**
* Represents an existing level to reach and the total necessary experience needed to reach that level. * Represents an existing level to reach and the total necessary experience needed to reach that level.
@@ -16,7 +17,7 @@ import javax.persistence.Table;
@Table(name = "experience_level") @Table(name = "experience_level")
@Getter @Getter
@Setter @Setter
public class AExperienceLevel { public class AExperienceLevel implements Serializable {
/** /**
* The unique level from 0 to as defined in the configuration. Will be created on startup. * The unique level from 0 to as defined in the configuration. Will be created on startup.
*/ */

View File

@@ -5,6 +5,7 @@ import dev.sheldan.abstracto.core.models.database.AServer;
import lombok.*; import lombok.*;
import javax.persistence.*; import javax.persistence.*;
import java.io.Serializable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@@ -19,7 +20,7 @@ import java.util.List;
@Table(name = "experience_role") @Table(name = "experience_role")
@Getter @Getter
@Setter @Setter
public class AExperienceRole { public class AExperienceRole implements Serializable {
/** /**
* The abstracto unique id of this experience role. * The abstracto unique id of this experience role.

View File

@@ -7,7 +7,7 @@ import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
import dev.sheldan.abstracto.core.command.config.Parameter; import dev.sheldan.abstracto.core.command.config.Parameter;
import dev.sheldan.abstracto.core.command.execution.*; import dev.sheldan.abstracto.core.command.execution.*;
import dev.sheldan.abstracto.core.config.FeatureEnum; import dev.sheldan.abstracto.core.config.FeatureEnum;
import dev.sheldan.abstracto.moderation.config.Moderation; import dev.sheldan.abstracto.moderation.config.ModerationModule;
import dev.sheldan.abstracto.moderation.config.features.ModerationFeatures; import dev.sheldan.abstracto.moderation.config.features.ModerationFeatures;
import dev.sheldan.abstracto.moderation.models.template.commands.BanLog; import dev.sheldan.abstracto.moderation.models.template.commands.BanLog;
import dev.sheldan.abstracto.moderation.service.BanService; import dev.sheldan.abstracto.moderation.service.BanService;
@@ -53,7 +53,7 @@ public class Ban extends AbstractConditionableCommand {
HelpInfo helpInfo = HelpInfo.builder().templated(true).build(); HelpInfo helpInfo = HelpInfo.builder().templated(true).build();
return CommandConfiguration.builder() return CommandConfiguration.builder()
.name("ban") .name("ban")
.module(Moderation.MODERATION) .module(ModerationModule.MODERATION)
.templated(true) .templated(true)
.causesReaction(true) .causesReaction(true)
.parameters(parameters) .parameters(parameters)

View File

@@ -6,7 +6,7 @@ import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
import dev.sheldan.abstracto.core.command.config.Parameter; import dev.sheldan.abstracto.core.command.config.Parameter;
import dev.sheldan.abstracto.core.command.execution.*; import dev.sheldan.abstracto.core.command.execution.*;
import dev.sheldan.abstracto.core.config.FeatureEnum; import dev.sheldan.abstracto.core.config.FeatureEnum;
import dev.sheldan.abstracto.moderation.config.Moderation; import dev.sheldan.abstracto.moderation.config.ModerationModule;
import dev.sheldan.abstracto.moderation.config.features.ModerationFeatures; import dev.sheldan.abstracto.moderation.config.features.ModerationFeatures;
import dev.sheldan.abstracto.moderation.models.template.commands.BanIdLog; import dev.sheldan.abstracto.moderation.models.template.commands.BanIdLog;
import dev.sheldan.abstracto.moderation.service.BanService; import dev.sheldan.abstracto.moderation.service.BanService;
@@ -49,7 +49,7 @@ public class BanId extends AbstractConditionableCommand {
HelpInfo helpInfo = HelpInfo.builder().templated(true).build(); HelpInfo helpInfo = HelpInfo.builder().templated(true).build();
return CommandConfiguration.builder() return CommandConfiguration.builder()
.name("banid") .name("banid")
.module(Moderation.MODERATION) .module(ModerationModule.MODERATION)
.templated(true) .templated(true)
.causesReaction(true) .causesReaction(true)
.parameters(parameters) .parameters(parameters)

View File

@@ -7,7 +7,7 @@ import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
import dev.sheldan.abstracto.core.command.config.Parameter; import dev.sheldan.abstracto.core.command.config.Parameter;
import dev.sheldan.abstracto.core.command.execution.*; import dev.sheldan.abstracto.core.command.execution.*;
import dev.sheldan.abstracto.core.config.FeatureEnum; import dev.sheldan.abstracto.core.config.FeatureEnum;
import dev.sheldan.abstracto.moderation.config.Moderation; import dev.sheldan.abstracto.moderation.config.ModerationModule;
import dev.sheldan.abstracto.moderation.config.features.ModerationFeatures; import dev.sheldan.abstracto.moderation.config.features.ModerationFeatures;
import dev.sheldan.abstracto.moderation.models.template.commands.KickLogModel; import dev.sheldan.abstracto.moderation.models.template.commands.KickLogModel;
import dev.sheldan.abstracto.moderation.service.KickServiceBean; import dev.sheldan.abstracto.moderation.service.KickServiceBean;
@@ -52,7 +52,7 @@ public class Kick extends AbstractConditionableCommand {
HelpInfo helpInfo = HelpInfo.builder().templated(true).build(); HelpInfo helpInfo = HelpInfo.builder().templated(true).build();
return CommandConfiguration.builder() return CommandConfiguration.builder()
.name("kick") .name("kick")
.module(Moderation.MODERATION) .module(ModerationModule.MODERATION)
.templated(true) .templated(true)
.causesReaction(true) .causesReaction(true)
.parameters(parameters) .parameters(parameters)

View File

@@ -8,7 +8,7 @@ import dev.sheldan.abstracto.core.command.config.Parameter;
import dev.sheldan.abstracto.core.command.execution.CommandResult; import dev.sheldan.abstracto.core.command.execution.CommandResult;
import dev.sheldan.abstracto.core.config.FeatureEnum; import dev.sheldan.abstracto.core.config.FeatureEnum;
import dev.sheldan.abstracto.core.utils.ParseUtils; import dev.sheldan.abstracto.core.utils.ParseUtils;
import dev.sheldan.abstracto.moderation.config.Moderation; import dev.sheldan.abstracto.moderation.config.ModerationModule;
import dev.sheldan.abstracto.moderation.config.features.ModerationFeatures; import dev.sheldan.abstracto.moderation.config.features.ModerationFeatures;
import dev.sheldan.abstracto.moderation.service.SlowModeService; import dev.sheldan.abstracto.moderation.service.SlowModeService;
import net.dv8tion.jda.api.entities.TextChannel; import net.dv8tion.jda.api.entities.TextChannel;
@@ -52,7 +52,7 @@ public class SlowMode extends AbstractConditionableCommand {
HelpInfo helpInfo = HelpInfo.builder().templated(true).build(); HelpInfo helpInfo = HelpInfo.builder().templated(true).build();
return CommandConfiguration.builder() return CommandConfiguration.builder()
.name("slowmode") .name("slowmode")
.module(Moderation.MODERATION) .module(ModerationModule.MODERATION)
.templated(true) .templated(true)
.causesReaction(true) .causesReaction(true)
.parameters(parameters) .parameters(parameters)

View File

@@ -7,7 +7,7 @@ import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
import dev.sheldan.abstracto.core.command.config.Parameter; import dev.sheldan.abstracto.core.command.config.Parameter;
import dev.sheldan.abstracto.core.command.execution.*; import dev.sheldan.abstracto.core.command.execution.*;
import dev.sheldan.abstracto.core.config.FeatureEnum; import dev.sheldan.abstracto.core.config.FeatureEnum;
import dev.sheldan.abstracto.moderation.config.Moderation; import dev.sheldan.abstracto.moderation.config.ModerationModule;
import dev.sheldan.abstracto.moderation.config.features.ModerationFeatures; import dev.sheldan.abstracto.moderation.config.features.ModerationFeatures;
import dev.sheldan.abstracto.moderation.models.template.commands.WarnLog; import dev.sheldan.abstracto.moderation.models.template.commands.WarnLog;
import dev.sheldan.abstracto.moderation.service.WarnService; import dev.sheldan.abstracto.moderation.service.WarnService;
@@ -53,7 +53,7 @@ public class Warn extends AbstractConditionableCommand {
HelpInfo helpInfo = HelpInfo.builder().templated(true).build(); HelpInfo helpInfo = HelpInfo.builder().templated(true).build();
return CommandConfiguration.builder() return CommandConfiguration.builder()
.name("warn") .name("warn")
.module(Moderation.MODERATION) .module(ModerationModule.MODERATION)
.templated(true) .templated(true)
.causesReaction(true) .causesReaction(true)
.parameters(parameters) .parameters(parameters)

View File

@@ -9,7 +9,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.command.execution.ContextConverter; import dev.sheldan.abstracto.core.command.execution.ContextConverter;
import dev.sheldan.abstracto.core.config.FeatureEnum; import dev.sheldan.abstracto.core.config.FeatureEnum;
import dev.sheldan.abstracto.moderation.config.Moderation; import dev.sheldan.abstracto.moderation.config.ModerationModule;
import dev.sheldan.abstracto.moderation.config.features.ModerationFeatures; import dev.sheldan.abstracto.moderation.config.features.ModerationFeatures;
import dev.sheldan.abstracto.moderation.models.template.commands.MuteLog; import dev.sheldan.abstracto.moderation.models.template.commands.MuteLog;
import dev.sheldan.abstracto.moderation.service.MuteService; import dev.sheldan.abstracto.moderation.service.MuteService;
@@ -51,7 +51,7 @@ public class Mute extends AbstractConditionableCommand {
HelpInfo helpInfo = HelpInfo.builder().templated(false).build(); HelpInfo helpInfo = HelpInfo.builder().templated(false).build();
return CommandConfiguration.builder() return CommandConfiguration.builder()
.name("mute") .name("mute")
.module(Moderation.MODERATION) .module(ModerationModule.MODERATION)
.templated(false) .templated(false)
.causesReaction(true) .causesReaction(true)
.parameters(parameters) .parameters(parameters)

View File

@@ -8,7 +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.config.FeatureEnum; import dev.sheldan.abstracto.core.config.FeatureEnum;
import dev.sheldan.abstracto.core.models.database.ARole; import dev.sheldan.abstracto.core.models.database.ARole;
import dev.sheldan.abstracto.moderation.config.Moderation; import dev.sheldan.abstracto.moderation.config.ModerationModule;
import dev.sheldan.abstracto.moderation.config.features.ModerationFeatures; import dev.sheldan.abstracto.moderation.config.features.ModerationFeatures;
import dev.sheldan.abstracto.moderation.service.management.MuteRoleManagementService; import dev.sheldan.abstracto.moderation.service.management.MuteRoleManagementService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@@ -37,7 +37,7 @@ public class SetMuteRole extends AbstractConditionableCommand {
HelpInfo helpInfo = HelpInfo.builder().templated(false).build(); HelpInfo helpInfo = HelpInfo.builder().templated(false).build();
return CommandConfiguration.builder() return CommandConfiguration.builder()
.name("setMuteRole") .name("setMuteRole")
.module(Moderation.MODERATION) .module(ModerationModule.MODERATION)
.templated(false) .templated(false)
.causesReaction(true) .causesReaction(true)
.parameters(parameters) .parameters(parameters)

View File

@@ -7,7 +7,7 @@ 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.config.FeatureEnum; import dev.sheldan.abstracto.core.config.FeatureEnum;
import dev.sheldan.abstracto.moderation.config.Moderation; import dev.sheldan.abstracto.moderation.config.ModerationModule;
import dev.sheldan.abstracto.moderation.config.features.ModerationFeatures; import dev.sheldan.abstracto.moderation.config.features.ModerationFeatures;
import dev.sheldan.abstracto.moderation.exception.MuteException; import dev.sheldan.abstracto.moderation.exception.MuteException;
import dev.sheldan.abstracto.moderation.models.database.Mute; import dev.sheldan.abstracto.moderation.models.database.Mute;
@@ -50,7 +50,7 @@ public class UnMute extends AbstractConditionableCommand {
HelpInfo helpInfo = HelpInfo.builder().templated(false).build(); HelpInfo helpInfo = HelpInfo.builder().templated(false).build();
return CommandConfiguration.builder() return CommandConfiguration.builder()
.name("unMute") .name("unMute")
.module(Moderation.MODERATION) .module(ModerationModule.MODERATION)
.templated(false) .templated(false)
.causesReaction(true) .causesReaction(true)
.parameters(parameters) .parameters(parameters)

View File

@@ -42,7 +42,7 @@ public class JoinLogger implements JoinListener {
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()); 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());
} }

View File

@@ -19,8 +19,8 @@ import org.springframework.stereotype.Component;
public class MessageDeleteLogListener implements MessageDeletedListener { public class MessageDeleteLogListener implements MessageDeletedListener {
private static final String DELETE_LOG_TARGET = "deleteLog"; private static final String DELETE_LOG_TARGET = "deleteLog";
private static String MESSAGE_DELETED_TEMPLATE = "message_deleted"; private static final String MESSAGE_DELETED_TEMPLATE = "message_deleted";
private static String MESSAGE_DELETED_ATTACHMENT_TEMPLATE = "message_deleted_attachment"; private static final String MESSAGE_DELETED_ATTACHMENT_TEMPLATE = "message_deleted_attachment";
@Autowired @Autowired
private ContextUtils contextUtils; private ContextUtils contextUtils;

View File

@@ -225,7 +225,7 @@ public class MuteServiceBean implements MuteService {
log.info("Unmuting {} in server {}", mutingServer.getId(), mute.getMutedUser().getUserReference().getId()); log.info("Unmuting {} in server {}", mutingServer.getId(), mute.getMutedUser().getUserReference().getId());
MuteRole muteRole = muteRoleManagementService.retrieveMuteRoleForServer(mutingServer); MuteRole muteRole = muteRoleManagementService.retrieveMuteRoleForServer(mutingServer);
log.trace("Using the mute role {} mapping to role {}", muteRole.getId(), muteRole.getRole().getId()); log.trace("Using the mute role {} mapping to role {}", muteRole.getId(), muteRole.getRole().getId());
Guild guild = botService.getGuildById(mute.getMutingServer().getId()).orElseGet(null); Guild guild = botService.getGuildByIdNullable(mute.getMutingServer().getId());
if(botService.isUserInGuild(guild, mute.getMutedUser())) { if(botService.isUserInGuild(guild, mute.getMutedUser())) {
roleService.removeRoleFromUser(mute.getMutedUser(), muteRole.getRole()); roleService.removeRoleFromUser(mute.getMutedUser(), muteRole.getRole());
} else { } else {

View File

@@ -5,7 +5,7 @@ import dev.sheldan.abstracto.core.command.config.ModuleInfo;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@Component @Component
public class Moderation implements ModuleInterface { public class ModerationModule implements ModuleInterface {
public static final String MODERATION = "moderation"; public static final String MODERATION = "moderation";

View File

@@ -1,5 +1,6 @@
package dev.sheldan.abstracto.utility.commands; package dev.sheldan.abstracto.utility.commands;
import dev.sheldan.abstracto.core.command.UtilityModuleInterface;
import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand; import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand;
import dev.sheldan.abstracto.core.command.config.CommandConfiguration; import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
import dev.sheldan.abstracto.core.command.config.HelpInfo; import dev.sheldan.abstracto.core.command.config.HelpInfo;
@@ -7,7 +8,6 @@ import dev.sheldan.abstracto.core.command.config.Parameter;
import dev.sheldan.abstracto.core.command.execution.*; import dev.sheldan.abstracto.core.command.execution.*;
import dev.sheldan.abstracto.core.config.FeatureEnum; import dev.sheldan.abstracto.core.config.FeatureEnum;
import dev.sheldan.abstracto.templating.service.TemplateService; import dev.sheldan.abstracto.templating.service.TemplateService;
import dev.sheldan.abstracto.utility.config.Utility;
import dev.sheldan.abstracto.utility.config.features.UtilityFeature; import dev.sheldan.abstracto.utility.config.features.UtilityFeature;
import dev.sheldan.abstracto.utility.models.template.commands.ShowEmoteLog; import dev.sheldan.abstracto.utility.models.template.commands.ShowEmoteLog;
import net.dv8tion.jda.api.entities.Emote; import net.dv8tion.jda.api.entities.Emote;
@@ -47,7 +47,7 @@ public class ShowEmote extends AbstractConditionableCommand {
HelpInfo helpInfo = HelpInfo.builder().templated(true).build(); HelpInfo helpInfo = HelpInfo.builder().templated(true).build();
return CommandConfiguration.builder() return CommandConfiguration.builder()
.name("showEmote") .name("showEmote")
.module(Utility.UTILITY) .module(UtilityModuleInterface.UTILITY)
.templated(true) .templated(true)
.causesReaction(false) .causesReaction(false)
.parameters(parameters) .parameters(parameters)

View File

@@ -1,5 +1,6 @@
package dev.sheldan.abstracto.utility.commands; package dev.sheldan.abstracto.utility.commands;
import dev.sheldan.abstracto.core.command.UtilityModuleInterface;
import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand; import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand;
import dev.sheldan.abstracto.core.command.config.HelpInfo; import dev.sheldan.abstracto.core.command.config.HelpInfo;
import dev.sheldan.abstracto.core.command.config.CommandConfiguration; import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
@@ -10,7 +11,6 @@ import dev.sheldan.abstracto.core.config.FeatureEnum;
import dev.sheldan.abstracto.templating.model.MessageToSend; import dev.sheldan.abstracto.templating.model.MessageToSend;
import dev.sheldan.abstracto.core.service.ChannelService; import dev.sheldan.abstracto.core.service.ChannelService;
import dev.sheldan.abstracto.templating.service.TemplateService; import dev.sheldan.abstracto.templating.service.TemplateService;
import dev.sheldan.abstracto.utility.config.Utility;
import dev.sheldan.abstracto.utility.config.features.UtilityFeature; import dev.sheldan.abstracto.utility.config.features.UtilityFeature;
import dev.sheldan.abstracto.utility.models.template.commands.starboard.StarStatsModel; import dev.sheldan.abstracto.utility.models.template.commands.starboard.StarStatsModel;
import dev.sheldan.abstracto.utility.service.StarboardService; import dev.sheldan.abstracto.utility.service.StarboardService;
@@ -48,7 +48,7 @@ public class StarStats extends AbstractConditionableCommand {
HelpInfo helpInfo = HelpInfo.builder().templated(true).build(); HelpInfo helpInfo = HelpInfo.builder().templated(true).build();
return CommandConfiguration.builder() return CommandConfiguration.builder()
.name("starStats") .name("starStats")
.module(Utility.UTILITY) .module(UtilityModuleInterface.UTILITY)
.templated(true) .templated(true)
.causesReaction(false) .causesReaction(false)
.parameters(parameters) .parameters(parameters)

View File

@@ -1,5 +1,6 @@
package dev.sheldan.abstracto.utility.commands.remind; package dev.sheldan.abstracto.utility.commands.remind;
import dev.sheldan.abstracto.core.command.UtilityModuleInterface;
import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand; import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand;
import dev.sheldan.abstracto.core.command.config.CommandConfiguration; import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
import dev.sheldan.abstracto.core.command.config.HelpInfo; import dev.sheldan.abstracto.core.command.config.HelpInfo;
@@ -8,7 +9,6 @@ import dev.sheldan.abstracto.core.command.execution.*;
import dev.sheldan.abstracto.core.config.FeatureEnum; import dev.sheldan.abstracto.core.config.FeatureEnum;
import dev.sheldan.abstracto.core.models.database.AUserInAServer; import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import dev.sheldan.abstracto.utility.config.features.UtilityFeature; import dev.sheldan.abstracto.utility.config.features.UtilityFeature;
import dev.sheldan.abstracto.utility.config.Utility;
import dev.sheldan.abstracto.utility.models.template.commands.reminder.ReminderModel; import dev.sheldan.abstracto.utility.models.template.commands.reminder.ReminderModel;
import dev.sheldan.abstracto.utility.service.ReminderService; import dev.sheldan.abstracto.utility.service.ReminderService;
import net.dv8tion.jda.api.entities.MessageEmbed; import net.dv8tion.jda.api.entities.MessageEmbed;
@@ -46,7 +46,7 @@ public class Remind extends AbstractConditionableCommand {
HelpInfo helpInfo = HelpInfo.builder().templated(true).build(); HelpInfo helpInfo = HelpInfo.builder().templated(true).build();
return CommandConfiguration.builder() return CommandConfiguration.builder()
.name("remind") .name("remind")
.module(Utility.UTILITY) .module(UtilityModuleInterface.UTILITY)
.templated(true) .templated(true)
.causesReaction(true) .causesReaction(true)
.parameters(parameters) .parameters(parameters)

View File

@@ -1,5 +1,6 @@
package dev.sheldan.abstracto.utility.commands.remind; package dev.sheldan.abstracto.utility.commands.remind;
import dev.sheldan.abstracto.core.command.UtilityModuleInterface;
import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand; import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand;
import dev.sheldan.abstracto.core.command.config.CommandConfiguration; import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
import dev.sheldan.abstracto.core.command.config.HelpInfo; import dev.sheldan.abstracto.core.command.config.HelpInfo;
@@ -10,7 +11,6 @@ import dev.sheldan.abstracto.core.config.FeatureEnum;
import dev.sheldan.abstracto.core.service.ChannelService; import dev.sheldan.abstracto.core.service.ChannelService;
import dev.sheldan.abstracto.templating.model.MessageToSend; import dev.sheldan.abstracto.templating.model.MessageToSend;
import dev.sheldan.abstracto.templating.service.TemplateService; import dev.sheldan.abstracto.templating.service.TemplateService;
import dev.sheldan.abstracto.utility.config.Utility;
import dev.sheldan.abstracto.utility.config.features.UtilityFeature; import dev.sheldan.abstracto.utility.config.features.UtilityFeature;
import dev.sheldan.abstracto.utility.models.database.Reminder; import dev.sheldan.abstracto.utility.models.database.Reminder;
import dev.sheldan.abstracto.utility.models.template.commands.reminder.RemindersModel; import dev.sheldan.abstracto.utility.models.template.commands.reminder.RemindersModel;
@@ -47,7 +47,7 @@ public class Reminders extends AbstractConditionableCommand {
HelpInfo helpInfo = HelpInfo.builder().longHelp("Shows the current active reminders").usage("reminders").build(); HelpInfo helpInfo = HelpInfo.builder().longHelp("Shows the current active reminders").usage("reminders").build();
return CommandConfiguration.builder() return CommandConfiguration.builder()
.name("reminders") .name("reminders")
.module(Utility.UTILITY) .module(UtilityModuleInterface.UTILITY)
.description("Shows the current active reminders") .description("Shows the current active reminders")
.causesReaction(true) .causesReaction(true)
.help(helpInfo) .help(helpInfo)

View File

@@ -1,12 +1,12 @@
package dev.sheldan.abstracto.utility.commands.suggest; package dev.sheldan.abstracto.utility.commands.suggest;
import dev.sheldan.abstracto.core.command.UtilityModuleInterface;
import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand; import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand;
import dev.sheldan.abstracto.core.command.config.HelpInfo; import dev.sheldan.abstracto.core.command.config.HelpInfo;
import dev.sheldan.abstracto.core.command.config.CommandConfiguration; import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
import dev.sheldan.abstracto.core.command.config.Parameter; import dev.sheldan.abstracto.core.command.config.Parameter;
import dev.sheldan.abstracto.core.command.execution.*; import dev.sheldan.abstracto.core.command.execution.*;
import dev.sheldan.abstracto.core.config.FeatureEnum; import dev.sheldan.abstracto.core.config.FeatureEnum;
import dev.sheldan.abstracto.utility.config.Utility;
import dev.sheldan.abstracto.utility.config.features.UtilityFeature; import dev.sheldan.abstracto.utility.config.features.UtilityFeature;
import dev.sheldan.abstracto.utility.models.template.commands.SuggestionLog; import dev.sheldan.abstracto.utility.models.template.commands.SuggestionLog;
import dev.sheldan.abstracto.utility.service.SuggestionService; import dev.sheldan.abstracto.utility.service.SuggestionService;
@@ -41,7 +41,7 @@ public class Accept extends AbstractConditionableCommand {
HelpInfo helpInfo = HelpInfo.builder().templated(true).build(); HelpInfo helpInfo = HelpInfo.builder().templated(true).build();
return CommandConfiguration.builder() return CommandConfiguration.builder()
.name("accept") .name("accept")
.module(Utility.UTILITY) .module(UtilityModuleInterface.UTILITY)
.templated(true) .templated(true)
.causesReaction(true) .causesReaction(true)
.parameters(parameters) .parameters(parameters)

View File

@@ -1,12 +1,12 @@
package dev.sheldan.abstracto.utility.commands.suggest; package dev.sheldan.abstracto.utility.commands.suggest;
import dev.sheldan.abstracto.core.command.UtilityModuleInterface;
import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand; import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand;
import dev.sheldan.abstracto.core.command.config.HelpInfo; import dev.sheldan.abstracto.core.command.config.HelpInfo;
import dev.sheldan.abstracto.core.command.config.CommandConfiguration; import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
import dev.sheldan.abstracto.core.command.config.Parameter; import dev.sheldan.abstracto.core.command.config.Parameter;
import dev.sheldan.abstracto.core.command.execution.*; import dev.sheldan.abstracto.core.command.execution.*;
import dev.sheldan.abstracto.core.config.FeatureEnum; import dev.sheldan.abstracto.core.config.FeatureEnum;
import dev.sheldan.abstracto.utility.config.Utility;
import dev.sheldan.abstracto.utility.config.features.UtilityFeature; import dev.sheldan.abstracto.utility.config.features.UtilityFeature;
import dev.sheldan.abstracto.utility.models.template.commands.SuggestionLog; import dev.sheldan.abstracto.utility.models.template.commands.SuggestionLog;
import dev.sheldan.abstracto.utility.service.SuggestionService; import dev.sheldan.abstracto.utility.service.SuggestionService;
@@ -41,7 +41,7 @@ public class Reject extends AbstractConditionableCommand {
HelpInfo helpInfo = HelpInfo.builder().templated(true).build(); HelpInfo helpInfo = HelpInfo.builder().templated(true).build();
return CommandConfiguration.builder() return CommandConfiguration.builder()
.name("reject") .name("reject")
.module(Utility.UTILITY) .module(UtilityModuleInterface.UTILITY)
.templated(true) .templated(true)
.causesReaction(true) .causesReaction(true)
.parameters(parameters) .parameters(parameters)

View File

@@ -1,12 +1,12 @@
package dev.sheldan.abstracto.utility.commands.suggest; package dev.sheldan.abstracto.utility.commands.suggest;
import dev.sheldan.abstracto.core.command.UtilityModuleInterface;
import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand; import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand;
import dev.sheldan.abstracto.core.command.config.HelpInfo; import dev.sheldan.abstracto.core.command.config.HelpInfo;
import dev.sheldan.abstracto.core.command.config.CommandConfiguration; import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
import dev.sheldan.abstracto.core.command.config.Parameter; import dev.sheldan.abstracto.core.command.config.Parameter;
import dev.sheldan.abstracto.core.command.execution.*; import dev.sheldan.abstracto.core.command.execution.*;
import dev.sheldan.abstracto.core.config.FeatureEnum; import dev.sheldan.abstracto.core.config.FeatureEnum;
import dev.sheldan.abstracto.utility.config.Utility;
import dev.sheldan.abstracto.utility.config.features.UtilityFeature; import dev.sheldan.abstracto.utility.config.features.UtilityFeature;
import dev.sheldan.abstracto.utility.models.template.commands.SuggestionLog; import dev.sheldan.abstracto.utility.models.template.commands.SuggestionLog;
import dev.sheldan.abstracto.utility.service.SuggestionService; import dev.sheldan.abstracto.utility.service.SuggestionService;
@@ -40,7 +40,7 @@ public class Suggest extends AbstractConditionableCommand {
HelpInfo helpInfo = HelpInfo.builder().templated(true).build(); HelpInfo helpInfo = HelpInfo.builder().templated(true).build();
return CommandConfiguration.builder() return CommandConfiguration.builder()
.name("suggest") .name("suggest")
.module(Utility.UTILITY) .module(UtilityModuleInterface.UTILITY)
.templated(true) .templated(true)
.causesReaction(true) .causesReaction(true)
.parameters(parameters) .parameters(parameters)

View File

@@ -2,6 +2,7 @@ package dev.sheldan.abstracto.utility.listener.embed;
import dev.sheldan.abstracto.core.config.FeatureEnum; import dev.sheldan.abstracto.core.config.FeatureEnum;
import dev.sheldan.abstracto.core.listener.MessageReceivedListener; import dev.sheldan.abstracto.core.listener.MessageReceivedListener;
import dev.sheldan.abstracto.core.models.cache.CachedMessage;
import dev.sheldan.abstracto.core.models.database.AUserInAServer; import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import dev.sheldan.abstracto.core.service.MessageCache; import dev.sheldan.abstracto.core.service.MessageCache;
import dev.sheldan.abstracto.core.service.management.UserManagementService; import dev.sheldan.abstracto.core.service.management.UserManagementService;
@@ -15,6 +16,7 @@ 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;
import java.util.function.Consumer;
@Component @Component
@Slf4j @Slf4j
@@ -38,11 +40,10 @@ public class MessageEmbedListener implements MessageReceivedListener {
for (MessageEmbedLink messageEmbedLink : links) { for (MessageEmbedLink messageEmbedLink : links) {
messageRaw = messageRaw.replace(messageEmbedLink.getWholeUrl(), ""); messageRaw = messageRaw.replace(messageEmbedLink.getWholeUrl(), "");
AUserInAServer cause = userManagementService.loadUser(message.getMember()); AUserInAServer cause = userManagementService.loadUser(message.getMember());
messageCache.getMessageFromCache(messageEmbedLink.getServerId(), messageEmbedLink.getChannelId(), messageEmbedLink.getMessageId()).thenAccept(cachedMessage -> { Consumer<CachedMessage> cachedMessageConsumer = cachedMessage -> messageEmbedService.embedLink(cachedMessage, message.getTextChannel(), cause, message);
messageEmbedService.embedLink(cachedMessage, message.getTextChannel(), cause, message); messageCache.getMessageFromCache(messageEmbedLink.getServerId(), messageEmbedLink.getChannelId(), messageEmbedLink.getMessageId()).thenAccept(cachedMessageConsumer);
});
} }
if(StringUtils.isBlank(messageRaw) && links.size() > 0) { if(StringUtils.isBlank(messageRaw) && !links.isEmpty()) {
message.delete().queue(); message.delete().queue();
} }
} }

View File

@@ -55,9 +55,9 @@ public class MessageEmbedRemovalReactionListener implements ReactedAddedListener
if(embeddedMessage.getEmbeddedUser().getUserReference().getId().equals(userReacting.getId()) if(embeddedMessage.getEmbeddedUser().getUserReference().getId().equals(userReacting.getId())
|| embeddedMessage.getEmbeddingUser().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)
}); );
} }
} }

View File

@@ -26,6 +26,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Optional;
import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutionException;
import java.util.regex.Matcher; import java.util.regex.Matcher;
@@ -37,7 +38,7 @@ public class MessageEmbedServiceBean implements MessageEmbedService {
private Pattern messageRegex = Pattern.compile("(?<whole>https://discordapp.com/channels/(?<server>\\d+)/(?<channel>\\d+)/(?<message>\\d+)(?:.*?))+"); private Pattern messageRegex = Pattern.compile("(?<whole>https://discordapp.com/channels/(?<server>\\d+)/(?<channel>\\d+)/(?<message>\\d+)(?:.*?))+");
public static final String MESSAGE_EMBED_TEMPLATE = "message"; public static final String MESSAGE_EMBED_TEMPLATE = "message_embed";
public static final String REMOVAL_EMOTE = "removeEmbed"; public static final String REMOVAL_EMOTE = "removeEmbed";
@Autowired @Autowired
@@ -96,12 +97,12 @@ public class MessageEmbedServiceBean implements MessageEmbedService {
@Override @Override
public void embedLinks(List<MessageEmbedLink> linksToEmbed, TextChannel target, AUserInAServer reason, Message embeddingMessage) { public void embedLinks(List<MessageEmbedLink> linksToEmbed, TextChannel target, AUserInAServer reason, Message embeddingMessage) {
linksToEmbed.forEach(messageEmbedLink -> { linksToEmbed.forEach(messageEmbedLink ->
messageCache.getMessageFromCache(messageEmbedLink.getServerId(), messageEmbedLink.getChannelId(), messageEmbedLink.getMessageId()) messageCache.getMessageFromCache(messageEmbedLink.getServerId(), messageEmbedLink.getChannelId(), messageEmbedLink.getMessageId())
.thenAccept(cachedMessage -> { .thenAccept(cachedMessage ->
self.embedLink(cachedMessage, target, reason, embeddingMessage); self.embedLink(cachedMessage, target, reason, embeddingMessage)
}); )
}); );
} }
@Override @Override
@@ -129,7 +130,11 @@ public class MessageEmbedServiceBean implements MessageEmbedService {
AServer server = serverManagementService.loadOrCreate(message.getGuild().getIdLong()); AServer server = serverManagementService.loadOrCreate(message.getGuild().getIdLong());
AUserInAServer user = userManagementService.loadUser(message.getMember()); AUserInAServer user = userManagementService.loadUser(message.getMember());
Member author = botService.getMemberInServer(embeddedMessage.getServerId(), embeddedMessage.getAuthorId()); Member author = botService.getMemberInServer(embeddedMessage.getServerId(), embeddedMessage.getAuthorId());
TextChannel sourceChannel = botService.getTextChannelFromServer(embeddedMessage.getServerId(), embeddedMessage.getChannelId()).get(); Optional<TextChannel> textChannelFromServer = botService.getTextChannelFromServer(embeddedMessage.getServerId(), embeddedMessage.getChannelId());
TextChannel sourceChannel = null;
if(textChannelFromServer.isPresent()) {
sourceChannel = textChannelFromServer.get();
}
return MessageEmbeddedModel return MessageEmbeddedModel
.builder() .builder()
.channel(channel) .channel(channel)

View File

@@ -81,10 +81,9 @@ public class StarboardServiceBean implements StarboardService {
.server(userReacting.getServerReference()) .server(userReacting.getServerReference())
.build(); .build();
StarboardPost starboardPost = starboardPostManagementService.createStarboardPost(message, starredUser, userReacting, aServerAChannelMessage); StarboardPost starboardPost = starboardPostManagementService.createStarboardPost(message, starredUser, userReacting, aServerAChannelMessage);
// TODO maybe in bulk, but numbers should be small enough userExceptAuthor.forEach(user ->
userExceptAuthor.forEach(user -> { starboardPostReactorManagementService.addReactor(starboardPost, user)
starboardPostReactorManagementService.addReactor(starboardPost, user); );
});
} catch (InterruptedException | ExecutionException e) { } catch (InterruptedException | ExecutionException e) {
log.error("Failed to post messages.", e); log.error("Failed to post messages.", e);
} }
@@ -117,9 +116,9 @@ public class StarboardServiceBean implements StarboardService {
@Override @Override
public void updateStarboardPost(StarboardPost post, CachedMessage message, List<AUser> userExceptAuthor) { public void updateStarboardPost(StarboardPost post, CachedMessage message, List<AUser> userExceptAuthor) {
StarboardPostModel starboardPostModel = buildStarboardPostModel(message, userExceptAuthor.size()); StarboardPostModel starboardPostModel = buildStarboardPostModel(message, userExceptAuthor.size());
MessageToSend messageToSend = templateService.renderEmbedTemplate("starboard_post", starboardPostModel); MessageToSend messageToSend = templateService.renderEmbedTemplate(STARBOARD_POST_TEMPLATE, starboardPostModel);
List<CompletableFuture<Message>> futures = new ArrayList<>(); List<CompletableFuture<Message>> futures = new ArrayList<>();
postTargetService.editOrCreatedInPostTarget(post.getStarboardMessageId(), messageToSend, "starboard", message.getServerId(), futures); postTargetService.editOrCreatedInPostTarget(post.getStarboardMessageId(), messageToSend, STARBOARD_POSTTARGET, message.getServerId(), futures);
CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])).thenAccept(aVoid -> { CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])).thenAccept(aVoid -> {
try { try {
starboardPostManagementService.setStarboardPostMessageId(post, futures.get(0).get().getIdLong()); starboardPostManagementService.setStarboardPostMessageId(post, futures.get(0).get().getIdLong());

View File

@@ -102,9 +102,9 @@ public class SuggestionServiceBean implements SuggestionService {
suggestionLog.setSuggestion(suggestion); suggestionLog.setSuggestion(suggestion);
TextChannel textChannelById = guildById.getTextChannelById(channelId); TextChannel textChannelById = guildById.getTextChannelById(channelId);
if(textChannelById != null) { if(textChannelById != null) {
textChannelById.retrieveMessageById(originalMessageId).queue(message -> { textChannelById.retrieveMessageById(originalMessageId).queue(message ->
self.updateSuggestionMessageText(text, suggestionLog, message); self.updateSuggestionMessageText(text, suggestionLog, message)
}); );
} }
} }
} }

View File

@@ -1,21 +0,0 @@
package dev.sheldan.abstracto.utility.config;
import dev.sheldan.abstracto.core.command.config.ModuleInterface;
import dev.sheldan.abstracto.core.command.config.ModuleInfo;
import org.springframework.stereotype.Component;
@Component
public class Utility implements ModuleInterface {
public static final String UTILITY = "utility";
@Override
public ModuleInfo getInfo() {
return ModuleInfo.builder().name(UTILITY).description("General utilities").build();
}
@Override
public String getParentModule() {
return "default";
}
}

View File

@@ -12,7 +12,6 @@ import dev.sheldan.abstracto.core.command.service.PostCommandExecution;
import dev.sheldan.abstracto.core.command.execution.*; import dev.sheldan.abstracto.core.command.execution.*;
import dev.sheldan.abstracto.core.command.execution.UnParsedCommandParameter; import dev.sheldan.abstracto.core.command.execution.UnParsedCommandParameter;
import dev.sheldan.abstracto.core.Constants; import dev.sheldan.abstracto.core.Constants;
import dev.sheldan.abstracto.core.exception.AbstractoRunTimeException;
import dev.sheldan.abstracto.core.models.database.ARole; import dev.sheldan.abstracto.core.models.database.ARole;
import dev.sheldan.abstracto.core.service.management.ChannelManagementService; import dev.sheldan.abstracto.core.service.management.ChannelManagementService;
import dev.sheldan.abstracto.core.service.management.RoleManagementService; import dev.sheldan.abstracto.core.service.management.RoleManagementService;
@@ -152,7 +151,7 @@ public class CommandReceivedHandler extends ListenerAdapter {
public Parameters getParsedParameters(UnParsedCommandParameter unParsedCommandParameter, Command command, Message message){ public Parameters getParsedParameters(UnParsedCommandParameter unParsedCommandParameter, Command command, Message message){
List<Object> parsedParameters = new ArrayList<>(); List<Object> parsedParameters = new ArrayList<>();
if(command.getConfiguration().getParameters() == null || command.getConfiguration().getParameters().size() == 0) { if(command.getConfiguration().getParameters() == null || command.getConfiguration().getParameters().isEmpty()) {
return Parameters.builder().parameters(parsedParameters).build(); return Parameters.builder().parameters(parsedParameters).build();
} }
Iterator<TextChannel> channelIterator = message.getMentionedChannels().iterator(); Iterator<TextChannel> channelIterator = message.getMentionedChannels().iterator();
@@ -199,7 +198,7 @@ public class CommandReceivedHandler extends ListenerAdapter {
if(!reminderActive) { if(!reminderActive) {
parsedParameters.add(value); parsedParameters.add(value);
} else { } else {
if(parsedParameters.size() == 0) { if(parsedParameters.isEmpty()) {
parsedParameters.add(value); parsedParameters.add(value);
} else { } else {
int lastIndex = parsedParameters.size() - 1; int lastIndex = parsedParameters.size() - 1;

View File

@@ -25,10 +25,8 @@ public class ReactionPostExecution implements PostCommandExecution {
if(commandResult.getMessage() != null && commandResult.getThrowable() == null){ if(commandResult.getMessage() != null && commandResult.getThrowable() == null){
commandContext.getChannel().sendMessage(commandResult.getMessage()).queue(); commandContext.getChannel().sendMessage(commandResult.getMessage()).queue();
} }
} else if(result.equals(ResultState.SUCCESSFUL)) { } else if(result.equals(ResultState.SUCCESSFUL) && command.getConfiguration().isCausesReaction()) {
if(command.getConfiguration().isCausesReaction()){ messageService.addReactionToMessage(SUCCESS_REACTION_EMOTE, commandContext.getGuild().getIdLong(), commandContext.getMessage());
messageService.addReactionToMessage(SUCCESS_REACTION_EMOTE, commandContext.getGuild().getIdLong(), commandContext.getMessage());
}
} }
} }

View File

@@ -22,15 +22,10 @@ public class ChannelGroupCommandServiceBean implements ChannelGroupCommandServic
for (AChannelGroupCommand aChannelGroupCommand : allChannelGroupsOfCommand) { for (AChannelGroupCommand aChannelGroupCommand : allChannelGroupsOfCommand) {
Optional<AChannel> channelInGroup = aChannelGroupCommand.getGroup() Optional<AChannel> channelInGroup = aChannelGroupCommand.getGroup()
.getChannels().stream().filter(channel1 -> channel1.getId().equals(channel.getId())).findAny(); .getChannels().stream().filter(channel1 -> channel1.getId().equals(channel.getId())).findAny();
if (channelInGroup.isPresent()) { if (channelInGroup.isPresent() && aChannelGroupCommand.getEnabled()) {
if (aChannelGroupCommand.getEnabled()) { return true;
return true;
}
} }
} }
if(allChannelGroupsOfCommand.size() == 0) { return allChannelGroupsOfCommand.isEmpty();
return true;
}
return false;
} }
} }

View File

@@ -46,7 +46,7 @@ public class CommandManager implements CommandRegistry {
} }
parameterFit = paramCountFits || hasRemainderParameter; parameterFit = paramCountFits || hasRemainderParameter;
} else { } else {
parameterFit = unParsedCommandParameter.getParameters().size() == 0; parameterFit = unParsedCommandParameter.getParameters().isEmpty();
} }
return parameterFit; return parameterFit;
}).findFirst(); }).findFirst();
@@ -86,13 +86,13 @@ public class CommandManager implements CommandRegistry {
@Override @Override
public List<Command> getAllCommandsFromModule(ModuleInterface moduleInterface) { public List<Command> getAllCommandsFromModule(ModuleInterface moduleInterface) {
List<Command> commands = new ArrayList<>(); List<Command> commandsFromModule = new ArrayList<>();
this.getAllCommands().forEach(command -> { this.getAllCommands().forEach(command -> {
if(command.getConfiguration().getModule().equals(moduleInterface.getInfo().getName())){ if(command.getConfiguration().getModule().equals(moduleInterface.getInfo().getName())){
commands.add(command); commandsFromModule.add(command);
} }
}); });
return commands; return commandsFromModule;
} }
@Override @Override

View File

@@ -4,8 +4,6 @@ import dev.sheldan.abstracto.core.command.Command;
import dev.sheldan.abstracto.core.command.config.CommandHierarchy; import dev.sheldan.abstracto.core.command.config.CommandHierarchy;
import dev.sheldan.abstracto.core.command.config.ModuleInterface; import dev.sheldan.abstracto.core.command.config.ModuleInterface;
import dev.sheldan.abstracto.core.command.config.PackedModule; import dev.sheldan.abstracto.core.command.config.PackedModule;
import dev.sheldan.abstracto.core.command.service.CommandRegistry;
import dev.sheldan.abstracto.core.command.service.ModuleRegistry;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;

View File

@@ -40,9 +40,9 @@ public class Allow extends AbstractConditionableCommand {
String name = (String) commandContext.getParameters().getParameters().get(0); String name = (String) commandContext.getParameters().getParameters().get(0);
if(featureManagementService.featureExists(name)) { if(featureManagementService.featureExists(name)) {
AFeature feature = featureManagementService.getFeature(name); AFeature feature = featureManagementService.getFeature(name);
feature.getCommands().forEach(command -> { feature.getCommands().forEach(command ->
commandService.unRestrictCommand(command, commandContext.getUserInitiatedContext().getServer()); commandService.unRestrictCommand(command, commandContext.getUserInitiatedContext().getServer())
}); );
} else if(commandManagementService.doesCommandExist(name)) { } else if(commandManagementService.doesCommandExist(name)) {
ACommand command = commandManagementService.findCommandByName(name); ACommand command = commandManagementService.findCommandByName(name);
commandService.unRestrictCommand(command, commandContext.getUserInitiatedContext().getServer()); commandService.unRestrictCommand(command, commandContext.getUserInitiatedContext().getServer());

View File

@@ -43,9 +43,9 @@ public class AllowRole extends AbstractConditionableCommand {
ARole role = roleManagementService.findRole(roleId); ARole role = roleManagementService.findRole(roleId);
if(featureManagementService.featureExists(name)) { if(featureManagementService.featureExists(name)) {
AFeature feature = featureManagementService.getFeature(name); AFeature feature = featureManagementService.getFeature(name);
feature.getCommands().forEach(command -> { feature.getCommands().forEach(command ->
commandService.allowCommandForRole(command, role); commandService.allowCommandForRole(command, role)
}); );
} else if(commandManagementService.doesCommandExist(name)) { } else if(commandManagementService.doesCommandExist(name)) {
ACommand command = commandManagementService.findCommandByName(name); ACommand command = commandManagementService.findCommandByName(name);
commandService.allowCommandForRole(command, role); commandService.allowCommandForRole(command, role);

View File

@@ -43,9 +43,9 @@ public class DisAllowRole extends AbstractConditionableCommand {
ARole role = roleManagementService.findRole(roleId); ARole role = roleManagementService.findRole(roleId);
if(featureManagementService.featureExists(name)) { if(featureManagementService.featureExists(name)) {
AFeature feature = featureManagementService.getFeature(name); AFeature feature = featureManagementService.getFeature(name);
feature.getCommands().forEach(command -> { feature.getCommands().forEach(command ->
commandService.disAllowCommandForRole(command, role); commandService.disAllowCommandForRole(command, role)
}); );
} else if(commandManagementService.doesCommandExist(name)) { } else if(commandManagementService.doesCommandExist(name)) {
ACommand command = commandManagementService.findCommandByName(name); ACommand command = commandManagementService.findCommandByName(name);
commandService.disAllowCommandForRole(command, role); commandService.disAllowCommandForRole(command, role);

View File

@@ -35,7 +35,7 @@ public class Disable extends AbstractConditionableCommand {
@Override @Override
public CommandResult execute(CommandContext commandContext) { public CommandResult execute(CommandContext commandContext) {
if(commandContext.getParameters().getParameters().size() == 0) { if(commandContext.getParameters().getParameters().isEmpty()) {
EnableModel model = (EnableModel) ContextConverter.fromCommandContext(commandContext, EnableModel.class); EnableModel model = (EnableModel) ContextConverter.fromCommandContext(commandContext, EnableModel.class);
model.setFeatures(featureFlagService.getAllFeatures()); model.setFeatures(featureFlagService.getAllFeatures());
String response = templateService.renderTemplate("disable_features_response", model); String response = templateService.renderTemplate("disable_features_response", model);

View File

@@ -34,7 +34,7 @@ public class Enable extends AbstractConditionableCommand {
@Override @Override
public CommandResult execute(CommandContext commandContext) { public CommandResult execute(CommandContext commandContext) {
if(commandContext.getParameters().getParameters().size() == 0) { if(commandContext.getParameters().getParameters().isEmpty()) {
EnableModel model = (EnableModel) ContextConverter.fromCommandContext(commandContext, EnableModel.class); EnableModel model = (EnableModel) ContextConverter.fromCommandContext(commandContext, EnableModel.class);
model.setFeatures(featureFlagService.getAllFeatures()); model.setFeatures(featureFlagService.getAllFeatures());
String response = templateService.renderTemplate("enable_features_response", model); String response = templateService.renderTemplate("enable_features_response", model);

View File

@@ -43,9 +43,9 @@ public class MakeAffected extends AbstractConditionableCommand {
ARole role = roleManagementService.findRole(roleId); ARole role = roleManagementService.findRole(roleId);
if(featureManagementService.featureExists(name)) { if(featureManagementService.featureExists(name)) {
AFeature feature = featureManagementService.getFeature(name); AFeature feature = featureManagementService.getFeature(name);
feature.getCommands().forEach(command -> { feature.getCommands().forEach(command ->
commandService.makeRoleAffectedByCommand(command, role); commandService.makeRoleAffectedByCommand(command, role)
}); );
} else if(commandManagementService.doesCommandExist(name)) { } else if(commandManagementService.doesCommandExist(name)) {
ACommand command = commandManagementService.findCommandByName(name); ACommand command = commandManagementService.findCommandByName(name);
commandService.makeRoleAffectedByCommand(command, role); commandService.makeRoleAffectedByCommand(command, role);

View File

@@ -43,9 +43,9 @@ public class MakeImmune extends AbstractConditionableCommand {
ARole role = roleManagementService.findRole(roleId); ARole role = roleManagementService.findRole(roleId);
if(featureManagementService.featureExists(name)) { if(featureManagementService.featureExists(name)) {
AFeature feature = featureManagementService.getFeature(name); AFeature feature = featureManagementService.getFeature(name);
feature.getCommands().forEach(command -> { feature.getCommands().forEach(command ->
commandService.makeRoleImmuneForCommand(command, role); commandService.makeRoleImmuneForCommand(command, role)
}); );
} else if(commandManagementService.doesCommandExist(name)) { } else if(commandManagementService.doesCommandExist(name)) {
ACommand command = commandManagementService.findCommandByName(name); ACommand command = commandManagementService.findCommandByName(name);
commandService.makeRoleImmuneForCommand(command, role); commandService.makeRoleImmuneForCommand(command, role);

View File

@@ -40,9 +40,9 @@ public class Restrict extends AbstractConditionableCommand {
String name = (String) commandContext.getParameters().getParameters().get(0); String name = (String) commandContext.getParameters().getParameters().get(0);
if(featureManagementService.featureExists(name)) { if(featureManagementService.featureExists(name)) {
AFeature feature = featureManagementService.getFeature(name); AFeature feature = featureManagementService.getFeature(name);
feature.getCommands().forEach(command -> { feature.getCommands().forEach(command ->
commandService.restrictCommand(command, commandContext.getUserInitiatedContext().getServer()); commandService.restrictCommand(command, commandContext.getUserInitiatedContext().getServer())
}); );
} else if(commandManagementService.doesCommandExist(name)) { } else if(commandManagementService.doesCommandExist(name)) {
ACommand command = commandManagementService.findCommandByName(name); ACommand command = commandManagementService.findCommandByName(name);
commandService.restrictCommand(command, commandContext.getUserInitiatedContext().getServer()); commandService.restrictCommand(command, commandContext.getUserInitiatedContext().getServer());

View File

@@ -42,9 +42,9 @@ public class Help implements Command {
if(module != null){ if(module != null){
sb.append("Help | Module overview \n"); sb.append("Help | Module overview \n");
sb.append(getModule(module, 0, false)); sb.append(getModule(module, 0, false));
module.getCommands().forEach(command -> { module.getCommands().forEach(command ->
sb.append(getCommand(command)); sb.append(getCommand(command))
}); );
} else { } else {
Command command = commandStructure.getCommandWithName(parameterValue); Command command = commandStructure.getCommandWithName(parameterValue);
if(command != null) { if(command != null) {
@@ -109,9 +109,9 @@ public class Help implements Command {
sb.append(String.format(intentation +"**%s** \n", info.getName())); sb.append(String.format(intentation +"**%s** \n", info.getName()));
sb.append(String.format(intentation + "%s \n", info.getDescription())); sb.append(String.format(intentation + "%s \n", info.getDescription()));
if(recursive) { if(recursive) {
module.getSubModules().forEach(subModule -> { module.getSubModules().forEach(subModule ->
sb.append(getModule(subModule, depth + 1, true)); sb.append(getModule(subModule, depth + 1, true))
}); );
} }
sb.append("\n"); sb.append("\n");
return sb.toString(); return sb.toString();

View File

@@ -27,9 +27,9 @@ public class Echo extends AbstractConditionableCommand {
@Override @Override
public CommandResult execute(CommandContext commandContext) { public CommandResult execute(CommandContext commandContext) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
commandContext.getParameters().getParameters().forEach(o -> { commandContext.getParameters().getParameters().forEach(o ->
sb.append(o.toString()); sb.append(o.toString())
}); );
EchoModel model = EchoModel.builder().text(sb.toString()).build(); EchoModel model = EchoModel.builder().text(sb.toString()).build();
commandContext.getChannel().sendMessage(templateService.renderTemplate(TEMPLATE_NAME, model)).queue(); commandContext.getChannel().sendMessage(templateService.renderTemplate(TEMPLATE_NAME, model)).queue();
return CommandResult.fromSuccess(); return CommandResult.fromSuccess();

View File

@@ -1,5 +1,6 @@
package dev.sheldan.abstracto.core.commands.utility; package dev.sheldan.abstracto.core.commands.utility;
import dev.sheldan.abstracto.core.command.UtilityModuleInterface;
import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand; import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand;
import dev.sheldan.abstracto.core.command.config.CommandConfiguration; import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
import dev.sheldan.abstracto.core.command.execution.CommandContext; import dev.sheldan.abstracto.core.command.execution.CommandContext;

View File

@@ -1,6 +1,5 @@
package dev.sheldan.abstracto.core.listener; package dev.sheldan.abstracto.core.listener;
import dev.sheldan.abstracto.core.exception.AbstractoRunTimeException;
import dev.sheldan.abstracto.core.models.database.AUserInAServer; import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import dev.sheldan.abstracto.core.service.FeatureFlagService; import dev.sheldan.abstracto.core.service.FeatureFlagService;
import dev.sheldan.abstracto.core.service.management.UserManagementService; import dev.sheldan.abstracto.core.service.management.UserManagementService;

View File

@@ -13,6 +13,7 @@ import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
import java.util.List; import java.util.List;
import java.util.function.Consumer;
@Component @Component
@Slf4j @Slf4j
@@ -32,9 +33,8 @@ public class MessageDeletedListenerBean extends ListenerAdapter {
@Override @Override
@Transactional @Transactional
public void onGuildMessageDelete(@Nonnull GuildMessageDeleteEvent event) { public void onGuildMessageDelete(@Nonnull GuildMessageDeleteEvent event) {
messageCache.getMessageFromCache(event.getGuild().getIdLong(), event.getChannel().getIdLong(), event.getMessageIdLong()).thenAccept(cachedMessage -> { Consumer<CachedMessage> cachedMessageConsumer = cachedMessage -> self.executeListener(cachedMessage);
self.executeListener(cachedMessage); messageCache.getMessageFromCache(event.getGuild().getIdLong(), event.getChannel().getIdLong(), event.getMessageIdLong()).thenAccept(cachedMessageConsumer);
});
} }
@Transactional @Transactional

View File

@@ -67,9 +67,9 @@ public class ReactionUpdatedListener extends ListenerAdapter {
} }
private void addReactionIfNotThere(CachedMessage message, CachedReaction reaction, AUser userReacting) { private void addReactionIfNotThere(CachedMessage message, CachedReaction reaction, AUser userReacting) {
Optional<CachedReaction> existingReaction = message.getReactions().stream().filter(reaction1 -> { Optional<CachedReaction> existingReaction = message.getReactions().stream().filter(reaction1 ->
return EmoteUtils.compareAEmote(reaction1.getEmote(), reaction.getEmote()); EmoteUtils.compareAEmote(reaction1.getEmote(), reaction.getEmote())
}).findAny(); ).findAny();
if(!existingReaction.isPresent()) { if(!existingReaction.isPresent()) {
message.getReactions().add(reaction); message.getReactions().add(reaction);
} else { } else {
@@ -82,9 +82,9 @@ public class ReactionUpdatedListener extends ListenerAdapter {
} }
private void removeReactionIfThere(CachedMessage message, CachedReaction reaction, AUser userReacting) { private void removeReactionIfThere(CachedMessage message, CachedReaction reaction, AUser userReacting) {
Optional<CachedReaction> existingReaction = message.getReactions().stream().filter(reaction1 -> { Optional<CachedReaction> existingReaction = message.getReactions().stream().filter(reaction1 ->
return EmoteUtils.compareAEmote(reaction1.getEmote(), reaction.getEmote()); EmoteUtils.compareAEmote(reaction1.getEmote(), reaction.getEmote())
}).findAny(); ).findAny();
if(existingReaction.isPresent()) { if(existingReaction.isPresent()) {
CachedReaction cachedReaction = existingReaction.get(); CachedReaction cachedReaction = existingReaction.get();
cachedReaction.getUsers().removeIf(user -> user.getId().equals(userReacting.getId())); cachedReaction.getUsers().removeIf(user -> user.getId().equals(userReacting.getId()));
@@ -118,9 +118,9 @@ public class ReactionUpdatedListener extends ListenerAdapter {
asyncMessageFromCache.thenAccept(cachedMessage -> { asyncMessageFromCache.thenAccept(cachedMessage -> {
CompletableFuture<CachedReaction> future = new CompletableFuture<>(); CompletableFuture<CachedReaction> future = new CompletableFuture<>();
messageCache.getCachedReactionFromReaction(future, event.getReaction()); messageCache.getCachedReactionFromReaction(future, event.getReaction());
future.thenAccept(reaction -> { future.thenAccept(reaction ->
self.callRemoveListeners(event, cachedMessage, reaction); self.callRemoveListeners(event, cachedMessage, reaction)
}); );
messageCache.putMessageInCache(cachedMessage); messageCache.putMessageInCache(cachedMessage);
}); });

View File

@@ -26,6 +26,7 @@ import java.util.concurrent.CompletableFuture;
@Slf4j @Slf4j
public class BotServiceBean implements BotService { public class BotServiceBean implements BotService {
public static final String GUILD_NOT_FOUND = "Guild %s not found.";
private JDA instance; private JDA instance;
@Override @Override
@@ -58,7 +59,7 @@ public class BotServiceBean implements BotService {
} }
} }
else { else {
throw new GuildException(String.format("Guild %s not found.", serverId)); throw new GuildException(String.format(GUILD_NOT_FOUND, serverId));
} }
} }
@@ -68,7 +69,7 @@ public class BotServiceBean implements BotService {
if(guildById != null) { if(guildById != null) {
return guildById.getMemberById(memberId); return guildById.getMemberById(memberId);
} else { } else {
throw new RuntimeException(String.format("Guild %s not found.", serverId)); throw new GuildException(String.format(GUILD_NOT_FOUND, serverId));
} }
} }
@@ -78,7 +79,7 @@ public class BotServiceBean implements BotService {
if(guildById != null) { if(guildById != null) {
return isUserInGuild(guildById, aUserInAServer); return isUserInGuild(guildById, aUserInAServer);
} else { } else {
throw new RuntimeException(String.format("Guild %s not found.", aUserInAServer.getServerReference().getId())); throw new GuildException(String.format(GUILD_NOT_FOUND, aUserInAServer.getServerReference().getId()));
} }
} }
@@ -120,7 +121,7 @@ public class BotServiceBean implements BotService {
Emote emoteById = guild.getEmoteById(emote.getEmoteId()); Emote emoteById = guild.getEmoteById(emote.getEmoteId());
return Optional.ofNullable(emoteById); return Optional.ofNullable(emoteById);
} }
throw new GuildException(String.format("Not able to find server %s", serverId)); throw new GuildException(String.format(GUILD_NOT_FOUND, serverId));
} }
@Override @Override
@@ -135,7 +136,7 @@ public class BotServiceBean implements BotService {
Guild guild = guildOptional.get(); Guild guild = guildOptional.get();
return Optional.ofNullable(guild.getTextChannelById(textChannelId)); return Optional.ofNullable(guild.getTextChannelById(textChannelId));
} }
throw new GuildException(String.format("Not able to find guild %s", serverId)); throw new GuildException(String.format(GUILD_NOT_FOUND, serverId));
} }
@Override @Override
@@ -143,6 +144,11 @@ public class BotServiceBean implements BotService {
return Optional.ofNullable(instance.getGuildById(serverId)); return Optional.ofNullable(instance.getGuildById(serverId));
} }
@Override
public Guild getGuildByIdNullable(Long serverId) {
return instance.getGuildById(serverId);
}
@Override @Override
public void shutdown() { public void shutdown() {

View File

@@ -18,6 +18,9 @@ import org.springframework.stereotype.Component;
@Component @Component
public class ChannelGroupServiceBean implements ChannelGroupService { public class ChannelGroupServiceBean implements ChannelGroupService {
private static final String CHANNEL_GROUP_NOT_FOUND = "Channel group %s was not found.";
private static final String COMMAND_NOT_FOUND = "Command %s not found.";
@Autowired @Autowired
private ChannelGroupManagementService channelGroupManagementService; private ChannelGroupManagementService channelGroupManagementService;
@@ -61,7 +64,7 @@ public class ChannelGroupServiceBean implements ChannelGroupService {
AServer server = serverManagementService.loadOrCreate(channel.getServer().getId()); AServer server = serverManagementService.loadOrCreate(channel.getServer().getId());
AChannelGroup channelGroup = channelGroupManagementService.findByNameAndServer(channelGroupName, server); AChannelGroup channelGroup = channelGroupManagementService.findByNameAndServer(channelGroupName, server);
if(channelGroup == null) { if(channelGroup == null) {
throw new ChannelGroupException(String.format("Channel group %s was not found.", channelGroupName)); throw new ChannelGroupException(String.format(CHANNEL_GROUP_NOT_FOUND, channelGroupName));
} }
channelGroupManagementService.addChannelToChannelGroup(channelGroup, channel); channelGroupManagementService.addChannelToChannelGroup(channelGroup, channel);
} }
@@ -82,7 +85,7 @@ public class ChannelGroupServiceBean implements ChannelGroupService {
AServer server = serverManagementService.loadOrCreate(channel.getServer().getId()); AServer server = serverManagementService.loadOrCreate(channel.getServer().getId());
AChannelGroup channelGroup = channelGroupManagementService.findByNameAndServer(channelGroupName, server); AChannelGroup channelGroup = channelGroupManagementService.findByNameAndServer(channelGroupName, server);
if(channelGroup == null) { if(channelGroup == null) {
throw new ChannelGroupException(String.format("Channel group %s was not found", channelGroupName)); throw new ChannelGroupException(String.format(CHANNEL_GROUP_NOT_FOUND, channelGroupName));
} }
channelGroupManagementService.removeChannelFromChannelGroup(channelGroup, channel); channelGroupManagementService.removeChannelFromChannelGroup(channelGroup, channel);
} }
@@ -92,11 +95,11 @@ public class ChannelGroupServiceBean implements ChannelGroupService {
AServer server = serverManagementService.loadOrCreate(serverId); AServer server = serverManagementService.loadOrCreate(serverId);
AChannelGroup channelGroup = channelGroupManagementService.findByNameAndServer(channelGroupName, server); AChannelGroup channelGroup = channelGroupManagementService.findByNameAndServer(channelGroupName, server);
if(channelGroup == null) { if(channelGroup == null) {
throw new ChannelGroupException(String.format("Channel group %s was not found", channelGroupName)); throw new ChannelGroupException(String.format(CHANNEL_GROUP_NOT_FOUND, channelGroupName));
} }
ACommand command = commandManagementService.findCommandByName(commandName); ACommand command = commandManagementService.findCommandByName(commandName);
if(command == null) { if(command == null) {
throw new CommandException(String.format("Command %s not found.", commandName)); throw new CommandException(String.format(COMMAND_NOT_FOUND, commandName));
} }
channelGroupCommandManagementService.setCommandInGroupTo(command, channelGroup, false); channelGroupCommandManagementService.setCommandInGroupTo(command, channelGroup, false);
} }
@@ -106,11 +109,11 @@ public class ChannelGroupServiceBean implements ChannelGroupService {
AServer server = serverManagementService.loadOrCreate(serverId); AServer server = serverManagementService.loadOrCreate(serverId);
AChannelGroup channelGroup = channelGroupManagementService.findByNameAndServer(channelGroupName, server); AChannelGroup channelGroup = channelGroupManagementService.findByNameAndServer(channelGroupName, server);
if(channelGroup == null) { if(channelGroup == null) {
throw new ChannelGroupException(String.format("Channel group %s was not found", channelGroupName)); throw new ChannelGroupException(String.format(CHANNEL_GROUP_NOT_FOUND, channelGroupName));
} }
ACommand command = commandManagementService.findCommandByName(commandName); ACommand command = commandManagementService.findCommandByName(commandName);
if(command == null) { if(command == null) {
throw new CommandException(String.format("Command %s not found.", commandName)); throw new CommandException(String.format(COMMAND_NOT_FOUND, commandName));
} }
channelGroupCommandManagementService.setCommandInGroupTo(command, channelGroup, true); channelGroupCommandManagementService.setCommandInGroupTo(command, channelGroup, true);
} }

View File

@@ -95,17 +95,17 @@ public class ChannelServiceBean implements ChannelService {
String messageText = messageToSend.getMessage(); String messageText = messageToSend.getMessage();
List<CompletableFuture<Message>> futures = new ArrayList<>(); List<CompletableFuture<Message>> futures = new ArrayList<>();
if(StringUtils.isBlank(messageText)) { if(StringUtils.isBlank(messageText)) {
messageToSend.getEmbeds().forEach(embed -> { messageToSend.getEmbeds().forEach(embed ->
futures.add(sendEmbedInAChannelFuture(embed, textChannel)); futures.add(sendEmbedInAChannelFuture(embed, textChannel))
}); );
} else { } else {
MessageAction messageAction = textChannel.sendMessage(messageText); MessageAction messageAction = textChannel.sendMessage(messageText);
if(messageToSend.getEmbeds() != null && messageToSend.getEmbeds().size() > 0) { if(messageToSend.getEmbeds() != null && !messageToSend.getEmbeds().isEmpty()) {
CompletableFuture<Message> messageFuture = messageAction.embed(messageToSend.getEmbeds().get(0)).submit(); CompletableFuture<Message> messageFuture = messageAction.embed(messageToSend.getEmbeds().get(0)).submit();
futures.add(messageFuture); futures.add(messageFuture);
messageToSend.getEmbeds().stream().skip(1).forEach(embed -> { messageToSend.getEmbeds().stream().skip(1).forEach(embed ->
futures.add(sendEmbedInAChannelFuture(embed, textChannel)); futures.add(sendEmbedInAChannelFuture(embed, textChannel))
}); );
} else { } else {
futures.add(messageAction.submit()); futures.add(messageAction.submit());
} }
@@ -134,11 +134,11 @@ public class ChannelServiceBean implements ChannelService {
MessageAction messageAction; MessageAction messageAction;
if(!StringUtils.isBlank(messageToSend.getMessage())) { if(!StringUtils.isBlank(messageToSend.getMessage())) {
messageAction = channel.editMessageById(messageId, messageToSend.getMessage()); messageAction = channel.editMessageById(messageId, messageToSend.getMessage());
if(messageToSend.getEmbeds() != null && messageToSend.getEmbeds().size() > 0) { if(messageToSend.getEmbeds() != null && !messageToSend.getEmbeds().isEmpty()) {
messageAction = messageAction.embed(messageToSend.getEmbeds().get(0)); messageAction = messageAction.embed(messageToSend.getEmbeds().get(0));
} }
} else { } else {
if(messageToSend.getEmbeds() != null && messageToSend.getEmbeds().size() > 0) { if(messageToSend.getEmbeds() != null && !messageToSend.getEmbeds().isEmpty()) {
messageAction = channel.editMessageById(messageId, messageToSend.getEmbeds().get(0)); messageAction = channel.editMessageById(messageId, messageToSend.getEmbeds().get(0));
} else { } else {
throw new AbstractoRunTimeException("Message to send did not contain anything to send."); throw new AbstractoRunTimeException("Message to send did not contain anything to send.");

View File

@@ -80,9 +80,9 @@ public class MessageCacheBean implements MessageCache {
Optional<TextChannel> textChannelByIdOptional = botService.getTextChannelFromServer(guildOptional.get(), textChannelId); Optional<TextChannel> textChannelByIdOptional = botService.getTextChannelFromServer(guildOptional.get(), textChannelId);
if(textChannelByIdOptional.isPresent()) { if(textChannelByIdOptional.isPresent()) {
TextChannel textChannel = textChannelByIdOptional.get(); TextChannel textChannel = textChannelByIdOptional.get();
textChannel.retrieveMessageById(messageId).queue(message -> { textChannel.retrieveMessageById(messageId).queue(message ->
buildCachedMessageFromMessage(future, message); buildCachedMessageFromMessage(future, message)
}); );
} else { } else {
log.error("Not able to load message {} in channel {} in guild {}. Text channel not found.", messageId, textChannelId, guildId); log.error("Not able to load message {} in channel {} in guild {}. Text channel not found.", messageId, textChannelId, guildId);
future.completeExceptionally(new ChannelException(String.format("Not able to load message %s. Text channel %s not found in guild %s", messageId, textChannelId, guildId))); future.completeExceptionally(new ChannelException(String.format("Not able to load message %s. Text channel %s not found in guild %s", messageId, textChannelId, guildId)));
@@ -98,13 +98,13 @@ public class MessageCacheBean implements MessageCache {
@Async @Async
public void buildCachedMessageFromMessage(CompletableFuture<CachedMessage> future, Message message) { public void buildCachedMessageFromMessage(CompletableFuture<CachedMessage> future, Message message) {
List<String> attachmentUrls = new ArrayList<>(); List<String> attachmentUrls = new ArrayList<>();
message.getAttachments().forEach(attachment -> { message.getAttachments().forEach(attachment ->
attachmentUrls.add(attachment.getProxyUrl()); attachmentUrls.add(attachment.getProxyUrl())
}); );
List<CachedEmbed> embeds = new ArrayList<>(); List<CachedEmbed> embeds = new ArrayList<>();
message.getEmbeds().forEach(embed -> { message.getEmbeds().forEach(embed ->
embeds.add(getCachedEmbedFromEmbed(embed)); embeds.add(getCachedEmbedFromEmbed(embed))
}); );
List<CompletableFuture<CachedReaction>> futures = new ArrayList<>(); List<CompletableFuture<CachedReaction>> futures = new ArrayList<>();
message.getReactions().forEach(messageReaction -> { message.getReactions().forEach(messageReaction -> {
@@ -113,7 +113,7 @@ public class MessageCacheBean implements MessageCache {
futures.add(future1); futures.add(future1);
}); });
CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])).thenAccept(aVoid -> { CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])).thenAccept(aVoid ->
future.complete(CachedMessage.builder() future.complete(CachedMessage.builder()
.authorId(message.getAuthor().getIdLong()) .authorId(message.getAuthor().getIdLong())
.serverId(message.getGuild().getIdLong()) .serverId(message.getGuild().getIdLong())
@@ -124,8 +124,8 @@ public class MessageCacheBean implements MessageCache {
.reactions(getFutures(futures)) .reactions(getFutures(futures))
.timeCreated(Instant.from(message.getTimeCreated())) .timeCreated(Instant.from(message.getTimeCreated()))
.attachmentUrls(attachmentUrls) .attachmentUrls(attachmentUrls)
.build()); .build())
}); );
} }
private List<CachedReaction> getFutures(List<CompletableFuture<CachedReaction>> futures) { private List<CachedReaction> getFutures(List<CompletableFuture<CachedReaction>> futures) {

View File

@@ -88,9 +88,9 @@ public class MessageServiceBean implements MessageService {
public void sendMessageToUser(User user, String text, TextChannel feedbackChannel) { public void sendMessageToUser(User user, String text, TextChannel feedbackChannel) {
CompletableFuture<Message> messageFuture = new CompletableFuture<>(); CompletableFuture<Message> messageFuture = new CompletableFuture<>();
user.openPrivateChannel().queue(privateChannel -> { user.openPrivateChannel().queue(privateChannel ->
privateChannel.sendMessage(text).queue(messageFuture::complete, messageFuture::completeExceptionally); privateChannel.sendMessage(text).queue(messageFuture::complete, messageFuture::completeExceptionally)
}); );
messageFuture.exceptionally(e -> { messageFuture.exceptionally(e -> {
log.warn("Failed to send message. ", e); log.warn("Failed to send message. ", e);

View File

@@ -119,10 +119,10 @@ public class PostTargetServiceBean implements PostTargetService {
existingMessage -> existingMessage existingMessage -> existingMessage
.editMessage(messageToSend.getEmbeds().get(0)) .editMessage(messageToSend.getEmbeds().get(0))
.submit().thenAccept(message -> future.get(0).complete(message)), .submit().thenAccept(message -> future.get(0).complete(message)),
throwable -> { throwable ->
sendEmbedInPostTarget(messageToSend, target).get(0) sendEmbedInPostTarget(messageToSend, target).get(0)
.thenAccept(message -> future.get(0).complete(message)); .thenAccept(message -> future.get(0).complete(message))
}); );
} else { } else {
textChannelForPostTarget textChannelForPostTarget
.retrieveMessageById(messageId) .retrieveMessageById(messageId)
@@ -131,10 +131,10 @@ public class PostTargetServiceBean implements PostTargetService {
.editMessage(messageToSend.getMessage()) .editMessage(messageToSend.getMessage())
.embed(messageToSend.getEmbeds().get(0)) .embed(messageToSend.getEmbeds().get(0))
.submit().thenAccept(message -> future.get(0).complete(message)), .submit().thenAccept(message -> future.get(0).complete(message)),
throwable -> { throwable ->
sendEmbedInPostTarget(messageToSend, target).get(0) sendEmbedInPostTarget(messageToSend, target).get(0)
.thenAccept(message -> future.get(0).complete(message)); .thenAccept(message -> future.get(0).complete(message))
}); );
} }
} }
@@ -145,7 +145,7 @@ public class PostTargetServiceBean implements PostTargetService {
} }
@Override @Override
public void throwIfPostTargetIsNotDefined(String name, Long serverId) throws ChannelException { public void throwIfPostTargetIsNotDefined(String name, Long serverId) {
PostTarget postTarget = postTargetManagement.getPostTarget(name, serverId); PostTarget postTarget = postTargetManagement.getPostTarget(name, serverId);
if(postTarget == null) { if(postTarget == null) {
throw new ChannelException(String.format("Post target %s is not defined.", name)); throw new ChannelException(String.format("Post target %s is not defined.", name));

View File

@@ -73,9 +73,9 @@ public class StartupServiceBean implements Startup {
if(newGuild != null){ if(newGuild != null){
synchronizeRolesOf(newGuild, newAServer); synchronizeRolesOf(newGuild, newAServer);
synchronizeChannelsOf(newGuild, newAServer); synchronizeChannelsOf(newGuild, newAServer);
configListeners.forEach(serverConfigListener -> { configListeners.forEach(serverConfigListener ->
serverConfigListener.updateServerConfig(newAServer); serverConfigListener.updateServerConfig(newAServer)
}); );
} }
}); });
@@ -108,8 +108,8 @@ public class StartupServiceBean implements Startup {
}); });
Set<Long> noLongAvailable = SetUtils.difference(knownChannelsIds, existingChannelsIds); Set<Long> noLongAvailable = SetUtils.difference(knownChannelsIds, existingChannelsIds);
noLongAvailable.forEach(aLong -> { noLongAvailable.forEach(aLong ->
channelManagementService.markAsDeleted(aLong); channelManagementService.markAsDeleted(aLong)
}); );
} }
} }

View File

@@ -8,6 +8,10 @@ import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
public class SnowflakeUtils { public class SnowflakeUtils {
private SnowflakeUtils() {
}
public static Set<Long> getOwnItemsIds(List<? extends SnowFlake> elements){ public static Set<Long> getOwnItemsIds(List<? extends SnowFlake> elements){
return elements.stream().map(SnowFlake::getId).collect(Collectors.toSet()); return elements.stream().map(SnowFlake::getId).collect(Collectors.toSet());
} }

View File

@@ -4,6 +4,10 @@ import org.springframework.beans.factory.annotation.Value;
public class Constants { public class Constants {
private Constants() {
}
@Value("${abstracto.parameter.lowerBound}") @Value("${abstracto.parameter.lowerBound}")
public static int PARAMETER_LIMIT = 0; public static final int PARAMETER_LIMIT = 0;
} }

View File

@@ -5,6 +5,8 @@ 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.listener.FeatureAware; import dev.sheldan.abstracto.core.listener.FeatureAware;
import java.io.Serializable;
public interface Command extends FeatureAware { public interface Command extends FeatureAware {
CommandResult execute(CommandContext commandContext); CommandResult execute(CommandContext commandContext);

View File

@@ -1,4 +1,4 @@
package dev.sheldan.abstracto.core.commands.utility; package dev.sheldan.abstracto.core.command;
import dev.sheldan.abstracto.core.command.config.ModuleInterface; import dev.sheldan.abstracto.core.command.config.ModuleInterface;
import dev.sheldan.abstracto.core.command.config.ModuleInfo; import dev.sheldan.abstracto.core.command.config.ModuleInfo;

View File

@@ -17,9 +17,6 @@ public abstract class AbstractConditionableCommand implements ConditionalCommand
@Autowired @Autowired
protected CommandDisabledCondition commandDisabledCondition; protected CommandDisabledCondition commandDisabledCondition;
@Autowired
protected ChannelService channelService;
@Autowired @Autowired
protected CommandDisallowedCondition commandDisallowedCondition; protected CommandDisallowedCondition commandDisallowedCondition;

View File

@@ -5,19 +5,14 @@ import dev.sheldan.abstracto.core.command.execution.CommandContext;
import dev.sheldan.abstracto.core.command.models.InsufficientPermissionMessage; import dev.sheldan.abstracto.core.command.models.InsufficientPermissionMessage;
import dev.sheldan.abstracto.core.command.models.database.ACommand; import dev.sheldan.abstracto.core.command.models.database.ACommand;
import dev.sheldan.abstracto.core.command.models.database.ACommandInAServer; import dev.sheldan.abstracto.core.command.models.database.ACommandInAServer;
import dev.sheldan.abstracto.core.command.service.ChannelGroupCommandService;
import dev.sheldan.abstracto.core.command.service.CommandService;
import dev.sheldan.abstracto.core.command.service.management.CommandInServerManagementService; import dev.sheldan.abstracto.core.command.service.management.CommandInServerManagementService;
import dev.sheldan.abstracto.core.command.service.management.CommandManagementService; import dev.sheldan.abstracto.core.command.service.management.CommandManagementService;
import dev.sheldan.abstracto.core.models.database.ARole; import dev.sheldan.abstracto.core.models.database.ARole;
import dev.sheldan.abstracto.core.service.BotService;
import dev.sheldan.abstracto.core.service.RoleService; import dev.sheldan.abstracto.core.service.RoleService;
import dev.sheldan.abstracto.templating.service.TemplateService; import dev.sheldan.abstracto.templating.service.TemplateService;
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.concurrent.locks.Condition;
@Component @Component
public class CommandDisallowedCondition implements CommandCondition { public class CommandDisallowedCondition implements CommandCondition {

View File

@@ -1,8 +1,6 @@
package dev.sheldan.abstracto.core.command.config; package dev.sheldan.abstracto.core.command.config;
import dev.sheldan.abstracto.core.command.config.ModuleInfo;
public interface ModuleInterface { public interface ModuleInterface {
ModuleInfo getInfo(); ModuleInfo getInfo();
String getParentModule(); String getParentModule();

View File

@@ -8,9 +8,9 @@ import java.util.HashMap;
public class IncorrectParameter extends AbstractoRunTimeException implements Templatable { public class IncorrectParameter extends AbstractoRunTimeException implements Templatable {
private Command command; private final Command command;
private String parameterName; private final String parameterName;
private Class clazz; private final Class clazz;
public IncorrectParameter(String s, Command command, Class expected, String parameterName) { public IncorrectParameter(String s, Command command, Class expected, String parameterName) {
super(s); super(s);

View File

@@ -10,8 +10,8 @@ import java.util.HashMap;
@Getter @Getter
public class InsufficientParameters extends AbstractoRunTimeException implements Templatable { public class InsufficientParameters extends AbstractoRunTimeException implements Templatable {
private Command command; private final Command command;
private String parameterName; private final String parameterName;
public InsufficientParameters(String s, Command command, String parameterName) { public InsufficientParameters(String s, Command command, String parameterName) {
super(s); super(s);

View File

@@ -9,10 +9,10 @@ import java.util.HashMap;
public class ParameterTooLong extends AbstractoRunTimeException implements Templatable { public class ParameterTooLong extends AbstractoRunTimeException implements Templatable {
private Command command; private final Command command;
private String parameterName; private final String parameterName;
private Integer actualLength; private final Integer actualLength;
private Integer maximumLength; private final Integer maximumLength;
public ParameterTooLong(String s, Command command, String parameterName, Integer actualLength, Integer maximumLength) { public ParameterTooLong(String s, Command command, String parameterName, Integer actualLength, Integer maximumLength) {
super(s); super(s);

View File

@@ -9,6 +9,10 @@ import java.lang.reflect.Method;
@Slf4j @Slf4j
public class ContextConverter { public class ContextConverter {
private ContextConverter() {
}
public static <T extends UserInitiatedServerContext> UserInitiatedServerContext fromCommandContext(CommandContext commandContext, Class<T> clazz) { public static <T extends UserInitiatedServerContext> UserInitiatedServerContext fromCommandContext(CommandContext commandContext, Class<T> clazz) {
Method m = null; Method m = null;
try { try {

View File

@@ -4,7 +4,6 @@ import dev.sheldan.abstracto.core.models.database.AFeature;
import lombok.*; import lombok.*;
import javax.persistence.*; import javax.persistence.*;
import java.util.List;
@Entity @Entity
@Table(name = "command") @Table(name = "command")

View File

@@ -7,8 +7,8 @@ import java.util.List;
public class FeatureNotFoundException extends AbstractoRunTimeException implements Templatable { public class FeatureNotFoundException extends AbstractoRunTimeException implements Templatable {
private String feature; private final String feature;
private List<String> availableFeatures; private final List<String> availableFeatures;
public FeatureNotFoundException(String message, String feature, List<String> availableFeatures) { public FeatureNotFoundException(String message, String feature, List<String> availableFeatures) {
super(message); super(message);

View File

@@ -4,7 +4,6 @@ import lombok.*;
import javax.persistence.*; import javax.persistence.*;
import java.util.List; import java.util.List;
import java.util.Set;
@Entity @Entity
@Table(name="channelGroup") @Table(name="channelGroup")

View File

@@ -1,6 +1,5 @@
package dev.sheldan.abstracto.core.models.database; package dev.sheldan.abstracto.core.models.database;
import dev.sheldan.abstracto.core.models.SnowFlake;
import lombok.*; import lombok.*;
import javax.persistence.*; import javax.persistence.*;

View File

@@ -4,13 +4,14 @@ import dev.sheldan.abstracto.core.models.SnowFlake;
import lombok.*; import lombok.*;
import javax.persistence.*; import javax.persistence.*;
import java.io.Serializable;
@Entity @Entity
@Table(name="role") @Table(name="role")
@Builder @Builder
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
public class ARole implements SnowFlake { public class ARole implements SnowFlake, Serializable {
@Id @Id
@Getter @Getter

View File

@@ -4,6 +4,7 @@ import dev.sheldan.abstracto.core.models.SnowFlake;
import lombok.*; import lombok.*;
import javax.persistence.*; import javax.persistence.*;
import java.io.Serializable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@@ -13,7 +14,7 @@ import java.util.List;
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
@Getter @Getter
public class AServer implements SnowFlake { public class AServer implements SnowFlake, Serializable {
@Id @Id
@Column(name = "id") @Column(name = "id")

View File

@@ -3,6 +3,7 @@ package dev.sheldan.abstracto.core.models.database;
import lombok.*; import lombok.*;
import javax.persistence.*; import javax.persistence.*;
import java.io.Serializable;
@Entity @Entity
@Getter @Getter
@@ -10,7 +11,7 @@ import javax.persistence.*;
@Setter @Setter
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
public class AUserInAServer { public class AUserInAServer implements Serializable {
@Id @Id
@GeneratedValue(strategy = GenerationType.IDENTITY) @GeneratedValue(strategy = GenerationType.IDENTITY)

View File

@@ -3,8 +3,6 @@ package dev.sheldan.abstracto.core.models.database;
import lombok.*; import lombok.*;
import javax.persistence.*; import javax.persistence.*;
import java.util.Arrays;
import java.util.List;
@Entity @Entity
@Table(name="posttarget") @Table(name="posttarget")

View File

@@ -1,7 +1,6 @@
package dev.sheldan.abstracto.core.models.template.commands; package dev.sheldan.abstracto.core.models.template.commands;
import dev.sheldan.abstracto.core.models.context.UserInitiatedServerContext; import dev.sheldan.abstracto.core.models.context.UserInitiatedServerContext;
import dev.sheldan.abstracto.core.models.database.AFeatureFlag;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import lombok.experimental.SuperBuilder; import lombok.experimental.SuperBuilder;

View File

@@ -28,5 +28,6 @@ public interface BotService {
Optional<TextChannel> getTextChannelFromServer(Guild serverId, Long textChannelId); Optional<TextChannel> getTextChannelFromServer(Guild serverId, Long textChannelId);
Optional<TextChannel> getTextChannelFromServer(Long serverId, Long textChannelId); Optional<TextChannel> getTextChannelFromServer(Long serverId, Long textChannelId);
Optional<Guild> getGuildById(Long serverId); Optional<Guild> getGuildById(Long serverId);
Guild getGuildByIdNullable(Long serverId);
void shutdown(); void shutdown();
} }

View File

@@ -7,7 +7,6 @@ import net.dv8tion.jda.api.entities.Message;
import net.dv8tion.jda.api.entities.TextChannel; import net.dv8tion.jda.api.entities.TextChannel;
import net.dv8tion.jda.api.entities.User; import net.dv8tion.jda.api.entities.User;
import java.util.List;
import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletableFuture;
public interface MessageService { public interface MessageService {

View File

@@ -1,7 +1,5 @@
package dev.sheldan.abstracto.core.service.management; package dev.sheldan.abstracto.core.service.management;
import dev.sheldan.abstracto.core.exception.ConfigurationException;
import dev.sheldan.abstracto.core.exception.PostTargetException;
import dev.sheldan.abstracto.core.models.database.AChannel; import dev.sheldan.abstracto.core.models.database.AChannel;
import dev.sheldan.abstracto.core.models.database.AServer; import dev.sheldan.abstracto.core.models.database.AServer;
import dev.sheldan.abstracto.core.models.database.PostTarget; import dev.sheldan.abstracto.core.models.database.PostTarget;

View File

@@ -10,6 +10,10 @@ import java.util.Optional;
public class EmoteUtils { public class EmoteUtils {
private EmoteUtils() {
}
public static boolean isReactionEmoteAEmote(MessageReaction.ReactionEmote reaction, AEmote emote, Emote emoteInGuild) { public static boolean isReactionEmoteAEmote(MessageReaction.ReactionEmote reaction, AEmote emote, Emote emoteInGuild) {
if(reaction.isEmote() && emote.getCustom()) { if(reaction.isEmote() && emote.getCustom()) {
if(emoteInGuild != null) { if(emoteInGuild != null) {

View File

@@ -1,6 +1,11 @@
package dev.sheldan.abstracto.core.utils; package dev.sheldan.abstracto.core.utils;
public class MessageUtils { public class MessageUtils {
private MessageUtils() {
}
public static String buildMessageUrl(Long serverId, Long channelId, Long messageId) { public static String buildMessageUrl(Long serverId, Long channelId, Long messageId) {
return String.format("https://discordapp.com/channels/%s/%s/%s", serverId, channelId, messageId); return String.format("https://discordapp.com/channels/%s/%s/%s", serverId, channelId, messageId);
} }

View File

@@ -8,6 +8,10 @@ import java.util.regex.Pattern;
public class ParseUtils { public class ParseUtils {
private ParseUtils() {
}
private static Pattern messageRegex = Pattern.compile("(?<number>\\d+)(?<unit>[ywdhms]+)"); private static Pattern messageRegex = Pattern.compile("(?<number>\\d+)(?<unit>[ywdhms]+)");
public static Duration parseDuration(String textToParseFrom) { public static Duration parseDuration(String textToParseFrom) {

View File

@@ -53,11 +53,11 @@ public class ContextUtilsTest {
@Test @Test
public void testFromMessage() { public void testFromMessage() {
PingModel pingModel = (PingModel) classToTest.fromMessage(buildCachedMessage(), PingModel.class); PingModel pingModel = (PingModel) classToTest.fromMessage(buildCachedMessage(), PingModel.class);
assertEquals(pingModel.getUser().getId(), AUTHOR_ID); assertEquals(AUTHOR_ID, pingModel.getUser().getId());
assertEquals(pingModel.getAUserInAServer().getUserReference().getId(), AUTHOR_ID); assertEquals(AUTHOR_ID, pingModel.getAUserInAServer().getUserReference().getId());
assertEquals(pingModel.getAUserInAServer().getServerReference().getId(), SERVER_ID); assertEquals(SERVER_ID, pingModel.getAUserInAServer().getServerReference().getId());
assertEquals(pingModel.getServer().getId(), SERVER_ID); assertEquals(SERVER_ID, pingModel.getServer().getId());
assertEquals(pingModel.getChannel().getId(), CHANNEL_ID); assertEquals(CHANNEL_ID, pingModel.getChannel().getId());
} }
private CachedMessage buildCachedMessage() { private CachedMessage buildCachedMessage() {

View File

@@ -44,7 +44,7 @@ public class QuartzConfigFactory {
.build(); .build();
} }
public Trigger createSimpleOnceOnlyTrigger(String triggerName, Date startTime) { public Trigger createSimpleOnceOnlyTrigger(Date startTime) {
return newTrigger() return newTrigger()
.startAt(startTime) .startAt(startTime)
.withSchedule(simpleSchedule()) .withSchedule(simpleSchedule())

View File

@@ -84,7 +84,7 @@ public class SchedulerServiceBean implements SchedulerService {
if (job.getCronExpression() != null) { if (job.getCronExpression() != null) {
newTrigger = scheduleCreator.createBasicCronTrigger(startDate, job.getCronExpression()); newTrigger = scheduleCreator.createBasicCronTrigger(startDate, job.getCronExpression());
} else { } else {
newTrigger = scheduleCreator.createSimpleOnceOnlyTrigger(job.getName(), startDate); newTrigger = scheduleCreator.createSimpleOnceOnlyTrigger(startDate);
} }
try { try {
schedulerFactoryBean.getScheduler().rescheduleJob(TriggerKey.triggerKey(job.getName()), newTrigger); schedulerFactoryBean.getScheduler().rescheduleJob(TriggerKey.triggerKey(job.getName()), newTrigger);

View File

@@ -36,7 +36,7 @@ public class TemplateSeedDataLoader {
log.trace("Creating template {}", templateKey); log.trace("Creating template {}", templateKey);
service.createTemplate(templateKey, templateContent); service.createTemplate(templateKey, templateContent);
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); log.error("Failed to upload template", e);
} }
}); });
} }

View File

@@ -36,10 +36,4 @@ public class InstantMethod implements TemplateMethodModelEx {
.withZone(ZoneId.systemDefault()); .withZone(ZoneId.systemDefault());
return formatter.format(duration); return formatter.format(duration);
} }
private HashMap<String, Object> getParam(Long value) {
HashMap<String, Object> params = new HashMap<>();
params.put("amount", value);
return params;
}
} }