added bean configuration for event waiter to be used for paginator

fixed initial setup for server
fixed command in a server configuration
This commit is contained in:
Sheldan
2020-05-10 20:29:32 +02:00
parent 82186c8757
commit ba032194ce
8 changed files with 72 additions and 11 deletions

View File

@@ -51,6 +51,9 @@ public class Warnings extends AbstractConditionableCommand {
@Autowired
private PaginatorService paginatorService;
@Autowired
private EventWaiter eventWaiter;
@Override
public CommandResult execute(CommandContext commandContext) {
List<Warning> warnsToDisplay;
@@ -65,7 +68,7 @@ public class Warnings extends AbstractConditionableCommand {
WarningsModel model = (WarningsModel) ContextConverter.fromCommandContext(commandContext, WarningsModel.class);
model.setWarnings(warnEntries);
Paginator paginator = paginatorService.createPaginatorFromTemplate("warnings_response", model, new EventWaiter());
Paginator paginator = paginatorService.createPaginatorFromTemplate("warnings_response", model, eventWaiter);
paginator.display(commandContext.getChannel());
return CommandResult.fromSuccess();
}

View File

@@ -91,6 +91,9 @@ public class ModMailThreadServiceBean implements ModMailThreadService {
@Autowired
private ModMailSubscriberManagementService modMailSubscriberManagementService;
@Autowired
private EventWaiter eventWaiter;
@Autowired
private ModMailThreadServiceBean self;
@@ -197,19 +200,15 @@ public class ModMailThreadServiceBean implements ModMailThreadService {
.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)
.setEventWaiter(eventWaiter)
.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, true);
botService.getInstance().removeEventListener(waiter);
})
.build();
menu.display(channel);

View File

@@ -2,17 +2,38 @@ package dev.sheldan.abstracto.core.config;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.jagrosh.jdautilities.commons.waiter.EventWaiter;
import dev.sheldan.abstracto.core.service.BotService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.time.OffsetDateTime;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
@Configuration
public class CoreConfig {
@Autowired
private BotService botService;
@Value("${abstracto.eventWaiter.threads}")
private Integer threadCount;
@Bean
public Gson gson() {
return new GsonBuilder()
.registerTypeAdapter(OffsetDateTime.class, new OffsetDateTimeAdapter())
.setPrettyPrinting().create();
}
@Bean
public EventWaiter eventWaiter() {
ScheduledExecutorService scheduledExecutorService =
Executors.newScheduledThreadPool(threadCount);
return new EventWaiter(scheduledExecutorService, true);
}
}

View File

@@ -1,5 +1,7 @@
package dev.sheldan.abstracto.core.listener;
import com.jagrosh.jdautilities.commons.waiter.EventWaiter;
import dev.sheldan.abstracto.core.service.BotService;
import dev.sheldan.abstracto.core.service.StartupServiceBean;
import dev.sheldan.abstracto.scheduling.service.SchedulerService;
import net.dv8tion.jda.api.events.ReadyEvent;
@@ -22,11 +24,18 @@ public class ReadyListener extends ListenerAdapter {
@Autowired
private SchedulerService schedulerService;
@Autowired
private EventWaiter eventWaiter;
@Autowired
private BotService botService;
@Override
public void onReady(@Nonnull ReadyEvent event) {
if(synchronize){
startup.synchronize();
}
botService.getInstance().addEventListener(eventWaiter);
schedulerService.startScheduler();
}
}

View File

@@ -0,0 +1,29 @@
package dev.sheldan.abstracto.core.listener;
import dev.sheldan.abstracto.core.models.database.AServer;
import dev.sheldan.abstracto.core.service.management.ServerManagementService;
import net.dv8tion.jda.api.events.guild.GuildJoinEvent;
import net.dv8tion.jda.api.hooks.ListenerAdapter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Nonnull;
import java.util.List;
@Component
public class ServerJoinListener extends ListenerAdapter {
@Autowired
private List<ServerConfigListener> configListeners;
@Autowired
private ServerManagementService serverManagementService;
@Override
@Transactional
public void onGuildJoin(@Nonnull GuildJoinEvent event) {
AServer server = serverManagementService.loadOrCreate(event.getGuild().getIdLong());
configListeners.forEach(serverConfigListener -> serverConfigListener.updateServerConfig(server));
}
}

View File

@@ -30,7 +30,6 @@ public class PaginatorServiceBean implements PaginatorService {
public Paginator createPaginatorFromTemplate(String templateKey, Object model, EventWaiter waiter) {
String embedConfig = templateService.renderTemplate(templateKey + "_paginator", model);
PaginatorConfiguration configuration = gson.fromJson(embedConfig, PaginatorConfiguration.class);
botService.getInstance().addEventListener(waiter);
List<String> items = configuration.getItems();
int itemsPerPage = findAppropriateCountPerPage(items);
@@ -41,9 +40,9 @@ public class PaginatorServiceBean implements PaginatorService {
.setItems(configuration.getItems().toArray(new String[0]))
.useNumberedItems(ObjectUtils.defaultIfNull(configuration.getUseNumberedItems(), false))
.setEventWaiter(waiter)
.waitOnSinglePage(true)
.setTimeout(ObjectUtils.defaultIfNull(configuration.getTimeoutSeconds(), 120L), TimeUnit.SECONDS)
.setFinalAction(message -> {
botService.getInstance().removeEventListener(waiter);
message.delete().queue();
})
.build();

View File

@@ -3,4 +3,5 @@ abstracto.startup.synchronize=true
abstracto.parameter.lowerBound=50
abstracto.features.core=true
abstracto.prefix=!
abstracto.prefix=!
abstracto.eventWaiter.threads=10

View File

@@ -23,11 +23,11 @@ public class ACommandInAServer {
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long commandInServerId;
@ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@OneToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@JoinColumn(name = "commandReference", nullable = false)
private ACommand commandReference;
@ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@OneToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@JoinColumn(name = "serverReference", nullable = false)
private AServer serverReference;