[ "Authorization: Bot " . DISCORD_BOT_TOKEN, "Content-Type: application/json" ], CURLOPT_RETURNTRANSFER => true ]); $response = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); if ($httpCode === 200) { $guild = json_decode($response, true); $ch = curl_init("https://discord.com/api/v10/users/@me"); curl_setopt_array($ch, [ CURLOPT_HTTPHEADER => ["Authorization: Bot " . DISCORD_BOT_TOKEN], CURLOPT_RETURNTRANSFER => true ]); $botInfo = json_decode(curl_exec($ch), true); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); if ($httpCode !== 200 || !isset($botInfo['id'])) { throw new Exception("No se pudo obtener la información del bot de Discord. Verifica que el token sea correcto. Código HTTP: $httpCode"); } $botId = $botInfo['id']; $ch = curl_init("https://discord.com/api/v10/guilds/{$guildId}/roles"); curl_setopt_array($ch, [ CURLOPT_HTTPHEADER => ["Authorization: Bot " . DISCORD_BOT_TOKEN], CURLOPT_RETURNTRANSFER => true ]); $roles = json_decode(curl_exec($ch), true); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); if ($httpCode === 200 && is_array($roles)) { $ch = curl_init("https://discord.com/api/v10/guilds/{$guildId}/members/{$botId}"); curl_setopt_array($ch, [ CURLOPT_HTTPHEADER => ["Authorization: Bot " . DISCORD_BOT_TOKEN], CURLOPT_RETURNTRANSFER => true ]); $member = json_decode(curl_exec($ch), true); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); if ($httpCode === 404) { throw new Exception("El bot no está en el servidor de Discord especificado."); } elseif ($httpCode !== 200) { throw new Exception("Error al obtener información del bot en el servidor. Código HTTP: $httpCode"); } if (isset($member['roles']) && is_array($member['roles'])) { $botRoles = array_filter($roles, fn($role) => in_array($role['id'], $member['roles'])); $permissions = 0; foreach ($botRoles as $role) { $permissions |= intval($role['permissions']); } $permissionsInfo = [ 'guild_name' => $guild['name'] ?? 'Desconocido', 'bot_has_admin' => ($permissions & 0x8) === 0x8, 'can_kick' => ($permissions & 0x2) === 0x2, 'can_ban' => ($permissions & 0x4) === 0x4, 'permissions_int' => $permissions, 'permissions_bin' => decbin($permissions), 'roles' => array_column($botRoles, 'name') ]; $success = "Permisos de Discord verificados para el servidor: " . htmlspecialchars($permissionsInfo['guild_name']); } else { $error = "No se pudo obtener la información de roles del bot en el servidor de Discord."; } } else { $error = "No se pudieron obtener los roles del servidor de Discord. Código HTTP: $httpCode"; } } else { $error = "Error al obtener información del servidor de Discord. Código HTTP: $httpCode"; } } catch (Exception $e) { $error = "Error al verificar permisos de Discord: " . $e->getMessage(); } } // Verificar si es una solicitud de verificación de webhook de Telegram elseif (isset($_POST['check_telegram_webhook'])) { try { if (!defined('TELEGRAM_BOT_TOKEN') || empty(TELEGRAM_BOT_TOKEN)) { throw new Exception("La constante TELEGRAM_BOT_TOKEN no está definida o está vacía."); } $botToken = TELEGRAM_BOT_TOKEN; $apiUrl = "https://api.telegram.org/bot{$botToken}/getWebhookInfo"; $ch = curl_init($apiUrl); curl_setopt_array($ch, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_CONNECTTIMEOUT => 10, // Segundos para esperar la conexión CURLOPT_TIMEOUT => 20, // Segundos para la ejecución total de cURL ]); $response = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); if ($response === false) { throw new Exception('Error en cURL al contactar la API de Telegram: ' . curl_error($ch)); } if ($httpCode !== 200) { throw new Exception("La API de Telegram devolvió un código HTTP {$httpCode}. Respuesta: " . $response); } $result = json_decode($response, true); if (!$result['ok']) { throw new Exception("Error de la API de Telegram: " . ($result['description'] ?? 'Error desconocido')); } $telegramWebhookInfo = $result['result']; $success = "Información del webhook de Telegram obtenida correctamente."; } catch (Exception $e) { $error = "Error al verificar el webhook de Telegram: " . $e->getMessage(); } } // Manejar la eliminación del webhook de Telegram elseif (isset($_POST['delete_telegram_webhook'])) { try { if (!defined('TELEGRAM_BOT_TOKEN') || empty(TELEGRAM_BOT_TOKEN)) { throw new Exception("La constante TELEGRAM_BOT_TOKEN no está definida o está vacía."); } $botToken = TELEGRAM_BOT_TOKEN; $apiUrl = "https://api.telegram.org/bot{$botToken}/deleteWebhook"; $ch = curl_init($apiUrl); curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER => true]); $response = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); $result = json_decode($response, true); if ($httpCode === 200 && $result['ok']) { $success = "Webhook de Telegram eliminado correctamente."; } else { throw new Exception("Error al eliminar el webhook: " . ($result['description'] ?? 'Respuesta inválida de la API.')); } } catch (Exception $e) { $error = "Error al eliminar el webhook de Telegram: " . $e->getMessage(); } } // Manejar la configuración del webhook de Telegram elseif (isset($_POST['set_telegram_webhook'])) { try { // Las constantes son definidas en config.php if (!defined('TELEGRAM_BOT_TOKEN') || !defined('BOT_BASE_URL') || !defined('TELEGRAM_WEBHOOK_TOKEN')) { throw new Exception("Una o más constantes requeridas (TELEGRAM_BOT_TOKEN, BOT_BASE_URL, TELEGRAM_WEBHOOK_TOKEN) no están definidas. Revisa tu archivo .env y la configuración."); } $botToken = TELEGRAM_BOT_TOKEN; $webhookUrl = rtrim(BOT_BASE_URL, '/') . '/telegram/webhook/telegram_bot_webhook.php?auth_token=' . TELEGRAM_WEBHOOK_TOKEN; $apiUrl = "https://api.telegram.org/bot{$botToken}/setWebhook?url=" . urlencode($webhookUrl); $ch = curl_init($apiUrl); curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER => true]); $response = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); $result = json_decode($response, true); if ($httpCode === 200 && $result['ok']) { $success = "Webhook de Telegram configurado correctamente en: " . htmlspecialchars($webhookUrl); } else { throw new Exception("Error al configurar el webhook: " . ($result['description'] ?? 'Respuesta inválida de la API.')); } } catch (Exception $e) { $error = "Error al configurar el webhook de Telegram: " . $e->getMessage(); } } // Si es un envío de mensaje de prueba de Discord elseif (isset($_POST['discord_id']) && !empty($_POST['test_content'])) { $recipientId = trim($_POST['discord_id']); $testContent = trim($_POST['test_content']); $testRecipientType = $_POST['test_recipient_type'] ?? 'channel'; try { $logDir = __DIR__ . '/../logs'; if (!is_dir($logDir)) mkdir($logDir, 0755, true); error_log("Test Discord: ID={$recipientId}, Type={$testRecipientType}, Token=" . substr(DISCORD_BOT_TOKEN, 0, 8) . "...", 3, $logDir . '/discord_api.log'); $discordSender = new DiscordSender(DISCORD_BOT_TOKEN); $discordResponse = $discordSender->sendMessage($recipientId, $testContent, $testRecipientType); $success = "Mensaje de prueba de Discord enviado con éxito."; } catch (Exception $e) { $error = "Error al enviar mensaje de prueba de Discord: " . $e->getMessage(); } } else { $error = "Por favor, completa todos los campos requeridos."; } } // Incluir el encabezado que contiene el menú lateral require_once __DIR__ . '/../templates/header.php'; ?>

Probar Conexiones de Bots

Enviar Mensaje de Prueba a Discord
> >
Respuesta de la API de Discord
Verificar Permisos del Bot de Discord
Resultado de la verificación de Discord:
  • Servidor:
  • Es Administrador:
Verificar Estado del Webhook de Telegram

Obtén el estado actual de tu webhook directamente desde la API de Telegram para diagnosticar problemas de conexión.

Resultado de la verificación de Telegram:
No hay webhook configurado. El bot está funcionando en modo 'getUpdates'.
  • URL:
  • Actualizaciones pendientes:
  • Último error:
    Mensaje:
  • Último error: Ninguno reportado.
  • Máx. Conexiones:
  • Actualizaciones permitidas: 0): ?> Todos los tipos (por defecto).
Gestionar Webhook de Telegram

Usa estos botones para eliminar o re-configurar el webhook de Telegram. Esto es útil para forzar a Telegram a actualizar la dirección IP de tu servidor si ha cambiado (por ejemplo, con DuckDNS).