Files
netneutrality/src/main/java/me/bobert/netneutrality/hooks/MessageReceivedHandler.java
T
anthorob 764adb6cbc Refactor event handling into modular handlers
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.
2026-10-30 22:31:25 -04:00

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);
}
}