duebot-test / src /services /notification.service.js
Ali00922's picture
Upload 12 files
c4be319 verified
const client = require('../bot/index');
// QUEUE SYSTEM FOR DISCORD RATE LIMITS (Max 1 msg per 500ms)
const messageQueue = [];
let isProcessingQueue = false;
setInterval(async () => {
if (messageQueue.length === 0 || isProcessingQueue) return;
isProcessingQueue = true;
const task = messageQueue.shift();
try {
const user = await client.users.fetch(task.discordId);
if (user) {
await user.send(task.message);
} else {
console.log(`[Notification] Could not find Discord User ${task.discordId}`);
}
} catch (error) {
console.error(`[Notification] Failed to send DM to ${task.discordId}:`, error.message);
}
isProcessingQueue = false;
}, 500); // 500ms safe interval
/**
* Pushes a Direct Message into the secure Discord Throttle Queue.
* @param {string} discordId - The user's Discord ID.
* @param {string} message - The message content.
*/
async function sendNotification(discordId, message) {
messageQueue.push({ discordId, message });
}
module.exports = { sendNotification };