added Arole to command received handler in order to handle it

restructured channel service calls a little bit
moved dm sending to message service
fixed log level configuration
added full user dto, to be used as a combination of a AUserInServer and Member, for operations which need both, to avoid converting and reloading the user
added mute command and mute role command
added mute table
added mute role table
added job to automatically unmute people at the given time period
restructured warn service
removed simple message log for warnings
added method to templating to support formatting instants
This commit is contained in:
Sheldan
2020-04-24 18:02:05 +02:00
parent cf37d4adef
commit b41a596acd
44 changed files with 1032 additions and 69 deletions

View File

@@ -15,7 +15,9 @@ import dev.sheldan.abstracto.core.command.execution.UnParsedCommandParameter;
import dev.sheldan.abstracto.core.Constants;
import dev.sheldan.abstracto.core.command.service.management.CommandManagementService;
import dev.sheldan.abstracto.core.exception.AbstractoRunTimeException;
import dev.sheldan.abstracto.core.models.database.ARole;
import dev.sheldan.abstracto.core.service.management.ChannelManagementService;
import dev.sheldan.abstracto.core.service.management.RoleManagementService;
import dev.sheldan.abstracto.core.service.management.ServerManagementService;
import dev.sheldan.abstracto.core.service.management.UserManagementService;
import dev.sheldan.abstracto.core.models.database.AChannel;
@@ -70,6 +72,9 @@ public class CommandReceivedHandler extends ListenerAdapter {
@Autowired
private CommandManagementService commandManagementService;
@Autowired
private RoleManagementService roleManagementService;
@Override
@Async
@Transactional
@@ -188,6 +193,8 @@ public class CommandReceivedHandler extends ListenerAdapter {
} else {
parsedParameters.add(value);
}
} else if(param.getType().equals(ARole.class)) {
parsedParameters.add(roleManagementService.findRole(Long.parseLong(value)));
} else if(param.getType().equals(Boolean.class)) {
parsedParameters.add(Boolean.valueOf(value));
} else if (param.getType().equals(Duration.class)) {

View File

@@ -6,6 +6,7 @@ import dev.sheldan.abstracto.core.models.GuildChannelMember;
import dev.sheldan.abstracto.core.models.database.AEmote;
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 lombok.extern.slf4j.Slf4j;
import net.dv8tion.jda.api.JDA;
import net.dv8tion.jda.api.JDABuilder;
@@ -71,6 +72,11 @@ public class BotServiceBean implements BotService {
}
}
@Override
public Member getMemberInServer(AUserInAServer aUserInAServer) {
return getMemberInServer(aUserInAServer.getServerReference().getId(), aUserInAServer.getUserReference().getId());
}
@Override
public Member getMemberInServer(AServer server, AUser member) {
return getMemberInServer(server.getId(), member.getId());

View File

@@ -3,6 +3,7 @@ package dev.sheldan.abstracto.core.service;
import dev.sheldan.abstracto.core.exception.AbstractoRunTimeException;
import dev.sheldan.abstracto.core.exception.ChannelException;
import dev.sheldan.abstracto.core.exception.GuildException;
import dev.sheldan.abstracto.core.service.management.ChannelManagementService;
import dev.sheldan.abstracto.templating.model.MessageToSend;
import dev.sheldan.abstracto.core.models.database.AChannel;
import lombok.extern.slf4j.Slf4j;
@@ -27,18 +28,26 @@ public class ChannelServiceBean implements ChannelService {
@Autowired
private BotService botService;
@Autowired
private ChannelManagementService channelManagementService;
@Override
public void sendTextInAChannel(String text, AChannel channel) {
sendTextInAChannelFuture(text, channel);
}
@Override
public void sendTextInAChannel(String text, TextChannel channel) {
sendTextInAChannelFuture(text, channel);
}
@Override
public CompletableFuture<Message> sendTextInAChannelFuture(String text, AChannel channel) {
Guild guild = botService.getInstance().getGuildById(channel.getServer().getId());
if (guild != null) {
TextChannel textChannel = guild.getTextChannelById(channel.getId());
if(textChannel != null) {
return textChannel.sendMessage(text).submit();
return sendTextInAChannelFuture(text, textChannel);
} else {
log.error("Channel {} to post towards was not found in server {}", channel.getId(), channel.getServer().getId());
throw new ChannelException(String.format("Channel %s to post to not found.", channel.getId()));
@@ -49,6 +58,11 @@ public class ChannelServiceBean implements ChannelService {
}
}
@Override
public CompletableFuture<Message> sendTextInAChannelFuture(String text, TextChannel channel) {
return channel.sendMessage(text).submit();
}
@Override
public CompletableFuture<Message> sendEmbedInAChannelFuture(MessageEmbed embed, AChannel channel) {
Guild guild = botService.getInstance().getGuildById(channel.getServer().getId());

View File

@@ -3,15 +3,15 @@ package dev.sheldan.abstracto.core.service;
import dev.sheldan.abstracto.core.exception.EmoteException;
import dev.sheldan.abstracto.core.exception.GuildException;
import dev.sheldan.abstracto.core.models.database.AChannel;
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import dev.sheldan.abstracto.core.service.management.EmoteManagementService;
import dev.sheldan.abstracto.core.models.database.AEmote;
import dev.sheldan.abstracto.templating.model.MessageToSend;
import lombok.extern.slf4j.Slf4j;
import net.dv8tion.jda.api.entities.Emote;
import net.dv8tion.jda.api.entities.Guild;
import net.dv8tion.jda.api.entities.Message;
import net.dv8tion.jda.api.entities.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.util.Optional;
import java.util.concurrent.CompletableFuture;
@@ -32,6 +32,9 @@ public class MessageServiceBean implements MessageService {
@Autowired
private ChannelService channelService;
@Autowired
private MessageServiceBean self;
@Override
public void addReactionToMessage(String emoteKey, Long serverId, Message message) {
Optional<Guild> guildByIdOptional = botService.getGuildById(serverId);
@@ -74,4 +77,32 @@ public class MessageServiceBean implements MessageService {
public void updateStatusMessage(AChannel channel, Long messageId, MessageToSend messageToSend) {
channelService.editMessageInAChannel(messageToSend, channel, messageId);
}
@Override
public void sendMessageToUser(AUserInAServer userInAServer, String text, TextChannel feedbackChannel) {
Member memberInServer = botService.getMemberInServer(userInAServer);
sendMessageToUser(memberInServer.getUser(), text, feedbackChannel);
}
@Override
public void sendMessageToUser(User user, String text, TextChannel feedbackChannel) {
CompletableFuture<Message> messageFuture = new CompletableFuture<>();
user.openPrivateChannel().queue(privateChannel -> {
privateChannel.sendMessage(text).queue(messageFuture::complete, messageFuture::completeExceptionally);
});
messageFuture.exceptionally(e -> {
log.warn("Failed to send message. ", e);
if(feedbackChannel != null){
self.sendFeedbackAboutException(e, feedbackChannel);
}
return null;
});
}
@Transactional
public void sendFeedbackAboutException(Throwable e, TextChannel feedbackChannel) {
channelService.sendTextInAChannel(String.format("Failed to send message: %s", e.getMessage()), feedbackChannel);
}
}

View File

@@ -10,7 +10,7 @@ spring.jpa.hibernate.naming_strategy = org.hibernate.cfg.ImprovedNamingStrategy
log4j.logger.org.hibernate.SQL=info
log4j.logger.org.hibernate.type.descriptor.sql=trace
log4j.logger.org.hibernate.type=trace
log4j.logger.dev.sheldan=info
logging.level.dev.sheldan=info
spring.cache.cache-names=messages
spring.cache.caffeine.spec=maximumSize=500,expireAfterAccess=600s