mirror of
https://github.com/Sheldan/abstracto.git
synced 2026-03-27 14:23:56 +00:00
added template support to echo
replaced HashMaps for templates with concrete models, so the interface is easier known added rendering method for objects directly added default parameters available for commands split up service beans for server/channel into management and service bean added server reference in AChannel refactored join/leave listener
This commit is contained in:
@@ -0,0 +1,7 @@
|
||||
package dev.sheldan.abstracto.core.exception;
|
||||
|
||||
public class PostTargetException extends RuntimeException {
|
||||
public PostTargetException(String message) {
|
||||
super(message);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package dev.sheldan.abstracto.core.service.management;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.AChannel;
|
||||
import dev.sheldan.abstracto.core.models.AChannelType;
|
||||
import dev.sheldan.abstracto.core.management.ChannelManagementService;
|
||||
import dev.sheldan.abstracto.repository.ChannelRepository;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@Service
|
||||
public class ChannelManagementServiceBean implements ChannelManagementService {
|
||||
|
||||
@Autowired
|
||||
private ChannelRepository repository;
|
||||
|
||||
@Override
|
||||
public AChannel loadChannel(Long id) {
|
||||
return repository.getOne(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AChannel createChannel(Long id, AChannelType type) {
|
||||
return repository.save(AChannel.builder().id(id).type(type).build());
|
||||
}
|
||||
}
|
||||
@@ -1,28 +1,29 @@
|
||||
package dev.sheldan.abstracto.core.service;
|
||||
package dev.sheldan.abstracto.core.service.management;
|
||||
|
||||
import dev.sheldan.abstracto.commands.management.PostTargetException;
|
||||
import dev.sheldan.abstracto.core.exception.PostTargetException;
|
||||
import dev.sheldan.abstracto.core.models.AChannel;
|
||||
import dev.sheldan.abstracto.core.models.AServer;
|
||||
import dev.sheldan.abstracto.core.models.PostTarget;
|
||||
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.repository.PostTargetRepository;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.cache.annotation.Cacheable;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.transaction.Transactional;
|
||||
|
||||
@Service
|
||||
@Slf4j
|
||||
public class PostTargetServiceServiceBean implements PostTargetService {
|
||||
public class PostTargetManagementBean implements PostTargetManagement {
|
||||
@Autowired
|
||||
private PostTargetRepository postTargetRepository;
|
||||
|
||||
@Autowired
|
||||
private ChannelService channelService;
|
||||
private ChannelManagementService channelManagementService;
|
||||
|
||||
@Autowired
|
||||
private ServerService serverService;
|
||||
private ServerManagementService serverManagementService;
|
||||
|
||||
@Override
|
||||
public void createPostTarget(String name, AChannel targetChannel, AServer server) {
|
||||
@@ -45,14 +46,14 @@ public class PostTargetServiceServiceBean implements PostTargetService {
|
||||
|
||||
@Override
|
||||
public void createOrUpdate(String name, Long channelId, AServer server) {
|
||||
AChannel dbChannel = channelService.loadChannel(channelId);
|
||||
AChannel dbChannel = channelManagementService.loadChannel(channelId);
|
||||
createOrUpdate(name, dbChannel, server);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void createOrUpdate(String name, Long channelId, Long serverId) {
|
||||
AChannel dbChannel = channelService.loadChannel(channelId);
|
||||
AServer dbServer = serverService.loadServer(serverId);
|
||||
AChannel dbChannel = channelManagementService.loadChannel(channelId);
|
||||
AServer dbServer = serverManagementService.loadServer(serverId);
|
||||
createOrUpdate(name, dbChannel, dbServer);
|
||||
}
|
||||
|
||||
@@ -62,6 +63,12 @@ public class PostTargetServiceServiceBean implements PostTargetService {
|
||||
return postTargetRepository.findPostTargetByName(name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PostTarget getPostTarget(String name, Long serverId) {
|
||||
AServer server = serverManagementService.loadServer(serverId);
|
||||
return getPostTarget(name, server);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updatePostTarget(PostTarget target, AChannel newTargetChannel, AServer server) {
|
||||
postTargetRepository.getOne(target.getId()).setChannelReference(newTargetChannel);
|
||||
@@ -1,12 +1,13 @@
|
||||
package dev.sheldan.abstracto.core.service;
|
||||
package dev.sheldan.abstracto.core.service.management;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.ARole;
|
||||
import dev.sheldan.abstracto.core.management.RoleManagementService;
|
||||
import dev.sheldan.abstracto.repository.RoleRepository;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@Service
|
||||
public class RoleServiceBean implements RoleService {
|
||||
public class RoleManagementServiceBean implements RoleManagementService {
|
||||
|
||||
@Autowired
|
||||
private RoleRepository repository;
|
||||
@@ -0,0 +1,64 @@
|
||||
package dev.sheldan.abstracto.core.service.management;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.AChannel;
|
||||
import dev.sheldan.abstracto.core.models.AServer;
|
||||
import dev.sheldan.abstracto.core.models.PostTarget;
|
||||
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.repository.ServerRepository;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@Service
|
||||
public class ServerManagementServiceBean implements ServerManagementService {
|
||||
|
||||
@Autowired
|
||||
private ServerRepository repository;
|
||||
|
||||
@Autowired
|
||||
private PostTargetManagement postTargetManagement;
|
||||
|
||||
@Autowired
|
||||
private ChannelManagementService channelManagementService;
|
||||
|
||||
@Override
|
||||
public AServer createServer(Long id) {
|
||||
return repository.save(AServer.builder().id(id).build());
|
||||
}
|
||||
|
||||
@Override
|
||||
public AServer loadServer(Long id) {
|
||||
return repository.getOne(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addChannelToServer(AServer server, AChannel channel) {
|
||||
server.getChannels().add(channel);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AChannel getPostTarget(Long serverId, String name) {
|
||||
AServer server = this.loadServer(serverId);
|
||||
return getPostTarget(server, name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AChannel getPostTarget(Long serverId, PostTarget target) {
|
||||
AServer server = this.loadServer(serverId);
|
||||
return getPostTarget(server, target);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AChannel getPostTarget(AServer server, PostTarget target) {
|
||||
return target.getChannelReference();
|
||||
}
|
||||
|
||||
@Override
|
||||
public AChannel getPostTarget(AServer server, String name) {
|
||||
PostTarget target = postTargetManagement.getPostTarget(name, server);
|
||||
return getPostTarget(server, target);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -1,24 +1,31 @@
|
||||
package dev.sheldan.abstracto.core.service;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.AChannel;
|
||||
import dev.sheldan.abstracto.core.models.AChannelType;
|
||||
import dev.sheldan.abstracto.repository.ChannelRepository;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import net.dv8tion.jda.api.entities.Guild;
|
||||
import net.dv8tion.jda.api.entities.TextChannel;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Service
|
||||
@Slf4j
|
||||
@Component
|
||||
public class ChannelServiceBean implements ChannelService {
|
||||
|
||||
@Autowired
|
||||
private ChannelRepository repository;
|
||||
private BotService botService;
|
||||
|
||||
@Override
|
||||
public AChannel loadChannel(Long id) {
|
||||
return repository.getOne(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AChannel createChannel(Long id, AChannelType type) {
|
||||
return repository.save(AChannel.builder().id(id).type(type).build());
|
||||
public void sendTextInAChannel(String text, AChannel channel) {
|
||||
Guild guild = botService.getInstance().getGuildById(channel.getServer().getId());
|
||||
if (guild != null) {
|
||||
TextChannel textChannel = guild.getTextChannelById(channel.getId());
|
||||
if(textChannel != null) {
|
||||
textChannel.sendMessage(text).queue();
|
||||
} else {
|
||||
log.warn("Channel {} to post towards was not found in server {}", channel.getId(), channel.getServer().getId());
|
||||
}
|
||||
} else {
|
||||
log.warn("Guild {} was not found when trying to post a message", channel.getServer().getId());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
package dev.sheldan.abstracto.core.service;
|
||||
|
||||
import dev.sheldan.abstracto.core.management.ServerManagementService;
|
||||
import dev.sheldan.abstracto.core.models.PostTarget;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import net.dv8tion.jda.api.entities.Guild;
|
||||
import net.dv8tion.jda.api.entities.TextChannel;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
|
||||
@Slf4j
|
||||
@Component
|
||||
public class PostTargetServiceBean implements PostTargetService {
|
||||
|
||||
@Autowired
|
||||
private ServerManagementService serverManagementService;
|
||||
|
||||
@Autowired
|
||||
private BotService botService;
|
||||
|
||||
@Override
|
||||
public void sendTextInPostTarget(String text, PostTarget target) {
|
||||
Guild guild = botService.getInstance().getGuildById(target.getServerReference().getId());
|
||||
if(guild != null) {
|
||||
TextChannel textChannelById = guild.getTextChannelById(target.getChannelReference().getId());
|
||||
if(textChannelById != null) {
|
||||
textChannelById.sendMessage(text).queue();
|
||||
} else {
|
||||
log.warn("Incorrect post target configuration: {} points to {} on server {}", target.getName(),
|
||||
target.getChannelReference().getId(), target.getServerReference().getId());
|
||||
}
|
||||
} else {
|
||||
log.warn("Incorrect post target configuration: Guild id {} was not found.", target.getServerReference().getId());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,36 +0,0 @@
|
||||
package dev.sheldan.abstracto.core.service;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.AChannel;
|
||||
import dev.sheldan.abstracto.core.models.AServer;
|
||||
import dev.sheldan.abstracto.repository.ServerRepository;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.transaction.Transactional;
|
||||
|
||||
@Service
|
||||
public class ServerServiceBean implements ServerService {
|
||||
|
||||
@Autowired
|
||||
private ServerRepository repository;
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public AServer createServer(Long id) {
|
||||
return repository.save(AServer.builder().id(id).build());
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public AServer loadServer(Long id) {
|
||||
return repository.getOne(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void addChannelToServer(AServer server, AChannel channel) {
|
||||
server.getChannels().add(channel);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -1,6 +1,9 @@
|
||||
package dev.sheldan.abstracto.core.service;
|
||||
|
||||
import dev.sheldan.abstracto.SnowflakeUtils;
|
||||
import dev.sheldan.abstracto.core.management.ChannelManagementService;
|
||||
import dev.sheldan.abstracto.core.management.RoleManagementService;
|
||||
import dev.sheldan.abstracto.core.management.ServerManagementService;
|
||||
import dev.sheldan.abstracto.core.models.AChannel;
|
||||
import dev.sheldan.abstracto.core.models.AChannelType;
|
||||
import dev.sheldan.abstracto.core.models.ARole;
|
||||
@@ -31,13 +34,13 @@ public class StartupManager implements Startup {
|
||||
private List<? extends ListenerAdapter> listeners;
|
||||
|
||||
@Autowired
|
||||
private ServerService serverService;
|
||||
private ServerManagementService serverManagementService;
|
||||
|
||||
@Autowired
|
||||
private ChannelService channelService;
|
||||
private ChannelManagementService channelManagementService;
|
||||
|
||||
@Autowired
|
||||
private RoleService roleService;
|
||||
private RoleManagementService roleManagementService;
|
||||
|
||||
|
||||
@Override
|
||||
@@ -59,7 +62,7 @@ public class StartupManager implements Startup {
|
||||
List<Guild> onlineGuilds = instance.getGuilds();
|
||||
Set<Long> availableServers = SnowflakeUtils.getSnowflakeIds(onlineGuilds);
|
||||
availableServers.forEach(aLong -> {
|
||||
AServer newAServer = serverService.createServer(aLong);
|
||||
AServer newAServer = serverManagementService.createServer(aLong);
|
||||
Guild newGuild = instance.getGuildById(aLong);
|
||||
log.debug("Synchronizing server: {}", aLong);
|
||||
if(newGuild != null){
|
||||
@@ -77,7 +80,7 @@ public class StartupManager implements Startup {
|
||||
Set<Long> availableRoles = SnowflakeUtils.getSnowflakeIds(existingRoles);
|
||||
Set<Long> newRoles = SetUtils.disjunction(availableRoles, knownRolesId);
|
||||
newRoles.forEach(aLong -> {
|
||||
ARole newRole = roleService.createRole(aLong);
|
||||
ARole newRole = roleManagementService.createRole(aLong);
|
||||
log.debug("Adding new role: {}", aLong);
|
||||
existingAServer.getRoles().add(newRole);
|
||||
});
|
||||
@@ -93,8 +96,8 @@ public class StartupManager implements Startup {
|
||||
GuildChannel channel1 = available.stream().filter(channel -> channel.getIdLong() == aLong).findFirst().get();
|
||||
log.debug("Adding new channel: {}", aLong);
|
||||
AChannelType type = AChannel.getAChannelType(channel1.getType());
|
||||
AChannel newChannel = channelService.createChannel(channel1.getIdLong(), type);
|
||||
serverService.addChannelToServer(existingServer, newChannel);
|
||||
AChannel newChannel = channelManagementService.createChannel(channel1.getIdLong(), type);
|
||||
serverManagementService.addChannelToServer(existingServer, newChannel);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
package dev.sheldan.abstracto.listener;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.AServer;
|
||||
import dev.sheldan.abstracto.core.models.PostTarget;
|
||||
import dev.sheldan.abstracto.core.management.PostTargetManagement;
|
||||
import dev.sheldan.abstracto.core.service.PostTargetService;
|
||||
import dev.sheldan.abstracto.core.service.ServerService;
|
||||
import dev.sheldan.abstracto.core.management.ServerManagementService;
|
||||
import dev.sheldan.abstracto.templating.TemplateService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import net.dv8tion.jda.api.entities.TextChannel;
|
||||
import net.dv8tion.jda.api.entities.User;
|
||||
import net.dv8tion.jda.api.events.guild.member.GuildMemberJoinEvent;
|
||||
import net.dv8tion.jda.api.events.guild.member.GuildMemberLeaveEvent;
|
||||
@@ -23,30 +22,34 @@ import java.util.HashMap;
|
||||
@Slf4j
|
||||
public class JoinLeaveListener extends ListenerAdapter {
|
||||
|
||||
public static final String USER_JOIN_TEMPLATE = "user_join";
|
||||
public static final String USER_LEAVE_TEMPLATE = "user_leave";
|
||||
private static final String USER_JOIN_TEMPLATE = "user_join";
|
||||
private static final String USER_LEAVE_TEMPLATE = "user_leave";
|
||||
@Autowired
|
||||
private PostTargetService postTargetService;
|
||||
private PostTargetManagement postTargetManagement;
|
||||
|
||||
@Autowired
|
||||
private ServerService serverService;
|
||||
private ServerManagementService serverManagementService;
|
||||
|
||||
@Autowired
|
||||
private TemplateService templateService;
|
||||
|
||||
@Autowired
|
||||
private PostTargetService postTargetService;
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void onGuildMemberJoin(@Nonnull GuildMemberJoinEvent event) {
|
||||
AServer server = serverService.loadServer(event.getGuild().getIdLong());
|
||||
PostTarget target = postTargetService.getPostTarget(PostTarget.JOIN_LOG, server);
|
||||
TextChannel textChannelById = event.getGuild().getTextChannelById(target.getChannelReference().getId());
|
||||
if(textChannelById != null){
|
||||
HashMap<String, Object> parameters = getUserParameter(event.getUser());
|
||||
String text = templateService.renderTemplate(USER_JOIN_TEMPLATE, parameters);
|
||||
textChannelById.sendMessage(text).queue();
|
||||
} else {
|
||||
log.warn("{} post target is not defined for server {}", PostTarget.JOIN_LOG, server.getId());
|
||||
}
|
||||
String text = getRenderedEvent(event.getUser(), USER_JOIN_TEMPLATE);
|
||||
PostTarget postTarget = postTargetManagement.getPostTarget(PostTarget.JOIN_LOG, event.getGuild().getIdLong());
|
||||
postTargetService.sendTextInPostTarget(text, postTarget);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void onGuildMemberLeave(@Nonnull GuildMemberLeaveEvent event) {
|
||||
String text = getRenderedEvent(event.getUser(), USER_LEAVE_TEMPLATE);
|
||||
PostTarget postTarget = postTargetManagement.getPostTarget(PostTarget.LEAVE_LOG, event.getGuild().getIdLong());
|
||||
postTargetService.sendTextInPostTarget(text, postTarget);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@@ -57,18 +60,8 @@ public class JoinLeaveListener extends ListenerAdapter {
|
||||
return parameters;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void onGuildMemberLeave(@Nonnull GuildMemberLeaveEvent event) {
|
||||
AServer server = serverService.loadServer(event.getGuild().getIdLong());
|
||||
PostTarget target = postTargetService.getPostTarget(PostTarget.LEAVE_LOG, server);
|
||||
TextChannel textChannelById = event.getGuild().getTextChannelById(target.getChannelReference().getId());
|
||||
if(textChannelById != null){
|
||||
HashMap<String, Object> parameters = getUserParameter(event.getUser());
|
||||
String text = templateService.renderTemplate(USER_LEAVE_TEMPLATE, parameters);
|
||||
textChannelById.sendMessage(text).queue();
|
||||
} else {
|
||||
log.warn("{} post target is not defined for server {}", PostTarget.LEAVE_LOG, server.getId());
|
||||
}
|
||||
private String getRenderedEvent(User user, String templateName) {
|
||||
HashMap<String, Object> parameters = getUserParameter(user);
|
||||
return templateService.renderTemplate(templateName, parameters);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user