changed context handling for command models for logging

added method to convert the user initiated context to a concrete command model
added method to find if a template exists
added method to render a context aware model
added banid command
This commit is contained in:
Sheldan
2020-03-20 09:34:37 +01:00
parent ec21305725
commit c978c1c677
68 changed files with 412 additions and 254 deletions

View File

@@ -2,18 +2,14 @@ package dev.sheldan.abstracto.moderation.command;
import dev.sheldan.abstracto.command.Command; import dev.sheldan.abstracto.command.Command;
import dev.sheldan.abstracto.command.HelpInfo; import dev.sheldan.abstracto.command.HelpInfo;
import dev.sheldan.abstracto.command.execution.CommandConfiguration; import dev.sheldan.abstracto.command.execution.*;
import dev.sheldan.abstracto.command.execution.CommandContext;
import dev.sheldan.abstracto.command.execution.Parameter;
import dev.sheldan.abstracto.command.execution.Result;
import dev.sheldan.abstracto.moderation.Moderation; import dev.sheldan.abstracto.moderation.Moderation;
import dev.sheldan.abstracto.moderation.models.BanLog; import dev.sheldan.abstracto.moderation.models.template.BanLog;
import dev.sheldan.abstracto.moderation.models.WarnLog; import dev.sheldan.abstracto.moderation.models.template.WarnLog;
import dev.sheldan.abstracto.moderation.service.BanService; import dev.sheldan.abstracto.moderation.service.BanService;
import dev.sheldan.abstracto.templating.TemplateService; import dev.sheldan.abstracto.templating.TemplateService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import net.dv8tion.jda.api.entities.Member; import net.dv8tion.jda.api.entities.Member;
import org.hibernate.sql.Template;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@@ -36,15 +32,12 @@ public class Ban implements Command {
Member member = (Member) parameters.get(0); Member member = (Member) parameters.get(0);
String defaultReason = templateService.renderTemplate("ban_default_reason", null); String defaultReason = templateService.renderTemplate("ban_default_reason", null);
String reason = parameters.size() == 2 ? (String) parameters.get(1) : defaultReason; String reason = parameters.size() == 2 ? (String) parameters.get(1) : defaultReason;
banService.banMember(member, reason);
BanLog banLogModel = BanLog BanLog banLogModel = (BanLog) ContextConverter.fromCommandContext(commandContext, BanLog.class);
.parentBuilder() banLogModel.setBannedUser(member);
.commandTemplateContext(commandContext.getCommandTemplateContext()) banLogModel.setBanningUser(commandContext.getAuthor());
.bannedUser(member) banLogModel.setReason(reason);
.banningUser(commandContext.getAuthor()) banService.banMember(member, reason, banLogModel);
.reason(reason)
.build();
banService.sendBanLog(banLogModel);
return Result.fromSuccess(); return Result.fromSuccess();
} }

View File

@@ -0,0 +1,54 @@
package dev.sheldan.abstracto.moderation.command;
import dev.sheldan.abstracto.command.Command;
import dev.sheldan.abstracto.command.HelpInfo;
import dev.sheldan.abstracto.command.execution.*;
import dev.sheldan.abstracto.core.models.UserInitiatedServerContext;
import dev.sheldan.abstracto.moderation.Moderation;
import dev.sheldan.abstracto.moderation.models.template.BanIdLog;
import dev.sheldan.abstracto.moderation.service.BanService;
import dev.sheldan.abstracto.templating.TemplateService;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.ArrayList;
import java.util.List;
public class BanId implements Command {
@Autowired
private TemplateService templateService;
@Autowired
private BanService banService;
@Override
public Result execute(CommandContext commandContext) {
List<Object> parameters = commandContext.getParameters().getParameters();
Long userId = (Long) parameters.get(0);
String defaultReason = templateService.renderTemplate("ban_default_reason", null);
String reason = parameters.size() == 2 ? (String) parameters.get(1) : defaultReason;
BanIdLog banLogModel = (BanIdLog) ContextConverter.fromCommandContext(commandContext, BanIdLog.class);
banLogModel.setBannedUserId(userId);
banLogModel.setBanningUser(commandContext.getAuthor());
banLogModel.setReason(reason);
banService.banMember(userId, commandContext.getGuild().getIdLong(), reason, banLogModel);
return Result.fromSuccess();
}
@Override
public CommandConfiguration getConfiguration() {
List<Parameter> parameters = new ArrayList<>();
parameters.add(Parameter.builder().name("user").type(Long.class).optional(false).build());
parameters.add(Parameter.builder().name("reason").type(String.class).optional(true).remainder(true).build());
HelpInfo helpInfo = HelpInfo.builder().templated(true).build();
return CommandConfiguration.builder()
.name("banid")
.module(Moderation.MODERATION)
.templated(true)
.causesReaction(true)
.parameters(parameters)
.help(helpInfo)
.build();
}
}

View File

@@ -2,13 +2,10 @@ package dev.sheldan.abstracto.moderation.command;
import dev.sheldan.abstracto.command.Command; import dev.sheldan.abstracto.command.Command;
import dev.sheldan.abstracto.command.HelpInfo; import dev.sheldan.abstracto.command.HelpInfo;
import dev.sheldan.abstracto.command.execution.CommandConfiguration; import dev.sheldan.abstracto.command.execution.*;
import dev.sheldan.abstracto.command.execution.CommandContext;
import dev.sheldan.abstracto.command.execution.Parameter;
import dev.sheldan.abstracto.command.execution.Result;
import dev.sheldan.abstracto.moderation.Moderation; import dev.sheldan.abstracto.moderation.Moderation;
import dev.sheldan.abstracto.moderation.models.BanLog; import dev.sheldan.abstracto.moderation.models.template.BanIdLog;
import dev.sheldan.abstracto.moderation.models.KickLogModel; import dev.sheldan.abstracto.moderation.models.template.KickLogModel;
import dev.sheldan.abstracto.moderation.service.KickServiceBean; import dev.sheldan.abstracto.moderation.service.KickServiceBean;
import dev.sheldan.abstracto.templating.TemplateService; import dev.sheldan.abstracto.templating.TemplateService;
import net.dv8tion.jda.api.entities.Member; import net.dv8tion.jda.api.entities.Member;
@@ -33,15 +30,12 @@ public class Kick implements Command {
Member member = (Member) parameters.get(0); Member member = (Member) parameters.get(0);
String defaultReason = templateService.renderTemplate("ban_default_reason", null); String defaultReason = templateService.renderTemplate("ban_default_reason", null);
String reason = parameters.size() == 2 ? (String) parameters.get(1) : defaultReason; String reason = parameters.size() == 2 ? (String) parameters.get(1) : defaultReason;
kickService.kickMember(member, reason);
KickLogModel kickLogModel = KickLogModel KickLogModel kickLogModel = (KickLogModel) ContextConverter.fromCommandContext(commandContext, KickLogModel.class);
.parentBuilder() kickLogModel.setKickedUser(member);
.commandTemplateContext(commandContext.getCommandTemplateContext()) kickLogModel.setKickingUser(commandContext.getAuthor());
.kickedUser(member) kickLogModel.setReason(reason);
.kickingUser(commandContext.getAuthor()) kickService.kickMember(member, reason, kickLogModel);
.reason(reason)
.build();
kickService.sendKickLog(kickLogModel);
return Result.fromSuccess(); return Result.fromSuccess();
} }

