implemented contact command and added check if the thread already exists

added anon reply command
This commit is contained in:
Sheldan
2020-05-06 15:36:13 +02:00
parent a06006d763
commit 54327c3e58
12 changed files with 147 additions and 12 deletions

View File

@@ -3,14 +3,20 @@ package dev.sheldan.abstracto.modmail.commands;
import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand;
import dev.sheldan.abstracto.core.command.condition.CommandCondition;
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
import dev.sheldan.abstracto.core.command.config.HelpInfo;
import dev.sheldan.abstracto.core.command.config.Parameter;
import dev.sheldan.abstracto.core.command.execution.CommandContext;
import dev.sheldan.abstracto.core.command.execution.CommandResult;
import dev.sheldan.abstracto.core.config.FeatureEnum;
import dev.sheldan.abstracto.modmail.commands.condition.RequiresModMailCondition;
import dev.sheldan.abstracto.modmail.config.ModMailFeatures;
import dev.sheldan.abstracto.modmail.models.database.ModMailThread;
import dev.sheldan.abstracto.modmail.service.ModMailThreadService;
import dev.sheldan.abstracto.modmail.service.management.ModMailThreadManagementService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Arrays;
import java.util.List;
@Component
@@ -19,14 +25,32 @@ public class AnonReply extends AbstractConditionableCommand {
@Autowired
private RequiresModMailCondition requiresModMailCondition;
@Autowired
private ModMailThreadService modMailThreadService;
@Autowired
private ModMailThreadManagementService modMailThreadManagementService;
@Override
public CommandResult execute(CommandContext commandContext) {
return null;
ModMailThread thread = modMailThreadManagementService.getByChannel(commandContext.getUserInitiatedContext().getChannel());
modMailThreadService.relayMessageToDm(thread, commandContext.getMessage(), true);
return CommandResult.fromSuccess();
}
@Override
public CommandConfiguration getConfiguration() {
return null;
Parameter responseText = Parameter.builder().name("text").type(String.class).description("The text to reply with").build();
List<Parameter> parameters = Arrays.asList(responseText);
HelpInfo helpInfo = HelpInfo.builder().templated(true).build();
return CommandConfiguration.builder()
.name("anonReply")
.module(ModMailModuleInterface.MODMAIL)
.parameters(parameters)
.help(helpInfo)
.templated(true)
.causesReaction(true)
.build();
}
@Override

View File

@@ -2,22 +2,82 @@ package dev.sheldan.abstracto.modmail.commands;
import dev.sheldan.abstracto.core.command.condition.AbstractConditionableCommand;
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
import dev.sheldan.abstracto.core.command.config.HelpInfo;
import dev.sheldan.abstracto.core.command.config.Parameter;
import dev.sheldan.abstracto.core.command.execution.CommandContext;
import dev.sheldan.abstracto.core.command.execution.CommandResult;
import dev.sheldan.abstracto.core.command.execution.ContextConverter;
import dev.sheldan.abstracto.core.config.FeatureEnum;
import dev.sheldan.abstracto.core.models.FullUser;
import dev.sheldan.abstracto.core.models.database.AUserInAServer;
import dev.sheldan.abstracto.core.service.ChannelService;
import dev.sheldan.abstracto.core.service.management.UserInServerManagementService;
import dev.sheldan.abstracto.modmail.config.ModMailFeatures;
import dev.sheldan.abstracto.modmail.models.database.ModMailThread;
import dev.sheldan.abstracto.modmail.models.template.ModMailThreadExistsModel;
import dev.sheldan.abstracto.modmail.service.ModMailThreadService;
import dev.sheldan.abstracto.modmail.service.management.ModMailThreadManagementService;
import dev.sheldan.abstracto.templating.model.MessageToSend;
import dev.sheldan.abstracto.templating.service.TemplateService;
import net.dv8tion.jda.api.entities.Member;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Arrays;
import java.util.List;
@Component
public class Contact extends AbstractConditionableCommand {
@Autowired
private ModMailThreadService modMailThreadService;
@Autowired
private ModMailThreadManagementService modMailThreadManagementService;
@Autowired
private UserInServerManagementService userManagementService;
@Autowired
private TemplateService templateService;
@Autowired
private ChannelService channelService;
@Override
public CommandResult execute(CommandContext commandContext) {
return null;
Member targetUser = (Member) commandContext.getParameters().getParameters().get(0);
AUserInAServer user = userManagementService.loadUser(targetUser);
ModMailThread existingThread = modMailThreadManagementService.getOpenModmailThreadForUser(user);
if(existingThread != null) {
ModMailThreadExistsModel model = (ModMailThreadExistsModel) ContextConverter.fromCommandContext(commandContext, ModMailThreadExistsModel.class);
model.setExistingModMailThread(existingThread);
MessageToSend messageToSend = templateService.renderEmbedTemplate("modmail_thread_already_exists", model);
channelService.sendMessageToEndInTextChannel(messageToSend, commandContext.getChannel());
} else {
FullUser fullUser = FullUser
.builder()
.aUserInAServer(user)
.member(targetUser)
.build();
modMailThreadService.createModMailThreadForUser(fullUser);
}
return CommandResult.fromSuccess();
}
@Override
public CommandConfiguration getConfiguration() {
return null;
Parameter responseText = Parameter.builder().name("user").type(Member.class).description("The user to contact").build();
List<Parameter> parameters = Arrays.asList(responseText);
HelpInfo helpInfo = HelpInfo.builder().templated(true).build();
return CommandConfiguration.builder()
.name("contact")
.module(ModMailModuleInterface.MODMAIL)
.parameters(parameters)
.help(helpInfo)
.templated(true)
.causesReaction(true)
.build();
}
@Override

View File

@@ -34,7 +34,7 @@ public class Reply extends AbstractConditionableCommand {
@Override
public CommandResult execute(CommandContext commandContext) {
ModMailThread thread = modMailThreadManagementService.getByChannel(commandContext.getUserInitiatedContext().getChannel());
modMailThreadService.relayMessageToDm(thread, commandContext.getMessage());
modMailThreadService.relayMessageToDm(thread, commandContext.getMessage(), false);
return CommandResult.fromSuccess();
}

View File

@@ -4,7 +4,6 @@ import com.jagrosh.jdautilities.commons.waiter.EventWaiter;
import com.jagrosh.jdautilities.menu.ButtonMenu;
import dev.sheldan.abstracto.core.models.FullGuild;
import dev.sheldan.abstracto.core.models.FullUser;
import dev.sheldan.abstracto.core.models.cache.CachedReaction;
import dev.sheldan.abstracto.core.models.database.*;
import dev.sheldan.abstracto.core.service.BotService;
import dev.sheldan.abstracto.core.service.ChannelService;
@@ -173,7 +172,7 @@ public class ModMailThreadServiceBean implements ModMailThreadService {
.postedMessage(message)
.threadUser(fullUser)
.build();
MessageToSend messageToSend = templateService.renderEmbedTemplate("modmail_moderator_message", modMailUserReplyModel);
MessageToSend messageToSend = templateService.renderEmbedTemplate("modmail_user_message_embed", modMailUserReplyModel);
List<CompletableFuture<Message>> completableFutures = channelService.sendMessageToEndInTextChannel(messageToSend, textChannel);
List<Message> messages = new ArrayList<>();
completableFutures.forEach(messageCompletableFuture -> {
@@ -188,17 +187,17 @@ public class ModMailThreadServiceBean implements ModMailThreadService {
}
@Override
public void relayMessageToDm(ModMailThread modMailThread, Message message) {
public void relayMessageToDm(ModMailThread modMailThread, Message message, Boolean anonymous) {
User userById = botService.getInstance().getUserById(modMailThread.getUser().getUserReference().getId());
if(userById != null) {
userById.openPrivateChannel().queue(privateChannel -> {
self.sendReply(modMailThread, message, privateChannel);
self.sendReply(modMailThread, message, privateChannel, anonymous);
});
}
}
@Transactional
public void sendReply(ModMailThread modMailThread, Message message, PrivateChannel privateChannel) {
public void sendReply(ModMailThread modMailThread, Message message, PrivateChannel privateChannel, Boolean anonymous) {
AUserInAServer moderator = userInServerManagementService.loadUser(message.getMember());
Member userInGuild = botService.getMemberInServer(modMailThread.getUser());
FullUser moderatorUser = FullUser
@@ -230,7 +229,7 @@ public class ModMailThreadServiceBean implements ModMailThreadService {
log.error("Error while executing send message to reply to user.", e);
}
});
self.saveMessageIds(messages, modMailThread, moderator, false);
self.saveMessageIds(messages, modMailThread, moderator, anonymous);
});
}

View File

@@ -0,0 +1,18 @@
{
"author": {
"name": "${member.effectiveName}",
"avatar": "${member.user.effectiveAvatarUrl}"
},
"color" : {
"r": 200,
"g": 0,
"b": 255
},
"description": "<#include "modmail_thread_already_exists">",
"fields": [
{
"name": "<#include "modmail_existing_thread_link_field_title">",
"value": "[<#include "modmail_existing_thread_link_content_display_text">](${threadUrl})"
}
]
}