mirror of
https://github.com/Sheldan/abstracto.git
synced 2026-04-05 00:53:04 +00:00
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:
@@ -51,6 +51,9 @@ public class Warnings extends AbstractConditionableCommand {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private PaginatorService paginatorService;
|
private PaginatorService paginatorService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private EventWaiter eventWaiter;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CommandResult execute(CommandContext commandContext) {
|
public CommandResult execute(CommandContext commandContext) {
|
||||||
List<Warning> warnsToDisplay;
|
List<Warning> warnsToDisplay;
|
||||||
@@ -65,7 +68,7 @@ public class Warnings extends AbstractConditionableCommand {
|
|||||||
WarningsModel model = (WarningsModel) ContextConverter.fromCommandContext(commandContext, WarningsModel.class);
|
WarningsModel model = (WarningsModel) ContextConverter.fromCommandContext(commandContext, WarningsModel.class);
|
||||||
model.setWarnings(warnEntries);
|
model.setWarnings(warnEntries);
|
||||||
|
|
||||||
Paginator paginator = paginatorService.createPaginatorFromTemplate("warnings_response", model, new EventWaiter());
|
Paginator paginator = paginatorService.createPaginatorFromTemplate("warnings_response", model, eventWaiter);
|
||||||
paginator.display(commandContext.getChannel());
|
paginator.display(commandContext.getChannel());
|
||||||
return CommandResult.fromSuccess();
|
return CommandResult.fromSuccess();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -91,6 +91,9 @@ public class ModMailThreadServiceBean implements ModMailThreadService {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private ModMailSubscriberManagementService modMailSubscriberManagementService;
|
private ModMailSubscriberManagementService modMailSubscriberManagementService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private EventWaiter eventWaiter;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private ModMailThreadServiceBean self;
|
private ModMailThreadServiceBean self;
|
||||||
|
|
||||||
@@ -197,19 +200,15 @@ public class ModMailThreadServiceBean implements ModMailThreadService {
|
|||||||
.commonGuilds(availableGuilds)
|
.commonGuilds(availableGuilds)
|
||||||
.build();
|
.build();
|
||||||
String text = templateService.renderTemplate("modmail_modal_server_choice", modMailServerChooserModel);
|
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()
|
ButtonMenu menu = new ButtonMenu.Builder()
|
||||||
.setChoices(choices.keySet().toArray(new String[0]))
|
.setChoices(choices.keySet().toArray(new String[0]))
|
||||||
.setEventWaiter(waiter)
|
.setEventWaiter(eventWaiter)
|
||||||
.setDescription(text)
|
.setDescription(text)
|
||||||
.setAction(reactionEmote -> {
|
.setAction(reactionEmote -> {
|
||||||
AUserInAServer chosenServer = choices.get(reactionEmote.getEmoji());
|
AUserInAServer chosenServer = choices.get(reactionEmote.getEmoji());
|
||||||
Member memberInServer = botService.getMemberInServer(chosenServer);
|
Member memberInServer = botService.getMemberInServer(chosenServer);
|
||||||
FullUser fullUser = FullUser.builder().member(memberInServer).aUserInAServer(chosenServer).build();
|
FullUser fullUser = FullUser.builder().member(memberInServer).aUserInAServer(chosenServer).build();
|
||||||
self.createModMailThreadForUser(fullUser, channel, true);
|
self.createModMailThreadForUser(fullUser, channel, true);
|
||||||
botService.getInstance().removeEventListener(waiter);
|
|
||||||
})
|
})
|
||||||
.build();
|
.build();
|
||||||
menu.display(channel);
|
menu.display(channel);
|
||||||
|
|||||||
@@ -2,17 +2,38 @@ package dev.sheldan.abstracto.core.config;
|
|||||||
|
|
||||||
import com.google.gson.Gson;
|
import com.google.gson.Gson;
|
||||||
import com.google.gson.GsonBuilder;
|
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.Bean;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
|
||||||
import java.time.OffsetDateTime;
|
import java.time.OffsetDateTime;
|
||||||
|
import java.util.concurrent.Executors;
|
||||||
|
import java.util.concurrent.ScheduledExecutorService;
|
||||||
|
|
||||||
@Configuration
|
@Configuration
|
||||||
public class CoreConfig {
|
public class CoreConfig {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private BotService botService;
|
||||||
|
|
||||||
|
@Value("${abstracto.eventWaiter.threads}")
|
||||||
|
private Integer threadCount;
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
public Gson gson() {
|
public Gson gson() {
|
||||||
return new GsonBuilder()
|
return new GsonBuilder()
|
||||||
.registerTypeAdapter(OffsetDateTime.class, new OffsetDateTimeAdapter())
|
.registerTypeAdapter(OffsetDateTime.class, new OffsetDateTimeAdapter())
|
||||||
.setPrettyPrinting().create();
|
.setPrettyPrinting().create();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public EventWaiter eventWaiter() {
|
||||||
|
ScheduledExecutorService scheduledExecutorService =
|
||||||
|
Executors.newScheduledThreadPool(threadCount);
|
||||||
|
return new EventWaiter(scheduledExecutorService, true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
package dev.sheldan.abstracto.core.listener;
|
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.core.service.StartupServiceBean;
|
||||||
import dev.sheldan.abstracto.scheduling.service.SchedulerService;
|
import dev.sheldan.abstracto.scheduling.service.SchedulerService;
|
||||||
import net.dv8tion.jda.api.events.ReadyEvent;
|
import net.dv8tion.jda.api.events.ReadyEvent;
|
||||||
@@ -22,11 +24,18 @@ public class ReadyListener extends ListenerAdapter {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private SchedulerService schedulerService;
|
private SchedulerService schedulerService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private EventWaiter eventWaiter;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private BotService botService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onReady(@Nonnull ReadyEvent event) {
|
public void onReady(@Nonnull ReadyEvent event) {
|
||||||
if(synchronize){
|
if(synchronize){
|
||||||
startup.synchronize();
|
startup.synchronize();
|
||||||
}
|
}
|
||||||
|
botService.getInstance().addEventListener(eventWaiter);
|
||||||
schedulerService.startScheduler();
|
schedulerService.startScheduler();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -30,7 +30,6 @@ public class PaginatorServiceBean implements PaginatorService {
|
|||||||
public Paginator createPaginatorFromTemplate(String templateKey, Object model, EventWaiter waiter) {
|
public Paginator createPaginatorFromTemplate(String templateKey, Object model, EventWaiter waiter) {
|
||||||
String embedConfig = templateService.renderTemplate(templateKey + "_paginator", model);
|
String embedConfig = templateService.renderTemplate(templateKey + "_paginator", model);
|
||||||
PaginatorConfiguration configuration = gson.fromJson(embedConfig, PaginatorConfiguration.class);
|
PaginatorConfiguration configuration = gson.fromJson(embedConfig, PaginatorConfiguration.class);
|
||||||
botService.getInstance().addEventListener(waiter);
|
|
||||||
List<String> items = configuration.getItems();
|
List<String> items = configuration.getItems();
|
||||||
int itemsPerPage = findAppropriateCountPerPage(items);
|
int itemsPerPage = findAppropriateCountPerPage(items);
|
||||||
|
|
||||||
@@ -41,9 +40,9 @@ public class PaginatorServiceBean implements PaginatorService {
|
|||||||
.setItems(configuration.getItems().toArray(new String[0]))
|
.setItems(configuration.getItems().toArray(new String[0]))
|
||||||
.useNumberedItems(ObjectUtils.defaultIfNull(configuration.getUseNumberedItems(), false))
|
.useNumberedItems(ObjectUtils.defaultIfNull(configuration.getUseNumberedItems(), false))
|
||||||
.setEventWaiter(waiter)
|
.setEventWaiter(waiter)
|
||||||
|
.waitOnSinglePage(true)
|
||||||
.setTimeout(ObjectUtils.defaultIfNull(configuration.getTimeoutSeconds(), 120L), TimeUnit.SECONDS)
|
.setTimeout(ObjectUtils.defaultIfNull(configuration.getTimeoutSeconds(), 120L), TimeUnit.SECONDS)
|
||||||
.setFinalAction(message -> {
|
.setFinalAction(message -> {
|
||||||
botService.getInstance().removeEventListener(waiter);
|
|
||||||
message.delete().queue();
|
message.delete().queue();
|
||||||
})
|
})
|
||||||
.build();
|
.build();
|
||||||
|
|||||||
@@ -3,4 +3,5 @@ abstracto.startup.synchronize=true
|
|||||||
abstracto.parameter.lowerBound=50
|
abstracto.parameter.lowerBound=50
|
||||||
|
|
||||||
abstracto.features.core=true
|
abstracto.features.core=true
|
||||||
abstracto.prefix=!
|
abstracto.prefix=!
|
||||||
|
abstracto.eventWaiter.threads=10
|
||||||
@@ -23,11 +23,11 @@ public class ACommandInAServer {
|
|||||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||||
private Long commandInServerId;
|
private Long commandInServerId;
|
||||||
|
|
||||||
@ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
|
@OneToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
|
||||||
@JoinColumn(name = "commandReference", nullable = false)
|
@JoinColumn(name = "commandReference", nullable = false)
|
||||||
private ACommand commandReference;
|
private ACommand commandReference;
|
||||||
|
|
||||||
@ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
|
@OneToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
|
||||||
@JoinColumn(name = "serverReference", nullable = false)
|
@JoinColumn(name = "serverReference", nullable = false)
|
||||||
private AServer serverReference;
|
private AServer serverReference;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user