View File

@@ -1,15 +1,13 @@
package dev.sheldan.abstracto.moderation.command; package dev.sheldan.abstracto.moderation.command;
import dev.sheldan.abstracto.command.execution.*;
import dev.sheldan.abstracto.moderation.Moderation; import dev.sheldan.abstracto.moderation.Moderation;
import dev.sheldan.abstracto.moderation.models.WarnLog; import dev.sheldan.abstracto.moderation.models.template.BanIdLog;
import dev.sheldan.abstracto.moderation.models.template.WarnLog;
import dev.sheldan.abstracto.moderation.models.Warning; import dev.sheldan.abstracto.moderation.models.Warning;
import dev.sheldan.abstracto.moderation.service.WarnService; import dev.sheldan.abstracto.moderation.service.WarnService;
import dev.sheldan.abstracto.command.Command; import dev.sheldan.abstracto.command.Command;
import dev.sheldan.abstracto.command.HelpInfo; import dev.sheldan.abstracto.command.HelpInfo;
import dev.sheldan.abstracto.command.execution.CommandContext;
import dev.sheldan.abstracto.command.execution.CommandConfiguration;
import dev.sheldan.abstracto.command.execution.Parameter;
import dev.sheldan.abstracto.command.execution.Result;
import dev.sheldan.abstracto.core.management.UserManagementService; import dev.sheldan.abstracto.core.management.UserManagementService;
import dev.sheldan.abstracto.templating.TemplateService; import dev.sheldan.abstracto.templating.TemplateService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@@ -39,15 +37,11 @@ public class Warn implements Command {
Member member = (Member) parameters.get(0); Member member = (Member) parameters.get(0);
String defaultReason = templateService.renderTemplate("warn_default_reason", null); String defaultReason = templateService.renderTemplate("warn_default_reason", null);
String reason = parameters.size() == 2 ? (String) parameters.get(1) : defaultReason; String reason = parameters.size() == 2 ? (String) parameters.get(1) : defaultReason;
Warning warning = warnService.warnUser(member, commandContext.getAuthor(), reason); WarnLog warnLogModel = (WarnLog) ContextConverter.fromCommandContext(commandContext, WarnLog.class);
WarnLog warnLogModel = WarnLog warnLogModel.setWarnedUser(member);
.parentBuilder() warnLogModel.setReason(reason);
.commandTemplateContext(commandContext.getCommandTemplateContext()) warnLogModel.setWarningUser(commandContext.getAuthor());
.warnedUser(member) warnService.warnUser(member, commandContext.getAuthor(), reason, warnLogModel);
.warningUser(commandContext.getAuthor())
.warning(warning)
.build();
warnService.sendWarnLog(warnLogModel);
return Result.fromSuccess(); return Result.fromSuccess();
} }

View File

@@ -1,9 +1,11 @@
package dev.sheldan.abstracto.moderation.service; package dev.sheldan.abstracto.moderation.service;
import dev.sheldan.abstracto.core.models.PostTarget; import dev.sheldan.abstracto.core.models.ServerContext;
import dev.sheldan.abstracto.core.models.database.PostTarget;
import dev.sheldan.abstracto.core.service.Bot; import dev.sheldan.abstracto.core.service.Bot;
import dev.sheldan.abstracto.core.service.PostTargetService; import dev.sheldan.abstracto.core.service.PostTargetService;
import dev.sheldan.abstracto.moderation.models.BanLog; import dev.sheldan.abstracto.moderation.models.template.BanIdLog;
import dev.sheldan.abstracto.moderation.models.template.BanLog;
import dev.sheldan.abstracto.templating.TemplateService; import dev.sheldan.abstracto.templating.TemplateService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import net.dv8tion.jda.api.entities.Guild; import net.dv8tion.jda.api.entities.Guild;
@@ -16,6 +18,7 @@ import org.springframework.stereotype.Component;
public class BanServiceBean implements BanService { public class BanServiceBean implements BanService {
public static final String BAN_LOG_TEMPLATE = "ban_log"; public static final String BAN_LOG_TEMPLATE = "ban_log";
public static final String BAN_ID_LOG_TEMPLATE = "banid_log";
@Autowired @Autowired
private Bot bot; private Bot bot;
@@ -26,19 +29,26 @@ public class BanServiceBean implements BanService {
private PostTargetService postTargetService; private PostTargetService postTargetService;
@Override @Override
public void banMember(Member member, String reason) { public void banMember(Member member, String reason, ServerContext banLog) {
Guild guild = bot.getInstance().getGuildById(member.getGuild().getIdLong()); this.banUser(member.getGuild().getIdLong(), member.getIdLong(), reason);
if(guild != null) { String warnLogMessage = templateService.renderContextAwareTemplate(BAN_LOG_TEMPLATE, banLog);
log.info("Banning user {} in guild {}.", member.getId(), guild.getIdLong()); postTargetService.sendTextInPostTarget(warnLogMessage, PostTarget.BAN_LOG, banLog.getServer().getId());
guild.ban(member, 0, reason).queue();
} else {
log.warn("Guild id {} from member was not found.", member.getGuild().getIdLong());
}
} }
@Override @Override
public void sendBanLog(BanLog banLog) { public void banMember(Long guildId, Long userId, String reason, ServerContext banIdLog) {
String warnLogMessage = templateService.renderTemplate(BAN_LOG_TEMPLATE, banLog); banUser(guildId, userId, reason);
postTargetService.sendTextInPostTarget(warnLogMessage, PostTarget.BAN_LOG, banLog.getServer().getId()); String warnLogMessage = templateService.renderContextAwareTemplate(BAN_ID_LOG_TEMPLATE, banIdLog);
postTargetService.sendTextInPostTarget(warnLogMessage, PostTarget.BAN_LOG, guildId);
}
private void banUser(Long guildId, Long userId, String reason) {
Guild guildById = bot.getInstance().getGuildById(guildId);
if(guildById != null) {
log.info("Banning user {} in guild {}.", userId, guildId);
guildById.ban(userId.toString(), 0, reason).queue();
} else {
log.warn("Guild id {} from member was not found.", guildId);
}
} }
} }

View File

@@ -1,9 +1,9 @@
package dev.sheldan.abstracto.moderation.service; package dev.sheldan.abstracto.moderation.service;
import dev.sheldan.abstracto.core.models.PostTarget; import dev.sheldan.abstracto.core.models.database.PostTarget;
import dev.sheldan.abstracto.core.service.Bot; import dev.sheldan.abstracto.core.service.Bot;
import dev.sheldan.abstracto.core.service.PostTargetService; import dev.sheldan.abstracto.core.service.PostTargetService;
import dev.sheldan.abstracto.moderation.models.KickLogModel; import dev.sheldan.abstracto.moderation.models.template.KickLogModel;
import dev.sheldan.abstracto.templating.TemplateService; import dev.sheldan.abstracto.templating.TemplateService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import net.dv8tion.jda.api.entities.Guild; import net.dv8tion.jda.api.entities.Guild;
@@ -26,18 +26,18 @@ public class KickServiceBean implements KickService {
private PostTargetService postTargetService; private PostTargetService postTargetService;
@Override @Override
public void kickMember(Member member, String reason) { public void kickMember(Member member, String reason, KickLogModel kickLogModel) {
Guild guildById = bot.getInstance().getGuildById(member.getGuild().getIdLong()); Guild guildById = bot.getInstance().getGuildById(member.getGuild().getIdLong());
if(guildById != null) { if(guildById != null) {
guildById.kick(member, reason).queue(); guildById.kick(member, reason).queue();
this.sendKickLog(kickLogModel);
} else { } else {
log.warn("Failed to kick member {} from guild {}. Guild was not found.", member.getId(), member.getGuild().getId()); log.warn("Failed to kick member {} from guild {}. Guild was not found.", member.getId(), member.getGuild().getId());
} }
} }
@Override private void sendKickLog(KickLogModel kickLogModel) {
public void sendKickLog(KickLogModel kickLogModel) { String warnLogMessage = templateService.renderContextAwareTemplate(KICK_LOG_TEMPLATE, kickLogModel);
String warnLogMessage = templateService.renderTemplate(KICK_LOG_TEMPLATE, kickLogModel);
postTargetService.sendTextInPostTarget(warnLogMessage, PostTarget.WARN_LOG, kickLogModel.getServer().getId()); postTargetService.sendTextInPostTarget(warnLogMessage, PostTarget.WARN_LOG, kickLogModel.getServer().getId());
} }
} }

