moved default close note to template, added notification if there are no servers available which have mod mail enabled, added check to only present the servers which have the feature mod mail enabled.

This commit is contained in:
Sheldan
2020-05-07 20:20:40 +02:00
parent 6cf69af438
commit 95733c9b98
5 changed files with 59 additions and 32 deletions

View File

@@ -13,6 +13,7 @@ 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 dev.sheldan.abstracto.templating.service.TemplateService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
@@ -32,12 +33,15 @@ public class Close extends AbstractConditionableCommand {
@Autowired
private ModMailThreadService modMailThreadService;
@Autowired
private TemplateService templateService;
@Override
@Transactional
public CommandResult execute(CommandContext commandContext) {
List<Object> parameters = commandContext.getParameters().getParameters();
String note = parameters.size() == 1 ? (String) parameters.get(0) : "no note";
String note = parameters.size() == 1 ? (String) parameters.get(0) : templateService.renderTemplate("modmail_close_default_note", new Object());
ModMailThread thread = modMailThreadManagementService.getByChannel(commandContext.getUserInitiatedContext().getChannel());
modMailThreadService.closeModMailThread(thread, commandContext.getChannel(), note);
return CommandResult.fromSuccess();

View File

@@ -9,6 +9,7 @@ import dev.sheldan.abstracto.core.service.*;
import dev.sheldan.abstracto.core.service.management.ChannelManagementService;
import dev.sheldan.abstracto.core.service.management.UserInServerManagementService;
import dev.sheldan.abstracto.core.service.management.UserInServerService;
import dev.sheldan.abstracto.modmail.config.ModMailFeature;
import dev.sheldan.abstracto.modmail.models.database.ModMailMessage;
import dev.sheldan.abstracto.modmail.models.database.ModMailThread;
import dev.sheldan.abstracto.modmail.models.database.ModMailThreadState;
@@ -71,6 +72,12 @@ public class ModMailThreadServiceBean implements ModMailThreadService {
@Autowired
private UserInServerService userInServerService;
@Autowired
private FeatureFlagService featureFlagService;
@Autowired
private ModMailFeature modMailFeature;
@Autowired
private ModMailThreadServiceBean self;
@@ -130,39 +137,45 @@ public class ModMailThreadServiceBean implements ModMailThreadService {
HashMap<String, AUserInAServer> choices = new HashMap<>();
for (int i = 0; i < knownServers.size(); i++) {
AUserInAServer aUserInAServer = knownServers.get(i);
AServer serverReference = aUserInAServer.getServerReference();
FullGuild guild = FullGuild
.builder()
.guild(botService.getGuildByIdNullable(serverReference.getId()))
.server(serverReference)
.build();
String reactionEmote = NUMBER_EMOJI.get(i);
ServerChoice serverChoice = ServerChoice.builder().guild(guild).reactionEmote(reactionEmote).build();
choices.put(reactionEmote, aUserInAServer);
availableGuilds.add(serverChoice);
if(featureFlagService.isFeatureEnabled(modMailFeature, aUserInAServer.getServerReference())) {
AServer serverReference = aUserInAServer.getServerReference();
FullGuild guild = FullGuild
.builder()
.guild(botService.getGuildByIdNullable(serverReference.getId()))
.server(serverReference)
.build();
String reactionEmote = NUMBER_EMOJI.get(i);
ServerChoice serverChoice = ServerChoice.builder().guild(guild).reactionEmote(reactionEmote).build();
choices.put(reactionEmote, aUserInAServer);
availableGuilds.add(serverChoice);
}
}
if(availableGuilds.size() > 0) {
ModMailServerChooserModel modMailServerChooserModel = ModMailServerChooserModel
.builder()
.commonGuilds(availableGuilds)
.build();
String text = templateService.renderTemplate("modmail_modal_server_choice", modMailServerChooserModel);
// todo dont instantiate directly
EventWaiter waiter = new EventWaiter();
botService.getInstance().addEventListener(waiter);
ButtonMenu menu = new ButtonMenu.Builder()
.setChoices(choices.keySet().toArray(new String[0]))
.setEventWaiter(waiter)
.setDescription(text)
.setAction(reactionEmote -> {
AUserInAServer chosenServer = choices.get(reactionEmote.getEmoji());
Member memberInServer = botService.getMemberInServer(chosenServer);
FullUser fullUser = FullUser.builder().member(memberInServer).aUserInAServer(chosenServer).build();
self.createModMailThreadForUser(fullUser, channel);
botService.getInstance().removeEventListener(waiter);
})
.build();
menu.display(channel);
} else {
channelService.sendTemplateInChannel("modmail_no_server_available", new Object(), channel);
}
ModMailServerChooserModel modMailServerChooserModel = ModMailServerChooserModel
.builder()
.commonGuilds(availableGuilds)
.build();
String text = templateService.renderTemplate("modmail_modal_server_choice", modMailServerChooserModel);
// todo dont instantiate directly
EventWaiter waiter = new EventWaiter();
botService.getInstance().addEventListener(waiter);
ButtonMenu menu = new ButtonMenu.Builder()
.setChoices(choices.keySet().toArray(new String[0]))
.setEventWaiter(waiter)
.setDescription(text)
.setAction(reactionEmote -> {
AUserInAServer chosenServer = choices.get(reactionEmote.getEmoji());
Member memberInServer = botService.getMemberInServer(chosenServer);
FullUser fullUser = FullUser.builder().member(memberInServer).aUserInAServer(chosenServer).build();
self.createModMailThreadForUser(fullUser, channel);
botService.getInstance().removeEventListener(waiter);
})
.build();
menu.display(channel);
}
}

View File

@@ -0,0 +1,8 @@
{
"color" : {
"r": 200,
"g": 0,
"b": 255
},
"description": "<#include "modmail_no_server_available">"
}