Cambios principales: - Nuevo archivo: includes/emoji_helper.php * hasRealContent(): Detecta si hay contenido real (no solo emojis) * stripEmojisForDetection(): Preserva emojis visuales pero mejora detección de idioma Telegram (telegram_bot_webhook.php): - Ignorar stickers puros sin caption - Ignorar GIFs/animaciones puras sin caption - Procesar caption si tiene contenido real - Usar stripEmojisForDetection() para mejor precisión en idioma Discord (discord_bot.php): - Ignorar mensajes con solo emojis/espacios - Usar stripEmojisForDetection() para detección más precisa - Intentar preservar emojis en la traducción Comportamiento: - Solo 👍 = Ignorado - Hola 👍 = Traducido como 'Hola' (emoji se preserva) - {sticker_sin_caption} = Ignorado - {gif_sin_caption} = Ignorado - {foto_con_caption} = Caption traducido
51 lines
1.9 KiB
PHP
51 lines
1.9 KiB
PHP
<?php
|
|
|
|
/**
|
|
* Verifica si un texto contiene contenido real (no solo emojis, espacios, etc)
|
|
* Los emojis se preservan en el texto, solo verificamos que hay más que eso
|
|
*/
|
|
function hasRealContent(string $text): bool
|
|
{
|
|
if (empty($text)) {
|
|
return false;
|
|
}
|
|
|
|
// Hacer una copia para procesarla sin alterar el original
|
|
$clean = trim($text);
|
|
|
|
if (empty($clean)) {
|
|
return false;
|
|
}
|
|
|
|
// Remover emojis y caracteres especiales, preservar solo letras, números y puntuación básica
|
|
// Esta expresión regular mantiene letras, números y puntuación, elimina emojis
|
|
// Emojis Unicode: rangos múltiples de caracteres
|
|
$clean = preg_replace('/[\x{1F300}-\x{1F9FF}]/u', '', $clean); // Emojis de rango alto (0x1F300-0x1F9FF)
|
|
$clean = preg_replace('/[\x{2600}-\x{26FF}]/u', '', $clean); // Símbolos de ajedrez, dados, etc
|
|
$clean = preg_replace('/[\x{2B50}]/u', '', $clean); // Estrella
|
|
$clean = preg_replace('/[\x{00A0}\s]+/u', '', $clean); // Espacios en blanco (incluyendo no-breaking space)
|
|
$clean = preg_replace('/[\p{P}]/u', '', $clean); // Puntuación Unicode (incluyendo 👍)
|
|
|
|
// Si después de remover emojis y espacios no queda nada, es solo emojis
|
|
return !empty(trim($clean));
|
|
}
|
|
|
|
/**
|
|
* Obtiene el texto sin emojis para análisis de idioma
|
|
* NOTA: Los emojis se preservan en el mensaje original para mostrar al usuario
|
|
*/
|
|
function stripEmojisForDetection(string $text): string
|
|
{
|
|
$clean = $text;
|
|
|
|
// Remover emojis de rango alto
|
|
$clean = preg_replace('/[\x{1F300}-\x{1F9FF}]/u', '', $clean);
|
|
$clean = preg_replace('/[\x{2600}-\x{26FF}]/u', '', $clean);
|
|
$clean = preg_replace('/[\x{2B50}]/u', '', $clean);
|
|
|
|
// Limpiar espacios extras resultantes
|
|
$clean = preg_replace('/\s+/u', ' ', $clean);
|
|
|
|
return trim($clean);
|
|
}
|