View File

@@ -1,6 +1,6 @@
package dev.sheldan.abstracto.moderation.service; package dev.sheldan.abstracto.moderation.service;
import dev.sheldan.abstracto.core.models.AChannel; import dev.sheldan.abstracto.core.models.database.AChannel;
import dev.sheldan.abstracto.core.service.Bot; import dev.sheldan.abstracto.core.service.Bot;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import net.dv8tion.jda.api.JDA; import net.dv8tion.jda.api.JDA;

View File

@@ -1,15 +1,17 @@
package dev.sheldan.abstracto.moderation.service; package dev.sheldan.abstracto.moderation.service;
import dev.sheldan.abstracto.core.models.AServer; import dev.sheldan.abstracto.core.models.ServerContext;
import dev.sheldan.abstracto.core.models.AUser; import dev.sheldan.abstracto.core.models.UserInitiatedServerContext;
import dev.sheldan.abstracto.moderation.models.WarnLog; import dev.sheldan.abstracto.core.models.database.AServer;
import dev.sheldan.abstracto.moderation.models.WarnNotification; import dev.sheldan.abstracto.core.models.database.AUser;
import dev.sheldan.abstracto.moderation.models.template.WarnLog;
import dev.sheldan.abstracto.moderation.models.template.WarnNotification;
import dev.sheldan.abstracto.moderation.models.Warning; import dev.sheldan.abstracto.moderation.models.Warning;
import dev.sheldan.abstracto.moderation.service.management.WarnManagementService; import dev.sheldan.abstracto.moderation.service.management.WarnManagementService;
import dev.sheldan.abstracto.core.management.ServerManagementService; import dev.sheldan.abstracto.core.management.ServerManagementService;
import dev.sheldan.abstracto.core.management.UserManagementService; import dev.sheldan.abstracto.core.management.UserManagementService;
import dev.sheldan.abstracto.core.models.AUserInAServer; import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import dev.sheldan.abstracto.core.models.PostTarget; import dev.sheldan.abstracto.core.models.database.PostTarget;
import dev.sheldan.abstracto.core.service.Bot; import dev.sheldan.abstracto.core.service.Bot;
import dev.sheldan.abstracto.core.service.PostTargetService; import dev.sheldan.abstracto.core.service.PostTargetService;
import dev.sheldan.abstracto.templating.TemplateService; import dev.sheldan.abstracto.templating.TemplateService;
@@ -47,7 +49,7 @@ public class WarnServiceBean implements WarnService {
private static final String WARN_NOTIFICATION_TEMPLATE = "warn_notification"; private static final String WARN_NOTIFICATION_TEMPLATE = "warn_notification";
@Override @Override
public Warning warnUser(AUserInAServer warnedAUserInAServer, AUserInAServer warningAUserInAServer, String reason) { public void warnUser(AUserInAServer warnedAUserInAServer, AUserInAServer warningAUserInAServer, String reason, ServerContext warnLog) {
AUser warningAUser = warningAUserInAServer.getUserReference(); AUser warningAUser = warningAUserInAServer.getUserReference();
AUser warnedAUser = warnedAUserInAServer.getUserReference(); AUser warnedAUser = warnedAUserInAServer.getUserReference();
AServer serverOfWarning = warnedAUserInAServer.getServerReference(); AServer serverOfWarning = warnedAUserInAServer.getServerReference();
@@ -70,19 +72,18 @@ public class WarnServiceBean implements WarnService {
} else { } else {
log.warn("Unable to find user {} in guild {} to warn.", warnedAUser.getId(), serverOfWarning.getId()); log.warn("Unable to find user {} in guild {} to warn.", warnedAUser.getId(), serverOfWarning.getId());
} }
return warning; this.sendWarnLog(warnLog);
} }
@Override @Override
public Warning warnUser(Member warnedMember, Member warningMember, String reason) { public void warnUser(Member warnedMember, Member warningMember, String reason, ServerContext warnLog) {
AUserInAServer warnedAUser = userManagementService.loadUser(warnedMember); AUserInAServer warnedAUser = userManagementService.loadUser(warnedMember);
AUserInAServer warningAUser = userManagementService.loadUser(warningMember); AUserInAServer warningAUser = userManagementService.loadUser(warningMember);
return this.warnUser(warnedAUser, warningAUser, reason); this.warnUser(warnedAUser, warningAUser, reason, warnLog);
} }
@Override public void sendWarnLog(ServerContext warnLogModel) {
public void sendWarnLog(WarnLog warnLogModel) { String warnLogMessage = templateService.renderContextAwareTemplate(WARN_LOG_TEMPLATE, warnLogModel);
String warnLogMessage = templateService.renderTemplate(WARN_LOG_TEMPLATE, warnLogModel);
postTargetService.sendTextInPostTarget(warnLogMessage, PostTarget.WARN_LOG, warnLogModel.getServer().getId()); postTargetService.sendTextInPostTarget(warnLogMessage, PostTarget.WARN_LOG, warnLogModel.getServer().getId());
} }
} }

