mirror of
https://github.com/Sheldan/abstracto.git
synced 2026-03-24 13:44:33 +00:00
added some utility methods to bot service
reworked message cache to not be jda messages, but own objects: cachedMessages, jda messages should not be kept around added listener to listen for message links, to represent them in an embed (or embeds) added offsetDateTime handling for gson introduced a way on how to handle async transaction handling for suggestions and message loading (self reference with another method with transactional) added timestamp support to embeds
This commit is contained in:
@@ -1,7 +1,8 @@
|
||||
package dev.sheldan.abstracto.core;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.CachedMessage;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
|
||||
public interface MessageTextUpdatedListener {
|
||||
void execute(Message messageBefore, Message messageAfter);
|
||||
void execute(CachedMessage messageBefore, Message messageAfter);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
package dev.sheldan.abstracto.core.models;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.embed.CachedEmbed;
|
||||
import dev.sheldan.abstracto.core.utils.MessageUtils;
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.time.OffsetDateTime;
|
||||
import java.util.List;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@Builder
|
||||
public class CachedMessage {
|
||||
private Long serverId;
|
||||
private Long channelId;
|
||||
private Long messageId;
|
||||
private Long authorId;
|
||||
private OffsetDateTime timeCreated;
|
||||
private String content;
|
||||
private List<CachedEmbed> embeds;
|
||||
private List<String> attachmentUrls;
|
||||
|
||||
public String getMessageUrl() {
|
||||
return MessageUtils.buildMessageUrl(this.serverId ,this.channelId, this.messageId);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package dev.sheldan.abstracto.core.models;
|
||||
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import net.dv8tion.jda.api.entities.Guild;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.entities.TextChannel;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@Builder
|
||||
public class ServerChannelUser {
|
||||
public Guild guild;
|
||||
private TextChannel textChannel;
|
||||
private Member member;
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
package dev.sheldan.abstracto.core.models.embed;
|
||||
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.time.OffsetDateTime;
|
||||
import java.util.List;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@Builder
|
||||
public class CachedEmbed {
|
||||
private EmbedAuthor author;
|
||||
private EmbedTitle title;
|
||||
private EmbedColor color;
|
||||
private String description;
|
||||
private String thumbnail;
|
||||
private String imageUrl;
|
||||
private List<EmbedField> fields;
|
||||
private EmbedFooter footer;
|
||||
private OffsetDateTime timeStamp;
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package dev.sheldan.abstracto.core.models.embed;
|
||||
|
||||
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@Builder
|
||||
public class EmbedAuthor {
|
||||
private String name;
|
||||
private String url;
|
||||
private String avatar;
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package dev.sheldan.abstracto.core.models.embed;
|
||||
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
@Setter
|
||||
@Getter
|
||||
@Builder
|
||||
public class EmbedColor {
|
||||
private Integer r;
|
||||
private Integer g;
|
||||
private Integer b;
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package dev.sheldan.abstracto.core.models.embed;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.time.OffsetDateTime;
|
||||
import java.util.List;
|
||||
|
||||
@Getter @Setter
|
||||
public class EmbedConfiguration {
|
||||
private EmbedAuthor author;
|
||||
private EmbedTitle title;
|
||||
private EmbedColor color;
|
||||
private String description;
|
||||
private String thumbnail;
|
||||
private String imageUrl;
|
||||
private List<EmbedField> fields;
|
||||
private EmbedFooter footer;
|
||||
private OffsetDateTime timeStamp;
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package dev.sheldan.abstracto.core.models.embed;
|
||||
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@Builder
|
||||
public class EmbedField {
|
||||
private String name;
|
||||
private String value;
|
||||
private Boolean inline;
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package dev.sheldan.abstracto.core.models.embed;
|
||||
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@Builder
|
||||
public class EmbedFooter {
|
||||
private String text;
|
||||
private String icon;
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
package dev.sheldan.abstracto.core.models.embed;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
@Getter @Setter
|
||||
public class EmbedTitle {
|
||||
private String title;
|
||||
private String url;
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package dev.sheldan.abstracto.core.models.listener;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.CachedMessage;
|
||||
import dev.sheldan.abstracto.core.models.UserInitiatedServerContext;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.entities.TextChannel;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@SuperBuilder
|
||||
public class MessageEmbeddedModel extends UserInitiatedServerContext {
|
||||
private CachedMessage embeddedMessage;
|
||||
private TextChannel sourceChannel;
|
||||
private Member author;
|
||||
private Member embeddingUser;
|
||||
}
|
||||
@@ -1,6 +1,10 @@
|
||||
package dev.sheldan.abstracto.core.service;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.ServerChannelUser;
|
||||
import net.dv8tion.jda.api.JDA;
|
||||
import net.dv8tion.jda.api.entities.Guild;
|
||||
import net.dv8tion.jda.api.entities.Member;
|
||||
import net.dv8tion.jda.api.entities.TextChannel;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.security.auth.login.LoginException;
|
||||
@@ -9,5 +13,9 @@ import javax.security.auth.login.LoginException;
|
||||
public interface Bot {
|
||||
void login() throws LoginException;
|
||||
JDA getInstance();
|
||||
ServerChannelUser getServerChannelUser(Long serverId, Long channelId, Long userId);
|
||||
Member getMemberInServer(Long serverId, Long memberId);
|
||||
TextChannel getTextChannelFromServer(Long serverId, Long textChannelId);
|
||||
Guild getGuildById(Long serverId);
|
||||
void shutdown();
|
||||
}
|
||||
|
||||
@@ -1,9 +1,14 @@
|
||||
package dev.sheldan.abstracto.core.service;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.CachedMessage;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
|
||||
public interface MessageCache {
|
||||
Message putMessageInCache(Message message);
|
||||
Message getMessageFromCache(Message message);
|
||||
Message getMessageFromCache(Long messageId, Long textChannelId, Long guildId);
|
||||
CachedMessage putMessageInCache(Message message);
|
||||
CachedMessage getMessageFromCache(Message message) throws ExecutionException, InterruptedException;
|
||||
CachedMessage getMessageFromCache(Long guildId, Long textChannelId, Long messageId) throws ExecutionException, InterruptedException;
|
||||
CompletableFuture<Message> getMessage(Long serverId, Long textChannelId, Long messageId);
|
||||
}
|
||||
|
||||
@@ -3,10 +3,12 @@ package dev.sheldan.abstracto.core.utils;
|
||||
import dev.sheldan.abstracto.core.management.ChannelManagementService;
|
||||
import dev.sheldan.abstracto.core.management.ServerManagementService;
|
||||
import dev.sheldan.abstracto.core.management.UserManagementService;
|
||||
import dev.sheldan.abstracto.core.models.CachedMessage;
|
||||
import dev.sheldan.abstracto.core.models.ServerChannelUser;
|
||||
import dev.sheldan.abstracto.core.models.UserInitiatedServerContext;
|
||||
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
||||
import dev.sheldan.abstracto.core.service.Bot;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@@ -26,18 +28,22 @@ public class ContextUtils {
|
||||
@Autowired
|
||||
private ServerManagementService serverManagementService;
|
||||
|
||||
public <T extends UserInitiatedServerContext> UserInitiatedServerContext fromMessage(Message message, Class<T> clazz) {
|
||||
@Autowired
|
||||
private Bot bot;
|
||||
|
||||
public <T extends UserInitiatedServerContext> UserInitiatedServerContext fromMessage(CachedMessage message, Class<T> clazz) {
|
||||
Method m = null;
|
||||
ServerChannelUser serverChannelUser = bot.getServerChannelUser(message.getServerId(), message.getChannelId(), message.getAuthorId());
|
||||
try {
|
||||
m = clazz.getMethod("builder");
|
||||
UserInitiatedServerContext.UserInitiatedServerContextBuilder<?, ?> builder = (UserInitiatedServerContext.UserInitiatedServerContextBuilder) m.invoke(null, null);
|
||||
AUserInAServer aUserInAServer = userManagementService.loadUser(message.getMember());
|
||||
AUserInAServer aUserInAServer = userManagementService.loadUser(message.getServerId(), message.getAuthorId());
|
||||
return builder
|
||||
.member(message.getMember())
|
||||
.guild(message.getGuild())
|
||||
.textChannel(message.getTextChannel())
|
||||
.channel(channelManagementService.loadChannel(message.getTextChannel().getIdLong()))
|
||||
.server(serverManagementService.loadServer(message.getGuild().getIdLong()))
|
||||
.member(serverChannelUser.getMember())
|
||||
.guild(serverChannelUser.getGuild())
|
||||
.textChannel(serverChannelUser.getTextChannel())
|
||||
.channel(channelManagementService.loadChannel(message.getChannelId()))
|
||||
.server(serverManagementService.loadServer(message.getServerId()))
|
||||
.aUserInAServer(aUserInAServer)
|
||||
.user(aUserInAServer.getUserReference())
|
||||
.build();
|
||||
|
||||
Reference in New Issue
Block a user