From 95733c9b983f6f2bdd8b1b29e494d9d143026252 Mon Sep 17 00:00:00 2001 From: Sheldan <5037282+Sheldan@users.noreply.github.com> Date: Thu, 7 May 2020 20:20:40 +0200 Subject: [PATCH] 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. --- .../abstracto/modmail/commands/Close.java | 6 +- .../service/ModMailThreadServiceBean.java | 75 +++++++++++-------- ...odmail_no_server_available_embed_en_US.ftl | 8 ++ .../modmail_close_default_note_en_US.ftl | 1 + .../modmail_no_server_available_en_US.ftl | 1 + 5 files changed, 59 insertions(+), 32 deletions(-) create mode 100644 abstracto-application/abstracto-modules/modmail/modmail-impl/src/main/resources/templates/serverChooser/modmail_no_server_available_embed_en_US.ftl create mode 100644 abstracto-application/template-config/src/main/resources/templates/en_US/modMail/modmail_close_default_note_en_US.ftl create mode 100644 abstracto-application/template-config/src/main/resources/templates/en_US/modMail/modmail_no_server_available_en_US.ftl diff --git a/abstracto-application/abstracto-modules/modmail/modmail-impl/src/main/java/dev/sheldan/abstracto/modmail/commands/Close.java b/abstracto-application/abstracto-modules/modmail/modmail-impl/src/main/java/dev/sheldan/abstracto/modmail/commands/Close.java index 6ada65474..a173b918b 100644 --- a/abstracto-application/abstracto-modules/modmail/modmail-impl/src/main/java/dev/sheldan/abstracto/modmail/commands/Close.java +++ b/abstracto-application/abstracto-modules/modmail/modmail-impl/src/main/java/dev/sheldan/abstracto/modmail/commands/Close.java @@ -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 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(); diff --git a/abstracto-application/abstracto-modules/modmail/modmail-impl/src/main/java/dev/sheldan/abstracto/modmail/service/ModMailThreadServiceBean.java b/abstracto-application/abstracto-modules/modmail/modmail-impl/src/main/java/dev/sheldan/abstracto/modmail/service/ModMailThreadServiceBean.java index f3a83e7d2..f6307a3d6 100644 --- a/abstracto-application/abstracto-modules/modmail/modmail-impl/src/main/java/dev/sheldan/abstracto/modmail/service/ModMailThreadServiceBean.java +++ b/abstracto-application/abstracto-modules/modmail/modmail-impl/src/main/java/dev/sheldan/abstracto/modmail/service/ModMailThreadServiceBean.java @@ -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 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); } } diff --git a/abstracto-application/abstracto-modules/modmail/modmail-impl/src/main/resources/templates/serverChooser/modmail_no_server_available_embed_en_US.ftl b/abstracto-application/abstracto-modules/modmail/modmail-impl/src/main/resources/templates/serverChooser/modmail_no_server_available_embed_en_US.ftl new file mode 100644 index 000000000..ad0bf190c --- /dev/null +++ b/abstracto-application/abstracto-modules/modmail/modmail-impl/src/main/resources/templates/serverChooser/modmail_no_server_available_embed_en_US.ftl @@ -0,0 +1,8 @@ +{ + "color" : { + "r": 200, + "g": 0, + "b": 255 + }, + "description": "<#include "modmail_no_server_available">" +} \ No newline at end of file diff --git a/abstracto-application/template-config/src/main/resources/templates/en_US/modMail/modmail_close_default_note_en_US.ftl b/abstracto-application/template-config/src/main/resources/templates/en_US/modMail/modmail_close_default_note_en_US.ftl new file mode 100644 index 000000000..df2484da8 --- /dev/null +++ b/abstracto-application/template-config/src/main/resources/templates/en_US/modMail/modmail_close_default_note_en_US.ftl @@ -0,0 +1 @@ +No note \ No newline at end of file diff --git a/abstracto-application/template-config/src/main/resources/templates/en_US/modMail/modmail_no_server_available_en_US.ftl b/abstracto-application/template-config/src/main/resources/templates/en_US/modMail/modmail_no_server_available_en_US.ftl new file mode 100644 index 000000000..93965bb53 --- /dev/null +++ b/abstracto-application/template-config/src/main/resources/templates/en_US/modMail/modmail_no_server_available_en_US.ftl @@ -0,0 +1 @@ +No server for modmail available. \ No newline at end of file