View File

@@ -2,7 +2,7 @@ package dev.sheldan.abstracto.moderation.service.management;
import dev.sheldan.abstracto.moderation.models.Warning; import dev.sheldan.abstracto.moderation.models.Warning;
import dev.sheldan.abstracto.moderation.repository.WarnRepository; import dev.sheldan.abstracto.moderation.repository.WarnRepository;
import dev.sheldan.abstracto.core.models.AUserInAServer; import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;

View File

@@ -1 +1 @@
User ${warnedUser.effectiveName} (${warnedUser.asMention}) has been warned with reason ${warning.reason}. User ${warnedUser.effectiveName} (${warnedUser.asMention}) has been warned with reason ${reason}.

View File

@@ -1,22 +0,0 @@
package dev.sheldan.abstracto.moderation.models;
import dev.sheldan.abstracto.command.execution.CommandTemplateContext;
import lombok.Builder;
import lombok.Getter;
import net.dv8tion.jda.api.entities.Member;
@Getter
public class BanLog extends CommandTemplateContext {
private String reason;
private Member banningUser;
private Member bannedUser;
@Builder(builderMethodName = "parentBuilder")
public BanLog(CommandTemplateContext commandTemplateContext, Member bannedUser, Member banningUser, String reason) {
super(commandTemplateContext);
this.bannedUser = bannedUser;
this.banningUser = banningUser;
this.reason = reason;
}
}

View File

@@ -1,21 +0,0 @@
package dev.sheldan.abstracto.moderation.models;
import dev.sheldan.abstracto.command.execution.CommandTemplateContext;
import lombok.Builder;
import lombok.Getter;
import net.dv8tion.jda.api.entities.Member;
@Getter
public class KickLogModel extends CommandTemplateContext {
private String reason;
private Member kickingUser;
private Member kickedUser;
@Builder(builderMethodName = "parentBuilder")
public KickLogModel(CommandTemplateContext commandTemplateContext, Member kickedUser, Member kickingUser, String reason) {
super(commandTemplateContext);
this.kickedUser = kickedUser;
this.kickingUser = kickingUser;
this.reason = reason;
}
}

View File

@@ -1,23 +0,0 @@
package dev.sheldan.abstracto.moderation.models;
import dev.sheldan.abstracto.command.execution.CommandTemplateContext;
import lombok.Builder;
import lombok.Getter;
import net.dv8tion.jda.api.entities.Member;
@Getter
public class WarnLog extends CommandTemplateContext {
private Warning warning;
private Member warnedUser;
private Member warningUser;
@Builder(builderMethodName = "parentBuilder")
public WarnLog(CommandTemplateContext commandTemplateContext, Warning warning, Member warnedUser, Member warningUser) {
super(commandTemplateContext);
this.warning = warning;
this.warnedUser = warnedUser;
this.warningUser = warningUser;
}
}

View File

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

View File

@@ -0,0 +1,19 @@
package dev.sheldan.abstracto.moderation.models.template;
import dev.sheldan.abstracto.core.models.UserInitiatedServerContext;
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 {
private String reason;
private Member banningUser;
private Long bannedUserId;
@Override
public String getTemplateSuffix() {
return "";
}
}

View File

@@ -0,0 +1,15 @@
package dev.sheldan.abstracto.moderation.models.template;
import dev.sheldan.abstracto.core.models.UserInitiatedServerContext;
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 {
private String reason;
private Member banningUser;
private Member bannedUser;
}

View File

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

View File

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

View File

@@ -1,5 +1,6 @@
package dev.sheldan.abstracto.moderation.models; package dev.sheldan.abstracto.moderation.models.template;
import dev.sheldan.abstracto.moderation.models.Warning;
import lombok.Builder; import lombok.Builder;
import lombok.Value; import lombok.Value;

View File

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

View File

@@ -1,9 +1,8 @@
package dev.sheldan.abstracto.moderation.service; package dev.sheldan.abstracto.moderation.service;
import dev.sheldan.abstracto.moderation.models.KickLogModel; import dev.sheldan.abstracto.moderation.models.template.KickLogModel;
import net.dv8tion.jda.api.entities.Member; import net.dv8tion.jda.api.entities.Member;
public interface KickService { public interface KickService {
void kickMember(Member member, String reason); void kickMember(Member member, String reason, KickLogModel kickLogModel);
void sendKickLog(KickLogModel kickLogModel);
} }

View File

@@ -1,6 +1,6 @@
package dev.sheldan.abstracto.moderation.service; package dev.sheldan.abstracto.moderation.service;
import dev.sheldan.abstracto.core.models.AChannel; import dev.sheldan.abstracto.core.models.database.AChannel;
import net.dv8tion.jda.api.entities.TextChannel; import net.dv8tion.jda.api.entities.TextChannel;
import java.time.Duration; import java.time.Duration;

View File

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

View File

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

View File

@@ -1,5 +1,6 @@
package dev.sheldan.abstracto.command.execution; package dev.sheldan.abstracto.command.execution;
import dev.sheldan.abstracto.core.models.UserInitiatedServerContext;
import lombok.Builder; import lombok.Builder;
import lombok.Getter; import lombok.Getter;
import net.dv8tion.jda.api.JDA; import net.dv8tion.jda.api.JDA;
@@ -12,7 +13,7 @@ public class CommandContext {
private Guild guild; private Guild guild;
private Member author; private Member author;
private Message message; private Message message;
private CommandTemplateContext commandTemplateContext; private UserInitiatedServerContext userInitiatedContext;
private Parameters parameters; private Parameters parameters;
private JDA jda; private JDA jda;
} }

