Introduce discrete event handlers (`InteractionHandlers`, `GuildLifecycleHandler`, `MessageReceivedHandler`, and more) to replace centralized logic in `EventsHandler`. Simplify handler registration, improve separation of concerns, and enable better testability. Added unit tests to verify isolated execution and failure resilience of handlers.
58 lines
2.0 KiB
Java
58 lines
2.0 KiB
Java
package me.bobert.netneutrality.hooks;
|
|
|
|
/*
|
|
* Copyright (c) anthorob
|
|
*
|
|
* https://discord.gg/qUa6zNFZsd
|
|
*/
|
|
|
|
import me.bobert.netneutrality.context.command.MessageCommandContext;
|
|
import me.bobert.netneutrality.context.tasks.MessageTaskContext;
|
|
import me.bobert.netneutrality.core.context.Context;
|
|
import me.bobert.netneutrality.db.GSettings;
|
|
import me.bobert.netneutrality.db.service.GuildServiceProvider;
|
|
import me.bobert.netneutrality.utils.SettingsProvider;
|
|
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
|
|
|
|
import java.util.Objects;
|
|
|
|
/**
|
|
* Resolves the prefix and decides whether a message is a command or a plain task message.
|
|
*/
|
|
public class MessageReceivedHandler implements ContextEventHandler<MessageReceivedEvent> {
|
|
private final SettingsProvider settings;
|
|
private final GuildServiceProvider guildServices;
|
|
|
|
public MessageReceivedHandler(SettingsProvider settings, GuildServiceProvider guildServices) {
|
|
this.settings = Objects.requireNonNull(settings, "settings");
|
|
this.guildServices = Objects.requireNonNull(guildServices, "guildServices");
|
|
}
|
|
|
|
@Override
|
|
public Class<MessageReceivedEvent> eventType() {
|
|
return MessageReceivedEvent.class;
|
|
}
|
|
|
|
@Override
|
|
public Context toContext(MessageReceivedEvent event) {
|
|
if (event.getAuthor().isBot() || event.isWebhookMessage()) {
|
|
return null;
|
|
}
|
|
|
|
String rawMessage = event.getMessage().getContentDisplay().trim();
|
|
String prefix = settings.get("NETNEUTRALITY_BOT_PREFIX", "$");
|
|
if (event.isFromGuild()) {
|
|
String guildPrefix = guildServices.get(event.getGuild().getId()).getGuildSettingService()
|
|
.getOrDefault(GSettings.COMMAND_PREFIX);
|
|
if (!guildPrefix.isEmpty()) {
|
|
prefix = guildPrefix;
|
|
}
|
|
}
|
|
if (rawMessage.startsWith(prefix)) {
|
|
return new MessageCommandContext(event, settings);
|
|
}
|
|
|
|
return new MessageTaskContext(event);
|
|
}
|
|
}
|