mirror of
https://github.com/Sheldan/abstracto.git
synced 2026-01-27 06:04:54 +00:00
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:
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"color" : {
|
||||
"r": 200,
|
||||
"g": 0,
|
||||
"b": 255
|
||||
},
|
||||
"description": "<#include "modmail_no_server_available">"
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
No note
|
||||
@@ -0,0 +1 @@
|
||||
No server for modmail available.
|
||||
Reference in New Issue
Block a user