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