Compare commits

...

1 Commits

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