Added support for text chats in voice channels. (Closes #1)

This commit is contained in:
Logan Fick 2023-10-04 10:32:46 -04:00
parent 474817c4cf
commit 89ee198897
Signed by: LogalDeveloper
GPG Key ID: 43E58A0C922AB7D1
7 changed files with 41 additions and 25 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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