From 89ee198897081e6f5a43e2e96e1f11dff266f160 Mon Sep 17 00:00:00 2001 From: Logan Fick Date: Wed, 4 Oct 2023 10:32:46 -0400 Subject: [PATCH] Added support for text chats in voice channels. (Closes #1) --- .../logal/crabstero/listeners/MessageCreate.java | 4 ++-- .../listeners/RoleChangePermissions.java | 9 ++++++--- .../listeners/ServerBecomesAvailable.java | 11 +++++++---- ...ServerChannelChangeOverwrittenPermissions.java | 9 ++++++--- .../dev/logal/crabstero/listeners/ServerJoin.java | 9 ++++++--- .../logal/crabstero/listeners/UserRoleAdd.java | 9 ++++++--- .../tasks/ChannelHistoryIngestionTask.java | 15 ++++++++------- 7 files changed, 41 insertions(+), 25 deletions(-) diff --git a/src/main/java/dev/logal/crabstero/listeners/MessageCreate.java b/src/main/java/dev/logal/crabstero/listeners/MessageCreate.java index 1c7627b..8ca762d 100644 --- a/src/main/java/dev/logal/crabstero/listeners/MessageCreate.java +++ b/src/main/java/dev/logal/crabstero/listeners/MessageCreate.java @@ -39,9 +39,9 @@ public final class MessageCreate implements MessageCreateListener { */ @Override public void onMessageCreate(final MessageCreateEvent event) { - // Is this message being created outside of a server text channel or a server thread channel? + // Is this message being created outside of a server text channel, a server thread channel, or a server voice channel? final TextChannel channel = event.getChannel(); - if (channel.asServerTextChannel().isEmpty() && channel.asServerThreadChannel().isEmpty()) { + if (channel.asServerTextChannel().isEmpty() && channel.asServerThreadChannel().isEmpty() && channel.asServerVoiceChannel().isEmpty()) { // Yes. Ignore it. return; } diff --git a/src/main/java/dev/logal/crabstero/listeners/RoleChangePermissions.java b/src/main/java/dev/logal/crabstero/listeners/RoleChangePermissions.java index 50704f4..efe153c 100644 --- a/src/main/java/dev/logal/crabstero/listeners/RoleChangePermissions.java +++ b/src/main/java/dev/logal/crabstero/listeners/RoleChangePermissions.java @@ -10,6 +10,7 @@ package dev.logal.crabstero.listeners; import dev.logal.crabstero.Crabstero; import dev.logal.crabstero.tasks.ChannelHistoryIngestionTask; +import org.javacord.api.entity.channel.TextableRegularServerChannel; import org.javacord.api.event.server.role.RoleChangePermissionsEvent; import org.javacord.api.listener.server.role.RoleChangePermissionsListener; @@ -37,9 +38,11 @@ public final class RoleChangePermissions implements RoleChangePermissionsListene public void onRoleChangePermissions(final RoleChangePermissionsEvent event) { // Does the updated role include Crabstero as a member? if (event.getRole().hasUser(event.getApi().getYourself())) { - // Queue every text channel for message history ingestion. - event.getServer().getTextChannels().forEach((channel) -> { - this.crabstero.getWorkerPool().submit(new ChannelHistoryIngestionTask(channel, crabstero)); + // Queue every textable channel for message history ingestion. + event.getServer().getRegularChannels().forEach((channel) -> { + if (channel instanceof final TextableRegularServerChannel textableChannel){ + this.crabstero.getWorkerPool().submit(new ChannelHistoryIngestionTask(textableChannel, crabstero)); + } }); } } diff --git a/src/main/java/dev/logal/crabstero/listeners/ServerBecomesAvailable.java b/src/main/java/dev/logal/crabstero/listeners/ServerBecomesAvailable.java index 4e0a1f5..1219223 100644 --- a/src/main/java/dev/logal/crabstero/listeners/ServerBecomesAvailable.java +++ b/src/main/java/dev/logal/crabstero/listeners/ServerBecomesAvailable.java @@ -10,6 +10,7 @@ package dev.logal.crabstero.listeners; import dev.logal.crabstero.Crabstero; import dev.logal.crabstero.tasks.ChannelHistoryIngestionTask; +import org.javacord.api.entity.channel.TextableRegularServerChannel; import org.javacord.api.event.server.ServerBecomesAvailableEvent; import org.javacord.api.listener.server.ServerBecomesAvailableListener; @@ -29,15 +30,17 @@ public final class ServerBecomesAvailable implements ServerBecomesAvailableListe } /** - * Queues all text channels for message history ingestion when a server becomes available. + * Queues all textable channels for message history ingestion when a server becomes available. * * @param event The event. */ @Override public void onServerBecomesAvailable(final ServerBecomesAvailableEvent event) { - // Queue every text channel for message history ingestion. - event.getServer().getTextChannels().forEach((channel) -> { - this.crabstero.getWorkerPool().submit(new ChannelHistoryIngestionTask(channel, crabstero)); + // Queue every textable channel for message history ingestion. + event.getServer().getRegularChannels().forEach((channel) -> { + if (channel instanceof final TextableRegularServerChannel textableChannel){ + this.crabstero.getWorkerPool().submit(new ChannelHistoryIngestionTask(textableChannel, crabstero)); + } }); } } \ No newline at end of file diff --git a/src/main/java/dev/logal/crabstero/listeners/ServerChannelChangeOverwrittenPermissions.java b/src/main/java/dev/logal/crabstero/listeners/ServerChannelChangeOverwrittenPermissions.java index 8b31b10..0687154 100644 --- a/src/main/java/dev/logal/crabstero/listeners/ServerChannelChangeOverwrittenPermissions.java +++ b/src/main/java/dev/logal/crabstero/listeners/ServerChannelChangeOverwrittenPermissions.java @@ -10,6 +10,7 @@ package dev.logal.crabstero.listeners; import dev.logal.crabstero.Crabstero; import dev.logal.crabstero.tasks.ChannelHistoryIngestionTask; +import org.javacord.api.entity.channel.TextableRegularServerChannel; import org.javacord.api.event.channel.server.ServerChannelChangeOverwrittenPermissionsEvent; import org.javacord.api.listener.channel.server.ServerChannelChangeOverwrittenPermissionsListener; @@ -35,9 +36,11 @@ public final class ServerChannelChangeOverwrittenPermissions implements ServerCh */ @Override public void onServerChannelChangeOverwrittenPermissions(final ServerChannelChangeOverwrittenPermissionsEvent event) { - // Queue every text channel for message history ingestion. - event.getChannel().asServerTextChannel().ifPresent((channel) -> { - this.crabstero.getWorkerPool().submit(new ChannelHistoryIngestionTask(channel, crabstero)); + // Queue every textable channel for message history ingestion. + event.getServer().getRegularChannels().forEach((channel) -> { + if (channel instanceof final TextableRegularServerChannel textableChannel){ + this.crabstero.getWorkerPool().submit(new ChannelHistoryIngestionTask(textableChannel, crabstero)); + } }); } } \ No newline at end of file diff --git a/src/main/java/dev/logal/crabstero/listeners/ServerJoin.java b/src/main/java/dev/logal/crabstero/listeners/ServerJoin.java index 529f2b2..93d6c5b 100644 --- a/src/main/java/dev/logal/crabstero/listeners/ServerJoin.java +++ b/src/main/java/dev/logal/crabstero/listeners/ServerJoin.java @@ -10,6 +10,7 @@ package dev.logal.crabstero.listeners; import dev.logal.crabstero.Crabstero; import dev.logal.crabstero.tasks.ChannelHistoryIngestionTask; +import org.javacord.api.entity.channel.TextableRegularServerChannel; import org.javacord.api.entity.message.embed.EmbedBuilder; import org.javacord.api.entity.server.Server; import org.javacord.api.event.server.ServerJoinEvent; @@ -61,9 +62,11 @@ public final class ServerJoin implements ServerJoinListener { // Send this embed to the bot owner. event.getApi().getOwner().ifPresent((owner) -> owner.thenAcceptAsync((user) -> user.sendMessage(embed).exceptionally(ExceptionLogger.get()))); - // Queue all text channels for message history ingestion. - server.getTextChannels().forEach((channel) -> { - this.crabstero.getWorkerPool().submit(new ChannelHistoryIngestionTask(channel, crabstero)); + // Queue every textable channel for message history ingestion. + event.getServer().getRegularChannels().forEach((channel) -> { + if (channel instanceof final TextableRegularServerChannel textableChannel){ + this.crabstero.getWorkerPool().submit(new ChannelHistoryIngestionTask(textableChannel, crabstero)); + } }); } } \ No newline at end of file diff --git a/src/main/java/dev/logal/crabstero/listeners/UserRoleAdd.java b/src/main/java/dev/logal/crabstero/listeners/UserRoleAdd.java index e0aad36..30f544e 100644 --- a/src/main/java/dev/logal/crabstero/listeners/UserRoleAdd.java +++ b/src/main/java/dev/logal/crabstero/listeners/UserRoleAdd.java @@ -10,6 +10,7 @@ package dev.logal.crabstero.listeners; import dev.logal.crabstero.Crabstero; import dev.logal.crabstero.tasks.ChannelHistoryIngestionTask; +import org.javacord.api.entity.channel.TextableRegularServerChannel; import org.javacord.api.event.server.role.UserRoleAddEvent; import org.javacord.api.listener.server.role.UserRoleAddListener; @@ -37,9 +38,11 @@ public final class UserRoleAdd implements UserRoleAddListener { public void onUserRoleAdd(final UserRoleAddEvent event) { // Is the user who was assigned the role Crabstero? if (event.getUser().isYourself()) { - // Queue all text channels for message history ingestion. - event.getServer().getTextChannels().forEach((channel) -> { - this.crabstero.getWorkerPool().submit(new ChannelHistoryIngestionTask(channel, crabstero)); + // Queue every textable channel for message history ingestion. + event.getServer().getRegularChannels().forEach((channel) -> { + if (channel instanceof final TextableRegularServerChannel textableChannel){ + this.crabstero.getWorkerPool().submit(new ChannelHistoryIngestionTask(textableChannel, crabstero)); + } }); } } diff --git a/src/main/java/dev/logal/crabstero/tasks/ChannelHistoryIngestionTask.java b/src/main/java/dev/logal/crabstero/tasks/ChannelHistoryIngestionTask.java index fd68590..baa91a7 100644 --- a/src/main/java/dev/logal/crabstero/tasks/ChannelHistoryIngestionTask.java +++ b/src/main/java/dev/logal/crabstero/tasks/ChannelHistoryIngestionTask.java @@ -11,6 +11,7 @@ package dev.logal.crabstero.tasks; import dev.logal.crabstero.Crabstero; import dev.logal.crabstero.utils.MarkovChainMessages; import org.javacord.api.entity.channel.ServerTextChannel; +import org.javacord.api.entity.channel.TextableRegularServerChannel; import org.javacord.api.entity.message.Message; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -29,15 +30,15 @@ public final class ChannelHistoryIngestionTask implements Runnable { private static final Logger logger = LoggerFactory.getLogger(ChannelHistoryIngestionTask.class); private final Crabstero crabstero; - private final ServerTextChannel channel; + private final TextableRegularServerChannel channel; /** - * Creates a new task for ingesting the message history of a channel. + * Creates a new task for ingesting the message history of a textable channel. * * @param channel The channel to ingest. * @param crabstero The Crabstero instance running this task. */ - public ChannelHistoryIngestionTask(final ServerTextChannel channel, final Crabstero crabstero) { + public ChannelHistoryIngestionTask(final TextableRegularServerChannel channel, final Crabstero crabstero) { this.channel = channel; this.crabstero = crabstero; } @@ -51,7 +52,7 @@ public final class ChannelHistoryIngestionTask implements Runnable { // Do permissions allow Crabstero to read message history in this channel? if (!this.channel.canYouReadMessageHistory()) { // No. Log the problem and stop further processing this channel. - logger.warn("Unable to ingest text channel history due to lacking permissions. Ignoring. (Name: \"" + this.channel.getName() + "\" | ID: " + this.channel.getIdAsString() + " | Server ID: " + this.channel.getServer().getIdAsString() + ")"); + logger.warn("[" + this.channel.getIdAsString() + "] Unable to ingest textable channel history due to lacking permissions. Ignoring."); return; } @@ -65,7 +66,7 @@ public final class ChannelHistoryIngestionTask implements Runnable { jedis.lpush(INGESTED_CHANNELS_KEY, this.channel.getIdAsString()); // Log the start of the ingestion of this channel. - logger.info("Starting ingestion of text channel history. (Name: \"" + this.channel.getName() + "\" | ID: " + this.channel.getIdAsString() + " | Server ID: " + this.channel.getServer().getIdAsString() + ")"); + logger.info("[" + this.channel.getIdAsString() + "] Starting ingestion of textable channel history."); } } @@ -89,11 +90,11 @@ public final class ChannelHistoryIngestionTask implements Runnable { } // Log the results of the ingestion. - logger.info("Ingestion of text channel history complete. " + i + " messages ingested. (Name: \"" + this.channel.getName() + "\" | ID: " + this.channel.getIdAsString() + " | Server ID: " + this.channel.getServer().getIdAsString() + ")"); + logger.info("[" + this.channel.getIdAsString() + "] Ingestion of textable channel history complete. " + i + " messages ingested."); } } catch (final Throwable exception) { // A problem occurred somewhere in this task. Log the problem. - logger.error("An error occurred while ingesting text channel history! (Name: \"" + this.channel.getName() + "\" | ID: " + this.channel.getIdAsString() + " | Server ID: " + this.channel.getServer().getIdAsString() + ")", exception); + logger.error("[" + this.channel.getIdAsString() + "] An error occurred while ingesting textable channel history!", exception); } } } \ No newline at end of file