added header message containing information about the user the mod mail thread has been opened for

This commit is contained in:
Sheldan
2020-05-07 00:26:19 +02:00
parent cb1a14e46b
commit 6cf69af438
9 changed files with 61 additions and 13 deletions

View File

@@ -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);

View File

@@ -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

View File

@@ -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

View File

@@ -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">"
}

View File

@@ -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;
}

View File

@@ -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);

View File

@@ -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);

View File

@@ -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.

View File

@@ -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);
}
}