mirror of
https://github.com/Sheldan/abstracto.git
synced 2026-03-09 17:11:00 +00:00
implemented contact command and added check if the thread already exists
added anon reply command
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -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})"
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user