From 87d5e95452495eb3d305616a2a482e5ee3aebd8b Mon Sep 17 00:00:00 2001 From: Charlie Laabs Date: Sun, 2 Jan 2022 01:24:01 -0600 Subject: [PATCH] Fix hangs on message edit/delete --- package-lock.json | 14 +++++++------- package.json | 2 +- src/index.ts | 30 ++++++++++++++++++++---------- 3 files changed, 28 insertions(+), 18 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8595bd5..bcb8bb1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,7 +23,7 @@ "erlpack": "github:discord/erlpack", "fs-extra": "^10.0.0", "json5": "^2.2.0", - "markov-strings-db": "^4.1.1", + "markov-strings-db": "^4.1.2", "pino": "^7.5.1", "pino-pretty": "^7.3.0", "reflect-metadata": "^0.1.13", @@ -2681,9 +2681,9 @@ "dev": true }, "node_modules/markov-strings-db": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/markov-strings-db/-/markov-strings-db-4.1.1.tgz", - "integrity": "sha512-IRfqGlq8VajKXY2+CYvuLIOwHWSLoIWfruyYK8WP96fJ17UqqXLRO959jJLp5Yy+9JJuwGHfbvVt7fBd1xHxjw==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/markov-strings-db/-/markov-strings-db-4.1.2.tgz", + "integrity": "sha512-OYdXe+0R4u38SOnqHku9EbvT4d6WpiMtdMjbljcphsov/sdul9JHy7yuiM3ha+NMxsaq81ZGHK7+IT8BNXvzjg==", "dependencies": { "reflect-metadata": "^0.1.13", "typeorm": "^0.2.41" @@ -6431,9 +6431,9 @@ "dev": true }, "markov-strings-db": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/markov-strings-db/-/markov-strings-db-4.1.1.tgz", - "integrity": "sha512-IRfqGlq8VajKXY2+CYvuLIOwHWSLoIWfruyYK8WP96fJ17UqqXLRO959jJLp5Yy+9JJuwGHfbvVt7fBd1xHxjw==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/markov-strings-db/-/markov-strings-db-4.1.2.tgz", + "integrity": "sha512-OYdXe+0R4u38SOnqHku9EbvT4d6WpiMtdMjbljcphsov/sdul9JHy7yuiM3ha+NMxsaq81ZGHK7+IT8BNXvzjg==", "requires": { "reflect-metadata": "^0.1.13", "typeorm": "^0.2.41" diff --git a/package.json b/package.json index ca6bcf5..3c35197 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,7 @@ "erlpack": "github:discord/erlpack", "fs-extra": "^10.0.0", "json5": "^2.2.0", - "markov-strings-db": "^4.1.1", + "markov-strings-db": "^4.1.2", "pino": "^7.5.1", "pino-pretty": "^7.3.0", "reflect-metadata": "^0.1.13", diff --git a/src/index.ts b/src/index.ts index 256cd8c..f099edc 100644 --- a/src/index.ts +++ b/src/index.ts @@ -78,6 +78,11 @@ async function getMarkovByGuildId(guildId: string): Promise { return markov; } +async function isValidChannel(channelId: string): Promise { + const channel = await Channel.findOne(channelId); + return channel?.listen || false; +} + async function getValidChannels(guild: Discord.Guild): Promise { L.trace('Getting valid channels from database'); 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'); await markov.delete(); - await markov.setup(); // TODO: temp fix until new markov-strings-db version const channelIds = channels.map((c) => c.id); L.debug({ channelIds }, `Training from text channels`); @@ -524,18 +528,21 @@ client.on('messageCreate', async (message) => { await message.reply(response); } if (command === 'respond') { + L.debug('Responding to legacy command'); const generatedResponse = await generateResponse(message); if (generatedResponse.message) await message.reply(generatedResponse.message); if (generatedResponse.debug) await message.reply(generatedResponse.debug); if (generatedResponse.error) await message.reply(generatedResponse.error); } if (command === 'tts') { + L.debug('Responding to legacy command tts'); const generatedResponse = await generateResponse(message, false, true); if (generatedResponse.message) await message.reply(generatedResponse.message); if (generatedResponse.debug) await message.reply(generatedResponse.debug); if (generatedResponse.error) await message.reply(generatedResponse.error); } if (command === 'debug') { + L.debug('Responding to legacy command debug'); const generatedResponse = await generateResponse(message, true); if (generatedResponse.message) await message.reply(generatedResponse.message); if (generatedResponse.debug) await message.reply(generatedResponse.debug); @@ -543,11 +550,14 @@ client.on('messageCreate', async (message) => { } if (command === null) { if (!message.author.bot) { - L.debug('Listening...'); - const markov = await getMarkovByGuildId(message.channel.guildId); - await markov.addData([messageToData(message)]); + if (await isValidChannel(message.channelId)) { + L.debug('Listening'); + const markov = await getMarkovByGuildId(message.channel.guildId); + await markov.addData([messageToData(message)]); + } if (client.user && message.mentions.has(client.user)) { + L.debug('Responding to mention'); const generatedResponse = await generateResponse(message); if (generatedResponse.message) await message.reply(generatedResponse.message); if (generatedResponse.debug) await message.reply(generatedResponse.debug); @@ -559,20 +569,20 @@ client.on('messageCreate', async (message) => { client.on('messageDelete', async (message) => { if (message.author?.bot) return; + if (!(await isValidChannel(message.channelId))) return; + if (!(message.guildId && message.content)) return; + L.debug(`Deleting message ${message.id}`); - if (!(message.guildId && message.content)) { - return; - } const markov = await getMarkovByGuildId(message.guildId); await markov.removeStrings([message.content]); }); client.on('messageUpdate', async (oldMessage, newMessage) => { 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}`); - if (!(oldMessage.guildId && oldMessage.content && newMessage.content)) { - return; - } const markov = await getMarkovByGuildId(oldMessage.guildId); await markov.removeStrings([oldMessage.content]); await markov.addData([newMessage.content]);