View File

@@ -1,18 +0,0 @@
package dev.sheldan.abstracto.command.execution;
import dev.sheldan.abstracto.core.models.AChannel;
import dev.sheldan.abstracto.core.models.AServer;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
@Getter @Builder @AllArgsConstructor
public class CommandTemplateContext {
private AChannel channel;
private AServer server;
public CommandTemplateContext(CommandTemplateContext commandTemplateContext) {
this.channel = commandTemplateContext.channel;
this.server = commandTemplateContext.server;
}
}

View File

@@ -0,0 +1,31 @@
package dev.sheldan.abstracto.command.execution;
import dev.sheldan.abstracto.core.models.UserInitiatedServerContext;
import lombok.extern.slf4j.Slf4j;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
@Slf4j
public class ContextConverter {
public static <T extends UserInitiatedServerContext> UserInitiatedServerContext fromCommandContext(CommandContext commandContext, Class<T> clazz) {
Method m = null;
try {
m = clazz.getMethod("builder");
UserInitiatedServerContext.UserInitiatedServerContextBuilder<?, ?> builder = (UserInitiatedServerContext.UserInitiatedServerContextBuilder) m.invoke(null, null);
return builder
.member(commandContext.getAuthor())
.guild(commandContext.getGuild())
.textChannel(commandContext.getChannel())
.channel(commandContext.getUserInitiatedContext().getChannel())
.server(commandContext.getUserInitiatedContext().getServer())
.aUserInAServer(commandContext.getUserInitiatedContext().getAUserInAServer())
.user(commandContext.getUserInitiatedContext().getUser())
.build();
} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
log.error("Failed to execute builder method", e);
}
throw new RuntimeException("Failed to create model from context");
}
}

View File

