Reformatted code.

This commit is contained in:
2022-07-05 15:14:52 -04:00
parent 03549bf5b5
commit 9383f53372
11 changed files with 291 additions and 291 deletions
@@ -23,55 +23,55 @@ import redis.clients.jedis.JedisPoolConfig;
import java.util.concurrent.*; import java.util.concurrent.*;
public final class Crabstero { public final class Crabstero {
public static final int maximumMessagesPerChannel = 50000; public static final int maximumMessagesPerChannel = 50000;
private static final Logger logger = LoggerFactory.getLogger(Crabstero.class); private static final Logger logger = LoggerFactory.getLogger(Crabstero.class);
private static final String token = System.getenv("TOKEN"); private static final String token = System.getenv("TOKEN");
private static final JedisPool jedisPool = new JedisPool(new JedisPoolConfig(), System.getenv("REDIS_HOST")); private static final JedisPool jedisPool = new JedisPool(new JedisPoolConfig(), System.getenv("REDIS_HOST"));
private static final ScheduledExecutorService workerPool = Executors.newScheduledThreadPool(4, new CrabsteroThreadFactory()); private static final ScheduledExecutorService workerPool = Executors.newScheduledThreadPool(4, new CrabsteroThreadFactory());
private Crabstero(){ private Crabstero() {
throw new UnsupportedOperationException(); throw new UnsupportedOperationException();
} }
public static void main(final String[] arguments){ public static void main(final String[] arguments) {
logger.info(Javacord.USER_AGENT); logger.info(Javacord.USER_AGENT);
final DiscordApiBuilder builder = new DiscordApiBuilder(); final DiscordApiBuilder builder = new DiscordApiBuilder();
builder.setAccountType(AccountType.BOT); builder.setAccountType(AccountType.BOT);
builder.setToken(token); builder.setToken(token);
builder.setTrustAllCertificates(false); builder.setTrustAllCertificates(false);
builder.setWaitForServersOnStartup(false); builder.setWaitForServersOnStartup(false);
builder.setWaitForUsersOnStartup(false); builder.setWaitForUsersOnStartup(false);
builder.setIntents(Intent.GUILDS, Intent.GUILD_MESSAGES); builder.setIntents(Intent.GUILDS, Intent.GUILD_MESSAGES);
builder.addListener(new MessageCreate()); builder.addListener(new MessageCreate());
builder.addListener(new RoleChangePermissions()); builder.addListener(new RoleChangePermissions());
builder.addListener(new ServerBecomesAvailable()); builder.addListener(new ServerBecomesAvailable());
builder.addListener(new ServerChannelChangeOverwrittenPermissions()); builder.addListener(new ServerChannelChangeOverwrittenPermissions());
builder.addListener(new ServerJoin()); builder.addListener(new ServerJoin());
builder.addListener(new UserRoleAdd()); builder.addListener(new UserRoleAdd());
builder.setRecommendedTotalShards(); builder.setRecommendedTotalShards();
final DiscordApi api = builder.login().join(); final DiscordApi api = builder.login().join();
api.setMessageCacheSize(0, 1); api.setMessageCacheSize(0, 1);
} }
public static Future<?> submitTask(final Runnable task){ public static Future<?> submitTask(final Runnable task) {
return workerPool.submit(task); return workerPool.submit(task);
} }
public static ScheduledFuture<?> scheduleTask(final Runnable task, final long delay, final TimeUnit unit){ public static ScheduledFuture<?> scheduleTask(final Runnable task, final long delay, final TimeUnit unit) {
return workerPool.schedule(task, delay, unit); return workerPool.schedule(task, delay, unit);
} }
public static Jedis getJedis(){ public static Jedis getJedis() {
return jedisPool.getResource(); return jedisPool.getResource();
} }
} }
@@ -11,14 +11,14 @@ package dev.logal.crabstero;
import java.util.concurrent.ThreadFactory; import java.util.concurrent.ThreadFactory;
public final class CrabsteroThreadFactory implements ThreadFactory { public final class CrabsteroThreadFactory implements ThreadFactory {
private static int threadNumber = 1; private static int threadNumber = 1;
@Override @Override
public Thread newThread(final Runnable runnable){ public Thread newThread(final Runnable runnable) {
final Thread thread = new Thread(runnable); final Thread thread = new Thread(runnable);
thread.setName("Crabstero Worker Thread - " + threadNumber++); thread.setName("Crabstero Worker Thread - " + threadNumber++);
return thread; return thread;
} }
} }
@@ -19,22 +19,22 @@ import org.javacord.api.listener.message.MessageCreateListener;
import java.util.Optional; import java.util.Optional;
public final class MessageCreate implements MessageCreateListener { public final class MessageCreate implements MessageCreateListener {
@Override @Override
public void onMessageCreate(final MessageCreateEvent event){ public void onMessageCreate(final MessageCreateEvent event) {
final MessageAuthor author = event.getMessageAuthor(); final MessageAuthor author = event.getMessageAuthor();
final Optional<ServerTextChannel> serverTextChannel = event.getChannel().asServerTextChannel(); final Optional<ServerTextChannel> serverTextChannel = event.getChannel().asServerTextChannel();
if (!serverTextChannel.isPresent() || author.isBotUser() || author.isWebhook() || author.isYourself()){ if (!serverTextChannel.isPresent() || author.isBotUser() || author.isWebhook() || author.isYourself()) {
return; return;
} }
final Message message = event.getMessage(); final Message message = event.getMessage();
if (message.getMentionedUsers().contains(event.getApi().getYourself())){ if (message.getMentionedUsers().contains(event.getApi().getYourself())) {
MarkovChainMessages.replyToMessage(message); MarkovChainMessages.replyToMessage(message);
return; return;
} }
if (message.getType() == MessageType.NORMAL){ if (message.getType() == MessageType.NORMAL) {
MarkovChainMessages.ingestMessage(message); MarkovChainMessages.ingestMessage(message);
} }
} }
} }
@@ -14,12 +14,12 @@ import org.javacord.api.event.server.role.RoleChangePermissionsEvent;
import org.javacord.api.listener.server.role.RoleChangePermissionsListener; import org.javacord.api.listener.server.role.RoleChangePermissionsListener;
public final class RoleChangePermissions implements RoleChangePermissionsListener { public final class RoleChangePermissions implements RoleChangePermissionsListener {
@Override @Override
public void onRoleChangePermissions(final RoleChangePermissionsEvent event){ public void onRoleChangePermissions(final RoleChangePermissionsEvent event) {
if (event.getRole().hasUser(event.getApi().getYourself())){ if (event.getRole().hasUser(event.getApi().getYourself())) {
event.getServer().getTextChannels().forEach((channel) -> { event.getServer().getTextChannels().forEach((channel) -> {
Crabstero.submitTask(new ChannelHistoryIngestionTask(channel)); Crabstero.submitTask(new ChannelHistoryIngestionTask(channel));
}); });
} }
} }
} }
@@ -14,10 +14,10 @@ import org.javacord.api.event.server.ServerBecomesAvailableEvent;
import org.javacord.api.listener.server.ServerBecomesAvailableListener; import org.javacord.api.listener.server.ServerBecomesAvailableListener;
public final class ServerBecomesAvailable implements ServerBecomesAvailableListener { public final class ServerBecomesAvailable implements ServerBecomesAvailableListener {
@Override @Override
public void onServerBecomesAvailable(final ServerBecomesAvailableEvent event){ public void onServerBecomesAvailable(final ServerBecomesAvailableEvent event) {
event.getServer().getTextChannels().forEach((channel) -> { event.getServer().getTextChannels().forEach((channel) -> {
Crabstero.submitTask(new ChannelHistoryIngestionTask(channel)); Crabstero.submitTask(new ChannelHistoryIngestionTask(channel));
}); });
} }
} }
@@ -14,10 +14,10 @@ import org.javacord.api.event.channel.server.ServerChannelChangeOverwrittenPermi
import org.javacord.api.listener.channel.server.ServerChannelChangeOverwrittenPermissionsListener; import org.javacord.api.listener.channel.server.ServerChannelChangeOverwrittenPermissionsListener;
public final class ServerChannelChangeOverwrittenPermissions implements ServerChannelChangeOverwrittenPermissionsListener { public final class ServerChannelChangeOverwrittenPermissions implements ServerChannelChangeOverwrittenPermissionsListener {
@Override @Override
public void onServerChannelChangeOverwrittenPermissions(final ServerChannelChangeOverwrittenPermissionsEvent event){ public void onServerChannelChangeOverwrittenPermissions(final ServerChannelChangeOverwrittenPermissionsEvent event) {
event.getChannel().asServerTextChannel().ifPresent((channel) -> { event.getChannel().asServerTextChannel().ifPresent((channel) -> {
Crabstero.submitTask(new ChannelHistoryIngestionTask(channel)); Crabstero.submitTask(new ChannelHistoryIngestionTask(channel));
}); });
} }
} }
@@ -21,27 +21,27 @@ import org.slf4j.LoggerFactory;
import java.awt.*; import java.awt.*;
public final class ServerJoin implements ServerJoinListener { public final class ServerJoin implements ServerJoinListener {
private static final Logger logger = LoggerFactory.getLogger(ServerJoin.class); private static final Logger logger = LoggerFactory.getLogger(ServerJoin.class);
@Override @Override
public void onServerJoin(final ServerJoinEvent event){ public void onServerJoin(final ServerJoinEvent event) {
final Server server = event.getServer(); final Server server = event.getServer();
logger.info("Joined new server! (Name: \"" + server.getName() + "\" | ID: " + server.getIdAsString() + ")"); logger.info("Joined new server! (Name: \"" + server.getName() + "\" | ID: " + server.getIdAsString() + ")");
final EmbedBuilder embed = new EmbedBuilder(); final EmbedBuilder embed = new EmbedBuilder();
embed.setTitle("Joined New Server"); embed.setTitle("Joined New Server");
embed.setColor(new Color(255, 165, 0)); embed.setColor(new Color(255, 165, 0));
embed.addField(server.getName() + " (" + server.getIdAsString() + ")", server.getMemberCount() + " members"); embed.addField(server.getName() + " (" + server.getIdAsString() + ")", server.getMemberCount() + " members");
server.getIcon().ifPresent((icon) -> { server.getIcon().ifPresent((icon) -> {
embed.setImage(icon.getUrl().toString()); embed.setImage(icon.getUrl().toString());
}); });
embed.setFooter(event.getApi().getServers().size() + " total servers"); embed.setFooter(event.getApi().getServers().size() + " total servers");
event.getApi().getOwner().thenAcceptAsync((owner) -> { event.getApi().getOwner().thenAcceptAsync((owner) -> {
owner.sendMessage(embed).exceptionally(ExceptionLogger.get()); owner.sendMessage(embed).exceptionally(ExceptionLogger.get());
}); });
server.getTextChannels().forEach((channel) -> { server.getTextChannels().forEach((channel) -> {
Crabstero.submitTask(new ChannelHistoryIngestionTask(channel)); Crabstero.submitTask(new ChannelHistoryIngestionTask(channel));
}); });
} }
} }
@@ -14,12 +14,12 @@ import org.javacord.api.event.server.role.UserRoleAddEvent;
import org.javacord.api.listener.server.role.UserRoleAddListener; import org.javacord.api.listener.server.role.UserRoleAddListener;
public final class UserRoleAdd implements UserRoleAddListener { public final class UserRoleAdd implements UserRoleAddListener {
@Override @Override
public void onUserRoleAdd(final UserRoleAddEvent event){ public void onUserRoleAdd(final UserRoleAddEvent event) {
if (event.getUser().isYourself()){ if (event.getUser().isYourself()) {
event.getServer().getTextChannels().forEach((channel) -> { event.getServer().getTextChannels().forEach((channel) -> {
Crabstero.submitTask(new ChannelHistoryIngestionTask(channel)); Crabstero.submitTask(new ChannelHistoryIngestionTask(channel));
}); });
} }
} }
} }
@@ -21,49 +21,49 @@ import java.util.Iterator;
import java.util.stream.Stream; import java.util.stream.Stream;
public final class ChannelHistoryIngestionTask implements Runnable { public final class ChannelHistoryIngestionTask implements Runnable {
private static final String INGESTED_CHANNELS_KEY = "ingestedChannels"; private static final String INGESTED_CHANNELS_KEY = "ingestedChannels";
private static final Logger logger = LoggerFactory.getLogger(ChannelHistoryIngestionTask.class); private static final Logger logger = LoggerFactory.getLogger(ChannelHistoryIngestionTask.class);
private final ServerTextChannel channel; private final ServerTextChannel channel;
public ChannelHistoryIngestionTask(final ServerTextChannel channel){ public ChannelHistoryIngestionTask(final ServerTextChannel channel) {
this.channel = channel; this.channel = channel;
} }
@Override @Override
public void run(){ public void run() {
try { try {
if (!this.channel.canYouReadMessageHistory()){ if (!this.channel.canYouReadMessageHistory()) {
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("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() + ")");
return; return;
} }
try (final Jedis jedis = Crabstero.getJedis()){ try (final Jedis jedis = Crabstero.getJedis()) {
if (jedis.lrange(INGESTED_CHANNELS_KEY, 0, -1).contains(this.channel.getIdAsString())){ if (jedis.lrange(INGESTED_CHANNELS_KEY, 0, -1).contains(this.channel.getIdAsString())) {
return; return;
} else { } else {
final Pipeline pipeline = jedis.pipelined(); final Pipeline pipeline = jedis.pipelined();
pipeline.lpush(INGESTED_CHANNELS_KEY, this.channel.getIdAsString()); pipeline.lpush(INGESTED_CHANNELS_KEY, this.channel.getIdAsString());
logger.info("Starting ingestion of text channel history. (Name: \"" + this.channel.getName() + "\" | ID: " + this.channel.getIdAsString() + " | Server ID: " + this.channel.getServer().getIdAsString() + ")"); logger.info("Starting ingestion of text channel history. (Name: \"" + this.channel.getName() + "\" | ID: " + this.channel.getIdAsString() + " | Server ID: " + this.channel.getServer().getIdAsString() + ")");
} }
} }
try (final Stream<Message> history = this.channel.getMessagesAsStream()){ try (final Stream<Message> history = this.channel.getMessagesAsStream()) {
final Iterator<Message> iterator = history.iterator(); final Iterator<Message> iterator = history.iterator();
int i = 0; int i = 0;
while (iterator.hasNext()){ while (iterator.hasNext()) {
i++; i++;
MarkovChainMessages.ingestMessage(iterator.next()); MarkovChainMessages.ingestMessage(iterator.next());
if (i == Crabstero.maximumMessagesPerChannel){ if (i == Crabstero.maximumMessagesPerChannel) {
break; break;
} }
} }
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("Ingestion of text channel history complete. " + i + " messages ingested. (Name: \"" + this.channel.getName() + "\" | ID: " + this.channel.getIdAsString() + " | Server ID: " + this.channel.getServer().getIdAsString() + ")");
} }
} catch (final Throwable exception){ } catch (final Throwable exception) {
logger.error("An error occured while ingesting text channel history! (Name: \"" + this.channel.getName() + "\" | ID: " + this.channel.getIdAsString() + " | Server ID: " + this.channel.getServer().getIdAsString() + ")", exception); logger.error("An error occured while ingesting text channel history! (Name: \"" + this.channel.getName() + "\" | ID: " + this.channel.getIdAsString() + " | Server ID: " + this.channel.getServer().getIdAsString() + ")", exception);
} }
} }
} }
@@ -17,107 +17,107 @@ import java.util.List;
import java.util.Random; import java.util.Random;
public final class MarkovChain { public final class MarkovChain {
private static final char DEFAULT_SENTENCE_END = '§'; private static final char DEFAULT_SENTENCE_END = '§';
private static final Random rng = new SecureRandom(); private static final Random rng = new SecureRandom();
private final long id; private final long id;
public MarkovChain(final long id){ public MarkovChain(final long id) {
this.id = id; this.id = id;
} }
private static final boolean isCompleteSentence(final String sentence){ private static final boolean isCompleteSentence(final String sentence) {
if (sentence.isEmpty()){ if (sentence.isEmpty()) {
return false; return false;
} }
final char lastChar = sentence.charAt(sentence.length() - 1); final char lastChar = sentence.charAt(sentence.length() - 1);
return (lastChar == DEFAULT_SENTENCE_END || lastChar == '.' || lastChar == '!' || lastChar == '?'); return (lastChar == DEFAULT_SENTENCE_END || lastChar == '.' || lastChar == '!' || lastChar == '?');
} }
public void ingest(String paragraph){ public void ingest(String paragraph) {
if (!isCompleteSentence(paragraph)){ if (!isCompleteSentence(paragraph)) {
paragraph += DEFAULT_SENTENCE_END; paragraph += DEFAULT_SENTENCE_END;
} }
final String[] sentences = paragraph.trim().replaceAll(" +", " ").replaceAll("\n", " ").split("(?<=[.!?]) "); final String[] sentences = paragraph.trim().replaceAll(" +", " ").replaceAll("\n", " ").split("(?<=[.!?]) ");
for (int i = 0; i < sentences.length; i++){ for (int i = 0; i < sentences.length; i++) {
this.ingestSentence(sentences[i]); this.ingestSentence(sentences[i]);
} }
} }
private void ingestSentence(String sentence){ private void ingestSentence(String sentence) {
if (!isCompleteSentence(sentence)){ if (!isCompleteSentence(sentence)) {
sentence += DEFAULT_SENTENCE_END; sentence += DEFAULT_SENTENCE_END;
} }
String[] words = sentence.trim().replaceAll(" +", " ").split(" "); String[] words = sentence.trim().replaceAll(" +", " ").split(" ");
try (final Jedis jedis = Crabstero.getJedis()){ try (final Jedis jedis = Crabstero.getJedis()) {
final Pipeline pipeline = jedis.pipelined(); final Pipeline pipeline = jedis.pipelined();
for (int i = 0; i < words.length - 1; i++){ for (int i = 0; i < words.length - 1; i++) {
if (i == 0){ if (i == 0) {
pipeline.lpush(this.id + ":start", words[i]); pipeline.lpush(this.id + ":start", words[i]);
pipeline.lpush(this.id + "::" + words[i], words[i + 1]); pipeline.lpush(this.id + "::" + words[i], words[i + 1]);
} else { } else {
pipeline.lpush(this.id + "::" + words[i], words[i + 1]); pipeline.lpush(this.id + "::" + words[i], words[i + 1]);
} }
} }
} }
} }
public String generate(final int softCharacterLimit, final int hardCharacterLimit){ public String generate(final int softCharacterLimit, final int hardCharacterLimit) {
final StringBuilder newSentence = new StringBuilder(); final StringBuilder newSentence = new StringBuilder();
try (final Jedis jedis = Crabstero.getJedis()){ try (final Jedis jedis = Crabstero.getJedis()) {
if (!jedis.exists(this.id + ":start")){ if (!jedis.exists(this.id + ":start")) {
this.ingestSentence("Hello world!"); this.ingestSentence("Hello world!");
} }
String word = ""; String word = "";
final List<String> startingWords = jedis.lrange(this.id + ":start", 0, -1); final List<String> startingWords = jedis.lrange(this.id + ":start", 0, -1);
int index = rng.nextInt(startingWords.size()); int index = rng.nextInt(startingWords.size());
word = startingWords.get(index); word = startingWords.get(index);
newSentence.append(word); newSentence.append(word);
while (!isCompleteSentence(word)){ while (!isCompleteSentence(word)) {
final List<String> wordChoices = jedis.lrange(this.id + "::" + word, 0, -1); final List<String> wordChoices = jedis.lrange(this.id + "::" + word, 0, -1);
index = -1; index = -1;
if (newSentence.length() >= softCharacterLimit){ if (newSentence.length() >= softCharacterLimit) {
for (int i = 0; i < wordChoices.size(); i++){ for (int i = 0; i < wordChoices.size(); i++) {
final String candidate = wordChoices.get(i); final String candidate = wordChoices.get(i);
if (isCompleteSentence(candidate)){ if (isCompleteSentence(candidate)) {
index = i; index = i;
break; break;
} }
} }
if (index == -1){ if (index == -1) {
index = rng.nextInt(wordChoices.size()); index = rng.nextInt(wordChoices.size());
} }
} else { } else {
index = rng.nextInt(wordChoices.size()); index = rng.nextInt(wordChoices.size());
} }
word = wordChoices.get(index); word = wordChoices.get(index);
newSentence.append(" " + word); newSentence.append(" " + word);
final int sentenceLength = newSentence.length(); final int sentenceLength = newSentence.length();
if (sentenceLength >= hardCharacterLimit){ if (sentenceLength >= hardCharacterLimit) {
newSentence.delete(hardCharacterLimit, sentenceLength); newSentence.delete(hardCharacterLimit, sentenceLength);
break; break;
} }
} }
} }
if (newSentence.charAt(newSentence.length() - 1) == DEFAULT_SENTENCE_END){ if (newSentence.charAt(newSentence.length() - 1) == DEFAULT_SENTENCE_END) {
return newSentence.deleteCharAt(newSentence.length() - 1).toString(); return newSentence.deleteCharAt(newSentence.length() - 1).toString();
} else { } else {
return newSentence.toString(); return newSentence.toString();
} }
} }
} }
@@ -25,86 +25,86 @@ import java.util.List;
import java.util.Random; import java.util.Random;
public class MarkovChainMessages { public class MarkovChainMessages {
private static final AllowedMentions allowedMentions; private static final AllowedMentions allowedMentions;
private static final Random rng = new SecureRandom(); private static final Random rng = new SecureRandom();
static { static {
final AllowedMentionsBuilder builder = new AllowedMentionsBuilder(); final AllowedMentionsBuilder builder = new AllowedMentionsBuilder();
builder.setMentionEveryoneAndHere(false); builder.setMentionEveryoneAndHere(false);
builder.setMentionRoles(false); builder.setMentionRoles(false);
builder.setMentionUsers(false); builder.setMentionUsers(false);
allowedMentions = builder.build(); allowedMentions = builder.build();
} }
private MarkovChainMessages(){ private MarkovChainMessages() {
throw new UnsupportedOperationException(); throw new UnsupportedOperationException();
} }
public static void replyToMessage(final Message message){ public static void replyToMessage(final Message message) {
final TextChannel channel = message.getChannel(); final TextChannel channel = message.getChannel();
if (!channel.canYouWrite()){ if (!channel.canYouWrite()) {
return; return;
} }
final long channelID = channel.getId(); final long channelID = channel.getId();
final MessageBuilder response = new MessageBuilder(); final MessageBuilder response = new MessageBuilder();
final MarkovChain markovChain = new MarkovChain(channelID); final MarkovChain markovChain = new MarkovChain(channelID);
response.replyTo(message); response.replyTo(message);
response.setContent(markovChain.generate(750, 1000)); response.setContent(markovChain.generate(750, 1000));
if (rng.nextDouble() >= 0.95 && channel.canYouEmbedLinks()){ if (rng.nextDouble() >= 0.95 && channel.canYouEmbedLinks()) {
final EmbedBuilder embed = new EmbedBuilder(); final EmbedBuilder embed = new EmbedBuilder();
embed.setTitle(markovChain.generate(200, 300)); embed.setTitle(markovChain.generate(200, 300));
embed.setDescription(markovChain.generate(300, 500)); embed.setDescription(markovChain.generate(300, 500));
try (final Jedis jedis = Crabstero.getJedis()){ try (final Jedis jedis = Crabstero.getJedis()) {
final List<String> embedImageURLs = jedis.lrange(channelID + ":images", 0, -1); final List<String> embedImageURLs = jedis.lrange(channelID + ":images", 0, -1);
if (embedImageURLs.size() > 0){ if (embedImageURLs.size() > 0) {
embed.setImage(embedImageURLs.get(rng.nextInt(embedImageURLs.size()))); embed.setImage(embedImageURLs.get(rng.nextInt(embedImageURLs.size())));
} }
} }
embed.setFooter("Crabstero is a logal.dev project", "https://logal.dev/images/logo.png"); embed.setFooter("Crabstero is a logal.dev project", "https://logal.dev/images/logo.png");
response.setEmbed(embed); response.setEmbed(embed);
} }
response.setAllowedMentions(allowedMentions); response.setAllowedMentions(allowedMentions);
response.send(channel).exceptionally(ExceptionLogger.get()); response.send(channel).exceptionally(ExceptionLogger.get());
} }
public static void ingestMessage(final Message message){ public static void ingestMessage(final Message message) {
final MessageAuthor author = message.getAuthor(); final MessageAuthor author = message.getAuthor();
if (author.isBotUser() || author.isWebhook() || message.getMentionedUsers().contains(message.getApi().getYourself())){ if (author.isBotUser() || author.isWebhook() || message.getMentionedUsers().contains(message.getApi().getYourself())) {
return; return;
} }
final long channelID = message.getChannel().getId(); final long channelID = message.getChannel().getId();
final MarkovChain markovChain = new MarkovChain(channelID); final MarkovChain markovChain = new MarkovChain(channelID);
markovChain.ingest(message.getContent()); markovChain.ingest(message.getContent());
for (final Embed embed : message.getEmbeds()){ for (final Embed embed : message.getEmbeds()) {
ingestEmbed(channelID, embed); ingestEmbed(channelID, embed);
} }
} }
public static void ingestEmbed(final long channelID, final Embed embed){ public static void ingestEmbed(final long channelID, final Embed embed) {
final MarkovChain markovChain = new MarkovChain(channelID); final MarkovChain markovChain = new MarkovChain(channelID);
embed.getTitle().ifPresent((title) -> { embed.getTitle().ifPresent((title) -> {
markovChain.ingest(title); markovChain.ingest(title);
}); });
embed.getDescription().ifPresent((description) -> { embed.getDescription().ifPresent((description) -> {
markovChain.ingest(description); markovChain.ingest(description);
}); });
embed.getImage().ifPresent((image) -> { embed.getImage().ifPresent((image) -> {
try (final Jedis jedis = Crabstero.getJedis()){ try (final Jedis jedis = Crabstero.getJedis()) {
jedis.lpush(channelID + ":images", image.getUrl().toString()); jedis.lpush(channelID + ":images", image.getUrl().toString());
} }
}); });
} }
} }