added rework of model split, not completely done, a lot of questions open (converters evaluate lazy evaluated properties (might need addition of different convert methods), hen egg problem with channel and server for converters, AModels still need to be exposed regardless, because else database cannot be used in same schema (jpa needs the objects), api need to be checked, to not convert all the time between objects for no reason)

This commit is contained in:
Sheldan
2020-04-09 23:59:47 +02:00
parent ef8dcb61d9
commit aa8ff9ddb5
211 changed files with 2067 additions and 1297 deletions

View File

@@ -17,6 +17,12 @@
<artifactId>moderation-int</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>dev.sheldan.abstracto.core</groupId>
<artifactId>core-db-models</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</project>

View File

@@ -5,9 +5,12 @@ import dev.sheldan.abstracto.core.command.config.HelpInfo;
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
import dev.sheldan.abstracto.core.command.config.Parameter;
import dev.sheldan.abstracto.core.command.execution.*;
import dev.sheldan.abstracto.core.command.service.UserService;
import dev.sheldan.abstracto.core.converter.UserInServerModelConverter;
import dev.sheldan.abstracto.core.service.PostTargetService;
import dev.sheldan.abstracto.moderation.Moderation;
import dev.sheldan.abstracto.moderation.config.ModerationFeatures;
import dev.sheldan.abstracto.moderation.models.template.commands.BanLog;
import dev.sheldan.abstracto.moderation.models.template.commands.BanLogModel;
import dev.sheldan.abstracto.moderation.service.BanService;
import dev.sheldan.abstracto.templating.service.TemplateService;
import lombok.extern.slf4j.Slf4j;
@@ -28,6 +31,13 @@ public class Ban extends AbstractConditionableCommand {
@Autowired
private TemplateService templateService;
@Autowired
private PostTargetService postTargetService;
@Autowired
private UserInServerModelConverter userConverter;
@Override
public CommandResult execute(CommandContext commandContext) {
List<Object> parameters = commandContext.getParameters().getParameters();
@@ -35,11 +45,12 @@ public class Ban extends AbstractConditionableCommand {
String defaultReason = templateService.renderTemplateWithMap("ban_default_reason", null);
String reason = parameters.size() == 2 ? (String) parameters.get(1) : defaultReason;
BanLog banLogModel = (BanLog) ContextConverter.fromCommandContext(commandContext, BanLog.class);
banLogModel.setBannedUser(member);
banLogModel.setBanningUser(commandContext.getAuthor());
BanLogModel banLogModel = (BanLogModel) ContextConverter.fromCommandContext(commandContext, BanLogModel.class);
banLogModel.setBannedUser(userConverter.fromMember(member));
banLogModel.setBanningUser(userConverter.fromUser(commandContext.getUserInitiatedContext().getAUserInAServer()));
banLogModel.setReason(reason);
banService.banMember(member, reason, banLogModel);
banService.banMember(member, reason);
banService.sendBanLog(banLogModel);
return CommandResult.fromSuccess();
}

View File

@@ -5,9 +5,11 @@ import dev.sheldan.abstracto.core.command.config.HelpInfo;
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
import dev.sheldan.abstracto.core.command.config.Parameter;
import dev.sheldan.abstracto.core.command.execution.*;
import dev.sheldan.abstracto.core.converter.UserInServerModelConverter;
import dev.sheldan.abstracto.core.service.PostTargetService;
import dev.sheldan.abstracto.moderation.Moderation;
import dev.sheldan.abstracto.moderation.config.ModerationFeatures;
import dev.sheldan.abstracto.moderation.models.template.commands.BanIdLog;
import dev.sheldan.abstracto.moderation.models.template.commands.BanIdLogModel;
import dev.sheldan.abstracto.moderation.service.BanService;
import dev.sheldan.abstracto.templating.service.TemplateService;
import org.springframework.beans.factory.annotation.Autowired;
@@ -25,17 +27,25 @@ public class BanId extends AbstractConditionableCommand {
@Autowired
private BanService banService;
@Autowired
private PostTargetService postTargetService;
@Autowired
private UserInServerModelConverter userConverter;
@Override
public CommandResult execute(CommandContext commandContext) {
List<Object> parameters = commandContext.getParameters().getParameters();
Long userId = (Long) parameters.get(0);
String defaultReason = templateService.renderTemplateWithMap("ban_default_reason", null);
String reason = parameters.size() == 2 ? (String) parameters.get(1) : defaultReason;
BanIdLog banLogModel = (BanIdLog) ContextConverter.fromCommandContext(commandContext, BanIdLog.class);
BanIdLogModel banLogModel = (BanIdLogModel) ContextConverter.fromCommandContext(commandContext, BanIdLogModel.class);
banLogModel.setBannedUserId(userId);
banLogModel.setBanningUser(commandContext.getAuthor());
banLogModel.setBanningUser(userConverter.fromUser(commandContext.getUserInitiatedContext().getAUserInAServer()));
banLogModel.setReason(reason);
banService.banMember(userId, commandContext.getGuild().getIdLong(), reason, banLogModel);
banService.banMember(userId, commandContext.getGuild().getIdLong(), reason);
banService.sendBanIdLog(banLogModel);
return CommandResult.fromSuccess();
}

View File

@@ -5,6 +5,7 @@ import dev.sheldan.abstracto.core.command.config.HelpInfo;
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
import dev.sheldan.abstracto.core.command.config.Parameter;
import dev.sheldan.abstracto.core.command.execution.*;
import dev.sheldan.abstracto.core.converter.UserInServerModelConverter;
import dev.sheldan.abstracto.moderation.Moderation;
import dev.sheldan.abstracto.moderation.config.ModerationFeatures;
import dev.sheldan.abstracto.moderation.models.template.commands.KickLogModel;
@@ -26,6 +27,9 @@ public class Kick extends AbstractConditionableCommand {
@Autowired
private KickServiceBean kickService;
@Autowired
private UserInServerModelConverter userConverter;
@Override
public CommandResult execute(CommandContext commandContext) {
@@ -35,10 +39,11 @@ public class Kick extends AbstractConditionableCommand {
String reason = parameters.size() == 2 ? (String) parameters.get(1) : defaultReason;
KickLogModel kickLogModel = (KickLogModel) ContextConverter.fromCommandContext(commandContext, KickLogModel.class);
kickLogModel.setKickedUser(member);
kickLogModel.setKickingUser(commandContext.getAuthor());
kickLogModel.setKickedUser(userConverter.fromMember(member));
kickLogModel.setKickingUser(userConverter.fromUser(commandContext.getUserInitiatedContext().getAUserInAServer()));
kickLogModel.setReason(reason);
kickService.kickMember(member, reason, kickLogModel);
kickService.kickMember(member, reason);
kickService.sendKickLog(kickLogModel);
return CommandResult.fromSuccess();
}

View File

@@ -5,10 +5,11 @@ import dev.sheldan.abstracto.core.command.config.HelpInfo;
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
import dev.sheldan.abstracto.core.command.config.Parameter;
import dev.sheldan.abstracto.core.command.execution.*;
import dev.sheldan.abstracto.core.service.management.UserManagementService;
import dev.sheldan.abstracto.moderation.Moderation;
import dev.sheldan.abstracto.moderation.config.ModerationFeatures;
import dev.sheldan.abstracto.moderation.models.template.commands.WarnLog;
import dev.sheldan.abstracto.moderation.converter.WarnConverter;
import dev.sheldan.abstracto.moderation.models.dto.WarnDto;
import dev.sheldan.abstracto.moderation.models.template.commands.WarnLogModel;
import dev.sheldan.abstracto.moderation.service.WarnService;
import dev.sheldan.abstracto.templating.service.TemplateService;
import lombok.extern.slf4j.Slf4j;
@@ -23,27 +24,26 @@ import java.util.List;
@Slf4j
public class Warn extends AbstractConditionableCommand {
@Autowired
private UserManagementService userManagementService;
@Autowired
private WarnService warnService;
@Autowired
private TemplateService templateService;
@Autowired
private WarnConverter warnConverter;
@Override
public CommandResult execute(CommandContext commandContext) {
List<Object> parameters = commandContext.getParameters().getParameters();
Member member = (Member) parameters.get(0);
String defaultReason = templateService.renderTemplateWithMap("warn_default_reason", null);
String reason = parameters.size() == 2 ? (String) parameters.get(1) : defaultReason;
WarnLog warnLogModel = (WarnLog) ContextConverter.fromCommandContext(commandContext, WarnLog.class);
warnLogModel.setWarnedUser(member);
WarnLogModel warnLogModel = (WarnLogModel) ContextConverter.fromCommandContext(commandContext, WarnLogModel.class);
warnLogModel.setMessage(commandContext.getMessage());
warnLogModel.setReason(reason);
warnLogModel.setWarningUser(commandContext.getAuthor());
warnService.warnUser(member, commandContext.getAuthor(), reason, warnLogModel);
WarnDto warnDto = warnService.warnUser(member, commandContext.getAuthor(), reason);
warnLogModel.setWarning(warnConverter.convertFromWarnDto(warnDto));
warnService.sendWarnLog(warnLogModel);
return CommandResult.fromSuccess();
}

View File

@@ -0,0 +1,30 @@
package dev.sheldan.abstracto.moderation.converter;
import dev.sheldan.abstracto.core.utils.AbstractoDateUtils;
import dev.sheldan.abstracto.moderation.models.database.Warning;
import dev.sheldan.abstracto.moderation.models.dto.WarnDto;
import dev.sheldan.abstracto.moderation.models.template.commands.WarnModel;
import org.springframework.stereotype.Component;
@Component
public class WarnConverter {
public WarnDto convertFromAWarn(Warning warning) {
return WarnDto.builder()
.id(warning.getId())
.decayed(warning.getDecayed())
.reason(warning.getReason())
.decayDate(AbstractoDateUtils.convertInstant(warning.getDecayDate()))
.warnDate(AbstractoDateUtils.convertInstant(warning.getWarnDate()))
.build();
}
public WarnModel convertFromWarnDto(WarnDto warnDto) {
return WarnModel
.builder()
.decayDate(warnDto.getDecayDate())
.decayed(warnDto.getDecayed())
.warnDate(warnDto.getWarnDate())
.reason(warnDto.getReason())
.build();
}
}

View File

@@ -2,7 +2,6 @@ package dev.sheldan.abstracto.moderation.listener;
import dev.sheldan.abstracto.core.listener.JoinListener;
import dev.sheldan.abstracto.core.service.PostTargetService;
import dev.sheldan.abstracto.core.service.management.ServerManagementService;
import dev.sheldan.abstracto.moderation.config.ModerationFeatures;
import dev.sheldan.abstracto.templating.service.TemplateService;
import lombok.extern.slf4j.Slf4j;
@@ -23,9 +22,6 @@ public class JoinLogger implements JoinListener {
private static final String USER_JOIN_TEMPLATE = "user_join";
private static final String JOIN_LOG_TARGET = "joinLog";
@Autowired
private ServerManagementService serverManagementService;
@Autowired
private TemplateService templateService;

View File

@@ -2,7 +2,6 @@ package dev.sheldan.abstracto.moderation.listener;
import dev.sheldan.abstracto.core.listener.LeaveListener;
import dev.sheldan.abstracto.core.service.PostTargetService;
import dev.sheldan.abstracto.core.service.management.ServerManagementService;
import dev.sheldan.abstracto.moderation.config.ModerationFeatures;
import dev.sheldan.abstracto.templating.service.TemplateService;
import lombok.extern.slf4j.Slf4j;
@@ -23,9 +22,6 @@ public class LeaveLogger implements LeaveListener {
private static final String USER_LEAVE_TEMPLATE = "user_leave";
private static final String LEAVE_LOG_TARGET = "leaveLog";
@Autowired
private ServerManagementService serverManagementService;
@Autowired
private TemplateService templateService;

View File

@@ -1,6 +1,6 @@
package dev.sheldan.abstracto.moderation.models.database;
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import dev.sheldan.abstracto.core.models.AUserInAServer;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;

View File

@@ -4,6 +4,8 @@ import dev.sheldan.abstracto.core.exception.GuildException;
import dev.sheldan.abstracto.core.models.context.ServerContext;
import dev.sheldan.abstracto.core.service.Bot;
import dev.sheldan.abstracto.core.service.PostTargetService;
import dev.sheldan.abstracto.moderation.models.template.commands.BanIdLogModel;
import dev.sheldan.abstracto.moderation.models.template.commands.BanLogModel;
import dev.sheldan.abstracto.templating.service.TemplateService;
import lombok.extern.slf4j.Slf4j;
import net.dv8tion.jda.api.entities.Guild;
@@ -18,8 +20,9 @@ import java.util.Optional;
public class BanServiceBean implements BanService {
private static final String BAN_LOG_TEMPLATE = "ban_log";
private static final String BAN_ID_LOG_TEMPLATE = "banid_log";
private static final String BAN_LOG_TARGET = "banLog";
private static final String BAN_ID_LOG_TEMPLATE = "banid_log";
@Autowired
private Bot bot;
@@ -30,17 +33,25 @@ public class BanServiceBean implements BanService {
private PostTargetService postTargetService;
@Override
public void banMember(Member member, String reason, ServerContext banLog) {
public void banMember(Member member, String reason) {
this.banUser(member.getGuild().getIdLong(), member.getIdLong(), reason);
String warnLogMessage = templateService.renderTemplate(BAN_LOG_TEMPLATE, banLog);
postTargetService.sendTextInPostTarget(warnLogMessage, BAN_LOG_TARGET, banLog.getServer().getId());
}
@Override
public void banMember(Long guildId, Long userId, String reason, ServerContext banIdLog) {
banUser(guildId, userId, reason);
String warnLogMessage = templateService.renderTemplate(BAN_ID_LOG_TEMPLATE, banIdLog);
postTargetService.sendTextInPostTarget(warnLogMessage, BAN_LOG_TARGET, guildId);
public void banMember(Long guildId, Long userId, String reason) {
this.banUser(guildId, userId, reason);
}
@Override
public void sendBanLog(BanLogModel banLogModel) {
String warnLogMessage = templateService.renderTemplate(BAN_LOG_TEMPLATE, banLogModel);
postTargetService.sendTextInPostTarget(warnLogMessage, BAN_LOG_TARGET, banLogModel.getGuild().getIdLong());
}
@Override
public void sendBanIdLog(BanIdLogModel banIdLogModel) {
String warnLogMessage = templateService.renderTemplate(BAN_ID_LOG_TEMPLATE, banIdLogModel);
postTargetService.sendTextInPostTarget(warnLogMessage, BAN_LOG_TARGET, banIdLogModel.getGuild().getIdLong());
}
private void banUser(Long guildId, Long userId, String reason) {

View File

@@ -29,18 +29,18 @@ public class KickServiceBean implements KickService {
private PostTargetService postTargetService;
@Override
public void kickMember(Member member, String reason, KickLogModel kickLogModel) {
Optional<Guild> guildById = bot.getGuildById(kickLogModel.getGuild().getIdLong());
public void kickMember(Member member, String reason) {
Optional<Guild> guildById = bot.getGuildById(member.getGuild().getIdLong());
if(guildById.isPresent()) {
guildById.get().kick(member, reason).queue();
this.sendKickLog(kickLogModel);
} else {
log.warn("Not able to kick. Guild {} not found.", kickLogModel.getGuild().getIdLong());
throw new GuildException(String.format("Not able to kick %s. Guild %s not found", kickLogModel.getMember().getIdLong(), kickLogModel.getGuild().getIdLong()));
log.warn("Not able to kick. Guild {} not found.", member.getGuild().getIdLong());
throw new GuildException(String.format("Not able to kick %s. Guild %s not found", member.getIdLong(), member.getGuild().getIdLong()));
}
}
private void sendKickLog(KickLogModel kickLogModel) {
@Override
public void sendKickLog(KickLogModel kickLogModel) {
String warnLogMessage = templateService.renderTemplate(KICK_LOG_TEMPLATE, kickLogModel);
postTargetService.sendTextInPostTarget(warnLogMessage, WARN_LOG_TARGET, kickLogModel.getServer().getId());
}

View File

@@ -1,7 +1,7 @@
package dev.sheldan.abstracto.moderation.service;
import dev.sheldan.abstracto.core.exception.ChannelException;
import dev.sheldan.abstracto.core.models.database.AChannel;
import dev.sheldan.abstracto.core.models.dto.ChannelDto;
import dev.sheldan.abstracto.core.service.Bot;
import lombok.extern.slf4j.Slf4j;
import net.dv8tion.jda.api.entities.TextChannel;
@@ -28,7 +28,7 @@ public class SlowModeServiceBean implements SlowModeService {
}
@Override
public void setSlowMode(AChannel channel, Duration duration) {
public void setSlowMode(ChannelDto channel, Duration duration) {
Optional<TextChannel> textChannelOptional = bot.getTextChannelFromServer(channel.getServer().getId(), channel.getId());
if(textChannelOptional.isPresent()) {
TextChannel textChannel = textChannelOptional.get();

View File

@@ -1,17 +1,17 @@
package dev.sheldan.abstracto.moderation.service;
import dev.sheldan.abstracto.core.command.service.UserService;
import dev.sheldan.abstracto.core.exception.UserException;
import dev.sheldan.abstracto.core.models.context.ServerContext;
import dev.sheldan.abstracto.core.models.database.AServer;
import dev.sheldan.abstracto.core.models.database.AUser;
import dev.sheldan.abstracto.core.models.AUserInAServer;
import dev.sheldan.abstracto.core.models.dto.ServerDto;
import dev.sheldan.abstracto.core.models.dto.UserDto;
import dev.sheldan.abstracto.core.models.dto.UserInServerDto;
import dev.sheldan.abstracto.moderation.converter.WarnConverter;
import dev.sheldan.abstracto.moderation.models.dto.WarnDto;
import dev.sheldan.abstracto.moderation.models.template.commands.WarnLogModel;
import dev.sheldan.abstracto.moderation.service.management.WarnManagementServiceBean;
import dev.sheldan.abstracto.templating.model.MessageToSend;
import dev.sheldan.abstracto.moderation.models.template.commands.WarnLog;
import dev.sheldan.abstracto.moderation.models.template.commands.WarnNotification;
import dev.sheldan.abstracto.moderation.models.database.Warning;
import dev.sheldan.abstracto.moderation.service.management.WarnManagementService;
import dev.sheldan.abstracto.core.service.management.ServerManagementService;
import dev.sheldan.abstracto.core.service.management.UserManagementService;
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import dev.sheldan.abstracto.moderation.models.template.commands.WarnNotificationModel;
import dev.sheldan.abstracto.core.service.Bot;
import dev.sheldan.abstracto.core.service.PostTargetService;
import dev.sheldan.abstracto.templating.service.TemplateService;
@@ -33,13 +33,10 @@ public class WarnServiceBean implements WarnService {
public static final String WARN_LOG_TARGET = "warnLog";
@Autowired
private UserManagementService userManagementService;
private UserService userService;
@Autowired
private WarnManagementService warnManagementService;
@Autowired
private ServerManagementService serverManagementService;
private WarnManagementServiceBean warnManagementService;
@Autowired
private PostTargetService postTargetService;
@@ -53,13 +50,19 @@ public class WarnServiceBean implements WarnService {
private static final String WARN_LOG_TEMPLATE = "warn_log";
private static final String WARN_NOTIFICATION_TEMPLATE = "warn_notification";
@Autowired
private WarnConverter warnConverter;
@Override
public void warnUser(AUserInAServer warnedAUserInAServer, AUserInAServer warningAUserInAServer, String reason, WarnLog warnLog) {
AUser warningAUser = warningAUserInAServer.getUserReference();
AUser warnedAUser = warnedAUserInAServer.getUserReference();
AServer serverOfWarning = warnedAUserInAServer.getServerReference();
public WarnDto warnUser(UserInServerDto warnedAUserInAServer, UserInServerDto warningAUserInAServer, String reason) {
UserDto warningAUser = warningAUserInAServer.getUser();
UserDto warnedAUser = warnedAUserInAServer.getUser();
ServerDto serverOfWarning = warnedAUserInAServer.getServer();
log.info("User {} is warning {} in server {} because of {}", warningAUser.getId(), warnedAUser.getId(), serverOfWarning.getId(), reason);
Warning warning = warnManagementService.createWarning(warnedAUserInAServer, warningAUserInAServer, reason);
AUserInAServer warnedUserInAServerDb = AUserInAServer.builder().userInServerId(warnedAUserInAServer.getUserInServerId()).build();
AUserInAServer warningUserInAServerDb = AUserInAServer.builder().userInServerId(warnedAUserInAServer.getUserInServerId()).build();
WarnDto warning = warnManagementService.createWarning(warnedUserInAServerDb, warningUserInAServerDb, reason);
JDA instance = bot.getInstance();
User userBeingWarned = instance.getUserById(warnedAUser.getId());
Optional<Guild> guildById = bot.getGuildById(serverOfWarning.getId());
@@ -67,11 +70,9 @@ public class WarnServiceBean implements WarnService {
if(guildById.isPresent()) {
guildName = guildById.get().getName();
}
warnLog.setWarning(warning);
this.sendWarnLog(warnLog);
WarnNotification warnNotification = WarnNotification.builder().warning(warning).serverName(guildName).build();
WarnNotificationModel warnNotificationModel = WarnNotificationModel.builder().warning(warnConverter.convertFromWarnDto(warning)).serverName(guildName).build();
if(userBeingWarned != null) {
String warnLogMessage = templateService.renderTemplate(WARN_NOTIFICATION_TEMPLATE, warnNotification);
String warnLogMessage = templateService.renderTemplate(WARN_NOTIFICATION_TEMPLATE, warnNotificationModel);
CompletableFuture<Message> messageFuture = new CompletableFuture<>();
// TODO the person executing this, is unaware that the message failed
@@ -88,16 +89,18 @@ public class WarnServiceBean implements WarnService {
log.warn("Unable to find user {} in guild {} to warn.", warnedAUser.getId(), serverOfWarning.getId());
throw new UserException(String.format("Unable to find user %s.", warnedAUser.getId()));
}
return warning;
}
@Override
public void warnUser(Member warnedMember, Member warningMember, String reason, WarnLog warnLog) {
AUserInAServer warnedAUser = userManagementService.loadUser(warnedMember);
AUserInAServer warningAUser = userManagementService.loadUser(warningMember);
this.warnUser(warnedAUser, warningAUser, reason, warnLog);
public WarnDto warnUser(Member warnedMember, Member warningMember, String reason) {
UserInServerDto warnedAUser = userService.loadUser(warnedMember.getGuild().getIdLong(), warnedMember.getIdLong());
UserInServerDto warningAUser = userService.loadUser(warningMember.getGuild().getIdLong(), warningMember.getIdLong());
return this.warnUser(warnedAUser, warningAUser, reason);
}
private void sendWarnLog(ServerContext warnLogModel) {
@Override
public void sendWarnLog(WarnLogModel warnLogModel) {
String warnLogMessage = templateService.renderTemplate(WARN_LOG_TEMPLATE, warnLogModel);
postTargetService.sendTextInPostTarget(warnLogMessage, WARN_LOG_TARGET, warnLogModel.getServer().getId());
MessageToSend message = templateService.renderEmbedTemplate("warn_log", warnLogModel);

View File

@@ -1,21 +1,25 @@
package dev.sheldan.abstracto.moderation.service.management;
import dev.sheldan.abstracto.core.models.AUserInAServer;
import dev.sheldan.abstracto.moderation.converter.WarnConverter;
import dev.sheldan.abstracto.moderation.models.database.Warning;
import dev.sheldan.abstracto.moderation.models.dto.WarnDto;
import dev.sheldan.abstracto.moderation.repository.WarnRepository;
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.time.Instant;
@Component
public class WarnManagementServiceBean implements WarnManagementService {
public class WarnManagementServiceBean {
@Autowired
private WarnRepository warnRepository;
@Override
public Warning createWarning(AUserInAServer warnedAUser, AUserInAServer warningAUser, String reason) {
@Autowired
private WarnConverter warnConverter;
public WarnDto createWarning(AUserInAServer warnedAUser, AUserInAServer warningAUser, String reason) {
Warning warning = Warning.builder()
.reason(reason)
.warnedUser(warnedAUser)
@@ -23,6 +27,6 @@ public class WarnManagementServiceBean implements WarnManagementService {
.warnDate(Instant.now())
.build();
warnRepository.save(warning);
return warning;
return warnConverter.convertFromAWarn(warning);
}
}

View File

@@ -1,4 +1,4 @@
abstracto.postTargets.moderation=joinLog,leaveLog,warnLog,kickLog,banLog,editLog,deleteLog
abstracto.postTargets.moderation=joinLog,leaveLog,warnLogModel,kickLog,banLog,editLog,deleteLog
abstracto.features.moderation=false
abstracto.features.warnings=false
abstracto.features.logging=true

View File

@@ -0,0 +1,21 @@
package dev.sheldan.abstracto.moderation.models.dto;
import dev.sheldan.abstracto.core.models.dto.UserInServerDto;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
import java.time.OffsetDateTime;
@Getter
@Setter
@Builder
public class WarnDto {
private Long id;
private UserInServerDto warnedUser;
private UserInServerDto warningUser;
private String reason;
private OffsetDateTime warnDate;
private Boolean decayed;
private OffsetDateTime decayDate;
}

View File

@@ -1,15 +1,18 @@
package dev.sheldan.abstracto.moderation.models.template.commands;
import dev.sheldan.abstracto.core.models.context.UserInitiatedServerContext;
import dev.sheldan.abstracto.core.models.template.UserInServerModel;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.SuperBuilder;
import net.dv8tion.jda.api.entities.Member;
@Getter @SuperBuilder @Setter
public class BanIdLog extends UserInitiatedServerContext {
@Getter
@SuperBuilder
@Setter
public class BanIdLogModel extends UserInitiatedServerContext {
private String reason;
private Member banningUser;
private UserInServerModel banningUser;
private Long bannedUserId;
}

View File

@@ -1,15 +1,18 @@
package dev.sheldan.abstracto.moderation.models.template.commands;
import dev.sheldan.abstracto.core.models.context.UserInitiatedServerContext;
import dev.sheldan.abstracto.core.models.template.UserInServerModel;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.SuperBuilder;
import net.dv8tion.jda.api.entities.Member;
@Getter @SuperBuilder @Setter
public class BanLog extends UserInitiatedServerContext {
@Getter
@SuperBuilder
@Setter
public class BanLogModel extends UserInitiatedServerContext {
private String reason;
private Member banningUser;
private Member bannedUser;
private UserInServerModel banningUser;
private UserInServerModel bannedUser;
}

View File

@@ -1,14 +1,17 @@
package dev.sheldan.abstracto.moderation.models.template.commands;
import dev.sheldan.abstracto.core.models.context.UserInitiatedServerContext;
import dev.sheldan.abstracto.core.models.template.UserInServerModel;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.SuperBuilder;
import net.dv8tion.jda.api.entities.Member;
@Getter @SuperBuilder @Setter
@Getter
@SuperBuilder
@Setter
public class KickLogModel extends UserInitiatedServerContext {
private String reason;
private Member kickingUser;
private Member kickedUser;
private UserInServerModel kickingUser;
private UserInServerModel kickedUser;
}

View File

@@ -1,20 +0,0 @@
package dev.sheldan.abstracto.moderation.models.template.commands;
import dev.sheldan.abstracto.core.models.context.UserInitiatedServerContext;
import dev.sheldan.abstracto.moderation.models.database.Warning;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.SuperBuilder;
import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.Message;
@Getter @SuperBuilder @Setter
public class WarnLog extends UserInitiatedServerContext {
private String reason;
private Member warnedUser;
private Member warningUser;
private Message message;
private Warning warning;
}

View File

@@ -0,0 +1,16 @@
package dev.sheldan.abstracto.moderation.models.template.commands;
import dev.sheldan.abstracto.core.models.context.UserInitiatedServerContext;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.SuperBuilder;
import net.dv8tion.jda.api.entities.Message;
@Getter
@SuperBuilder
@Setter
public class WarnLogModel extends UserInitiatedServerContext {
private Message message;
private WarnModel warning;
}

View File

@@ -0,0 +1,21 @@
package dev.sheldan.abstracto.moderation.models.template.commands;
import dev.sheldan.abstracto.core.models.template.UserInServerModel;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
import java.time.OffsetDateTime;
@Getter
@Setter
@Builder
public class WarnModel {
private Long id;
private UserInServerModel warnedUser;
private UserInServerModel warningUser;
private String reason;
private OffsetDateTime warnDate;
private Boolean decayed;
private OffsetDateTime decayDate;
}

View File

@@ -1,11 +1,11 @@
package dev.sheldan.abstracto.moderation.models.template.commands;
import dev.sheldan.abstracto.moderation.models.database.Warning;
import lombok.Builder;
import lombok.Value;
@Value @Builder
public class WarnNotification {
private Warning warning;
@Value
@Builder
public class WarnNotificationModel {
private WarnModel warning;
private String serverName;
}

View File

@@ -1,9 +1,12 @@
package dev.sheldan.abstracto.moderation.service;
import dev.sheldan.abstracto.core.models.context.ServerContext;
import dev.sheldan.abstracto.moderation.models.template.commands.BanIdLogModel;
import dev.sheldan.abstracto.moderation.models.template.commands.BanLogModel;
import net.dv8tion.jda.api.entities.Member;
public interface BanService {
void banMember(Member member, String reason, ServerContext banLog);
void banMember(Long guildId, Long userId, String reason, ServerContext banIdLog);
void banMember(Member member, String reason);
void banMember(Long guildId, Long userId, String reason);
void sendBanLog(BanLogModel banLogModel);
void sendBanIdLog(BanIdLogModel banLogModel);
}

View File

@@ -4,5 +4,6 @@ import dev.sheldan.abstracto.moderation.models.template.commands.KickLogModel;
import net.dv8tion.jda.api.entities.Member;
public interface KickService {
void kickMember(Member member, String reason, KickLogModel kickLogModel);
void kickMember(Member member, String reason);
void sendKickLog(KickLogModel kickLogModel);
}

View File

@@ -1,11 +1,11 @@
package dev.sheldan.abstracto.moderation.service;
import dev.sheldan.abstracto.core.models.database.AChannel;
import dev.sheldan.abstracto.core.models.dto.ChannelDto;
import net.dv8tion.jda.api.entities.TextChannel;
import java.time.Duration;
public interface SlowModeService {
void setSlowMode(TextChannel channel, Duration duration);
void setSlowMode(AChannel channel, Duration duration);
void setSlowMode(ChannelDto channel, Duration duration);
}

View File

@@ -1,11 +1,13 @@
package dev.sheldan.abstracto.moderation.service;
import dev.sheldan.abstracto.moderation.models.template.commands.WarnLog;
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import dev.sheldan.abstracto.core.models.dto.UserInServerDto;
import dev.sheldan.abstracto.moderation.models.dto.WarnDto;
import dev.sheldan.abstracto.moderation.models.template.commands.WarnLogModel;
import net.dv8tion.jda.api.entities.Member;
public interface WarnService {
void warnUser(AUserInAServer warnedAUser, AUserInAServer warningAUser, String reason, WarnLog warnLog);
void warnUser(Member warnedUser, Member warningUser, String reason, WarnLog warnLog);
WarnDto warnUser(UserInServerDto warnedAUser, UserInServerDto warningAUser, String reason);
WarnDto warnUser(Member warnedUser, Member warningUser, String reason);
void sendWarnLog(WarnLogModel warnLogModel);
}

View File

@@ -1,8 +0,0 @@
package dev.sheldan.abstracto.moderation.service.management;
import dev.sheldan.abstracto.moderation.models.database.Warning;
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
public interface WarnManagementService {
Warning createWarning(AUserInAServer warnedAUser, AUserInAServer warningAUser, String reason);
}

View File

@@ -5,7 +5,7 @@ import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
import dev.sheldan.abstracto.core.command.config.HelpInfo;
import dev.sheldan.abstracto.core.command.config.Parameter;
import dev.sheldan.abstracto.core.command.execution.*;
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import dev.sheldan.abstracto.core.models.dto.UserInServerDto;
import dev.sheldan.abstracto.utility.config.UtilityFeatures;
import dev.sheldan.abstracto.utility.Utility;
import dev.sheldan.abstracto.utility.models.template.commands.reminder.ReminderModel;
@@ -29,7 +29,7 @@ public class Remind extends AbstractConditionableCommand {
List<Object> parameters = commandContext.getParameters().getParameters();
Duration remindTime = (Duration) parameters.get(0);
String text = (String) parameters.get(1);
AUserInAServer aUserInAServer = commandContext.getUserInitiatedContext().getAUserInAServer();
UserInServerDto aUserInAServer = commandContext.getUserInitiatedContext().getAUserInAServer();
ReminderModel remindModel = (ReminderModel) ContextConverter.fromCommandContext(commandContext, ReminderModel.class);
remindModel.setMessage(commandContext.getMessage());
remindModel.setRemindText(text);

View File

@@ -13,7 +13,7 @@ import dev.sheldan.abstracto.utility.Utility;
import dev.sheldan.abstracto.utility.config.UtilityFeatures;
import dev.sheldan.abstracto.utility.models.database.Reminder;
import dev.sheldan.abstracto.utility.models.template.commands.reminder.RemindersModel;
import dev.sheldan.abstracto.utility.service.management.ReminderManagementService;
import dev.sheldan.abstracto.utility.service.management.ReminderManagementServiceBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -23,7 +23,7 @@ import java.util.List;
public class Reminders extends AbstractConditionableCommand {
@Autowired
private ReminderManagementService reminderManagementService;
private ReminderManagementServiceBean reminderManagementService;
@Autowired
private ChannelService channelService;

View File

@@ -1,8 +1,8 @@
package dev.sheldan.abstracto.utility.config;
import dev.sheldan.abstracto.core.listener.ServerConfigListener;
import dev.sheldan.abstracto.core.models.database.AServer;
import dev.sheldan.abstracto.core.service.management.ConfigManagementService;
import dev.sheldan.abstracto.core.models.dto.ServerDto;
import dev.sheldan.abstracto.core.service.ConfigService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -15,13 +15,13 @@ public class StarboardConfigListener implements ServerConfigListener {
private StarboardConfig starboardConfig;
@Autowired
private ConfigManagementService configManagementService;
private ConfigService configManagementService;
@Override
public void updateServerConfig(AServer server) {
public void updateServerConfig(ServerDto server) {
for (int i = 0; i < starboardConfig.getLvl().size(); i++) {
Integer value = starboardConfig.getLvl().get(i);
configManagementService.createIfNotExists(server.getId(), "starLvl" + ( i + 1 ), Double.valueOf(value));
configManagementService.createValueIfNotExists("starLvl" + ( i + 1 ), server.getId(), Double.valueOf(value));
}
}
}

View File

@@ -0,0 +1,26 @@
package dev.sheldan.abstracto.utility.converter;
import dev.sheldan.abstracto.core.models.dto.ChannelDto;
import dev.sheldan.abstracto.core.models.converter.ChannelConverter;
import dev.sheldan.abstracto.utility.models.database.StarboardPost;
import dev.sheldan.abstracto.utility.models.template.commands.starboard.StarStatsPost;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class StarPostConverter {
@Autowired
private ChannelConverter channelConverter;
public StarStatsPost fromStarboardPost(StarboardPost starboardPost) {
ChannelDto channel = channelConverter.fromChannel(starboardPost.getStarboardChannel());
return StarStatsPost
.builder()
.serverId(channel.getServer().getId())
.channelId(channel.getId())
.messageId(starboardPost.getPostMessageId())
.starCount(starboardPost.getReactions().size())
.build();
}
}

View File

@@ -1,9 +1,9 @@
package dev.sheldan.abstracto.utility.listener.embed;
import dev.sheldan.abstracto.core.command.service.UserService;
import dev.sheldan.abstracto.core.listener.MessageReceivedListener;
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import dev.sheldan.abstracto.core.models.dto.UserInServerDto;
import dev.sheldan.abstracto.core.service.MessageCache;
import dev.sheldan.abstracto.core.service.management.UserManagementService;
import dev.sheldan.abstracto.utility.models.MessageEmbedLink;
import dev.sheldan.abstracto.utility.config.UtilityFeatures;
import dev.sheldan.abstracto.utility.service.MessageEmbedService;
@@ -25,7 +25,7 @@ public class MessageEmbedListener implements MessageReceivedListener {
public static final String MESSAGE_EMBED_TEMPLATE = "message";
@Autowired
private UserManagementService userManagementService;
private UserService userManagementService;
@Autowired
private MessageEmbedService messageEmbedService;
@@ -36,7 +36,7 @@ public class MessageEmbedListener implements MessageReceivedListener {
List<MessageEmbedLink> links = messageEmbedService.getLinksInMessage(messageRaw);
for (MessageEmbedLink messageEmbedLink : links) {
messageRaw = messageRaw.replace(messageEmbedLink.getWholeUrl(), "");
AUserInAServer cause = userManagementService.loadUser(message.getMember());
UserInServerDto cause = userManagementService.loadUser(message.getMember());
messageCache.getMessageFromCache(messageEmbedLink.getServerId(), messageEmbedLink.getChannelId(), messageEmbedLink.getMessageId()).thenAccept(cachedMessage -> {
messageEmbedService.embedLink(cachedMessage, message.getTextChannel(), cause, message);
});

View File

@@ -2,15 +2,15 @@ package dev.sheldan.abstracto.utility.listener.embed;
import dev.sheldan.abstracto.core.listener.ReactedAddedListener;
import dev.sheldan.abstracto.core.models.cache.CachedMessage;
import dev.sheldan.abstracto.core.models.database.AEmote;
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import dev.sheldan.abstracto.core.models.dto.EmoteDto;
import dev.sheldan.abstracto.core.models.dto.UserInServerDto;
import dev.sheldan.abstracto.core.service.Bot;
import dev.sheldan.abstracto.core.service.EmoteService;
import dev.sheldan.abstracto.core.service.MessageService;
import dev.sheldan.abstracto.core.service.management.EmoteManagementService;
import dev.sheldan.abstracto.core.utils.EmoteUtils;
import dev.sheldan.abstracto.utility.config.UtilityFeatures;
import dev.sheldan.abstracto.utility.models.database.EmbeddedMessage;
import dev.sheldan.abstracto.utility.service.management.MessageEmbedPostManagementService;
import dev.sheldan.abstracto.utility.service.management.MessageEmbedPostManagementServiceBean;
import lombok.extern.slf4j.Slf4j;
import net.dv8tion.jda.api.entities.Emote;
import net.dv8tion.jda.api.entities.MessageReaction;
@@ -26,31 +26,31 @@ public class MessageEmbedRemovalReactionListener implements ReactedAddedListener
public static final String REMOVAL_EMOTE = "removeEmbed";
@Autowired
private EmoteManagementService emoteManagementService;
private EmoteService emoteManagementService;
@Autowired
private Bot bot;
@Autowired
private MessageEmbedPostManagementService messageEmbedPostManagementService;
private MessageEmbedPostManagementServiceBean messageEmbedPostManagementService;
@Autowired
private MessageService messageService;
@Override
public void executeReactionAdded(CachedMessage message, MessageReaction reaction, AUserInAServer userAdding) {
public void executeReactionAdded(CachedMessage message, MessageReaction reaction, UserInServerDto userAdding) {
Long guildId = message.getServerId();
Optional<AEmote> aEmote = emoteManagementService.loadEmoteByName(REMOVAL_EMOTE, guildId);
Optional<EmoteDto> aEmote = emoteManagementService.getEmoteByName(REMOVAL_EMOTE, guildId);
if(aEmote.isPresent()) {
AEmote emote = aEmote.get();
EmoteDto emote = aEmote.get();
MessageReaction.ReactionEmote reactionEmote = reaction.getReactionEmote();
Optional<Emote> emoteInGuild = bot.getEmote(guildId, emote);
if(EmoteUtils.isReactionEmoteAEmote(reactionEmote, emote, emoteInGuild.orElse(null))) {
Optional<EmbeddedMessage> embeddedMessageOptional = messageEmbedPostManagementService.findEmbeddedPostByMessageId(message.getMessageId());
if(embeddedMessageOptional.isPresent()) {
EmbeddedMessage embeddedMessage = embeddedMessageOptional.get();
if(embeddedMessage.getEmbeddedUser().getUserReference().getId().equals(userAdding.getUserReference().getId())
|| embeddedMessage.getEmbeddingUser().getUserReference().getId().equals(userAdding.getUserReference().getId())
if(embeddedMessage.getEmbeddedUser().getUserReference().getId().equals(userAdding.getUser().getId())
|| embeddedMessage.getEmbeddingUser().getUserReference().getId().equals(userAdding.getUser().getId())
) {
messageService.deleteMessageInChannelInServer(message.getServerId(), message.getChannelId(), message.getMessageId()).thenAccept(aVoid -> {
messageEmbedPostManagementService.deleteEmbeddedMessageTransactional(embeddedMessage);

View File

@@ -1,23 +1,23 @@
package dev.sheldan.abstracto.utility.listener.starboard;
import dev.sheldan.abstracto.core.command.service.UserService;
import dev.sheldan.abstracto.core.listener.ReactedAddedListener;
import dev.sheldan.abstracto.core.listener.ReactedRemovedListener;
import dev.sheldan.abstracto.core.models.cache.CachedMessage;
import dev.sheldan.abstracto.core.models.cache.CachedReaction;
import dev.sheldan.abstracto.core.models.database.AEmote;
import dev.sheldan.abstracto.core.models.database.AUser;
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import dev.sheldan.abstracto.core.models.dto.EmoteDto;
import dev.sheldan.abstracto.core.models.dto.UserDto;
import dev.sheldan.abstracto.core.models.dto.UserInServerDto;
import dev.sheldan.abstracto.core.service.Bot;
import dev.sheldan.abstracto.core.service.ConfigService;
import dev.sheldan.abstracto.core.service.EmoteService;
import dev.sheldan.abstracto.core.service.MessageCache;
import dev.sheldan.abstracto.core.service.management.ConfigManagementService;
import dev.sheldan.abstracto.core.service.management.EmoteManagementService;
import dev.sheldan.abstracto.core.service.management.UserManagementService;
import dev.sheldan.abstracto.core.utils.EmoteUtils;
import dev.sheldan.abstracto.utility.config.UtilityFeatures;
import dev.sheldan.abstracto.utility.models.database.StarboardPost;
import dev.sheldan.abstracto.utility.service.StarboardService;
import dev.sheldan.abstracto.utility.service.management.StarboardPostManagementService;
import dev.sheldan.abstracto.utility.service.management.StarboardPostReactorManagementService;
import dev.sheldan.abstracto.utility.service.management.StarboardPostManagementServiceBean;
import dev.sheldan.abstracto.utility.service.management.StarboardPostReactorManagementServiceBean;
import lombok.extern.slf4j.Slf4j;
import net.dv8tion.jda.api.entities.Emote;
import net.dv8tion.jda.api.entities.MessageReaction;
@@ -36,7 +36,7 @@ public class StarboardListener implements ReactedAddedListener, ReactedRemovedLi
public static final String STAR_EMOTE = "star";
@Autowired
private EmoteManagementService emoteManagementService;
private EmoteService emoteManagementService;
@Autowired
private Bot bot;
@@ -45,30 +45,30 @@ public class StarboardListener implements ReactedAddedListener, ReactedRemovedLi
private MessageCache messageCache;
@Autowired
private ConfigManagementService configManagementService;
private ConfigService configManagementService;
@Autowired
private StarboardService starboardService;
@Autowired
private StarboardPostManagementService starboardPostManagementService;
private StarboardPostManagementServiceBean starboardPostManagementService;
@Autowired
private StarboardPostReactorManagementService starboardPostReactorManagementService;
private StarboardPostReactorManagementServiceBean starboardPostReactorManagementService;
@Autowired
private UserManagementService userManagementService;
private UserService userManagementService;
@Override
@Transactional
public void executeReactionAdded(CachedMessage message, MessageReaction addedReaction, AUserInAServer userAdding) {
if(userAdding.getUserReference().getId().equals(message.getAuthorId())) {
public void executeReactionAdded(CachedMessage message, MessageReaction addedReaction, UserInServerDto userAdding) {
if(userAdding.getUser().getId().equals(message.getAuthorId())) {
return;
}
Long guildId = message.getServerId();
Optional<AEmote> aEmote = emoteManagementService.loadEmoteByName(STAR_EMOTE, guildId);
Optional<EmoteDto> aEmote = emoteManagementService.getEmoteByName(STAR_EMOTE, guildId);
if(aEmote.isPresent()) {
AEmote emote = aEmote.get();
EmoteDto emote = aEmote.get();
MessageReaction.ReactionEmote reactionEmote = addedReaction.getReactionEmote();
Optional<Emote> emoteInGuild = bot.getEmote(guildId, emote);
if(EmoteUtils.isReactionEmoteAEmote(reactionEmote, emote, emoteInGuild.orElse(null))) {
@@ -80,21 +80,21 @@ public class StarboardListener implements ReactedAddedListener, ReactedRemovedLi
}
}
private void updateStarboardPost(CachedMessage message, CachedReaction reaction, AUserInAServer userReacting, boolean adding) {
private void updateStarboardPost(CachedMessage message, CachedReaction reaction, UserInServerDto userReacting, boolean adding) {
Optional<StarboardPost> starboardPostOptional = starboardPostManagementService.findByMessageId(message.getMessageId());
if(reaction != null) {
List<AUser> userExceptAuthor = getUsersExcept(reaction.getUsers(), message.getAuthorId());
Double starMinimum = getFromConfig("starLvl1", message.getServerId());
List<UserDto> userExceptAuthor = getUsersExcept(reaction.getUsers(), message.getAuthorId());
Double starMinimum = configManagementService.getDoubleValue("starLvl1", message.getServerId());
if (userExceptAuthor.size() >= starMinimum) {
AUserInAServer author = userManagementService.loadUser(message.getServerId(), message.getAuthorId());
UserInServerDto author = userManagementService.loadUser(message.getServerId(), message.getAuthorId());
if(starboardPostOptional.isPresent()) {
StarboardPost starboardPost = starboardPostOptional.get();
starboardPost.setIgnored(false);
starboardService.updateStarboardPost(starboardPost, message, userExceptAuthor);
if(adding) {
starboardPostReactorManagementService.addReactor(starboardPost, userReacting.getUserReference());
starboardPostReactorManagementService.addReactor(starboardPost, userReacting.getUser());
} else {
starboardPostReactorManagementService.removeReactor(starboardPost, userReacting.getUserReference());
starboardPostReactorManagementService.removeReactor(starboardPost, userReacting.getUser());
}
} else {
starboardService.createStarboardPost(message, userExceptAuthor, userReacting, author);
@@ -119,14 +119,14 @@ public class StarboardListener implements ReactedAddedListener, ReactedRemovedLi
@Override
@Transactional
public void executeReactionRemoved(CachedMessage message, MessageReaction removedReaction, AUserInAServer userRemoving) {
if(message.getAuthorId().equals(userRemoving.getUserReference().getId())) {
public void executeReactionRemoved(CachedMessage message, MessageReaction removedReaction, UserInServerDto userRemoving) {
if(message.getAuthorId().equals(userRemoving.getUser().getId())) {
return;
}
Long guildId = message.getServerId();
Optional<AEmote> aEmote = emoteManagementService.loadEmoteByName(STAR_EMOTE, guildId);
Optional<EmoteDto> aEmote = emoteManagementService.getEmoteByName(STAR_EMOTE, guildId);
if(aEmote.isPresent()) {
AEmote emote = aEmote.get();
EmoteDto emote = aEmote.get();
MessageReaction.ReactionEmote reactionEmote = removedReaction.getReactionEmote();
Optional<Emote> emoteInGuild = bot.getEmote(guildId, emote);
if(EmoteUtils.isReactionEmoteAEmote(reactionEmote, emote, emoteInGuild.orElse(null))) {
@@ -138,11 +138,7 @@ public class StarboardListener implements ReactedAddedListener, ReactedRemovedLi
}
}
private Double getFromConfig(String key, Long guildId) {
return configManagementService.loadConfig(guildId, key).getDoubleValue();
}
private List<AUser> getUsersExcept(List<AUser> users, Long userId) {
private List<UserDto> getUsersExcept(List<UserDto> users, Long userId) {
return users.stream().filter(user -> !user.getId().equals(userId)).collect(Collectors.toList());
}

View File

@@ -4,7 +4,7 @@ import dev.sheldan.abstracto.core.listener.MessageDeletedListener;
import dev.sheldan.abstracto.core.models.cache.CachedMessage;
import dev.sheldan.abstracto.utility.config.UtilityFeatures;
import dev.sheldan.abstracto.utility.models.database.StarboardPost;
import dev.sheldan.abstracto.utility.service.management.StarboardPostManagementService;
import dev.sheldan.abstracto.utility.service.management.StarboardPostManagementServiceBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -14,7 +14,7 @@ import java.util.Optional;
public class StarboardPostDeletedListener implements MessageDeletedListener {
@Autowired
private StarboardPostManagementService starboardPostManagementService;
private StarboardPostManagementServiceBean starboardPostManagementService;
@Override
public void execute(CachedMessage messageBefore) {

View File

@@ -1,6 +1,6 @@
package dev.sheldan.abstracto.utility.repository;
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import dev.sheldan.abstracto.core.models.AUserInAServer;
import dev.sheldan.abstracto.utility.models.database.Reminder;
import org.springframework.data.jpa.repository.JpaRepository;

View File

@@ -1,6 +1,6 @@
package dev.sheldan.abstracto.utility.repository;
import dev.sheldan.abstracto.core.models.database.AUser;
import dev.sheldan.abstracto.core.models.AUser;
import dev.sheldan.abstracto.utility.models.database.StarboardPost;
import dev.sheldan.abstracto.utility.models.database.StarboardPostReaction;
import org.springframework.data.jpa.repository.JpaRepository;

View File

@@ -1,7 +1,7 @@
package dev.sheldan.abstracto.utility.repository.converter;
import dev.sheldan.abstracto.core.service.management.UserManagementService;
import dev.sheldan.abstracto.core.models.database.AUser;
import dev.sheldan.abstracto.core.command.service.UserService;
import dev.sheldan.abstracto.core.models.dto.UserDto;
import dev.sheldan.abstracto.core.service.Bot;
import dev.sheldan.abstracto.utility.models.template.commands.starboard.StarStatsUser;
import dev.sheldan.abstracto.utility.repository.StarStatsUserResult;
@@ -15,7 +15,7 @@ import java.util.List;
public class StarStatsUserConverter {
@Autowired
private UserManagementService userManagementService;
private UserService userManagementService;
@Autowired
private Bot bot;
@@ -27,7 +27,7 @@ public class StarStatsUserConverter {
.builder()
.starCount(starStatsUserResult.getStarCount())
.member(bot.getMemberInServer(serverId, starStatsUserResult.getUserId()))
.user(AUser.builder().id(starStatsUserResult.getUserId()).build())
.user(UserDto.builder().id(starStatsUserResult.getUserId()).build())
.build();
result.add(newUser);
});

View File

@@ -1,22 +1,23 @@
package dev.sheldan.abstracto.utility.service;
import dev.sheldan.abstracto.core.command.service.UserService;
import dev.sheldan.abstracto.core.converter.UserInServerModelConverter;
import dev.sheldan.abstracto.core.models.dto.UserInServerDto;
import dev.sheldan.abstracto.core.models.template.ChannelModel;
import dev.sheldan.abstracto.core.models.template.ServerModel;
import dev.sheldan.abstracto.core.models.template.UserInServerModel;
import dev.sheldan.abstracto.core.models.template.listener.MessageEmbeddedModel;
import dev.sheldan.abstracto.templating.model.MessageToSend;
import dev.sheldan.abstracto.core.models.cache.CachedMessage;
import dev.sheldan.abstracto.core.models.database.AChannel;
import dev.sheldan.abstracto.core.models.database.AServer;
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import dev.sheldan.abstracto.core.service.Bot;
import dev.sheldan.abstracto.core.service.ChannelService;
import dev.sheldan.abstracto.core.service.MessageCache;
import dev.sheldan.abstracto.core.service.MessageService;
import dev.sheldan.abstracto.core.service.management.ChannelManagementService;
import dev.sheldan.abstracto.core.service.management.ServerManagementService;
import dev.sheldan.abstracto.core.service.management.UserManagementService;
import dev.sheldan.abstracto.templating.service.TemplateService;
import dev.sheldan.abstracto.utility.models.MessageEmbedLink;
import dev.sheldan.abstracto.utility.service.management.MessageEmbedPostManagementService;
import dev.sheldan.abstracto.utility.service.management.MessageEmbedPostManagementServiceBean;
import lombok.extern.slf4j.Slf4j;
import net.dv8tion.jda.api.entities.Guild;
import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.Message;
import net.dv8tion.jda.api.entities.TextChannel;
@@ -41,13 +42,10 @@ public class MessageEmbedServiceBean implements MessageEmbedService {
public static final String REMOVAL_EMOTE = "removeEmbed";
@Autowired
private ChannelManagementService channelManagementService;
private ChannelService channelManagementService;
@Autowired
private ServerManagementService serverManagementService;
@Autowired
private UserManagementService userManagementService;
private UserService userManagementService;
@Autowired
private Bot bot;
@@ -65,11 +63,17 @@ public class MessageEmbedServiceBean implements MessageEmbedService {
private MessageCache messageCache;
@Autowired
private MessageEmbedPostManagementService messageEmbedPostManagementService;
private MessageEmbedPostManagementServiceBean messageEmbedPostManagementService;
@Autowired
private MessageService messageService;
@Autowired
private UserInServerModelConverter userInServerModelConverter;
@Autowired
private UserService userService;
@Override
public List<MessageEmbedLink> getLinksInMessage(String message) {
List<MessageEmbedLink> links = new ArrayList<>();
@@ -95,7 +99,7 @@ public class MessageEmbedServiceBean implements MessageEmbedService {
}
@Override
public void embedLinks(List<MessageEmbedLink> linksToEmbed, TextChannel target, AUserInAServer reason, Message embeddingMessage) {
public void embedLinks(List<MessageEmbedLink> linksToEmbed, TextChannel target, UserInServerDto reason, Message embeddingMessage) {
linksToEmbed.forEach(messageEmbedLink -> {
messageCache.getMessageFromCache(messageEmbedLink.getServerId(), messageEmbedLink.getChannelId(), messageEmbedLink.getMessageId())
.thenAccept(cachedMessage -> {
@@ -106,7 +110,7 @@ public class MessageEmbedServiceBean implements MessageEmbedService {
@Override
@Transactional
public void embedLink(CachedMessage cachedMessage, TextChannel target, AUserInAServer cause, Message embeddingMessage) {
public void embedLink(CachedMessage cachedMessage, TextChannel target, UserInServerDto cause, Message embeddingMessage) {
MessageEmbeddedModel messageEmbeddedModel = buildTemplateParameter(embeddingMessage, cachedMessage);
MessageToSend embed = templateService.renderEmbedTemplate(MESSAGE_EMBED_TEMPLATE, messageEmbeddedModel);
List<CompletableFuture<Message>> completableFutures = channelService.sendMessageToEndInTextChannel(embed, target);
@@ -124,24 +128,22 @@ public class MessageEmbedServiceBean implements MessageEmbedService {
}
private MessageEmbeddedModel buildTemplateParameter(Message message, CachedMessage embeddedMessage) {
AChannel channel = channelManagementService.loadChannel(message.getChannel().getIdLong());
AServer server = serverManagementService.loadOrCreate(message.getGuild().getIdLong());
AUserInAServer user = userManagementService.loadUser(message.getMember());
Member author = bot.getMemberInServer(embeddedMessage.getServerId(), embeddedMessage.getAuthorId());
TextChannel sourceChannel = bot.getTextChannelFromServer(embeddedMessage.getServerId(), embeddedMessage.getChannelId()).get();
ChannelModel currentChannel = ChannelModel.builder().id(message.getTextChannel().getIdLong()).build();
Guild guild = message.getGuild();
ServerModel server = ServerModel.builder().id(guild.getIdLong()).build();
UserInServerModel embeddingUser = userInServerModelConverter.fromMember(message.getMember());
UserInServerModel embeddedUser = userInServerModelConverter.fromUser(userService.loadUser(embeddedMessage.getServerId(), embeddedMessage.getAuthorId()));
ServerModel sourceServer = ServerModel.builder().id(embeddedMessage.getServerId()).build();
return MessageEmbeddedModel
.builder()
.channel(channel)
.channel(currentChannel)
.server(server)
.member(message.getMember())
.aUserInAServer(user)
.author(author)
.sourceChannel(sourceChannel)
.embeddingUser(message.getMember())
.user(user.getUserReference())
.messageChannel(message.getChannel())
.guild(message.getGuild())
.embeddedMessage(embeddedMessage)
.embeddedUser(embeddedUser.getUser())
.embeddedUserInServer(embeddedUser)
.userModel(embeddingUser.getUser())
.userInServer(embeddedUser)
.sourceServer(sourceServer)
.build();
}
}

View File

@@ -1,12 +1,14 @@
package dev.sheldan.abstracto.utility.service;
import dev.sheldan.abstracto.core.models.converter.ChannelConverter;
import dev.sheldan.abstracto.core.models.converter.ServerConverter;
import dev.sheldan.abstracto.core.models.converter.UserConverter;
import dev.sheldan.abstracto.core.models.dto.ChannelDto;
import dev.sheldan.abstracto.core.models.dto.ServerDto;
import dev.sheldan.abstracto.core.models.dto.UserDto;
import dev.sheldan.abstracto.core.models.dto.UserInServerDto;
import dev.sheldan.abstracto.core.service.ChannelService;
import dev.sheldan.abstracto.core.service.management.ChannelManagementService;
import dev.sheldan.abstracto.core.models.AServerAChannelAUser;
import dev.sheldan.abstracto.core.models.database.AChannel;
import dev.sheldan.abstracto.core.models.database.AServer;
import dev.sheldan.abstracto.core.models.database.AUser;
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import dev.sheldan.abstracto.templating.model.MessageToSend;
import dev.sheldan.abstracto.core.service.Bot;
import dev.sheldan.abstracto.scheduling.service.SchedulerService;
@@ -14,7 +16,7 @@ import dev.sheldan.abstracto.templating.service.TemplateService;
import dev.sheldan.abstracto.utility.models.database.Reminder;
import dev.sheldan.abstracto.utility.models.template.commands.reminder.ExecutedReminderModel;
import dev.sheldan.abstracto.utility.models.template.commands.reminder.ReminderModel;
import dev.sheldan.abstracto.utility.service.management.ReminderManagementService;
import dev.sheldan.abstracto.utility.service.management.ReminderManagementServiceBean;
import lombok.extern.slf4j.Slf4j;
import net.dv8tion.jda.api.entities.Guild;
import net.dv8tion.jda.api.entities.Member;
@@ -38,10 +40,10 @@ public class RemindServiceBean implements ReminderService {
public static final String REMINDER_EMBED_KEY = "remind_response";
@Autowired
private ReminderManagementService reminderManagementService;
private ReminderManagementServiceBean reminderManagementService;
@Autowired
private ChannelManagementService channelManagementService;
private ChannelService channelManagementService;
@Autowired
private TemplateService templateService;
@@ -58,14 +60,23 @@ public class RemindServiceBean implements ReminderService {
@Autowired
private ChannelService channelService;
@Autowired
private ServerConverter serverConverter;
@Autowired
private ChannelConverter channelConverter;
@Autowired
private UserConverter userConverter;
@Override
public void createReminderInForUser(AUserInAServer user, String remindText, Duration remindIn, ReminderModel reminderModel) {
AChannel channel = channelManagementService.loadChannel(reminderModel.getChannel().getId());
public void createReminderInForUser(UserInServerDto user, String remindText, Duration remindIn, ReminderModel reminderModel) {
ChannelDto channel = channelManagementService.loadChannel(reminderModel.getChannel().getId());
AServerAChannelAUser aServerAChannelAUser = AServerAChannelAUser
.builder()
.user(user.getUserReference())
.user(user.getUser())
.aUserInAServer(user)
.guild(user.getServerReference())
.guild(user.getServer())
.channel(channel)
.build();
Instant remindAt = Instant.now().plusNanos(remindIn.toNanos());
@@ -90,14 +101,14 @@ public class RemindServiceBean implements ReminderService {
@Transactional
public void executeReminder(Long reminderId) {
Reminder reminderToRemindFor = reminderManagementService.loadReminder(reminderId);
AServer server = reminderToRemindFor.getServer();
AChannel channel = reminderToRemindFor.getChannel();
ServerDto server = serverConverter.convertServer(reminderToRemindFor.getServer());
ChannelDto channel = channelConverter.fromChannel(reminderToRemindFor.getChannel());
Optional<Guild> guildToAnswerIn = bot.getGuildById(server.getId());
if(guildToAnswerIn.isPresent()) {
Optional<TextChannel> channelToAnswerIn = bot.getTextChannelFromServer(server.getId(), channel.getId());
// only send the message if the channel still exists, if not, only set the reminder to reminded.
if(channelToAnswerIn.isPresent()) {
AUser userReference = reminderToRemindFor.getRemindedUser().getUserReference();
UserDto userReference = userConverter.fromAUser(reminderToRemindFor.getRemindedUser().getUserReference());
Member memberInServer = bot.getMemberInServer(server.getId(), userReference.getId());
ExecutedReminderModel build = ExecutedReminderModel
.builder()

View File

@@ -1,11 +1,13 @@
package dev.sheldan.abstracto.utility.service;
import dev.sheldan.abstracto.core.service.management.EmoteManagementService;
import dev.sheldan.abstracto.core.service.management.PostTargetManagement;
import dev.sheldan.abstracto.core.service.management.UserManagementService;
import dev.sheldan.abstracto.core.command.service.UserService;
import dev.sheldan.abstracto.core.models.AChannel;
import dev.sheldan.abstracto.core.models.AUserInAServer;
import dev.sheldan.abstracto.core.models.converter.ChannelConverter;
import dev.sheldan.abstracto.core.models.converter.UserInServerConverter;
import dev.sheldan.abstracto.core.models.dto.*;
import dev.sheldan.abstracto.core.models.AServerAChannelMessage;
import dev.sheldan.abstracto.core.models.cache.CachedMessage;
import dev.sheldan.abstracto.core.models.database.*;
import dev.sheldan.abstracto.templating.model.MessageToSend;
import dev.sheldan.abstracto.core.service.Bot;
import dev.sheldan.abstracto.core.service.ConfigService;
@@ -13,13 +15,14 @@ import dev.sheldan.abstracto.core.service.EmoteService;
import dev.sheldan.abstracto.core.service.PostTargetService;
import dev.sheldan.abstracto.templating.service.TemplateService;
import dev.sheldan.abstracto.utility.config.StarboardConfig;
import dev.sheldan.abstracto.utility.converter.StarPostConverter;
import dev.sheldan.abstracto.utility.models.database.StarboardPost;
import dev.sheldan.abstracto.utility.models.template.commands.starboard.StarStatsModel;
import dev.sheldan.abstracto.utility.models.template.commands.starboard.StarStatsPost;
import dev.sheldan.abstracto.utility.models.template.commands.starboard.StarStatsUser;
import dev.sheldan.abstracto.utility.models.template.commands.starboard.StarboardPostModel;
import dev.sheldan.abstracto.utility.service.management.StarboardPostManagementService;
import dev.sheldan.abstracto.utility.service.management.StarboardPostReactorManagementService;
import dev.sheldan.abstracto.utility.service.management.StarboardPostManagementServiceBean;
import dev.sheldan.abstracto.utility.service.management.StarboardPostReactorManagementServiceBean;
import lombok.extern.slf4j.Slf4j;
import net.dv8tion.jda.api.entities.*;
import org.springframework.beans.factory.annotation.Autowired;
@@ -48,35 +51,41 @@ public class StarboardServiceBean implements StarboardService {
@Autowired
private TemplateService templateService;
@Autowired
private EmoteManagementService emoteManagementService;
@Autowired
private ConfigService configService;
@Autowired
private StarboardPostManagementService starboardPostManagementService;
private StarboardPostManagementServiceBean starboardPostManagementService;
@Autowired
private StarboardConfig starboardConfig;
@Autowired
private UserManagementService userManagementService;
private UserService userManagementService;
@Autowired
private StarboardPostReactorManagementService starboardPostReactorManagementService;
private StarboardPostReactorManagementServiceBean starboardPostReactorManagementService;
@Autowired
private PostTargetManagement postTargetManagement;
private PostTargetService postTargetManagement;
@Autowired
private EmoteService emoteService;
@Autowired
private UserInServerConverter userInServerConverter;
@Autowired
private ChannelConverter channelConverter;
@Autowired
private StarPostConverter starPostConverter;
@Override
public void createStarboardPost(CachedMessage message, List<AUser> userExceptAuthor, AUserInAServer userReacting, AUserInAServer starredUser) {
public void createStarboardPost(CachedMessage message, List<UserDto> userExceptAuthor, UserInServerDto userReacting, UserInServerDto starredUser) {
StarboardPostModel starboardPostModel = buildStarboardPostModel(message, userExceptAuthor.size());
MessageToSend messageToSend = templateService.renderEmbedTemplate(STARBOARD_POST_TEMPLATE, starboardPostModel);
PostTarget starboard = postTargetManagement.getPostTarget(STARBOARD_POSTTARGET, message.getServerId());
PostTargetDto starboard = postTargetManagement.getPostTarget(STARBOARD_POSTTARGET, message.getServerId());
List<CompletableFuture<Message>> completableFutures = postTargetService.sendEmbedInPostTarget(messageToSend, STARBOARD_POSTTARGET, message.getServerId());
CompletableFuture.allOf(completableFutures.toArray(new CompletableFuture[0])).thenAccept(aVoid -> {
try {
@@ -85,7 +94,7 @@ public class StarboardServiceBean implements StarboardService {
.builder()
.messageId(message1.getIdLong())
.channel(starboard.getChannelReference())
.server(userReacting.getServerReference())
.server(userReacting.getServer())
.build();
StarboardPost starboardPost = starboardPostManagementService.createStarboardPost(message, starredUser, userReacting, aServerAChannelMessage);
// TODO maybe in bulk, but numbers should be small enough
@@ -103,13 +112,13 @@ public class StarboardServiceBean implements StarboardService {
Member member = bot.getMemberInServer(message.getServerId(), message.getAuthorId());
Optional<TextChannel> channel = bot.getTextChannelFromServer(message.getServerId(), message.getChannelId());
Optional<Guild> guild = bot.getGuildById(message.getServerId());
AChannel aChannel = AChannel.builder().id(message.getChannelId()).build();
AUser user = AUser.builder().id(message.getAuthorId()).build();
AServer server = AServer.builder().id(message.getServerId()).build();
Optional<AEmote> appropriateEmoteOptional = getAppropriateEmote(message.getServerId(), starCount);
ChannelDto aChannel = ChannelDto.builder().id(message.getChannelId()).build();
UserDto user = UserDto.builder().id(message.getAuthorId()).build();
ServerDto server = ServerDto.builder().id(message.getServerId()).build();
Optional<EmoteDto> appropriateEmoteOptional = getAppropriateEmote(message.getServerId(), starCount);
String emoteText;
if(appropriateEmoteOptional.isPresent()) {
AEmote emote = appropriateEmoteOptional.get();
EmoteDto emote = appropriateEmoteOptional.get();
emoteText = emoteService.getEmoteAsMention(emote, message.getServerId(), "");
} else {
log.warn("No emote defined to be used for starboard post. Falling back to default.");
@@ -130,7 +139,7 @@ public class StarboardServiceBean implements StarboardService {
}
@Override
public void updateStarboardPost(StarboardPost post, CachedMessage message, List<AUser> userExceptAuthor) {
public void updateStarboardPost(StarboardPost post, CachedMessage message, List<UserDto> userExceptAuthor) {
StarboardPostModel starboardPostModel = buildStarboardPostModel(message, userExceptAuthor.size());
MessageToSend messageToSend = templateService.renderEmbedTemplate("starboard_post", starboardPostModel);
List<CompletableFuture<Message>> futures = new ArrayList<>();
@@ -155,14 +164,14 @@ public class StarboardServiceBean implements StarboardService {
int count = 3;
List<StarboardPost> starboardPosts = starboardPostManagementService.retrieveTopPosts(serverId, count);
List<StarStatsUser> topStarGivers = starboardPostReactorManagementService.retrieveTopStarGiver(serverId, count);
List<StarStatsPost> starStatsPosts = starboardPosts.stream().map(StarStatsPost::fromStarboardPost).collect(Collectors.toList());
List<StarStatsPost> starStatsPosts = starboardPosts.stream().map(starboardPost -> starPostConverter.fromStarboardPost(starboardPost)).collect(Collectors.toList());
List<StarStatsUser> topStarReceiver = starboardPostReactorManagementService.retrieveTopStarReceiver(serverId, count);
Integer postCount = starboardPostManagementService.getPostCount(serverId);
Integer reactionCount = starboardPostReactorManagementService.getStarCount(serverId);
List<String> emotes = new ArrayList<>();
for (int i = 1; i < count + 1; i++) {
Optional<AEmote> starboardRankingEmote = getStarboardRankingEmote(serverId, i);
AEmote emote = starboardRankingEmote.orElse(null);
Optional<EmoteDto> starboardRankingEmote = getStarboardRankingEmote(serverId, i);
EmoteDto emote = starboardRankingEmote.orElse(null);
String defaultEmoji = starboardConfig.getBadge().get(i - 1);
emotes.add(emoteService.getEmoteAsMention(emote, serverId, defaultEmoji));
}
@@ -178,17 +187,17 @@ public class StarboardServiceBean implements StarboardService {
.build();
}
private Optional<AEmote> getStarboardRankingEmote(Long serverId, Integer position) {
return emoteManagementService.loadEmoteByName("starboardBadge" + position, serverId);
private Optional<EmoteDto> getStarboardRankingEmote(Long serverId, Integer position) {
return emoteService.getEmoteByName("starboardBadge" + position, serverId);
}
private Optional<AEmote> getAppropriateEmote(Long serverId, Integer starCount) {
private Optional<EmoteDto> getAppropriateEmote(Long serverId, Integer starCount) {
for(int i = starboardConfig.getLvl().size(); i > 0; i--) {
Double starMinimum = configService.getDoubleValue("starLvl" + i, serverId);
if(starCount >= starMinimum) {
return emoteManagementService.loadEmoteByName("star" + i, serverId);
return emoteService.getEmoteByName("star" + i, serverId);
}
}
return emoteManagementService.loadEmoteByName("star0", serverId);
return emoteService.getEmoteByName("star0", serverId);
}
}

View File

@@ -1,8 +1,8 @@
package dev.sheldan.abstracto.utility.service;
import dev.sheldan.abstracto.core.models.converter.UserInServerConverter;
import dev.sheldan.abstracto.core.models.dto.UserInServerDto;
import dev.sheldan.abstracto.core.service.EmoteService;
import dev.sheldan.abstracto.core.service.management.EmoteManagementService;
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import dev.sheldan.abstracto.templating.model.MessageToSend;
import dev.sheldan.abstracto.core.service.Bot;
import dev.sheldan.abstracto.core.service.MessageService;
@@ -12,7 +12,7 @@ import dev.sheldan.abstracto.templating.service.TemplateService;
import dev.sheldan.abstracto.utility.models.database.Suggestion;
import dev.sheldan.abstracto.utility.models.SuggestionState;
import dev.sheldan.abstracto.utility.models.template.commands.SuggestionLog;
import dev.sheldan.abstracto.utility.service.management.SuggestionManagementService;
import dev.sheldan.abstracto.utility.service.management.SuggestionManagementServiceBean;
import lombok.extern.slf4j.Slf4j;
import net.dv8tion.jda.api.JDA;
import net.dv8tion.jda.api.entities.*;
@@ -35,7 +35,7 @@ public class SuggestionServiceBean implements SuggestionService {
private static final String SUGGESTION_NO_EMOTE = "suggestionNo";
public static final String SUGGESTIONS_TARGET = "suggestions";
@Autowired
private SuggestionManagementService suggestionManagementService;
private SuggestionManagementServiceBean suggestionManagementService;
@Autowired
private PostTargetService postTargetService;
@@ -46,9 +46,6 @@ public class SuggestionServiceBean implements SuggestionService {
@Autowired
private Bot botService;
@Autowired
private EmoteManagementService emoteManagementService;
@Autowired
private EmoteService emoteService;
@@ -58,6 +55,9 @@ public class SuggestionServiceBean implements SuggestionService {
@Autowired
private SuggestionServiceBean self;
@Autowired
private UserInServerConverter userInServerConverter;
@Override
public void createSuggestion(Member member, String text, SuggestionLog suggestionLog) {
Suggestion suggestion = suggestionManagementService.createSuggestion(member, text);
@@ -99,11 +99,11 @@ public class SuggestionServiceBean implements SuggestionService {
suggestionLog.setOriginalChannelId(channelId);
suggestionLog.setOriginalMessageId(originalMessageId);
suggestionLog.setOriginalMessageUrl(MessageUtils.buildMessageUrl(serverId, channelId, originalMessageId));
AUserInAServer suggester = suggestion.getSuggester();
UserInServerDto suggester = userInServerConverter.fromAUserInAServer(suggestion.getSuggester());
JDA instance = botService.getInstance();
Guild guildById = instance.getGuildById(serverId);
if(guildById != null) {
Member memberById = guildById.getMemberById(suggester.getUserReference().getId());
Member memberById = guildById.getMemberById(suggester.getUser().getId());
if(memberById != null) {
suggestionLog.setSuggester(memberById);
suggestionLog.setSuggestion(suggestion);
@@ -140,6 +140,6 @@ public class SuggestionServiceBean implements SuggestionService {
public void validateSetup(Long serverId) {
emoteService.throwIfEmoteDoesNotExist(SUGGESTION_YES_EMOTE, serverId);
emoteService.throwIfEmoteDoesNotExist(SUGGESTION_NO_EMOTE, serverId);
postTargetService.throwIfPostTargetIsNotDefined(SUGGESTION_YES_EMOTE, serverId);
postTargetService.throwIfPostTargetIsNotDefined(SUGGESTIONS_TARGET, serverId);
}
}

View File

@@ -1,11 +1,13 @@
package dev.sheldan.abstracto.utility.service.management;
import dev.sheldan.abstracto.core.command.service.UserService;
import dev.sheldan.abstracto.core.models.AChannel;
import dev.sheldan.abstracto.core.models.AServer;
import dev.sheldan.abstracto.core.models.AUserInAServer;
import dev.sheldan.abstracto.core.models.cache.CachedMessage;
import dev.sheldan.abstracto.core.models.database.AChannel;
import dev.sheldan.abstracto.core.models.database.AServer;
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import dev.sheldan.abstracto.core.models.converter.UserInServerConverter;
import dev.sheldan.abstracto.core.models.dto.UserInServerDto;
import dev.sheldan.abstracto.core.service.MessageService;
import dev.sheldan.abstracto.core.service.management.UserManagementService;
import dev.sheldan.abstracto.utility.models.database.EmbeddedMessage;
import dev.sheldan.abstracto.utility.repository.EmbeddedMessageRepository;
import lombok.extern.slf4j.Slf4j;
@@ -18,25 +20,29 @@ import java.util.Optional;
@Component
@Slf4j
public class MessageEmbedPostManagementServiceBean implements MessageEmbedPostManagementService {
public class MessageEmbedPostManagementServiceBean {
@Autowired
private EmbeddedMessageRepository embeddedMessageRepository;
@Autowired
private UserManagementService userManagementService;
private UserService userManagementService;
@Autowired
private MessageService messageService;
@Override
@Autowired
private UserInServerConverter userInServerConverter;
@Transactional
public void createMessageEmbed(CachedMessage embeddedMessage, Message messageContainingEmbed, AUserInAServer cause) {
public void createMessageEmbed(CachedMessage embeddedMessage, Message messageContainingEmbed, UserInServerDto cause) {
AServer embeddedServer = AServer.builder().id(embeddedMessage.getServerId()).build();
AChannel embeddedChannel = AChannel.builder().id(embeddedMessage.getChannelId()).build();
AServer embeddingServer = AServer.builder().id(messageContainingEmbed.getGuild().getIdLong()).build();
AChannel embeddingChannel = AChannel.builder().id(messageContainingEmbed.getTextChannel().getIdLong()).build();
AUserInAServer embeddedAuthor = userManagementService.loadUser(embeddedMessage.getServerId(), embeddedMessage.getAuthorId());
UserInServerDto authorDto = userManagementService.loadUser(embeddedMessage.getServerId(), embeddedMessage.getAuthorId());
AUserInAServer author = userInServerConverter.fromDto(authorDto);
AUserInAServer auserCause = userInServerConverter.fromDto(cause);
EmbeddedMessage messageEmbedPost = EmbeddedMessage
.builder()
.embeddedMessageId(embeddedMessage.getMessageId())
@@ -45,24 +51,21 @@ public class MessageEmbedPostManagementServiceBean implements MessageEmbedPostMa
.embeddingServer(embeddingServer)
.embeddingChannel(embeddingChannel)
.embeddingMessageId(messageContainingEmbed.getIdLong())
.embeddedUser(embeddedAuthor)
.embeddingUser(cause)
.embeddedUser(author)
.embeddingUser(auserCause)
.build();
embeddedMessageRepository.save(messageEmbedPost);
}
@Override
public Optional<EmbeddedMessage> findEmbeddedPostByMessageId(Long messageId) {
return Optional.ofNullable(embeddedMessageRepository.findByEmbeddingMessageId(messageId));
}
@Override
public void deleteEmbeddedMessage(EmbeddedMessage embeddedMessage) {
embeddedMessageRepository.delete(embeddedMessage);
}
@Override
@Transactional
public void deleteEmbeddedMessageTransactional(EmbeddedMessage embeddedMessage) {
this.deleteEmbeddedMessage(embeddedMessage);

View File

@@ -1,7 +1,12 @@
package dev.sheldan.abstracto.utility.service.management;
import dev.sheldan.abstracto.core.models.AChannel;
import dev.sheldan.abstracto.core.models.AServerAChannelAUser;
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import dev.sheldan.abstracto.core.models.converter.ChannelConverter;
import dev.sheldan.abstracto.core.models.converter.ServerConverter;
import dev.sheldan.abstracto.core.models.converter.UserConverter;
import dev.sheldan.abstracto.core.models.converter.UserInServerConverter;
import dev.sheldan.abstracto.core.models.dto.UserInServerDto;
import dev.sheldan.abstracto.utility.models.database.Reminder;
import dev.sheldan.abstracto.utility.repository.ReminderRepository;
import org.springframework.beans.factory.annotation.Autowired;
@@ -11,17 +16,25 @@ import java.time.Instant;
import java.util.List;
@Component
public class ReminderManagementServiceBean implements ReminderManagementService {
public class ReminderManagementServiceBean {
@Autowired
private ReminderRepository reminderRepository;
@Override
@Autowired
private ChannelConverter channelConverter;
@Autowired
private ServerConverter serverConverter;
@Autowired
private UserInServerConverter userConverter;
public Reminder createReminder(AServerAChannelAUser userToBeReminded, String text, Instant timeToBeRemindedAt, Long messageId) {
Reminder reminder = Reminder.builder()
.channel(userToBeReminded.getChannel())
.server(userToBeReminded.getGuild())
.remindedUser(userToBeReminded.getAUserInAServer())
.channel(channelConverter.fromDto(userToBeReminded.getChannel()))
.server(serverConverter.fromDto(userToBeReminded.getGuild()))
.remindedUser(userConverter.fromDto(userToBeReminded.getAUserInAServer()))
.reminded(false)
.text(text)
.reminderDate(Instant.now())
@@ -33,20 +46,17 @@ public class ReminderManagementServiceBean implements ReminderManagementService
return reminder;
}
@Override
public Reminder loadReminder(Long reminderId) {
return reminderRepository.getOne(reminderId);
}
@Override
public void setReminded(Reminder reminder) {
reminder.setReminded(true);
reminderRepository.save(reminder);
}
@Override
public List<Reminder> getActiveRemindersForUser(AUserInAServer aUserInAServer) {
return reminderRepository.getByRemindedUserAndRemindedFalse(aUserInAServer);
public List<Reminder> getActiveRemindersForUser(UserInServerDto aUserInAServer) {
return reminderRepository.getByRemindedUserAndRemindedFalse(userConverter.fromDto(aUserInAServer));
}
}

View File

@@ -1,8 +1,11 @@
package dev.sheldan.abstracto.utility.service.management;
import dev.sheldan.abstracto.core.models.AServerAChannelMessage;
import dev.sheldan.abstracto.core.models.AUserInAServer;
import dev.sheldan.abstracto.core.models.cache.CachedMessage;
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import dev.sheldan.abstracto.core.models.converter.ChannelConverter;
import dev.sheldan.abstracto.core.models.converter.UserInServerConverter;
import dev.sheldan.abstracto.core.models.dto.UserInServerDto;
import dev.sheldan.abstracto.utility.models.database.StarboardPost;
import dev.sheldan.abstracto.utility.repository.StarboardPostRepository;
import dev.sheldan.abstracto.utility.repository.converter.StarStatsUserConverter;
@@ -16,7 +19,7 @@ import java.util.List;
import java.util.Optional;
@Component
public class StarboardPostManagementServiceBean implements StarboardPostManagementService {
public class StarboardPostManagementServiceBean {
@Autowired
private StarboardPostRepository repository;
@@ -24,27 +27,32 @@ public class StarboardPostManagementServiceBean implements StarboardPostManageme
@Autowired
private StarStatsUserConverter converter;
@Override
public StarboardPost createStarboardPost(CachedMessage starredMessage, AUserInAServer starredUser, AUserInAServer starringUser, AServerAChannelMessage starboardPost) {
@Autowired
private UserInServerConverter userInServerConverter;
@Autowired
private ChannelConverter channelConverter;
public StarboardPost createStarboardPost(CachedMessage starredMessage, UserInServerDto starredUser, UserInServerDto starringUser, AServerAChannelMessage starboardPost) {
AUserInAServer author = userInServerConverter.fromDto(starredUser);
StarboardPost post = StarboardPost
.builder()
.author(starredUser.getUserReference())
.author(author.getUserReference())
.postMessageId(starredMessage.getMessageId())
.starboardMessageId(starboardPost.getMessageId())
.starboardChannel(starboardPost.getChannel())
.starboardChannel(channelConverter.fromDto(starboardPost.getChannel()))
.starredDate(Instant.now())
.build();
repository.save(post);
return post;
}
@Override
public void setStarboardPostMessageId(StarboardPost post, Long messageId) {
post.setStarboardMessageId(messageId);
repository.save(post);
}
@Override
public List<StarboardPost> retrieveTopPosts(Long serverId, Integer count) {
List<StarboardPost> posts = retrieveAllPosts(serverId);
posts.sort(Comparator.comparingInt(o -> o.getReactions().size()));
@@ -52,39 +60,32 @@ public class StarboardPostManagementServiceBean implements StarboardPostManageme
return posts.subList(0, Math.min(count, posts.size()));
}
@Override
public List<StarboardPost> retrieveAllPosts(Long serverId) {
return repository.findByStarboardChannelServerId(serverId);
}
@Override
public Integer getPostCount(Long serverId) {
return retrieveAllPosts(serverId).size();
}
@Override
public Optional<StarboardPost> findByMessageId(Long messageId) {
return Optional.ofNullable(repository.findByPostMessageId(messageId));
}
@Override
public Optional<StarboardPost> findByStarboardPostId(Long postId) {
return Optional.ofNullable(repository.findByStarboardMessageId(postId));
}
@Override
public void setStarboardPostIgnored(Long messageId, Boolean newValue) {
StarboardPost post = repository.findByStarboardMessageId(messageId);
post.setIgnored(newValue);
repository.save(post);
}
@Override
public boolean isStarboardPost(Long messageId) {
return repository.findByStarboardMessageId(messageId) != null;
}
@Override
public void removePost(StarboardPost starboardPost) {
repository.deleteById(starboardPost.getId());
}

View File

@@ -1,6 +1,8 @@
package dev.sheldan.abstracto.utility.service.management;
import dev.sheldan.abstracto.core.models.database.AUser;
import dev.sheldan.abstracto.core.models.AUser;
import dev.sheldan.abstracto.core.models.converter.UserConverter;
import dev.sheldan.abstracto.core.models.dto.UserDto;
import dev.sheldan.abstracto.utility.models.database.StarboardPost;
import dev.sheldan.abstracto.utility.models.database.StarboardPostReaction;
import dev.sheldan.abstracto.utility.models.template.commands.starboard.StarStatsUser;
@@ -13,7 +15,7 @@ import org.springframework.stereotype.Component;
import java.util.List;
@Component
public class StarboardPostReactorManagementServiceBean implements StarboardPostReactorManagementService {
public class StarboardPostReactorManagementServiceBean {
@Autowired
private StarboardPostReactionRepository repository;
@@ -21,38 +23,37 @@ public class StarboardPostReactorManagementServiceBean implements StarboardPostR
@Autowired
private StarStatsUserConverter converter;
@Override
public void addReactor(StarboardPost post, AUser user) {
@Autowired
private UserConverter userConverter;
public void addReactor(StarboardPost post, UserDto user) {
AUser aUser = userConverter.toUser(user);
StarboardPostReaction reactor = StarboardPostReaction
.builder()
.starboardPost(post)
.reactor(user)
.reactor(aUser)
.build();
repository.save(reactor);
}
@Override
public void removeReactor(StarboardPost post, AUser user) {
repository.deleteByReactorAndStarboardPost(user, post);
public void removeReactor(StarboardPost post, UserDto user) {
AUser aUser = userConverter.toUser(user);
repository.deleteByReactorAndStarboardPost(aUser, post);
}
@Override
public void removeReactors(StarboardPost post) {
repository.deleteByStarboardPost(post);
}
@Override
public Integer getStarCount(Long serverId) {
return repository.getReactionCountByServer(serverId);
}
@Override
public List<StarStatsUser> retrieveTopStarGiver(Long serverId, Integer count) {
List<StarStatsUserResult> starGivers = repository.findTopStarGiverInServer(serverId, count);
return converter.convertToStarStatsUser(starGivers, serverId);
}
@Override
public List<StarStatsUser> retrieveTopStarReceiver(Long serverId, Integer count) {
List<StarStatsUserResult> starReceivers = repository.retrieveTopStarReceiverInServer(serverId, count);
return converter.convertToStarStatsUser(starReceivers, serverId);

View File

@@ -1,11 +1,14 @@
package dev.sheldan.abstracto.utility.service.management;
import dev.sheldan.abstracto.core.service.management.ChannelManagementService;
import dev.sheldan.abstracto.core.service.management.ServerManagementService;
import dev.sheldan.abstracto.core.service.management.UserManagementService;
import dev.sheldan.abstracto.core.models.database.AChannel;
import dev.sheldan.abstracto.core.models.database.AServer;
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import dev.sheldan.abstracto.core.command.service.UserService;
import dev.sheldan.abstracto.core.models.AChannel;
import dev.sheldan.abstracto.core.models.AServer;
import dev.sheldan.abstracto.core.models.AUserInAServer;
import dev.sheldan.abstracto.core.models.converter.ChannelConverter;
import dev.sheldan.abstracto.core.models.converter.UserConverter;
import dev.sheldan.abstracto.core.models.converter.UserInServerConverter;
import dev.sheldan.abstracto.core.models.dto.UserInServerDto;
import dev.sheldan.abstracto.core.service.ChannelService;
import dev.sheldan.abstracto.utility.models.database.Suggestion;
import dev.sheldan.abstracto.utility.models.SuggestionState;
import dev.sheldan.abstracto.utility.repository.SuggestionRepository;
@@ -17,55 +20,55 @@ import org.springframework.stereotype.Component;
import java.time.Instant;
@Component
public class SuggestionManagementServiceBean implements SuggestionManagementService {
public class SuggestionManagementServiceBean {
@Autowired
private SuggestionRepository suggestionRepository;
@Autowired
private ChannelManagementService channelManagementService;
private UserInServerConverter userInServerConverter;
@Autowired
private UserManagementService userManagementService;
private UserConverter userConverter;
@Autowired
private ServerManagementService serverManagementService;
private UserService userService;
@Autowired
private ChannelService channelService;
@Autowired
private ChannelConverter channelConverter;
@Override
public Suggestion createSuggestion(Member suggester, String text) {
AUserInAServer user = userManagementService.loadUser(suggester);
return this.createSuggestion(user, text);
UserInServerDto userDto = userService.loadUser(suggester);
return this.createSuggestion(userDto, text);
}
@Override
public Suggestion createSuggestion(AUserInAServer suggester, String text) {
public Suggestion createSuggestion(UserInServerDto suggester, String text) {
AUserInAServer aUserInAServer = userInServerConverter.fromDto(suggester);
Suggestion suggestion = Suggestion
.builder()
.state(SuggestionState.NEW)
.suggester(suggester)
.suggester(aUserInAServer)
.suggestionDate(Instant.now())
.build();
suggestionRepository.save(suggestion);
return suggestion;
}
@Override
public Suggestion getSuggestion(Long suggestionId) {
return suggestionRepository.getOne(suggestionId);
}
@Override
public void setPostedMessage(Suggestion suggestion, Message message) {
suggestion.setMessageId(message.getIdLong());
AChannel channel = channelManagementService.loadChannel(message.getTextChannel().getIdLong());
suggestion.setChannel(channel);
AServer server = serverManagementService.loadOrCreate(message.getGuild().getIdLong());
suggestion.setServer(server);
suggestion.setChannel(AChannel.builder().id(message.getTextChannel().getIdLong()).build());
suggestion.setServer(AServer.builder().id(message.getGuild().getIdLong()).build());
suggestionRepository.save(suggestion);
}
@Override
public void setSuggestionState(Suggestion suggestion, SuggestionState newState) {
suggestion.setState(newState);
suggestionRepository.save(suggestion);

View File

@@ -1,8 +1,8 @@
package dev.sheldan.abstracto.utility.models.database;
import dev.sheldan.abstracto.core.models.database.AChannel;
import dev.sheldan.abstracto.core.models.database.AServer;
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import dev.sheldan.abstracto.core.models.AChannel;
import dev.sheldan.abstracto.core.models.AServer;
import dev.sheldan.abstracto.core.models.AUserInAServer;
import lombok.*;
import javax.persistence.*;

View File

@@ -1,8 +1,8 @@
package dev.sheldan.abstracto.utility.models.database;
import dev.sheldan.abstracto.core.models.database.AChannel;
import dev.sheldan.abstracto.core.models.database.AServer;
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import dev.sheldan.abstracto.core.models.AChannel;
import dev.sheldan.abstracto.core.models.AServer;
import dev.sheldan.abstracto.core.models.AUserInAServer;
import lombok.*;
import javax.persistence.*;

View File

@@ -1,7 +1,7 @@
package dev.sheldan.abstracto.utility.models.database;
import dev.sheldan.abstracto.core.models.database.AChannel;
import dev.sheldan.abstracto.core.models.database.AUser;
import dev.sheldan.abstracto.core.models.AChannel;
import dev.sheldan.abstracto.core.models.AUser;
import lombok.*;
import javax.persistence.*;

View File

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

View File

@@ -1,8 +1,8 @@
package dev.sheldan.abstracto.utility.models.database;
import dev.sheldan.abstracto.core.models.database.AChannel;
import dev.sheldan.abstracto.core.models.database.AServer;
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import dev.sheldan.abstracto.core.models.AChannel;
import dev.sheldan.abstracto.core.models.AServer;
import dev.sheldan.abstracto.core.models.AUserInAServer;
import dev.sheldan.abstracto.utility.models.SuggestionState;
import lombok.*;

View File

@@ -1,8 +1,6 @@
package dev.sheldan.abstracto.utility.models.template.commands.starboard;
import dev.sheldan.abstracto.core.models.database.AChannel;
import dev.sheldan.abstracto.core.utils.MessageUtils;
import dev.sheldan.abstracto.utility.models.database.StarboardPost;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
@@ -20,14 +18,4 @@ public class StarStatsPost {
return MessageUtils.buildMessageUrl(serverId ,channelId, messageId);
}
public static StarStatsPost fromStarboardPost(StarboardPost starboardPost) {
AChannel channel = starboardPost.getStarboardChannel();
return StarStatsPost
.builder()
.serverId(channel.getServer().getId())
.channelId(channel.getId())
.messageId(starboardPost.getPostMessageId())
.starCount(starboardPost.getReactions().size())
.build();
}
}
}

View File

@@ -1,6 +1,6 @@
package dev.sheldan.abstracto.utility.models.template.commands.starboard;
import dev.sheldan.abstracto.core.models.database.AUser;
import dev.sheldan.abstracto.core.models.dto.UserDto;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
@@ -11,7 +11,7 @@ import net.dv8tion.jda.api.entities.Member;
@Setter
@Builder
public class StarStatsUser {
private AUser user;
private UserDto user;
private Member member;
private Integer starCount;

View File

@@ -1,9 +1,9 @@
package dev.sheldan.abstracto.utility.models.template.commands.starboard;
import dev.sheldan.abstracto.core.models.dto.ChannelDto;
import dev.sheldan.abstracto.core.models.dto.UserDto;
import dev.sheldan.abstracto.core.models.cache.CachedMessage;
import dev.sheldan.abstracto.core.models.context.ServerContext;
import dev.sheldan.abstracto.core.models.database.AChannel;
import dev.sheldan.abstracto.core.models.database.AUser;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.SuperBuilder;
@@ -16,8 +16,8 @@ import net.dv8tion.jda.api.entities.TextChannel;
public class StarboardPostModel extends ServerContext {
private Member author;
private TextChannel channel;
private AUser user;
private AChannel aChannel;
private UserDto user;
private ChannelDto aChannel;
private CachedMessage message;
private Integer starCount;
private String starLevelEmote;

View File

@@ -1,7 +1,7 @@
package dev.sheldan.abstracto.utility.service;
import dev.sheldan.abstracto.core.models.dto.UserInServerDto;
import dev.sheldan.abstracto.core.models.cache.CachedMessage;
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import dev.sheldan.abstracto.utility.models.MessageEmbedLink;
import net.dv8tion.jda.api.entities.Message;
import net.dv8tion.jda.api.entities.TextChannel;
@@ -10,6 +10,6 @@ import java.util.List;
public interface MessageEmbedService {
List<MessageEmbedLink> getLinksInMessage(String message);
void embedLinks(List<MessageEmbedLink> linksToEmbed, TextChannel target, AUserInAServer reason, Message embeddingMessage);
void embedLink(CachedMessage cachedMessage, TextChannel target, AUserInAServer cause, Message embeddingMessage);
void embedLinks(List<MessageEmbedLink> linksToEmbed, TextChannel target, UserInServerDto reason, Message embeddingMessage);
void embedLink(CachedMessage cachedMessage, TextChannel target, UserInServerDto cause, Message embeddingMessage);
}

View File

@@ -1,11 +1,11 @@
package dev.sheldan.abstracto.utility.service;
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import dev.sheldan.abstracto.core.models.dto.UserInServerDto;
import dev.sheldan.abstracto.utility.models.template.commands.reminder.ReminderModel;
import java.time.Duration;
public interface ReminderService {
void createReminderInForUser(AUserInAServer user, String remindText, Duration remindIn, ReminderModel reminderModel);
void createReminderInForUser(UserInServerDto user, String remindText, Duration remindIn, ReminderModel reminderModel);
void executeReminder(Long reminderId);
}

View File

@@ -1,16 +1,16 @@
package dev.sheldan.abstracto.utility.service;
import dev.sheldan.abstracto.core.models.dto.UserDto;
import dev.sheldan.abstracto.core.models.dto.UserInServerDto;
import dev.sheldan.abstracto.core.models.cache.CachedMessage;
import dev.sheldan.abstracto.core.models.database.AUser;
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import dev.sheldan.abstracto.utility.models.database.StarboardPost;
import dev.sheldan.abstracto.utility.models.template.commands.starboard.StarStatsModel;
import java.util.List;
public interface StarboardService {
void createStarboardPost(CachedMessage message, List<AUser> userExceptAuthor, AUserInAServer userReacting, AUserInAServer starredUser);
void updateStarboardPost(StarboardPost post, CachedMessage message, List<AUser> userExceptAuthor);
void createStarboardPost(CachedMessage message, List<UserDto> userExceptAuthor, UserInServerDto userReacting, UserInServerDto starredUser);
void updateStarboardPost(StarboardPost post, CachedMessage message, List<UserDto> userExceptAuthor);
void removeStarboardPost(StarboardPost message);
StarStatsModel retrieveStarStats(Long serverId);
}

View File

@@ -1,15 +0,0 @@
package dev.sheldan.abstracto.utility.service.management;
import dev.sheldan.abstracto.core.models.cache.CachedMessage;
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import dev.sheldan.abstracto.utility.models.database.EmbeddedMessage;
import net.dv8tion.jda.api.entities.Message;
import java.util.Optional;
public interface MessageEmbedPostManagementService {
void createMessageEmbed(CachedMessage embeddedMessage, Message messageContainingEmbed, AUserInAServer cause);
Optional<EmbeddedMessage> findEmbeddedPostByMessageId(Long messageId);
void deleteEmbeddedMessage(EmbeddedMessage embeddedMessage);
void deleteEmbeddedMessageTransactional(EmbeddedMessage embeddedMessage);
}

View File

@@ -1,15 +0,0 @@
package dev.sheldan.abstracto.utility.service.management;
import dev.sheldan.abstracto.core.models.AServerAChannelAUser;
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import dev.sheldan.abstracto.utility.models.database.Reminder;
import java.time.Instant;
import java.util.List;
public interface ReminderManagementService {
Reminder createReminder(AServerAChannelAUser userToBeReminded, String text, Instant timeToBeRemindedAt, Long messageId);
Reminder loadReminder(Long reminderId);
void setReminded(Reminder reminder);
List<Reminder> getActiveRemindersForUser(AUserInAServer aUserInAServer);
}

View File

@@ -1,22 +0,0 @@
package dev.sheldan.abstracto.utility.service.management;
import dev.sheldan.abstracto.core.models.AServerAChannelMessage;
import dev.sheldan.abstracto.core.models.cache.CachedMessage;
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import dev.sheldan.abstracto.utility.models.database.StarboardPost;
import java.util.List;
import java.util.Optional;
public interface StarboardPostManagementService {
StarboardPost createStarboardPost(CachedMessage starredMessage, AUserInAServer starredUser, AUserInAServer starringUser, AServerAChannelMessage starboardPost);
void setStarboardPostMessageId(StarboardPost post, Long messageId);
List<StarboardPost> retrieveTopPosts(Long serverId, Integer count);
List<StarboardPost> retrieveAllPosts(Long serverId);
Integer getPostCount(Long serverId);
Optional<StarboardPost> findByMessageId(Long messageId);
Optional<StarboardPost> findByStarboardPostId(Long postId);
void setStarboardPostIgnored(Long starboardPostId, Boolean newValue);
boolean isStarboardPost(Long starboardPostId);
void removePost(StarboardPost starboardPost);
}

View File

@@ -1,16 +0,0 @@
package dev.sheldan.abstracto.utility.service.management;
import dev.sheldan.abstracto.core.models.database.AUser;
import dev.sheldan.abstracto.utility.models.database.StarboardPost;
import dev.sheldan.abstracto.utility.models.template.commands.starboard.StarStatsUser;
import java.util.List;
public interface StarboardPostReactorManagementService {
void addReactor(StarboardPost post, AUser user);
void removeReactor(StarboardPost post, AUser user);
void removeReactors(StarboardPost post);
Integer getStarCount(Long serverId);
List<StarStatsUser> retrieveTopStarGiver(Long serverId, Integer count);
List<StarStatsUser> retrieveTopStarReceiver(Long serverId, Integer count);
}

View File

@@ -1,15 +0,0 @@
package dev.sheldan.abstracto.utility.service.management;
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import dev.sheldan.abstracto.utility.models.database.Suggestion;
import dev.sheldan.abstracto.utility.models.SuggestionState;
import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.Message;
public interface SuggestionManagementService {
Suggestion createSuggestion(Member suggester, String text);
Suggestion createSuggestion(AUserInAServer suggester, String text);
Suggestion getSuggestion(Long suggestionId);
void setPostedMessage(Suggestion suggestion, Message message);
void setSuggestionState(Suggestion suggestion, SuggestionState newState);
}

View File

@@ -0,0 +1,32 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>dev.sheldan.abstracto.core</groupId>
<artifactId>core</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<packaging>jar</packaging>
<artifactId>core-db-models</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>net.dv8tion</groupId>
<artifactId>JDA</artifactId>
<exclusions>
<exclusion>
<groupId>club.minnced</groupId>
<artifactId>opus-java</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
</project>

View File

@@ -1,4 +1,4 @@
package dev.sheldan.abstracto.core.models.database;
package dev.sheldan.abstracto.core.models;
import dev.sheldan.abstracto.core.models.SnowFlake;
import lombok.*;
@@ -38,13 +38,5 @@ public class AChannel implements SnowFlake {
@Column
private Boolean deleted;
public static AChannelType getAChannelType(ChannelType type) {
switch (type) {
case TEXT: return AChannelType.TEXT;
case PRIVATE: return AChannelType.DM;
case VOICE: return AChannelType.VOICE;
case CATEGORY: return AChannelType.CATEGORY;
default: return AChannelType.UNKOWN;
}
}
}

View File

@@ -1,10 +1,9 @@
package dev.sheldan.abstracto.core.models.database;
package dev.sheldan.abstracto.core.models;
import lombok.*;
import javax.persistence.*;
import java.util.List;
import java.util.Set;
@Entity
@Table(name="channelGroup")

View File

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

View File

@@ -1,4 +1,4 @@
package dev.sheldan.abstracto.core.models.database;
package dev.sheldan.abstracto.core.models;
public enum AChannelType {
TEXT, DM, VOICE, NEWS, CATEGORY, UNKOWN

View File

@@ -1,4 +1,4 @@
package dev.sheldan.abstracto.core.models.database;
package dev.sheldan.abstracto.core.models;
import dev.sheldan.abstracto.core.models.SnowFlake;
import lombok.*;

View File

@@ -1,4 +1,4 @@
package dev.sheldan.abstracto.core.command.models.database;
package dev.sheldan.abstracto.core.models;
import lombok.AllArgsConstructor;
import lombok.Builder;

View File

@@ -1,4 +1,4 @@
package dev.sheldan.abstracto.core.models.database;
package dev.sheldan.abstracto.core.models;
import dev.sheldan.abstracto.core.models.SnowFlake;
import lombok.*;

View File

@@ -1,4 +1,4 @@
package dev.sheldan.abstracto.core.models.database;
package dev.sheldan.abstracto.core.models;
import dev.sheldan.abstracto.core.models.SnowFlake;
import lombok.*;

View File

@@ -1,4 +1,4 @@
package dev.sheldan.abstracto.core.models.database;
package dev.sheldan.abstracto.core.models;
import lombok.*;
@@ -11,7 +11,7 @@ import java.util.List;
@AllArgsConstructor
@NoArgsConstructor
@Getter
public class AUser {
public class AUser implements SnowFlake {
@Id
private Long id;

View File

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

View File

@@ -0,0 +1,46 @@
package dev.sheldan.abstracto.core.models.converter;
import dev.sheldan.abstracto.core.models.AChannel;
import dev.sheldan.abstracto.core.models.AServer;
import dev.sheldan.abstracto.core.models.dto.ChannelDto;
import dev.sheldan.abstracto.core.models.dto.ServerDto;
import net.dv8tion.jda.api.entities.TextChannel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class ChannelConverter {
@Autowired
private ServerConverter serverConverter;
public ChannelDto fromChannel(AChannel channel) {
ServerDto server = ServerDto.builder().id(channel.getServer().getId()).build();
return ChannelDto
.builder()
.id(channel.getId())
.deleted(channel.getDeleted())
.server(server)
.build();
}
public ChannelDto fromTextChannel(TextChannel channel) {
return ChannelDto
.builder()
.id(channel.getIdLong())
.deleted(false)
.server(ServerDto.builder().id(channel.getGuild().getIdLong()).build())
.build();
}
public AChannel fromDto(ChannelDto channelDto) {
AServer server = AServer.builder().id(channelDto.getServer().getId()).build();
return AChannel
.builder()
.deleted(channelDto.getDeleted())
.server(server)
.id(channelDto.getId())
.build();
}
}

View File

@@ -0,0 +1,36 @@
package dev.sheldan.abstracto.core.models.converter;
import dev.sheldan.abstracto.core.models.AChannelGroup;
import dev.sheldan.abstracto.core.models.AServer;
import dev.sheldan.abstracto.core.models.dto.ChannelGroupDto;
import dev.sheldan.abstracto.core.models.dto.ServerDto;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class ChannelGroupConverter {
@Autowired
private ChannelConverter channelConverter;
@Autowired
private ServerConverter serverModelConverter;
public ChannelGroupDto fromChannelGroup(AChannelGroup channelGroup) {
ServerDto server = serverModelConverter.convertServer(channelGroup.getServer());
return ChannelGroupDto
.builder()
.groupName(channelGroup.getGroupName())
.server(server)
.build();
}
public AChannelGroup fromChannelGroup(ChannelGroupDto channelGroup) {
AServer server = serverModelConverter.fromDto(channelGroup.getServer());
return AChannelGroup
.builder()
.groupName(channelGroup.getGroupName())
.server(server)
.build();
}
}

View File

@@ -0,0 +1,26 @@
package dev.sheldan.abstracto.core.models.converter;
import dev.sheldan.abstracto.core.models.ACommand;
import dev.sheldan.abstracto.core.models.dto.CommandDto;
import org.springframework.stereotype.Component;
@Component
public class CommandConverter {
public CommandDto fromCommand(ACommand command) {
return CommandDto
.builder()
.name(command.getName())
.id(command.getId())
.build();
}
public ACommand toCommand(CommandDto command) {
return ACommand
.builder()
.name(command.getName())
.id(command.getId())
.build();
}
}

View File

@@ -0,0 +1,26 @@
package dev.sheldan.abstracto.core.models.converter;
import dev.sheldan.abstracto.core.models.AEmote;
import dev.sheldan.abstracto.core.models.dto.EmoteDto;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class EmoteConverter {
@Autowired
private ServerConverter serverConverter;
public EmoteDto fromEmote(AEmote emote) {
return EmoteDto
.builder()
.animated(emote.getAnimated())
.custom(emote.getCustom())
.emoteId(emote.getEmoteId())
.emoteKey(emote.getEmoteKey())
.name(emote.getName())
.Id(emote.getId())
.server(serverConverter.convertServer(emote.getServerRef()))
.build();
}
}

View File

@@ -0,0 +1,25 @@
package dev.sheldan.abstracto.core.models.converter;
import dev.sheldan.abstracto.core.models.AModule;
import dev.sheldan.abstracto.core.models.dto.CommandDto;
import dev.sheldan.abstracto.core.models.dto.ModuleDto;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
@Component
public class ModuleConverter {
@Autowired
private CommandConverter commandConverter;
public ModuleDto fromModule(AModule module) {
List<CommandDto> commands = new ArrayList<>();
module.getCommands().forEach(command -> {
commands.add(commandConverter.fromCommand(command));
});
return ModuleDto.builder().name(module.getName()).id(module.getId()).commands(commands).build();
}
}

View File

@@ -0,0 +1,30 @@
package dev.sheldan.abstracto.core.models.converter;
import dev.sheldan.abstracto.core.models.PostTarget;
import dev.sheldan.abstracto.core.models.dto.ChannelDto;
import dev.sheldan.abstracto.core.models.dto.PostTargetDto;
import dev.sheldan.abstracto.core.models.dto.ServerDto;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class PostTargetConverter {
@Autowired
private ChannelConverter channelConverter;
@Autowired
private ServerConverter serverConverter;
public PostTargetDto fromPostTarget(PostTarget postTarget) {
ServerDto convertedServer = serverConverter.convertServer(postTarget.getServerReference());
ChannelDto convertedChannel = channelConverter.fromChannel(postTarget.getChannelReference());
return PostTargetDto
.builder()
.id(postTarget.getId())
.name(postTarget.getName())
.serverReference(convertedServer)
.channelReference(convertedChannel)
.build();
}
}

View File

@@ -0,0 +1,24 @@
package dev.sheldan.abstracto.core.models.converter;
import dev.sheldan.abstracto.core.models.ARole;
import dev.sheldan.abstracto.core.models.dto.RoleDto;
import org.springframework.stereotype.Component;
@Component
public class RoleConverter {
public RoleDto fromARole(ARole role) {
return RoleDto
.builder()
.id(role.getId())
.name(role.getName())
.build();
}
public ARole fromDto(RoleDto role) {
return ARole
.builder()
.id(role.getId())
.name(role.getName())
.build();
}
}

View File

@@ -0,0 +1,61 @@
package dev.sheldan.abstracto.core.models.converter;
import dev.sheldan.abstracto.core.models.AChannel;
import dev.sheldan.abstracto.core.models.AServer;
import dev.sheldan.abstracto.core.models.AUserInAServer;
import dev.sheldan.abstracto.core.models.dto.ChannelDto;
import dev.sheldan.abstracto.core.models.dto.ServerDto;
import dev.sheldan.abstracto.core.models.dto.UserInServerDto;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
@Component
public class ServerConverter {
@Autowired
private ChannelConverter channelConverter;
@Autowired
private UserInServerConverter userInServerConverter;
public ServerDto convertServer(AServer server) {
List<ChannelDto> channels = new ArrayList<>();
server.getChannels().forEach(channel -> {
channels.add(channelConverter.fromChannel(channel));
});
List<UserInServerDto> users = new ArrayList<>();
server.getUsers().forEach(aUserInAServer -> {
users.add(userInServerConverter.fromAUserInAServer(aUserInAServer));
});
return ServerDto
.builder()
.id(server.getId())
.channels(channels)
.users(users)
.name(server.getName())
.build();
}
public AServer fromDto(ServerDto serverDto) {
List<AChannel> channels = new ArrayList<>();
serverDto.getChannels().forEach(channelDto -> {
channels.add(channelConverter.fromDto(channelDto));
});
List<AUserInAServer> users = new ArrayList<>();
serverDto.getUsers().forEach(userInServerDto -> {
users.add(userInServerConverter.fromDto(userInServerDto));
});
return AServer
.builder()
.name(serverDto.getName())
.id(serverDto.getId())
.users(users)
.channels(channels)
.build();
}
}

View File

@@ -0,0 +1,22 @@
package dev.sheldan.abstracto.core.models.converter;
import dev.sheldan.abstracto.core.models.AUser;
import dev.sheldan.abstracto.core.models.dto.UserDto;
import net.dv8tion.jda.api.entities.Member;
import org.springframework.stereotype.Component;
@Component
public class UserConverter {
public UserDto fromAUser(AUser user) {
return UserDto.builder().id(user.getId()).build();
}
public UserDto fromMember(Member member) {
return UserDto.builder().id(member.getIdLong()).build();
}
public AUser toUser(UserDto userDto) {
return AUser.builder().id(userDto.getId()).build();
}
}

View File

@@ -0,0 +1,42 @@
package dev.sheldan.abstracto.core.models.converter;
import dev.sheldan.abstracto.core.models.AServer;
import dev.sheldan.abstracto.core.models.AUser;
import dev.sheldan.abstracto.core.models.AUserInAServer;
import dev.sheldan.abstracto.core.models.dto.ServerDto;
import dev.sheldan.abstracto.core.models.dto.UserDto;
import dev.sheldan.abstracto.core.models.dto.UserInServerDto;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class UserInServerConverter {
@Autowired
private ServerConverter serverConverter;
@Autowired
private UserConverter userConverter;
public UserInServerDto fromAUserInAServer(AUserInAServer userInAServer) {
ServerDto server = ServerDto.builder().id(userInAServer.getServerReference().getId()).build();
UserDto user = userConverter.fromAUser(userInAServer.getUserReference());
return UserInServerDto
.builder()
.server(server)
.user(user)
.userInServerId(userInAServer.getUserInServerId())
.build();
}
public AUserInAServer fromDto(UserInServerDto userInServerDto) {
AUser user = userConverter.toUser(userInServerDto.getUser());
AServer server = AServer.builder().id(userInServerDto.getServer().getId()).build();
return AUserInAServer
.builder()
.userInServerId(userInServerDto.getUserInServerId())
.serverReference(server)
.userReference(user)
.build();
}
}

View File

@@ -0,0 +1,15 @@
package dev.sheldan.abstracto.core.models.dto;
import dev.sheldan.abstracto.core.models.SnowFlake;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
@Builder
public class ChannelDto implements SnowFlake {
public Long id;
private Boolean deleted;
private ServerDto server;
}

View File

@@ -0,0 +1,16 @@
package dev.sheldan.abstracto.core.models.dto;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
@Builder
public class ChannelGroupCommandDto {
private Long commandInGroupId;
private CommandDto command;
private ChannelGroupDto group;
private Boolean enabled;
}

View File

@@ -0,0 +1,21 @@
package dev.sheldan.abstracto.core.models.dto;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
import java.util.List;
@Getter
@Setter
@Builder
public class ChannelGroupDto {
private Long id;
private String groupName;
private ServerDto server;
private List<ChannelDto> channels;
}

View File

@@ -0,0 +1,15 @@
package dev.sheldan.abstracto.core.models.dto;
import dev.sheldan.abstracto.core.models.AModule;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
@Builder
public class CommandDto {
private Long id;
private String name;
private AModule module;
}

View File

@@ -0,0 +1,18 @@
package dev.sheldan.abstracto.core.models.dto;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
@Builder
public class EmoteDto {
private Integer Id;
private String name;
private String emoteKey;
private Long emoteId;
private Boolean animated;
private Boolean custom;
private ServerDto server;
}

View File

@@ -0,0 +1,19 @@
package dev.sheldan.abstracto.core.models.dto;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
import java.util.ArrayList;
import java.util.List;
@Getter
@Setter
@Builder
public class ModuleDto {
private Long id;
private String name;
private List<CommandDto> commands = new ArrayList<>();
}

View File

@@ -0,0 +1,15 @@
package dev.sheldan.abstracto.core.models.dto;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
@Builder
public class PostTargetDto {
private Long id;
private String name;
private ChannelDto channelReference;
private ServerDto serverReference;
}

View File

@@ -0,0 +1,14 @@
package dev.sheldan.abstracto.core.models.dto;
import dev.sheldan.abstracto.core.models.SnowFlake;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
@Builder
public class RoleDto implements SnowFlake {
private Long id;
private String name;
}

View File

@@ -0,0 +1,20 @@
package dev.sheldan.abstracto.core.models.dto;
import dev.sheldan.abstracto.core.models.SnowFlake;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
import java.util.List;
@Getter
@Setter
@Builder
public class ServerDto implements SnowFlake {
private Long id;
private String name;
private List<ChannelDto> channels;
private List<UserInServerDto> users;
private List<RoleDto> roles;
}

View File

@@ -0,0 +1,14 @@
package dev.sheldan.abstracto.core.models.dto;
import dev.sheldan.abstracto.core.models.SnowFlake;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
@Builder
public class UserDto implements SnowFlake {
private Long id;
}

Some files were not shown because too many files have changed in this diff Show More