@@ -5,12 +5,14 @@ import dev.sheldan.abstracto.command.PostCommandExecution;
import dev.sheldan.abstracto.command.execution.*; import dev.sheldan.abstracto.command.execution.*;
import dev.sheldan.abstracto.command.meta.UnParsedCommandParameter; import dev.sheldan.abstracto.command.meta.UnParsedCommandParameter;
import dev.sheldan.abstracto.commands.management.exception.IncorrectParameterException; import dev.sheldan.abstracto.commands.management.exception.IncorrectParameterException;
import dev.sheldan.abstracto.commands.management.exception.InsufficientParametersException;
import dev.sheldan.abstracto.core.management.ChannelManagementService; import dev.sheldan.abstracto.core.management.ChannelManagementService;
import dev.sheldan.abstracto.core.management.ServerManagementService; import dev.sheldan.abstracto.core.management.ServerManagementService;
import dev.sheldan.abstracto.core.models.AChannel; import dev.sheldan.abstracto.core.management.UserManagementService;
import dev.sheldan.abstracto.core.models.AServer; import dev.sheldan.abstracto.core.models.database.AChannel;
import net.dv8tion.jda.api.entities.GuildChannel; import dev.sheldan.abstracto.core.models.database.AServer;
import dev.sheldan.abstracto.core.models.UserInitiatedServerContext;
import dev.sheldan.abstracto.core.models.database.AUser;
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import net.dv8tion.jda.api.entities.Member; import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.Message; import net.dv8tion.jda.api.entities.Message;
import net.dv8tion.jda.api.entities.TextChannel; import net.dv8tion.jda.api.entities.TextChannel;
@@ -35,6 +37,9 @@ public class CommandReceivedHandler extends ListenerAdapter {
@Autowired @Autowired
private ServerManagementService serverManagementService; private ServerManagementService serverManagementService;
@Autowired
private UserManagementService userManagementService;
@Autowired @Autowired
private ChannelManagementService channelManagementService; private ChannelManagementService channelManagementService;
@@ -53,7 +58,7 @@ public class CommandReceivedHandler extends ListenerAdapter {
.channel(event.getTextChannel()) .channel(event.getTextChannel())
.message(event.getMessage()) .message(event.getMessage())
.jda(event.getJDA()) .jda(event.getJDA())
.commandTemplateContext(buildTemplateParameter(event)); .userInitiatedContext(buildTemplateParameter(event));
Command foundCommand = null; Command foundCommand = null;
try { try {
List<String> parameters = Arrays.asList(event.getMessage().getContentStripped().split(" ")); List<String> parameters = Arrays.asList(event.getMessage().getContentStripped().split(" "));
@@ -77,10 +82,20 @@ public class CommandReceivedHandler extends ListenerAdapter {
} }
private CommandTemplateContext buildTemplateParameter(MessageReceivedEvent event) { private UserInitiatedServerContext buildTemplateParameter(MessageReceivedEvent event) {
AChannel channel = channelManagementService.loadChannel(event.getChannel().getIdLong()); AChannel channel = channelManagementService.loadChannel(event.getChannel().getIdLong());
AServer server = serverManagementService.loadServer(event.getGuild().getIdLong()); AServer server = serverManagementService.loadServer(event.getGuild().getIdLong());
return CommandTemplateContext.builder().channel(channel).server(server).build(); AUserInAServer user = userManagementService.loadUser(event.getMember());
return UserInitiatedServerContext
.builder()
.channel(channel)
.server(server)
.member(event.getMember())
.aUserInAServer(user)
.user(user.getUserReference())
.textChannel(event.getTextChannel())
.guild(event.getGuild())
.build();
} }
public Parameters getParsedParameters(UnParsedCommandParameter unParsedCommandParameter, Command command, Message message){ public Parameters getParsedParameters(UnParsedCommandParameter unParsedCommandParameter, Command command, Message message){

View File

@@ -28,7 +28,7 @@ public class Echo implements Command {
commandContext.getParameters().getParameters().forEach(o -> { commandContext.getParameters().getParameters().forEach(o -> {
sb.append(o.toString()); sb.append(o.toString());
}); });
EchoModel model = EchoModel.parentBuilder().parent(commandContext.getCommandTemplateContext()).text(sb.toString()).build(); EchoModel model = EchoModel.builder().text(sb.toString()).build();
commandContext.getChannel().sendMessage(templateService.renderTemplate(TEMPLATE_NAME, model)).queue(); commandContext.getChannel().sendMessage(templateService.renderTemplate(TEMPLATE_NAME, model)).queue();
return Result.fromSuccess(); return Result.fromSuccess();
} }

View File

@@ -20,7 +20,7 @@ public class Ping implements Command {
@Override @Override
public Result execute(CommandContext commandContext) { public Result execute(CommandContext commandContext) {
long ping = commandContext.getJda().getGatewayPing(); long ping = commandContext.getJda().getGatewayPing();
PingModel model = PingModel.parentBuilder().parent(commandContext.getCommandTemplateContext()).latency(ping).build(); PingModel model = PingModel.builder().latency(ping).build();
String text = templateService.renderTemplate(PING_TEMPLATE, model); String text = templateService.renderTemplate(PING_TEMPLATE, model);
commandContext.getChannel().sendMessage(text).queue(); commandContext.getChannel().sendMessage(text).queue();
return Result.fromSuccess(); return Result.fromSuccess();

View File

@@ -1,17 +1,12 @@
package dev.sheldan.abstracto.core.commands.utility.model; package dev.sheldan.abstracto.core.commands.utility.model;
import dev.sheldan.abstracto.command.execution.CommandTemplateContext; import dev.sheldan.abstracto.core.models.UserInitiatedServerContext;
import lombok.Builder; import lombok.Builder;
import lombok.Getter; import lombok.Getter;
import lombok.experimental.SuperBuilder;
@Getter @Getter @SuperBuilder
public class EchoModel extends CommandTemplateContext { public class EchoModel extends UserInitiatedServerContext {
private String text; private String text;
@Builder(builderMethodName = "parentBuilder")
private EchoModel(CommandTemplateContext parent, String text) {
super(parent);
this.text = text;
}
} }

View File

@@ -1,16 +1,11 @@
package dev.sheldan.abstracto.core.commands.utility.model; package dev.sheldan.abstracto.core.commands.utility.model;
import dev.sheldan.abstracto.command.execution.CommandTemplateContext; import dev.sheldan.abstracto.core.models.UserInitiatedServerContext;
import lombok.Builder; import lombok.Builder;
import lombok.Getter; import lombok.Getter;
import lombok.experimental.SuperBuilder;
@Getter @Getter @SuperBuilder
public class PingModel extends CommandTemplateContext { public class PingModel extends UserInitiatedServerContext {
private Long latency; private Long latency;
@Builder(builderMethodName = "parentBuilder")
private PingModel(CommandTemplateContext parent, Long latency) {
super(parent);
this.latency = latency;
}
} }

View File

@@ -1,6 +1,6 @@
package dev.sheldan.abstracto.core.service; package dev.sheldan.abstracto.core.service;
import dev.sheldan.abstracto.core.models.AChannel; import dev.sheldan.abstracto.core.models.database.AChannel;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import net.dv8tion.jda.api.entities.Guild; import net.dv8tion.jda.api.entities.Guild;
import net.dv8tion.jda.api.entities.TextChannel; import net.dv8tion.jda.api.entities.TextChannel;

View File

@@ -2,7 +2,7 @@ package dev.sheldan.abstracto.core.service;
import dev.sheldan.abstracto.core.management.PostTargetManagement; import dev.sheldan.abstracto.core.management.PostTargetManagement;
import dev.sheldan.abstracto.core.management.ServerManagementService; import dev.sheldan.abstracto.core.management.ServerManagementService;
import dev.sheldan.abstracto.core.models.PostTarget; import dev.sheldan.abstracto.core.models.database.PostTarget;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import net.dv8tion.jda.api.entities.Guild; import net.dv8tion.jda.api.entities.Guild;
import net.dv8tion.jda.api.entities.TextChannel; import net.dv8tion.jda.api.entities.TextChannel;

View File

@@ -4,10 +4,10 @@ import dev.sheldan.abstracto.SnowflakeUtils;
import dev.sheldan.abstracto.core.management.ChannelManagementService; import dev.sheldan.abstracto.core.management.ChannelManagementService;
import dev.sheldan.abstracto.core.management.RoleManagementService; import dev.sheldan.abstracto.core.management.RoleManagementService;
import dev.sheldan.abstracto.core.management.ServerManagementService; import dev.sheldan.abstracto.core.management.ServerManagementService;
import dev.sheldan.abstracto.core.models.AChannel; import dev.sheldan.abstracto.core.models.database.AChannel;
import dev.sheldan.abstracto.core.models.AChannelType; import dev.sheldan.abstracto.core.models.AChannelType;
import dev.sheldan.abstracto.core.models.ARole; import dev.sheldan.abstracto.core.models.database.ARole;
import dev.sheldan.abstracto.core.models.AServer; import dev.sheldan.abstracto.core.models.database.AServer;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import net.dv8tion.jda.api.JDA; import net.dv8tion.jda.api.JDA;
import net.dv8tion.jda.api.entities.Guild; import net.dv8tion.jda.api.entities.Guild;

View File

@@ -1,6 +1,6 @@
package dev.sheldan.abstracto.core.service.management; package dev.sheldan.abstracto.core.service.management;
import dev.sheldan.abstracto.core.models.AChannel; import dev.sheldan.abstracto.core.models.database.AChannel;
import dev.sheldan.abstracto.core.models.AChannelType; import dev.sheldan.abstracto.core.models.AChannelType;
import dev.sheldan.abstracto.core.management.ChannelManagementService; import dev.sheldan.abstracto.core.management.ChannelManagementService;
import dev.sheldan.abstracto.repository.ChannelRepository; import dev.sheldan.abstracto.repository.ChannelRepository;

View File

@@ -1,9 +1,9 @@
package dev.sheldan.abstracto.core.service.management; package dev.sheldan.abstracto.core.service.management;
import dev.sheldan.abstracto.core.exception.PostTargetException; import dev.sheldan.abstracto.core.exception.PostTargetException;
import dev.sheldan.abstracto.core.models.AChannel; import dev.sheldan.abstracto.core.models.database.AChannel;
import dev.sheldan.abstracto.core.models.AServer; import dev.sheldan.abstracto.core.models.database.AServer;
import dev.sheldan.abstracto.core.models.PostTarget; import dev.sheldan.abstracto.core.models.database.PostTarget;
import dev.sheldan.abstracto.core.management.ChannelManagementService; import dev.sheldan.abstracto.core.management.ChannelManagementService;
import dev.sheldan.abstracto.core.management.PostTargetManagement; import dev.sheldan.abstracto.core.management.PostTargetManagement;
import dev.sheldan.abstracto.core.management.ServerManagementService; import dev.sheldan.abstracto.core.management.ServerManagementService;

View File

@@ -1,6 +1,6 @@
package dev.sheldan.abstracto.core.service.management; package dev.sheldan.abstracto.core.service.management;
import dev.sheldan.abstracto.core.models.ARole; import dev.sheldan.abstracto.core.models.database.ARole;
import dev.sheldan.abstracto.core.management.RoleManagementService; import dev.sheldan.abstracto.core.management.RoleManagementService;
import dev.sheldan.abstracto.repository.RoleRepository; import dev.sheldan.abstracto.repository.RoleRepository;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;

View File

@@ -1,6 +1,9 @@
package dev.sheldan.abstracto.core.management; package dev.sheldan.abstracto.core.service.management;
import dev.sheldan.abstracto.core.models.*; import dev.sheldan.abstracto.core.management.ChannelManagementService;
import dev.sheldan.abstracto.core.management.PostTargetManagement;
import dev.sheldan.abstracto.core.management.ServerManagementService;
import dev.sheldan.abstracto.core.models.database.*;
import dev.sheldan.abstracto.repository.ServerRepository; import dev.sheldan.abstracto.repository.ServerRepository;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;

View File

@@ -1,8 +1,10 @@
package dev.sheldan.abstracto.core.management; package dev.sheldan.abstracto.core.service.management;
import dev.sheldan.abstracto.core.models.AServer; import dev.sheldan.abstracto.core.management.ServerManagementService;
import dev.sheldan.abstracto.core.models.AUser; import dev.sheldan.abstracto.core.management.UserManagementService;
import dev.sheldan.abstracto.core.models.AUserInAServer; 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.repository.UserInServerRepository; import dev.sheldan.abstracto.repository.UserInServerRepository;
import dev.sheldan.abstracto.repository.UserRepository; import dev.sheldan.abstracto.repository.UserRepository;
import net.dv8tion.jda.api.entities.Member; import net.dv8tion.jda.api.entities.Member;

View File

@@ -1,7 +1,7 @@
package dev.sheldan.abstracto.listener; package dev.sheldan.abstracto.listener;
import dev.sheldan.abstracto.core.models.AChannel; import dev.sheldan.abstracto.core.models.database.AChannel;
import dev.sheldan.abstracto.core.models.AServer; import dev.sheldan.abstracto.core.models.database.AServer;
import dev.sheldan.abstracto.repository.ServerRepository; import dev.sheldan.abstracto.repository.ServerRepository;
import net.dv8tion.jda.api.entities.TextChannel; import net.dv8tion.jda.api.entities.TextChannel;
import net.dv8tion.jda.api.events.channel.text.TextChannelCreateEvent; import net.dv8tion.jda.api.events.channel.text.TextChannelCreateEvent;

View File

@@ -1,6 +1,6 @@
package dev.sheldan.abstracto.listener; package dev.sheldan.abstracto.listener;
import dev.sheldan.abstracto.core.models.PostTarget; import dev.sheldan.abstracto.core.models.database.PostTarget;
import dev.sheldan.abstracto.core.management.PostTargetManagement; import dev.sheldan.abstracto.core.management.PostTargetManagement;
import dev.sheldan.abstracto.core.service.PostTargetService; import dev.sheldan.abstracto.core.service.PostTargetService;
import dev.sheldan.abstracto.core.management.ServerManagementService; import dev.sheldan.abstracto.core.management.ServerManagementService;

View File

@@ -1,6 +1,6 @@
package dev.sheldan.abstracto.repository; package dev.sheldan.abstracto.repository;
import dev.sheldan.abstracto.core.models.AChannel; import dev.sheldan.abstracto.core.models.database.AChannel;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;

View File

@@ -1,6 +1,6 @@
package dev.sheldan.abstracto.repository; package dev.sheldan.abstracto.repository;
import dev.sheldan.abstracto.core.models.PostTarget; import dev.sheldan.abstracto.core.models.database.PostTarget;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;

View File

@@ -1,6 +1,6 @@
package dev.sheldan.abstracto.repository; package dev.sheldan.abstracto.repository;
import dev.sheldan.abstracto.core.models.ARole; import dev.sheldan.abstracto.core.models.database.ARole;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;

View File

@@ -1,6 +1,6 @@
package dev.sheldan.abstracto.repository; package dev.sheldan.abstracto.repository;
import dev.sheldan.abstracto.core.models.AServer; import dev.sheldan.abstracto.core.models.database.AServer;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;

View File

@@ -1,8 +1,8 @@
package dev.sheldan.abstracto.repository; package dev.sheldan.abstracto.repository;
import dev.sheldan.abstracto.core.models.AServer; import dev.sheldan.abstracto.core.models.database.AServer;
import dev.sheldan.abstracto.core.models.AUser; import dev.sheldan.abstracto.core.models.database.AUser;
import dev.sheldan.abstracto.core.models.AUserInAServer; import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;

View File

@@ -1,6 +1,6 @@
package dev.sheldan.abstracto.repository; package dev.sheldan.abstracto.repository;
import dev.sheldan.abstracto.core.models.AUser; import dev.sheldan.abstracto.core.models.database.AUser;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
public interface UserRepository extends JpaRepository<AUser, Long> { public interface UserRepository extends JpaRepository<AUser, Long> {

View File

@@ -1,6 +1,6 @@
package dev.sheldan.abstracto.core.management; package dev.sheldan.abstracto.core.management;
import dev.sheldan.abstracto.core.models.AChannel; import dev.sheldan.abstracto.core.models.database.AChannel;
import dev.sheldan.abstracto.core.models.AChannelType; import dev.sheldan.abstracto.core.models.AChannelType;
public interface ChannelManagementService { public interface ChannelManagementService {

View File

@@ -1,8 +1,8 @@
package dev.sheldan.abstracto.core.management; package dev.sheldan.abstracto.core.management;
import dev.sheldan.abstracto.core.models.AChannel; import dev.sheldan.abstracto.core.models.database.AChannel;
import dev.sheldan.abstracto.core.models.AServer; import dev.sheldan.abstracto.core.models.database.AServer;
import dev.sheldan.abstracto.core.models.PostTarget; import dev.sheldan.abstracto.core.models.database.PostTarget;
public interface PostTargetManagement { public interface PostTargetManagement {
void createPostTarget(String name, AChannel targetChanel, AServer server); void createPostTarget(String name, AChannel targetChanel, AServer server);

View File

@@ -1,6 +1,6 @@
package dev.sheldan.abstracto.core.management; package dev.sheldan.abstracto.core.management;
import dev.sheldan.abstracto.core.models.ARole; import dev.sheldan.abstracto.core.models.database.ARole;
public interface RoleManagementService { public interface RoleManagementService {
ARole createRole(Long id); ARole createRole(Long id);

View File

@@ -1,6 +1,6 @@
package dev.sheldan.abstracto.core.management; package dev.sheldan.abstracto.core.management;
import dev.sheldan.abstracto.core.models.*; import dev.sheldan.abstracto.core.models.database.*;
public interface ServerManagementService { public interface ServerManagementService {
AServer createServer(Long id); AServer createServer(Long id);

View File

@@ -1,8 +1,8 @@
package dev.sheldan.abstracto.core.management; package dev.sheldan.abstracto.core.management;
import dev.sheldan.abstracto.core.models.AServer; import dev.sheldan.abstracto.core.models.database.AServer;
import dev.sheldan.abstracto.core.models.AUser; import dev.sheldan.abstracto.core.models.database.AUser;
import dev.sheldan.abstracto.core.models.AUserInAServer; import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import net.dv8tion.jda.api.entities.Member; import net.dv8tion.jda.api.entities.Member;
public interface UserManagementService { public interface UserManagementService {

View File

@@ -0,0 +1,5 @@
package dev.sheldan.abstracto.core.models;
public interface ContextAware {
String getTemplateSuffix();
}

View File

@@ -0,0 +1,24 @@
package dev.sheldan.abstracto.core.models;
import dev.sheldan.abstracto.core.models.database.AServer;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.experimental.SuperBuilder;
import net.dv8tion.jda.api.entities.Guild;
@Getter
@SuperBuilder
@AllArgsConstructor
@NoArgsConstructor
@Setter
public class ServerContext implements ContextAware{
private Guild guild;
private AServer server;
@Override
public String getTemplateSuffix() {
return "server";
}
}

View File

@@ -0,0 +1,27 @@
package dev.sheldan.abstracto.core.models;
import dev.sheldan.abstracto.core.models.database.AChannel;
import dev.sheldan.abstracto.core.models.database.AUser;
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.experimental.SuperBuilder;
import net.dv8tion.jda.api.entities.Member;
import net.dv8tion.jda.api.entities.TextChannel;
@Getter @NoArgsConstructor
@Setter
@SuperBuilder
public class UserInitiatedServerContext extends ServerContext {
private AChannel channel;
private TextChannel textChannel;
private Member member;
private AUser user;
private AUserInAServer aUserInAServer;
@Override
public String getTemplateSuffix() {
return "";
}
}

View File

@@ -1,5 +1,7 @@
package dev.sheldan.abstracto.core.models; package dev.sheldan.abstracto.core.models.database;
import dev.sheldan.abstracto.core.models.AChannelType;
import dev.sheldan.abstracto.core.models.SnowFlake;
import lombok.*; import lombok.*;
import net.dv8tion.jda.api.entities.ChannelType; import net.dv8tion.jda.api.entities.ChannelType;

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -1,9 +1,8 @@
package dev.sheldan.abstracto.core.models; package dev.sheldan.abstracto.core.models.database;
import lombok.*; import lombok.*;
import javax.persistence.*; import javax.persistence.*;
import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;

View File

@@ -1,6 +1,6 @@
package dev.sheldan.abstracto.core.service; package dev.sheldan.abstracto.core.service;
import dev.sheldan.abstracto.core.models.AChannel; import dev.sheldan.abstracto.core.models.database.AChannel;
public interface ChannelService { public interface ChannelService {
void sendTextInAChannel(String text, AChannel channel); void sendTextInAChannel(String text, AChannel channel);

View File

@@ -1,6 +1,6 @@
package dev.sheldan.abstracto.core.service; package dev.sheldan.abstracto.core.service;
import dev.sheldan.abstracto.core.models.PostTarget; import dev.sheldan.abstracto.core.models.database.PostTarget;
public interface PostTargetService { public interface PostTargetService {
void sendTextInPostTarget(String text, PostTarget target); void sendTextInPostTarget(String text, PostTarget target);

View File

@@ -1,5 +1,7 @@
package dev.sheldan.abstracto.templating.loading; package dev.sheldan.abstracto.templating.loading;
import dev.sheldan.abstracto.core.models.ContextAware;
import dev.sheldan.abstracto.core.models.ServerContext;
import dev.sheldan.abstracto.templating.TemplateDto; import dev.sheldan.abstracto.templating.TemplateDto;
import dev.sheldan.abstracto.templating.TemplateService; import dev.sheldan.abstracto.templating.TemplateService;
import freemarker.template.Configuration; import freemarker.template.Configuration;
@@ -30,6 +32,11 @@ public class TemplateServiceBean implements TemplateService {
return repository.getOne(key); return repository.getOne(key);
} }
@Override
public boolean templateExists(String key) {
return getTemplateByKey(key) != null;
}
@Override @Override
public String renderTemplate(TemplateDto templateDto) { public String renderTemplate(TemplateDto templateDto) {
return null; return null;
@@ -55,6 +62,18 @@ public class TemplateServiceBean implements TemplateService {
return ""; return "";
} }
@Override
public String renderContextAwareTemplate(String key, ServerContext serverContext) {
return renderTemplate(getTemplateKey(key, serverContext), serverContext);
}
private String getTemplateKey(String key, ContextAware contextAware) {
if(!contextAware.getTemplateSuffix().equals("")) {
return key + "_" + contextAware.getTemplateSuffix();
}
return key;
}
@Override @Override
public void createTemplate(String key, String content) { public void createTemplate(String key, String content) {
repository.save(TemplateDto.builder().key(key).content(content).lastModified(Instant.now()).build()); repository.save(TemplateDto.builder().key(key).content(content).lastModified(Instant.now()).build());

View File

@@ -16,6 +16,13 @@
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId> <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency> </dependency>
<dependency>
<groupId>dev.sheldan.abstracto.core</groupId>
<artifactId>core-interface</artifactId>
<version>${project.version}</version>
<scope>compile</scope>
</dependency>
</dependencies> </dependencies>
</project> </project>

View File

@@ -1,11 +1,15 @@
package dev.sheldan.abstracto.templating; package dev.sheldan.abstracto.templating;
import dev.sheldan.abstracto.core.models.ServerContext;
import java.util.HashMap; import java.util.HashMap;
public interface TemplateService { public interface TemplateService {
TemplateDto getTemplateByKey(String key); TemplateDto getTemplateByKey(String key);
boolean templateExists(String key);
String renderTemplate(TemplateDto templateDto); String renderTemplate(TemplateDto templateDto);
String renderTemplate(String key, HashMap<String, Object> parameters); String renderTemplate(String key, HashMap<String, Object> parameters);
String renderTemplate(String key, Object model); String renderTemplate(String key, Object model);
String renderContextAwareTemplate(String key, ServerContext serverContext);
void createTemplate(String key, String content); void createTemplate(String key, String content);
} }