added user facing message in case the initial modmail creation fails

This commit is contained in:
Sheldan
2020-05-06 23:41:35 +02:00
parent feb9ce07ee
commit cb1a14e46b
6 changed files with 31 additions and 10 deletions

View File

@@ -60,7 +60,7 @@ public class Contact extends AbstractConditionableCommand {
.aUserInAServer(user)
.member(targetUser)
.build();
modMailThreadService.createModMailThreadForUser(fullUser);
modMailThreadService.createModMailThreadForUser(fullUser, commandContext.getChannel());
}
return CommandResult.fromSuccess();
}

View File

@@ -81,7 +81,7 @@ public class ModMailThreadServiceBean implements ModMailThreadService {
@Override
public void createModMailThreadForUser(FullUser aUserInAServer) {
public void createModMailThreadForUser(FullUser aUserInAServer, MessageChannel feedBackChannel) {
Long categoryId = configService.getLongValue(MODMAIL_CATEGORY, aUserInAServer.getAUserInAServer().getServerReference().getId());
User user = aUserInAServer.getMember().getUser();
CompletableFuture<TextChannel> textChannel = channelService.createTextChannel(user.getName() + user.getDiscriminator(), aUserInAServer.getAUserInAServer().getServerReference(), categoryId);
@@ -89,6 +89,10 @@ public class ModMailThreadServiceBean implements ModMailThreadService {
textChannel.thenAccept(channel -> {
self.createThreadObject(channel, aUserInAServer);
self.sendWelcomeMessage(channel, aUserInAServer);
}).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);
return null;
});
}
@@ -150,7 +154,7 @@ public class ModMailThreadServiceBean implements ModMailThreadService {
AUserInAServer chosenServer = choices.get(reactionEmote.getEmoji());
Member memberInServer = botService.getMemberInServer(chosenServer);
FullUser fullUser = FullUser.builder().member(memberInServer).aUserInAServer(chosenServer).build();
self.createModMailThreadForUser(fullUser);
self.createModMailThreadForUser(fullUser, channel);
botService.getInstance().removeEventListener(waiter);
})
.build();
@@ -224,12 +228,12 @@ public class ModMailThreadServiceBean implements ModMailThreadService {
}
}
private void sendModMailFailure(String template, ModMailThread modMailThread, MessageChannel channel, Throwable throwable) {
private void sendModMailFailure(String template, AUserInAServer aUserInAServer, ModMailThread modMailThread, MessageChannel channel, Throwable throwable) {
try {
FullUser fullUser = FullUser
.builder()
.aUserInAServer(modMailThread.getUser())
.member(botService.getMemberInServer(modMailThread.getUser()))
.aUserInAServer(aUserInAServer)
.member(botService.getMemberInServer(aUserInAServer))
.build();
ModMailExceptionModel modMailExceptionModel = ModMailExceptionModel
.builder()
@@ -365,7 +369,7 @@ public class ModMailThreadServiceBean implements ModMailThreadService {
modMailThreadManagementService.setModMailThreadState(modMailThread, ModMailThreadState.MOD_REPLIED);
}).exceptionally(throwable -> {
log.error("Failed to send message to user {}", modMailThread.getUser().getUserReference().getId());
sendModMailFailure("modmail_exception_cannot_message_user", modMailThread, feedBack, throwable);
sendModMailFailure("modmail_exception_cannot_message_user", modMailThread.getUser(), modMailThread, feedBack, throwable);
return null;
});
}

View File

@@ -0,0 +1,12 @@
{
"author": {
"name": "${user.member.effectiveName}",
"avatar": "${user.member.user.effectiveAvatarUrl}"
},
"color" : {
"r": 200,
"g": 0,
"b": 255
},
"description": "<#include "modmail_failed_to_create_mod_mail_thread">"
}

View File

@@ -11,7 +11,7 @@ import net.dv8tion.jda.api.entities.MessageChannel;
import net.dv8tion.jda.api.entities.TextChannel;
public interface ModMailThreadService {
void createModMailThreadForUser(FullUser userInAServer);
void createModMailThreadForUser(FullUser userInAServer, MessageChannel feedBackChannel);
boolean hasOpenThread(AUserInAServer aUserInAServer);
boolean hasOpenThread(AUser user);
void setModMailCategoryTo(AServer server, Long categoryId);

View File

@@ -191,8 +191,12 @@ public class ChannelServiceBean implements ChannelService {
if(categoryById != null) {
return categoryById.createTextChannel(name).submit();
}
return null;
CompletableFuture<TextChannel> objectCompletableFuture = new CompletableFuture<>();
objectCompletableFuture.completeExceptionally(new AbstractoRunTimeException("Mod mail category is not setup."));
return objectCompletableFuture;
}
return null;
CompletableFuture<TextChannel> objectCompletableFuture = new CompletableFuture<>();
objectCompletableFuture.completeExceptionally(new AbstractoRunTimeException("Guild to create mod mail channel for was not found."));
return objectCompletableFuture;
}
}