diff options
| author | Matthieu Pignolet <matthieu@matthieu-dev.xyz> | 2024-11-05 20:56:22 +0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-11-05 20:56:22 +0400 |
| commit | 2f5a4acef47605b03736ee44efd6a83d5093fbff (patch) | |
| tree | 9bbf7ade942298df852fe5c55f76d7517015cddf | |
| parent | c8e3a5516497b10904543478f8314735dcc4678e (diff) | |
| parent | 53541949e96e383eb341498b6e83efe493b6f7d6 (diff) | |
Merge pull request #13 from maxchrr/main
New message reply algorithm based on time duration or random counter
| -rw-r--r-- | discordjs/src/index.mjs | 62 |
1 files changed, 48 insertions, 14 deletions
diff --git a/discordjs/src/index.mjs b/discordjs/src/index.mjs index da33d32..2e59997 100644 --- a/discordjs/src/index.mjs +++ b/discordjs/src/index.mjs @@ -2,8 +2,19 @@ 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: [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 +60,41 @@ const specialChannels = [ ] const ignoredEveryoneChannels = [ - "1055130476395909210" + "1055130476395909210" ] -let counter = 0; -const messageAction = async (message) => { +let messageReplyCounter = 0; +const messageAction = async (message, ctx) => { 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 = ( + (ctx === SYMBOL_FOR_CREATE && 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 +105,7 @@ const messageAction = async (message) => { message.reply(response); } } else if (shouldReplyByCounter) { - counter = oltCounter; + messageReplyCounter = oldCounter; } } @@ -87,7 +117,11 @@ const messageAction = async (message) => { } }; -client.on("messageCreate", messageAction); -client.on("messageUpdate", (_, message) => messageAction(message)); +client.on("messageCreate", message => + messageAction(message, SYMBOL_FOR_CREATE) +); +client.on("messageUpdate", (_, message) => + messageAction(message, SYMBOL_FOR_UPDATE) +); client.login(process.env.TOKEN); |
