Usando redis para produccion, eliminado redis/docker

This commit is contained in:
2025-09-20 02:09:44 -05:00
parent 97fa4b9acf
commit 3a233313e0
5 changed files with 74 additions and 46 deletions

View File

@@ -1,7 +1,7 @@
import { CommandMessage } from "../../../core/types/commands";
// @ts-ignore
import { ComponentType, ButtonStyle, ModalBuilder, TextInputBuilder, TextInputStyle, ActionRowBuilder, Message, MessageFlags } from "discord.js";
import { replaceVars } from "../../../core/lib/vars";
import { replaceVars, isValidUrlOrVariable } from "../../../core/lib/vars";
/**
* Botones de edición - VERSIÓN MEJORADA
@@ -47,17 +47,9 @@ const btns = (disabled = false) => ([
]);
/**
* Validar si una URL es válida
* Validar si una URL es válida o es una variable del sistema
*/
const isValidUrl = (url: string): boolean => {
if (!url) return false;
try {
new URL(url);
return url.startsWith('http://') || url.startsWith('https://');
} catch {
return false;
}
};
const isValidUrl = isValidUrlOrVariable;
/**
* Validar y limpiar contenido para Discord
@@ -654,20 +646,21 @@ export const command: CommandMessage = {
await i.editReply({
content: "📋 **Variables Disponibles:**\n\n" +
"**👤 Usuario:**\n" +
"`{user.name}` - Nombre del usuario\n" +
"`{user.id}` - ID del usuario\n" +
"`{user.mention}` - Mención del usuario\n" +
"`{user.avatar}` - Avatar del usuario\n\n" +
"`user.name` - Nombre del usuario\n" +
"`user.id` - ID del usuario\n" +
"`user.mention` - Mención del usuario\n" +
"`user.avatar` - Avatar del usuario\n\n" +
"**📊 Estadísticas:**\n" +
"`{user.pointsAll}` - Puntos totales\n" +
"`{user.pointsWeekly}` - Puntos semanales\n" +
"`{user.pointsMonthly}` - Puntos mensuales\n\n" +
"`user.pointsAll` - Puntos totales\n" +
"`user.pointsWeekly` - Puntos semanales\n" +
"`user.pointsMonthly` - Puntos mensuales\n\n" +
"**🏠 Servidor:**\n" +
"`{guild.name}` - Nombre del servidor\n" +
"`{guild.icon}` - Ícono del servidor\n\n" +
"`guild.name` - Nombre del servidor\n" +
"`guild.icon` - Ícono del servidor\n\n" +
"**🔗 Invitación:**\n" +
"`{invite.name}` - Nombre del servidor invitado\n" +
"`{invite.icon}` - Ícono del servidor invitado"
"`invite.name` - Nombre del servidor invitado\n" +
"`invite.icon` - Ícono del servidor invitado\n\n" +
"💡 **Nota:** Las variables se usan SIN llaves `{}` en los campos de URL/imagen."
});
break;
}

View File

@@ -1,7 +1,7 @@
import { CommandMessage } from "../../../core/types/commands";
// @ts-ignore
import { ComponentType, ButtonStyle, ModalBuilder, TextInputBuilder, TextInputStyle, ActionRowBuilder, Message, MessageFlags } from "discord.js";
import { replaceVars } from "../../../core/lib/vars";
import { replaceVars, isValidUrlOrVariable } from "../../../core/lib/vars";
/**
* Botones de edición - VERSIÓN MEJORADA
@@ -47,17 +47,9 @@ const btns = (disabled = false) => ([
]);
/**
* Validar si una URL es válida
* Validar si una URL es válida o es una variable del sistema
*/
const isValidUrl = (url: string): boolean => {
if (!url) return false;
try {
new URL(url);
return url.startsWith('http://') || url.startsWith('https://');
} catch {
return false;
}
};
const isValidUrl = isValidUrlOrVariable;
/**
* Validar y limpiar contenido para Discord
@@ -704,20 +696,21 @@ export const command: CommandMessage = {
await i.editReply({
content: "📋 **Variables Disponibles:**\n\n" +
"**👤 Usuario:**\n" +
"`{user.name}` - Nombre del usuario\n" +
"`{user.id}` - ID del usuario\n" +
"`{user.mention}` - Mención del usuario\n" +
"`{user.avatar}` - Avatar del usuario\n\n" +
"`user.name` - Nombre del usuario\n" +
"`user.id` - ID del usuario\n" +
"`user.mention` - Mención del usuario\n" +
"`user.avatar` - Avatar del usuario\n\n" +
"**📊 Estadísticas:**\n" +
"`{user.pointsAll}` - Puntos totales\n" +
"`{user.pointsWeekly}` - Puntos semanales\n" +
"`{user.pointsMonthly}` - Puntos mensuales\n\n" +
"`user.pointsAll` - Puntos totales\n" +
"`user.pointsWeekly` - Puntos semanales\n" +
"`user.pointsMonthly` - Puntos mensuales\n\n" +
"**🏠 Servidor:**\n" +
"`{guild.name}` - Nombre del servidor\n" +
"`{guild.icon}` - Ícono del servidor\n\n" +
"`guild.name` - Nombre del servidor\n" +
"`guild.icon` - Ícono del servidor\n\n" +
"**🔗 Invitación:**\n" +
"`{invite.name}` - Nombre del servidor invitado\n" +
"`{invite.icon}` - Ícono del servidor invitado"
"`invite.name` - Nombre del servidor invitado\n" +
"`invite.icon` - Ícono del servidor invitado\n\n" +
"💡 **Nota:** Las variables se usan SIN llaves `{}` en los campos de URL/imagen."
});
break;
}

View File

@@ -1,5 +1,36 @@
import {Guild, Invite, User} from "discord.js";
/**
* Lista de variables válidas del sistema (sin llaves {})
*/
export const VALID_VARIABLES = [
'user.name', 'user.id', 'user.mention', 'user.avatar',
'user.pointsAll', 'user.pointsWeekly', 'user.pointsMonthly',
'guild.name', 'guild.icon',
'invite.name', 'invite.icon'
];
/**
* Validar si una URL es válida o contiene variables del sistema
* @param url - La URL o texto a validar
* @returns boolean - true si es válida
*/
export function isValidUrlOrVariable(url: string): boolean {
if (!url) return false;
// Verificar si el texto contiene variables válidas
const hasValidVariables = VALID_VARIABLES.some(variable => url.includes(variable));
if (hasValidVariables) return true;
// Si no tiene variables, validar como URL normal
try {
new URL(url);
return url.startsWith('http://') || url.startsWith('https://');
} catch {
return false;
}
}
//@ts-ignore
export async function replaceVars(text: string, user: User | undefined, guild: Guild | undefined, stats?: any, invite: Invite | undefined): Promise<string> {
if(!text) return '';

View File

@@ -1,8 +1,19 @@
import { createClient } from "redis";
/**
* export const redis = createClient({
* url: process.env.REDIS_URL,
* })
**/
export const redis = createClient({
url: process.env.REDIS_URL,
})
username: 'default',
password: process.env.REDIS_PASS,
socket: {
host: process.env.REDIS_URL,
port: 17965
}
});
redis.on("error", (err: any) => console.error("Redis error:", err));
redis.on("connect", () => console.log("✅ Conectado a Redis"));