Fix hangs on message edit/delete

This commit is contained in:
Charlie Laabs
2022-01-02 01:24:01 -06:00
parent 1b8e8fd8fb
commit 87d5e95452
3 changed files with 28 additions and 18 deletions

14
package-lock.json generated
View File

@@ -23,7 +23,7 @@
"erlpack": "github:discord/erlpack", "erlpack": "github:discord/erlpack",
"fs-extra": "^10.0.0", "fs-extra": "^10.0.0",
"json5": "^2.2.0", "json5": "^2.2.0",
"markov-strings-db": "^4.1.1", "markov-strings-db": "^4.1.2",
"pino": "^7.5.1", "pino": "^7.5.1",
"pino-pretty": "^7.3.0", "pino-pretty": "^7.3.0",
"reflect-metadata": "^0.1.13", "reflect-metadata": "^0.1.13",
@@ -2681,9 +2681,9 @@
"dev": true "dev": true
}, },
"node_modules/markov-strings-db": { "node_modules/markov-strings-db": {
"version": "4.1.1", "version": "4.1.2",
"resolved": "https://registry.npmjs.org/markov-strings-db/-/markov-strings-db-4.1.1.tgz", "resolved": "https://registry.npmjs.org/markov-strings-db/-/markov-strings-db-4.1.2.tgz",
"integrity": "sha512-IRfqGlq8VajKXY2+CYvuLIOwHWSLoIWfruyYK8WP96fJ17UqqXLRO959jJLp5Yy+9JJuwGHfbvVt7fBd1xHxjw==", "integrity": "sha512-OYdXe+0R4u38SOnqHku9EbvT4d6WpiMtdMjbljcphsov/sdul9JHy7yuiM3ha+NMxsaq81ZGHK7+IT8BNXvzjg==",
"dependencies": { "dependencies": {
"reflect-metadata": "^0.1.13", "reflect-metadata": "^0.1.13",
"typeorm": "^0.2.41" "typeorm": "^0.2.41"
@@ -6431,9 +6431,9 @@
"dev": true "dev": true
}, },
"markov-strings-db": { "markov-strings-db": {
"version": "4.1.1", "version": "4.1.2",
"resolved": "https://registry.npmjs.org/markov-strings-db/-/markov-strings-db-4.1.1.tgz", "resolved": "https://registry.npmjs.org/markov-strings-db/-/markov-strings-db-4.1.2.tgz",
"integrity": "sha512-IRfqGlq8VajKXY2+CYvuLIOwHWSLoIWfruyYK8WP96fJ17UqqXLRO959jJLp5Yy+9JJuwGHfbvVt7fBd1xHxjw==", "integrity": "sha512-OYdXe+0R4u38SOnqHku9EbvT4d6WpiMtdMjbljcphsov/sdul9JHy7yuiM3ha+NMxsaq81ZGHK7+IT8BNXvzjg==",
"requires": { "requires": {
"reflect-metadata": "^0.1.13", "reflect-metadata": "^0.1.13",
"typeorm": "^0.2.41" "typeorm": "^0.2.41"

View File

@@ -44,7 +44,7 @@
"erlpack": "github:discord/erlpack", "erlpack": "github:discord/erlpack",
"fs-extra": "^10.0.0", "fs-extra": "^10.0.0",
"json5": "^2.2.0", "json5": "^2.2.0",
"markov-strings-db": "^4.1.1", "markov-strings-db": "^4.1.2",
"pino": "^7.5.1", "pino": "^7.5.1",
"pino-pretty": "^7.3.0", "pino-pretty": "^7.3.0",
"reflect-metadata": "^0.1.13", "reflect-metadata": "^0.1.13",

View File

@@ -78,6 +78,11 @@ async function getMarkovByGuildId(guildId: string): Promise<Markov> {
return markov; return markov;
} }
async function isValidChannel(channelId: string): Promise<boolean> {
const channel = await Channel.findOne(channelId);
return channel?.listen || false;
}
async function getValidChannels(guild: Discord.Guild): Promise<Discord.TextChannel[]> { async function getValidChannels(guild: Discord.Guild): Promise<Discord.TextChannel[]> {
L.trace('Getting valid channels from database'); L.trace('Getting valid channels from database');
const dbChannels = await Channel.find({ guild: Guild.create({ id: guild.id }), listen: true }); const dbChannels = await Channel.find({ guild: Guild.create({ id: guild.id }), listen: true });
@@ -217,7 +222,6 @@ async function saveGuildMessageHistory(
L.debug('Deleting old data'); L.debug('Deleting old data');
await markov.delete(); await markov.delete();
await markov.setup(); // TODO: temp fix until new markov-strings-db version
const channelIds = channels.map((c) => c.id); const channelIds = channels.map((c) => c.id);
L.debug({ channelIds }, `Training from text channels`); L.debug({ channelIds }, `Training from text channels`);
@@ -524,18 +528,21 @@ client.on('messageCreate', async (message) => {
await message.reply(response); await message.reply(response);
} }
if (command === 'respond') { if (command === 'respond') {
L.debug('Responding to legacy command');
const generatedResponse = await generateResponse(message); const generatedResponse = await generateResponse(message);
if (generatedResponse.message) await message.reply(generatedResponse.message); if (generatedResponse.message) await message.reply(generatedResponse.message);
if (generatedResponse.debug) await message.reply(generatedResponse.debug); if (generatedResponse.debug) await message.reply(generatedResponse.debug);
if (generatedResponse.error) await message.reply(generatedResponse.error); if (generatedResponse.error) await message.reply(generatedResponse.error);
} }
if (command === 'tts') { if (command === 'tts') {
L.debug('Responding to legacy command tts');
const generatedResponse = await generateResponse(message, false, true); const generatedResponse = await generateResponse(message, false, true);
if (generatedResponse.message) await message.reply(generatedResponse.message); if (generatedResponse.message) await message.reply(generatedResponse.message);
if (generatedResponse.debug) await message.reply(generatedResponse.debug); if (generatedResponse.debug) await message.reply(generatedResponse.debug);
if (generatedResponse.error) await message.reply(generatedResponse.error); if (generatedResponse.error) await message.reply(generatedResponse.error);
} }
if (command === 'debug') { if (command === 'debug') {
L.debug('Responding to legacy command debug');
const generatedResponse = await generateResponse(message, true); const generatedResponse = await generateResponse(message, true);
if (generatedResponse.message) await message.reply(generatedResponse.message); if (generatedResponse.message) await message.reply(generatedResponse.message);
if (generatedResponse.debug) await message.reply(generatedResponse.debug); if (generatedResponse.debug) await message.reply(generatedResponse.debug);
@@ -543,11 +550,14 @@ client.on('messageCreate', async (message) => {
} }
if (command === null) { if (command === null) {
if (!message.author.bot) { if (!message.author.bot) {
L.debug('Listening...'); if (await isValidChannel(message.channelId)) {
const markov = await getMarkovByGuildId(message.channel.guildId); L.debug('Listening');
await markov.addData([messageToData(message)]); const markov = await getMarkovByGuildId(message.channel.guildId);
await markov.addData([messageToData(message)]);
}
if (client.user && message.mentions.has(client.user)) { if (client.user && message.mentions.has(client.user)) {
L.debug('Responding to mention');
const generatedResponse = await generateResponse(message); const generatedResponse = await generateResponse(message);
if (generatedResponse.message) await message.reply(generatedResponse.message); if (generatedResponse.message) await message.reply(generatedResponse.message);
if (generatedResponse.debug) await message.reply(generatedResponse.debug); if (generatedResponse.debug) await message.reply(generatedResponse.debug);
@@ -559,20 +569,20 @@ client.on('messageCreate', async (message) => {
client.on('messageDelete', async (message) => { client.on('messageDelete', async (message) => {
if (message.author?.bot) return; if (message.author?.bot) return;
if (!(await isValidChannel(message.channelId))) return;
if (!(message.guildId && message.content)) return;
L.debug(`Deleting message ${message.id}`); L.debug(`Deleting message ${message.id}`);
if (!(message.guildId && message.content)) {
return;
}
const markov = await getMarkovByGuildId(message.guildId); const markov = await getMarkovByGuildId(message.guildId);
await markov.removeStrings([message.content]); await markov.removeStrings([message.content]);
}); });
client.on('messageUpdate', async (oldMessage, newMessage) => { client.on('messageUpdate', async (oldMessage, newMessage) => {
if (oldMessage.author?.bot) return; if (oldMessage.author?.bot) return;
if (!(await isValidChannel(oldMessage.channelId))) return;
if (!(oldMessage.guildId && oldMessage.content && newMessage.content)) return;
L.debug(`Editing message ${oldMessage.id}`); L.debug(`Editing message ${oldMessage.id}`);
if (!(oldMessage.guildId && oldMessage.content && newMessage.content)) {
return;
}
const markov = await getMarkovByGuildId(oldMessage.guildId); const markov = await getMarkovByGuildId(oldMessage.guildId);
await markov.removeStrings([oldMessage.content]); await markov.removeStrings([oldMessage.content]);
await markov.addData([newMessage.content]); await markov.addData([newMessage.content]);