Files
discordbot-ng/src/shared/RedisClient.ts
T
2026-06-02 09:36:15 -04:00

52 lines
1.5 KiB
TypeScript

import { createClient, SocketClosedUnexpectedlyError } from '@redis/client';
import { Client } from 'discord.js';
import { banUpdateHandler, ticketUpdateHandler, appealUpdateHandler } from '../utils';
let discordClient: Client;
export async function openRedisClient(url: string, discClient: Client) {
const client = await createClient({
url: `redis://${url}`,
socket: {
reconnectStrategy: 60000
}
});
client.on('error', (error) => {
if (error.code == 'ECONNREFUSED') {
console.error("Couldn't connect to redis database: Connection refused (is redis on? is the port reachable?)");
} else if (error instanceof SocketClosedUnexpectedlyError) {
console.error('Redis server closed unexpectedly. Attempting reconnect every 60 seconds.');
} else {
console.error('Redis error:');
console.error(error);
}
});
client.on('connect', () => {
console.log('Connected to redis database');
});
client.on('reconnecting', () => {
console.log('Attempting to reconnect to redis database');
});
client.once('connect', () => {
client.subscribe(['ticket_updates', 'ban_updates', 'appeal_updates'], updateHandler);
});
client.connect();
discordClient = discClient;
}
function updateHandler(data: string, channel: string) {
switch (channel) {
case 'ticket_updates':
return ticketUpdateHandler(discordClient, data);
case 'ban_updates':
return banUpdateHandler(discordClient, data);
case 'appeal_updates':
return appealUpdateHandler(discordClient, data);
}
}