mirror of
https://github.com/Sheldan/abstracto.git
synced 2026-04-23 06:09:02 +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.AbstractConditionableCommand;
|
||||||
import dev.sheldan.abstracto.core.command.condition.CommandCondition;
|
import dev.sheldan.abstracto.core.command.condition.CommandCondition;
|
||||||
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
|
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.CommandContext;
|
||||||
import dev.sheldan.abstracto.core.command.execution.CommandResult;
|
import dev.sheldan.abstracto.core.command.execution.CommandResult;
|
||||||
import dev.sheldan.abstracto.core.config.FeatureEnum;
|
import dev.sheldan.abstracto.core.config.FeatureEnum;
|
||||||
import dev.sheldan.abstracto.modmail.commands.condition.RequiresModMailCondition;
|
import dev.sheldan.abstracto.modmail.commands.condition.RequiresModMailCondition;
|
||||||
import dev.sheldan.abstracto.modmail.config.ModMailFeatures;
|
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.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
@@ -19,14 +25,32 @@ public class AnonReply extends AbstractConditionableCommand {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private RequiresModMailCondition requiresModMailCondition;
|
private RequiresModMailCondition requiresModMailCondition;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ModMailThreadService modMailThreadService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ModMailThreadManagementService modMailThreadManagementService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CommandResult execute(CommandContext commandContext) {
|
public CommandResult execute(CommandContext commandContext) {
|
||||||
return null;
|
ModMailThread thread = modMailThreadManagementService.getByChannel(commandContext.getUserInitiatedContext().getChannel());
|
||||||
|
modMailThreadService.relayMessageToDm(thread, commandContext.getMessage(), true);
|
||||||
|
return CommandResult.fromSuccess();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CommandConfiguration getConfiguration() {
|
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
|
@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.condition.AbstractConditionableCommand;
|
||||||
import dev.sheldan.abstracto.core.command.config.CommandConfiguration;
|
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.CommandContext;
|
||||||
import dev.sheldan.abstracto.core.command.execution.CommandResult;
|
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.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.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 org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
public class Contact extends AbstractConditionableCommand {
|
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
|
@Override
|
||||||
public CommandResult execute(CommandContext commandContext) {
|
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
|
@Override
|
||||||
public CommandConfiguration getConfiguration() {
|
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
|
@Override
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ public class Reply extends AbstractConditionableCommand {
|
|||||||
@Override
|
@Override
|
||||||
public CommandResult execute(CommandContext commandContext) {
|
public CommandResult execute(CommandContext commandContext) {
|
||||||
ModMailThread thread = modMailThreadManagementService.getByChannel(commandContext.getUserInitiatedContext().getChannel());
|
ModMailThread thread = modMailThreadManagementService.getByChannel(commandContext.getUserInitiatedContext().getChannel());
|
||||||
modMailThreadService.relayMessageToDm(thread, commandContext.getMessage());
|
modMailThreadService.relayMessageToDm(thread, commandContext.getMessage(), false);
|
||||||
return CommandResult.fromSuccess();
|
return CommandResult.fromSuccess();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ import com.jagrosh.jdautilities.commons.waiter.EventWaiter;
|
|||||||
import com.jagrosh.jdautilities.menu.ButtonMenu;
|
import com.jagrosh.jdautilities.menu.ButtonMenu;
|
||||||
import dev.sheldan.abstracto.core.models.FullGuild;
|
import dev.sheldan.abstracto.core.models.FullGuild;
|
||||||
import dev.sheldan.abstracto.core.models.FullUser;
|
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.models.database.*;
|
||||||
import dev.sheldan.abstracto.core.service.BotService;
|
import dev.sheldan.abstracto.core.service.BotService;
|
||||||
import dev.sheldan.abstracto.core.service.ChannelService;
|
import dev.sheldan.abstracto.core.service.ChannelService;
|
||||||
@@ -173,7 +172,7 @@ public class ModMailThreadServiceBean implements ModMailThreadService {
|
|||||||
.postedMessage(message)
|
.postedMessage(message)
|
||||||
.threadUser(fullUser)
|
.threadUser(fullUser)
|
||||||
.build();
|
.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<CompletableFuture<Message>> completableFutures = channelService.sendMessageToEndInTextChannel(messageToSend, textChannel);
|
||||||
List<Message> messages = new ArrayList<>();
|
List<Message> messages = new ArrayList<>();
|
||||||
completableFutures.forEach(messageCompletableFuture -> {
|
completableFutures.forEach(messageCompletableFuture -> {
|
||||||
@@ -188,17 +187,17 @@ public class ModMailThreadServiceBean implements ModMailThreadService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@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());
|
User userById = botService.getInstance().getUserById(modMailThread.getUser().getUserReference().getId());
|
||||||
if(userById != null) {
|
if(userById != null) {
|
||||||
userById.openPrivateChannel().queue(privateChannel -> {
|
userById.openPrivateChannel().queue(privateChannel -> {
|
||||||
self.sendReply(modMailThread, message, privateChannel);
|
self.sendReply(modMailThread, message, privateChannel, anonymous);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Transactional
|
@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());
|
AUserInAServer moderator = userInServerManagementService.loadUser(message.getMember());
|
||||||
Member userInGuild = botService.getMemberInServer(modMailThread.getUser());
|
Member userInGuild = botService.getMemberInServer(modMailThread.getUser());
|
||||||
FullUser moderatorUser = FullUser
|
FullUser moderatorUser = FullUser
|
||||||
@@ -230,7 +229,7 @@ public class ModMailThreadServiceBean implements ModMailThreadService {
|
|||||||
log.error("Error while executing send message to reply to user.", e);
|
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})"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
package dev.sheldan.abstracto.modmail.models.template;
|
||||||
|
|
||||||
|
import dev.sheldan.abstracto.core.models.context.UserInitiatedServerContext;
|
||||||
|
import dev.sheldan.abstracto.core.utils.ChannelUtils;
|
||||||
|
import dev.sheldan.abstracto.modmail.models.database.ModMailThread;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.Setter;
|
||||||
|
import lombok.experimental.SuperBuilder;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
@SuperBuilder
|
||||||
|
public class ModMailThreadExistsModel extends UserInitiatedServerContext {
|
||||||
|
private ModMailThread existingModMailThread;
|
||||||
|
|
||||||
|
public String getThreadUrl() {
|
||||||
|
return ChannelUtils.buildChannelUrl(existingModMailThread.getServer().getId(), existingModMailThread.getChannel().getId());
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -18,5 +18,5 @@ public interface ModMailThreadService {
|
|||||||
void createModMailPrompt(AUser user, MessageChannel messageChannel);
|
void createModMailPrompt(AUser user, MessageChannel messageChannel);
|
||||||
void sendWelcomeMessage(TextChannel channel, FullUser aUserInAServer);
|
void sendWelcomeMessage(TextChannel channel, FullUser aUserInAServer);
|
||||||
void relayMessageToModMailThread(ModMailThread modMailThread, Message message);
|
void relayMessageToModMailThread(ModMailThread modMailThread, Message message);
|
||||||
void relayMessageToDm(ModMailThread modMailThread, Message message);
|
void relayMessageToDm(ModMailThread modMailThread, Message message, Boolean anonymous);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,12 @@
|
|||||||
|
package dev.sheldan.abstracto.core.utils;
|
||||||
|
|
||||||
|
public class ChannelUtils {
|
||||||
|
|
||||||
|
private ChannelUtils() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String buildChannelUrl(Long serverId, Long channelId) {
|
||||||
|
return String.format("https://discordapp.com/channels/%s/%s/", serverId, channelId);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
Jump
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
Link
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
Thread already exists.
|
||||||
Reference in New Issue
Block a user