mirror of
https://github.com/Sheldan/abstracto.git
synced 2026-03-30 15:11:38 +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> {
|
public interface ModMailThreadRepository extends JpaRepository<ModMailThread, Long> {
|
||||||
ModMailThread findByChannel(AChannel channel);
|
ModMailThread findByChannel(AChannel channel);
|
||||||
List<ModMailThread> findByUser(AUserInAServer aUserInAServer);
|
List<ModMailThread> findByUser(AUserInAServer aUserInAServer);
|
||||||
|
ModMailThread findTopByUserOrderByClosedDesc(AUserInAServer aUserInAServer);
|
||||||
ModMailThread findByUser_UserReferenceAndStateNot(AUser user, ModMailThreadState state);
|
ModMailThread findByUser_UserReferenceAndStateNot(AUser user, ModMailThreadState state);
|
||||||
List<ModMailThread> findByServerAndState(AServer server, ModMailThreadState state);
|
List<ModMailThread> findByServerAndState(AServer server, ModMailThreadState state);
|
||||||
ModMailThread findByUserAndStateNot(AUserInAServer userInAServer, 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);
|
CompletableFuture<TextChannel> textChannel = channelService.createTextChannel(user.getName() + user.getDiscriminator(), aUserInAServer.getAUserInAServer().getServerReference(), categoryId);
|
||||||
|
|
||||||
textChannel.thenAccept(channel -> {
|
textChannel.thenAccept(channel -> {
|
||||||
self.createThreadObject(channel, aUserInAServer);
|
self.performModMailThreadSetup(aUserInAServer, channel);
|
||||||
self.sendWelcomeMessage(channel, aUserInAServer);
|
|
||||||
}).exceptionally(throwable -> {
|
}).exceptionally(throwable -> {
|
||||||
log.error("Failed to create mod mail thread", throwable);
|
log.error("Failed to create mod mail thread", throwable);
|
||||||
sendModMailFailure("modmail_exception_failed_to_create_mod_mail_thread", aUserInAServer.getAUserInAServer(), null, feedBackChannel, 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
|
@Transactional
|
||||||
|
public void performModMailThreadSetup(FullUser aUserInAServer, TextChannel channel) {
|
||||||
|
createThreadObject(channel, aUserInAServer);
|
||||||
|
sendModMailHeader(channel, aUserInAServer);
|
||||||
|
}
|
||||||
|
|
||||||
public void createThreadObject(TextChannel channel, FullUser user) {
|
public void createThreadObject(TextChannel channel, FullUser user) {
|
||||||
AChannel channel2 = channelManagementService.createChannel(channel.getIdLong(), AChannelType.TEXT, user.getAUserInAServer().getServerReference());
|
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());
|
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) {
|
private void sendModMailHeader(TextChannel channel, FullUser aUserInAServer) {
|
||||||
String text = templateService.renderTemplate("modmail_welcome_message", new Object());
|
ModMailThread latestThread = modMailThreadManagementService.getLatestModMailThread(aUserInAServer.getAUserInAServer());
|
||||||
channel.sendMessage(text).queue(message -> {}, throwable -> {
|
List<ModMailThread> oldThreads = modMailThreadManagementService.getModMailThreadForUser(aUserInAServer.getAUserInAServer());
|
||||||
log.warn("Failed to send welcome message to user {}", aUserInAServer.getAUserInAServer().getUserReference().getId());
|
ModMailThreaderHeader header = ModMailThreaderHeader
|
||||||
});
|
.builder()
|
||||||
|
.threadUser(aUserInAServer)
|
||||||
|
.latestModMailThread(latestThread)
|
||||||
|
.pastModMailThreads((long)oldThreads.size())
|
||||||
|
.build();
|
||||||
|
channelService.sendTemplateInChannel("modmail_thread_header", header, channel);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -53,6 +53,11 @@ public class ModMailThreadManagementServiceBean implements ModMailThreadManageme
|
|||||||
return modMailThreadRepository.findByUser(aUserInAServer);
|
return modMailThreadRepository.findByUser(aUserInAServer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ModMailThread getLatestModMailThread(AUserInAServer aUserInAServer) {
|
||||||
|
return modMailThreadRepository.findTopByUserOrderByClosedDesc(aUserInAServer);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void createModMailThread(AUserInAServer userInAServer, AChannel channel) {
|
public void createModMailThread(AUserInAServer userInAServer, AChannel channel) {
|
||||||
ModMailThread thread = ModMailThread
|
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 dev.sheldan.abstracto.modmail.models.database.ModMailThread;
|
||||||
import net.dv8tion.jda.api.entities.Message;
|
import net.dv8tion.jda.api.entities.Message;
|
||||||
import net.dv8tion.jda.api.entities.MessageChannel;
|
import net.dv8tion.jda.api.entities.MessageChannel;
|
||||||
import net.dv8tion.jda.api.entities.TextChannel;
|
|
||||||
|
|
||||||
public interface ModMailThreadService {
|
public interface ModMailThreadService {
|
||||||
void createModMailThreadForUser(FullUser userInAServer, MessageChannel feedBackChannel);
|
void createModMailThreadForUser(FullUser userInAServer, MessageChannel feedBackChannel);
|
||||||
@@ -16,7 +15,6 @@ public interface ModMailThreadService {
|
|||||||
boolean hasOpenThread(AUser user);
|
boolean hasOpenThread(AUser user);
|
||||||
void setModMailCategoryTo(AServer server, Long categoryId);
|
void setModMailCategoryTo(AServer server, Long categoryId);
|
||||||
void createModMailPrompt(AUser user, MessageChannel messageChannel);
|
void createModMailPrompt(AUser user, MessageChannel messageChannel);
|
||||||
void sendWelcomeMessage(TextChannel channel, FullUser aUserInAServer);
|
|
||||||
void relayMessageToModMailThread(ModMailThread modMailThread, Message message);
|
void relayMessageToModMailThread(ModMailThread modMailThread, Message message);
|
||||||
void relayMessageToDm(ModMailThread modMailThread, String text, Message message, Boolean anonymous, MessageChannel feedBack);
|
void relayMessageToDm(ModMailThread modMailThread, String text, Message message, Boolean anonymous, MessageChannel feedBack);
|
||||||
void closeModMailThread(ModMailThread modMailThread, MessageChannel feedBack, String note);
|
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.core.models.database.AUserInAServer;
|
||||||
import dev.sheldan.abstracto.modmail.models.database.ModMailThread;
|
import dev.sheldan.abstracto.modmail.models.database.ModMailThread;
|
||||||
import dev.sheldan.abstracto.modmail.models.database.ModMailThreadState;
|
import dev.sheldan.abstracto.modmail.models.database.ModMailThreadState;
|
||||||
import net.dv8tion.jda.api.entities.TextChannel;
|
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@@ -16,6 +15,7 @@ public interface ModMailThreadManagementService {
|
|||||||
ModMailThread getOpenModmailThreadForUser(AUserInAServer userInAServer);
|
ModMailThread getOpenModmailThreadForUser(AUserInAServer userInAServer);
|
||||||
ModMailThread getOpenModmailThreadForUser(AUser user);
|
ModMailThread getOpenModmailThreadForUser(AUser user);
|
||||||
List<ModMailThread> getModMailThreadForUser(AUserInAServer aUserInAServer);
|
List<ModMailThread> getModMailThreadForUser(AUserInAServer aUserInAServer);
|
||||||
|
ModMailThread getLatestModMailThread(AUserInAServer aUserInAServer);
|
||||||
void createModMailThread(AUserInAServer userInAServer, AChannel channel);
|
void createModMailThread(AUserInAServer userInAServer, AChannel channel);
|
||||||
void setModMailThreadState(ModMailThread modMailThread, ModMailThreadState newState);
|
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();
|
String formatString = ((SimpleScalar) arguments.get(1)).getAsString();
|
||||||
Instant duration = (Instant) wrappedObject;
|
Instant timeStamp = (Instant) wrappedObject;
|
||||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(formatString)
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(formatString)
|
||||||
.withZone(ZoneId.systemDefault());
|
.withZone(ZoneId.systemDefault());
|
||||||
return formatter.format(duration);
|
return formatter.format(timeStamp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user