]> git.puffer.fish Git - matthieu/gru.git/commitdiff
New message reply algorithm based on time duration or random counter
authorMax Charrier <max@puffer.fish>
Mon, 4 Nov 2024 19:49:54 +0000 (20:49 +0100)
committerMax Charrier <max@puffer.fish>
Mon, 4 Nov 2024 19:49:54 +0000 (20:49 +0100)
Signed-off-by: Max Charrier <max@puffer.fish>
discordjs/src/index.mjs

index da33d32639f36d76a358ec9c2d854db47d50e5e4..80c943dc5af93aadf86451bf4870e85559859d22 100644 (file)
@@ -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;
     }
   }