mirror of
https://github.com/Sheldan/abstracto.git
synced 2026-03-21 12:52:05 +00:00
added header message containing information about the user the mod mail thread has been opened for
This commit is contained in:
@@ -15,6 +15,7 @@ import java.util.List;
|
||||
public interface ModMailThreadRepository extends JpaRepository<ModMailThread, Long> {
|
||||
ModMailThread findByChannel(AChannel channel);
|
||||
List<ModMailThread> findByUser(AUserInAServer aUserInAServer);
|
||||
ModMailThread findTopByUserOrderByClosedDesc(AUserInAServer aUserInAServer);
|
||||
ModMailThread findByUser_UserReferenceAndStateNot(AUser user, ModMailThreadState state);
|
||||
List<ModMailThread> findByServerAndState(AServer server, ModMailThreadState state);
|
||||
ModMailThread findByUserAndStateNot(AUserInAServer userInAServer, ModMailThreadState state);
|
||||
|
||||
@@ -87,8 +87,7 @@ public class ModMailThreadServiceBean implements ModMailThreadService {
|
||||
CompletableFuture<TextChannel> textChannel = channelService.createTextChannel(user.getName() + user.getDiscriminator(), aUserInAServer.getAUserInAServer().getServerReference(), categoryId);
|
||||
|
||||
textChannel.thenAccept(channel -> {
|
||||
self.createThreadObject(channel, aUserInAServer);
|
||||
self.sendWelcomeMessage(channel, aUserInAServer);
|
||||
self.performModMailThreadSetup(aUserInAServer, channel);
|
||||
}).exceptionally(throwable -> {
|
||||
log.error("Failed to create mod mail thread", throwable);
|
||||
sendModMailFailure("modmail_exception_failed_to_create_mod_mail_thread", aUserInAServer.getAUserInAServer(), null, feedBackChannel, throwable);
|
||||
@@ -97,6 +96,11 @@ public class ModMailThreadServiceBean implements ModMailThreadService {
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public void performModMailThreadSetup(FullUser aUserInAServer, TextChannel channel) {
|
||||
createThreadObject(channel, aUserInAServer);
|
||||
sendModMailHeader(channel, aUserInAServer);
|
||||
}
|
||||
|
||||
public void createThreadObject(TextChannel channel, FullUser user) {
|
||||
AChannel channel2 = channelManagementService.createChannel(channel.getIdLong(), AChannelType.TEXT, user.getAUserInAServer().getServerReference());
|
||||
log.info("Creating mod mail thread in channel {} with db channel {}", channel.getIdLong(), channel2.getId());
|
||||
@@ -162,12 +166,17 @@ public class ModMailThreadServiceBean implements ModMailThreadService {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendWelcomeMessage(TextChannel channel, FullUser aUserInAServer) {
|
||||
String text = templateService.renderTemplate("modmail_welcome_message", new Object());
|
||||
channel.sendMessage(text).queue(message -> {}, throwable -> {
|
||||
log.warn("Failed to send welcome message to user {}", aUserInAServer.getAUserInAServer().getUserReference().getId());
|
||||
});
|
||||
|
||||
private void sendModMailHeader(TextChannel channel, FullUser aUserInAServer) {
|
||||
ModMailThread latestThread = modMailThreadManagementService.getLatestModMailThread(aUserInAServer.getAUserInAServer());
|
||||
List<ModMailThread> oldThreads = modMailThreadManagementService.getModMailThreadForUser(aUserInAServer.getAUserInAServer());
|
||||
ModMailThreaderHeader header = ModMailThreaderHeader
|
||||
.builder()
|
||||
.threadUser(aUserInAServer)
|
||||
.latestModMailThread(latestThread)
|
||||
.pastModMailThreads((long)oldThreads.size())
|
||||
.build();
|
||||
channelService.sendTemplateInChannel("modmail_thread_header", header, channel);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -53,6 +53,11 @@ public class ModMailThreadManagementServiceBean implements ModMailThreadManageme
|
||||
return modMailThreadRepository.findByUser(aUserInAServer);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ModMailThread getLatestModMailThread(AUserInAServer aUserInAServer) {
|
||||
return modMailThreadRepository.findTopByUserOrderByClosedDesc(aUserInAServer);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void createModMailThread(AUserInAServer userInAServer, AChannel channel) {
|
||||
ModMailThread thread = ModMailThread
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"author": {
|
||||
"name": "${threadUser.member.effectiveName}",
|
||||
"avatar": "${threadUser.member.user.effectiveAvatarUrl}"
|
||||
},
|
||||
"color" : {
|
||||
"r": 200,
|
||||
"g": 0,
|
||||
"b": 255
|
||||
},
|
||||
<#assign user>${threadUser.member.effectiveName}#${threadUser.member.user.discriminator} (${threadUser.member.user.id})</#assign>
|
||||
<#assign joinDate>${threadUser.member.timeJoined}</#assign>
|
||||
<#assign roles><#list threadUser.member.roles as role>${role.asMention}<#sep>,<#else>No roles</#list></#assign>
|
||||
<#assign threadCount>3</#assign>
|
||||
"description": "<#include "modmail_thread_header_embed_description">"
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package dev.sheldan.abstracto.modmail.models.template;
|
||||
|
||||
import dev.sheldan.abstracto.core.models.FullUser;
|
||||
import dev.sheldan.abstracto.modmail.models.database.ModMailThread;
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@Builder
|
||||
public class ModMailThreaderHeader {
|
||||
private FullUser threadUser;
|
||||
private ModMailThread latestModMailThread;
|
||||
private Long pastModMailThreads;
|
||||
}
|
||||
@@ -8,7 +8,6 @@ import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
||||
import dev.sheldan.abstracto.modmail.models.database.ModMailThread;
|
||||
import net.dv8tion.jda.api.entities.Message;
|
||||
import net.dv8tion.jda.api.entities.MessageChannel;
|
||||
import net.dv8tion.jda.api.entities.TextChannel;
|
||||
|
||||
public interface ModMailThreadService {
|
||||
void createModMailThreadForUser(FullUser userInAServer, MessageChannel feedBackChannel);
|
||||
@@ -16,7 +15,6 @@ public interface ModMailThreadService {
|
||||
boolean hasOpenThread(AUser user);
|
||||
void setModMailCategoryTo(AServer server, Long categoryId);
|
||||
void createModMailPrompt(AUser user, MessageChannel messageChannel);
|
||||
void sendWelcomeMessage(TextChannel channel, FullUser aUserInAServer);
|
||||
void relayMessageToModMailThread(ModMailThread modMailThread, Message message);
|
||||
void relayMessageToDm(ModMailThread modMailThread, String text, Message message, Boolean anonymous, MessageChannel feedBack);
|
||||
void closeModMailThread(ModMailThread modMailThread, MessageChannel feedBack, String note);
|
||||
|
||||
@@ -5,7 +5,6 @@ import dev.sheldan.abstracto.core.models.database.AUser;
|
||||
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
|
||||
import dev.sheldan.abstracto.modmail.models.database.ModMailThread;
|
||||
import dev.sheldan.abstracto.modmail.models.database.ModMailThreadState;
|
||||
import net.dv8tion.jda.api.entities.TextChannel;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@@ -16,6 +15,7 @@ public interface ModMailThreadManagementService {
|
||||
ModMailThread getOpenModmailThreadForUser(AUserInAServer userInAServer);
|
||||
ModMailThread getOpenModmailThreadForUser(AUser user);
|
||||
List<ModMailThread> getModMailThreadForUser(AUserInAServer aUserInAServer);
|
||||
ModMailThread getLatestModMailThread(AUserInAServer aUserInAServer);
|
||||
void createModMailThread(AUserInAServer userInAServer, AChannel channel);
|
||||
void setModMailThreadState(ModMailThread modMailThread, ModMailThreadState newState);
|
||||
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
This is a mod mail thread concerning ${user}.
|
||||
The user has the roles ${roles} and joined on ${joinDate}
|
||||
There were ${threadCount} threads in the past.
|
||||
@@ -31,9 +31,9 @@ public class InstantMethod implements TemplateMethodModelEx {
|
||||
}
|
||||
|
||||
String formatString = ((SimpleScalar) arguments.get(1)).getAsString();
|
||||
Instant duration = (Instant) wrappedObject;
|
||||
Instant timeStamp = (Instant) wrappedObject;
|
||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(formatString)
|
||||
.withZone(ZoneId.systemDefault());
|
||||
return formatter.format(duration);
|
||||
return formatter.format(timeStamp);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user