Aethel Bot OSS repository! aethel.xyz
bot fun ai discord discord-bot aethel
at dev 1.8 kB view raw
1import BotClient from '@/services/Client'; 2import { MessageFlags, InteractionReplyOptions } from 'discord.js'; 3 4interface CooldownManager { 5 cooldowns: Map<string, number>; 6 cooldownTime: number; 7} 8 9const managers = new Map<string, CooldownManager>(); 10 11setInterval( 12 () => { 13 const now = Date.now(); 14 for (const manager of managers.values()) { 15 for (const [userId, timestamp] of manager.cooldowns.entries()) { 16 if (now - timestamp > manager.cooldownTime) { 17 manager.cooldowns.delete(userId); 18 } 19 } 20 } 21 }, 22 5 * 60 * 1000, 23); 24 25export function createCooldownManager(commandName: string, cooldownTime: number): CooldownManager { 26 const manager = { 27 cooldowns: new Map<string, number>(), 28 cooldownTime, 29 }; 30 managers.set(commandName, manager); 31 return manager; 32} 33 34export async function checkCooldown( 35 manager: CooldownManager, 36 userId: string, 37 client: BotClient, 38 locale: string, 39): Promise<{ onCooldown: boolean; timeLeft?: number; message?: string }> { 40 const now = Date.now(); 41 const cooldownEnd = manager.cooldowns.get(userId) || 0; 42 43 if (now < cooldownEnd) { 44 const timeLeft = Math.ceil((cooldownEnd - now) / 1000); 45 const message = await client.getLocaleText('cooldown', locale, { 46 cooldown: timeLeft, 47 }); 48 return { onCooldown: true, timeLeft, message }; 49 } 50 51 return { onCooldown: false }; 52} 53 54export function setCooldown(manager: CooldownManager, userId: string): void { 55 const now = Date.now(); 56 manager.cooldowns.set(userId, now + manager.cooldownTime); 57 setTimeout(() => manager.cooldowns.delete(userId), manager.cooldownTime); 58} 59 60export function createCooldownResponse(message: string): InteractionReplyOptions { 61 return { 62 content: message, 63 flags: MessageFlags.Ephemeral, 64 }; 65}