Files
amayo/AmayoWeb/server-bot-stats.js
Shni 86c17728c4 feat: Add welcome component with documentation, tooling, ecosystem, community, and support sections
feat: Create WelcomeItem component for displaying welcome messages

feat: Implement various icon components for the welcome section

feat: Add theme management functionality with multiple color themes

feat: Integrate internationalization support with Spanish and English locales

feat: Set up Vue Router with authentication callback handling

feat: Implement authentication service for Discord OAuth2 login

feat: Create bot service for fetching bot statistics and information

feat: Add AuthCallback view for handling authentication responses

chore: Configure Vite for development and production environments
2025-11-04 12:22:59 -06:00

179 lines
4.2 KiB
JavaScript

/**
* Ejemplo de integración con Discord.js para obtener estadísticas reales
*
* Este archivo muestra cómo conectar tu backend Express con tu bot de Discord
* para obtener estadísticas en tiempo real.
*
* INSTALACIÓN:
* npm install discord.js
*/
import { Client, GatewayIntentBits } from 'discord.js';
import express from 'express';
import cors from 'cors';
const app = express();
// Crear cliente de Discord
const client = new Client({
intents: [
GatewayIntentBits.Guilds,
GatewayIntentBits.GuildMembers,
]
});
// Login del bot
client.login(process.env.DISCORD_BOT_TOKEN);
// Cuando el bot esté listo
client.once('ready', () => {
console.log(`✅ Bot conectado como ${client.user.tag}`);
});
// Configuración CORS
app.use(cors({
origin: process.env.NODE_ENV === 'production'
? 'https://docs.amayo.dev'
: 'http://localhost:5173'
}));
app.use(express.json());
/**
* Endpoint para obtener estadísticas reales del bot
*/
app.get('/api/bot/stats', async (req, res) => {
try {
// Verificar que el bot esté conectado
if (!client.isReady()) {
return res.status(503).json({
error: 'Bot is not connected',
servers: 0,
users: 0,
commands: 0
});
}
// Obtener número de servidores
const serverCount = client.guilds.cache.size;
// Obtener número total de usuarios únicos
let totalUsers = 0;
client.guilds.cache.forEach(guild => {
totalUsers += guild.memberCount;
});
// Obtener número de comandos
// Opción 1: Si usas slash commands
const commandCount = client.application?.commands.cache.size || 0;
// Opción 2: Si tienes un registro de comandos personalizado
// const commandCount = Object.keys(yourCommandsObject).length;
// Responder con las estadísticas
res.json({
servers: serverCount,
users: totalUsers,
commands: commandCount,
timestamp: new Date().toISOString()
});
} catch (error) {
console.error('Error fetching bot stats:', error);
res.status(500).json({
error: 'Failed to fetch bot stats',
servers: 0,
users: 0,
commands: 0
});
}
});
/**
* Endpoint para información detallada del bot
*/
app.get('/api/bot/info', async (req, res) => {
try {
if (!client.isReady()) {
return res.status(503).json({ error: 'Bot is not connected' });
}
res.json({
name: client.user.username,
id: client.user.id,
avatar: client.user.displayAvatarURL({ size: 256 }),
discriminator: client.user.discriminator,
tag: client.user.tag,
createdAt: client.user.createdAt,
uptime: process.uptime(),
ping: client.ws.ping
});
} catch (error) {
console.error('Error fetching bot info:', error);
res.status(500).json({ error: 'Failed to fetch bot info' });
}
});
/**
* Endpoint para obtener el top de servidores (opcional)
*/
app.get('/api/bot/top-guilds', async (req, res) => {
try {
if (!client.isReady()) {
return res.status(503).json({ error: 'Bot is not connected' });
}
const topGuilds = client.guilds.cache
.sort((a, b) => b.memberCount - a.memberCount)
.first(10)
.map(guild => ({
id: guild.id,
name: guild.name,
memberCount: guild.memberCount,
icon: guild.iconURL({ size: 128 })
}));
res.json(topGuilds);
} catch (error) {
console.error('Error fetching top guilds:', error);
res.status(500).json({ error: 'Failed to fetch top guilds' });
}
});
/**
* Health check
*/
app.get('/api/health', (req, res) => {
res.json({
status: 'ok',
botConnected: client.isReady(),
timestamp: new Date().toISOString()
});
});
// Iniciar servidor
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
console.log(`🚀 API server running on port ${PORT}`);
});
// Manejo de errores del bot
client.on('error', error => {
console.error('Discord client error:', error);
});
client.on('warn', warning => {
console.warn('Discord client warning:', warning);
});
// Manejo de cierre graceful
process.on('SIGINT', () => {
console.log('Closing bot connection...');
client.destroy();
process.exit(0);
});
export { client, app };