mirror of
https://github.com/Sheldan/abstracto.git
synced 2026-04-13 03:26:31 +00:00
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:
@@ -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)) {
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
package dev.sheldan.abstracto.core.models;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
|
||||
@Setter
|
||||
@Getter
|
||||
@Builder
|
||||
public class FullUser {
|
||||
private AUserInAServer aUserInAServer;
|
||||
private Member member;
|
||||
}
|
||||
@@ -4,6 +4,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 net.dv8tion.jda.api.JDA;
|
||||
import net.dv8tion.jda.api.entities.*;
|
||||
import org.springframework.stereotype.Service;
|
||||
@@ -18,6 +19,7 @@ public interface BotService {
|
||||
JDA getInstance();
|
||||
GuildChannelMember getServerChannelUser(Long serverId, Long channelId, Long userId);
|
||||
Member getMemberInServer(Long serverId, Long memberId);
|
||||
Member getMemberInServer(AUserInAServer aUserInAServer);
|
||||
Member getMemberInServer(AServer server, AUser member);
|
||||
CompletableFuture<Void> deleteMessage(Long serverId, Long channelId, Long messageId);
|
||||
Optional<Emote> getEmote(Long serverId, AEmote emote);
|
||||
|
||||
@@ -12,7 +12,9 @@ import java.util.concurrent.CompletableFuture;
|
||||
|
||||
public interface ChannelService {
|
||||
void sendTextInAChannel(String text, AChannel channel);
|
||||
void sendTextInAChannel(String text, TextChannel channel);
|
||||
CompletableFuture<Message> sendTextInAChannelFuture(String text, AChannel channel);
|
||||
CompletableFuture<Message> sendTextInAChannelFuture(String text, TextChannel channel);
|
||||
CompletableFuture<Message> sendEmbedInAChannelFuture(MessageEmbed embed, AChannel channel);
|
||||
CompletableFuture<Message> sendEmbedInAChannelFuture(MessageEmbed embed, TextChannel channel);
|
||||
List<CompletableFuture<Message>> sendMessageToEndInAChannel(MessageToSend messageToSend, AChannel channel);
|
||||
|
||||
@@ -1,8 +1,11 @@
|
||||
package dev.sheldan.abstracto.core.service;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.database.AChannel;
|
||||
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
||||
import dev.sheldan.abstracto.templating.model.MessageToSend;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import net.dv8tion.jda.api.entities.TextChannel;
|
||||
import net.dv8tion.jda.api.entities.User;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
@@ -12,4 +15,6 @@ public interface MessageService {
|
||||
CompletableFuture<Void> deleteMessageInChannelInServer(Long serverId, Long channelId, Long messageId);
|
||||
CompletableFuture<Message> createStatusMessage(MessageToSend messageToSend, AChannel channel);
|
||||
void updateStatusMessage(AChannel channel, Long messageId, MessageToSend messageToSend);
|
||||
void sendMessageToUser(AUserInAServer userInAServer, String text, TextChannel feedbackChannel);
|
||||
void sendMessageToUser(User user, String text, TextChannel feedbackChannel);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user