From ed6e4797a1c8c7d12efeb34d287c601d7ff261fa Mon Sep 17 00:00:00 2001 From: Max Charrier Date: Mon, 4 Nov 2024 20:49:54 +0100 Subject: New message reply algorithm based on time duration or random counter Signed-off-by: Max Charrier --- discordjs/src/index.mjs | 48 +++++++++++++++++++++++++++++++++++++----------- 1 file changed, 37 insertions(+), 11 deletions(-) diff --git a/discordjs/src/index.mjs b/discordjs/src/index.mjs index da33d32..80c943d 100644 --- a/discordjs/src/index.mjs +++ b/discordjs/src/index.mjs @@ -3,7 +3,14 @@ import { Client, GatewayIntentBits } from 'discord.js'; import { request } from "undici"; // Create a new client instance -const client = new Client({ intents: [GatewayIntentBits.Guilds, GatewayIntentBits.MessageContent, GatewayIntentBits.GuildMessages, GatewayIntentBits.DirectMessages] }); +const client = new Client({ intents: + [ + GatewayIntentBits.Guilds, + GatewayIntentBits.MessageContent, + GatewayIntentBits.GuildMessages, + GatewayIntentBits.DirectMessages + ] +}); // `autofeur_db` service export const DB = process.env.DB || "http://localhost:3000"; @@ -49,22 +56,41 @@ const specialChannels = [ ] const ignoredEveryoneChannels = [ - "1055130476395909210" + "1055130476395909210" ] -let counter = 0; +let messageReplyCounter = 0; const messageAction = async (message) => { if (message.author.bot) return; - counter += 1; - console.log("counter is at", counter); - let shouldReplyByCounter = counter >= 60; - let shouldReply = (shouldReplyByCounter || specialChannels.includes(message.channelId) || message.guild == null); + messageReplyCounter += 1; + console.log("counter is at", messageReplyCounter); + + let currentTimestamp = Date.now(); + let lastMessageTimestamp = await message + .channel + .messages + .fetch({ + limit: 2, + cache : false + }) + .last() + .createdTimestamp; + + let shouldReplyByTimestamp = currentTimestamp - lastMessageTimestamp >= 3600; + let shouldReplyByCounter = + messageReplyCounter >= Math.floor(Math.random() * 75) + 35; + let shouldReply = ( + shouldReplyByTimestamp || + shouldReplyByCounter || + specialChannels.includes(message.channelId) || + message.guild == null + ); if (shouldReply) { - let oltCounter = counter; - if (shouldReplyByCounter) { - counter = 0; + let oldCounter = messageReplyCounter; + if (shouldReplyByTimestamp || shouldReplyByCounter) { + messageReplyCounter = 0; } const cleanText = sanitizeWord(message.cleanContent); if (countChars(cleanText) > 0) { @@ -75,7 +101,7 @@ const messageAction = async (message) => { message.reply(response); } } else if (shouldReplyByCounter) { - counter = oltCounter; + messageReplyCounter = oldCounter; } } -- cgit v1.2.3 From f77f2c7a663061888122a0322945752f5a721e05 Mon Sep 17 00:00:00 2001 From: Max Charrier Date: Tue, 5 Nov 2024 17:27:04 +0100 Subject: Add event context Signed-off-by: Max Charrier --- discordjs/src/index.mjs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/discordjs/src/index.mjs b/discordjs/src/index.mjs index 80c943d..7acaa37 100644 --- a/discordjs/src/index.mjs +++ b/discordjs/src/index.mjs @@ -60,7 +60,7 @@ const ignoredEveryoneChannels = [ ] let messageReplyCounter = 0; -const messageAction = async (message) => { +const messageAction = async (message, ctx) => { if (message.author.bot) return; messageReplyCounter += 1; @@ -81,7 +81,7 @@ const messageAction = async (message) => { let shouldReplyByCounter = messageReplyCounter >= Math.floor(Math.random() * 75) + 35; let shouldReply = ( - shouldReplyByTimestamp || + (ctx == 0 && shouldReplyByTimestamp) || shouldReplyByCounter || specialChannels.includes(message.channelId) || message.guild == null @@ -113,7 +113,8 @@ const messageAction = async (message) => { } }; -client.on("messageCreate", messageAction); -client.on("messageUpdate", (_, message) => messageAction(message)); +// Context is 0 for created and 1 for updated +client.on("messageCreate", message => messageAction(message, 0)); +client.on("messageUpdate", (_, message) => messageAction(message, 1)); client.login(process.env.TOKEN); -- cgit v1.2.3 From f15540ef5cd05622fca9f2352db5373e0856ab00 Mon Sep 17 00:00:00 2001 From: Max Charrier Date: Tue, 5 Nov 2024 17:39:34 +0100 Subject: Use Symbol object for context instead of relative number Signed-off-by: Max Charrier --- discordjs/src/index.mjs | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/discordjs/src/index.mjs b/discordjs/src/index.mjs index 7acaa37..edddb49 100644 --- a/discordjs/src/index.mjs +++ b/discordjs/src/index.mjs @@ -81,7 +81,7 @@ const messageAction = async (message, ctx) => { let shouldReplyByCounter = messageReplyCounter >= Math.floor(Math.random() * 75) + 35; let shouldReply = ( - (ctx == 0 && shouldReplyByTimestamp) || + (ctx === Symbol.for("created") && shouldReplyByTimestamp) || shouldReplyByCounter || specialChannels.includes(message.channelId) || message.guild == null @@ -112,9 +112,7 @@ const messageAction = async (message, ctx) => { message.reply("<:quoi:1061204752542748742>") } }; - -// Context is 0 for created and 1 for updated -client.on("messageCreate", message => messageAction(message, 0)); -client.on("messageUpdate", (_, message) => messageAction(message, 1)); +client.on("messageCreate", message => messageAction(message, Symbol.for("created"))); +client.on("messageUpdate", (_, message) => messageAction(message, Symbol.for("updated"))); client.login(process.env.TOKEN); -- cgit v1.2.3 From bab7de257e42d0acf5eee2b77f9482ba2d607e01 Mon Sep 17 00:00:00 2001 From: Max Charrier Date: Tue, 5 Nov 2024 17:50:40 +0100 Subject: Symbol now act as constant Signed-off-by: Max Charrier --- discordjs/src/index.mjs | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/discordjs/src/index.mjs b/discordjs/src/index.mjs index edddb49..8eecbd4 100644 --- a/discordjs/src/index.mjs +++ b/discordjs/src/index.mjs @@ -2,6 +2,10 @@ import { Client, GatewayIntentBits } from 'discord.js'; import { request } from "undici"; +// Symbol definition +const SYMBOL_FOR_CREATE = Symbol.for("CREATE"); +const SYMBOL_FOR_UPDATE = Symbol.for("UPDATE"); + // Create a new client instance const client = new Client({ intents: [ @@ -81,7 +85,7 @@ const messageAction = async (message, ctx) => { let shouldReplyByCounter = messageReplyCounter >= Math.floor(Math.random() * 75) + 35; let shouldReply = ( - (ctx === Symbol.for("created") && shouldReplyByTimestamp) || + (ctx === Symbol.for("CREATE") && shouldReplyByTimestamp) || shouldReplyByCounter || specialChannels.includes(message.channelId) || message.guild == null @@ -112,7 +116,12 @@ const messageAction = async (message, ctx) => { message.reply("<:quoi:1061204752542748742>") } }; -client.on("messageCreate", message => messageAction(message, Symbol.for("created"))); -client.on("messageUpdate", (_, message) => messageAction(message, Symbol.for("updated"))); + +client.on("messageCreate", message => + messageAction(message, SYMBOL_FOR_CREATE) +); +client.on("messageUpdate", (_, message) => + messageAction(message, SYMBOL_FOR_UPDATE) +); client.login(process.env.TOKEN); -- cgit v1.2.3 From 53541949e96e383eb341498b6e83efe493b6f7d6 Mon Sep 17 00:00:00 2001 From: Max Charrier Date: Tue, 5 Nov 2024 17:54:59 +0100 Subject: Fix last symbol def Signed-off-by: Max Charrier --- discordjs/src/index.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/discordjs/src/index.mjs b/discordjs/src/index.mjs index 8eecbd4..2e59997 100644 --- a/discordjs/src/index.mjs +++ b/discordjs/src/index.mjs @@ -85,7 +85,7 @@ const messageAction = async (message, ctx) => { let shouldReplyByCounter = messageReplyCounter >= Math.floor(Math.random() * 75) + 35; let shouldReply = ( - (ctx === Symbol.for("CREATE") && shouldReplyByTimestamp) || + (ctx === SYMBOL_FOR_CREATE && shouldReplyByTimestamp) || shouldReplyByCounter || specialChannels.includes(message.channelId) || message.guild == null -- cgit v1.2.3