feat: implementar caché de traducciones y persistencia de mensajes en MySQL para Discord y Telegram
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
import discord
|
||||
from botdiscord.translate import get_lang_mapping, get_flag_mapping, get_name_to_code, translate_text
|
||||
from botdiscord.database import get_message, save_translation, get_cached_translation
|
||||
|
||||
class TranslationView(discord.ui.View):
|
||||
def __init__(self, text: str, languages: list, original_message, attachments=None, mentions_map=None):
|
||||
@@ -31,8 +32,26 @@ class TranslationButton(discord.ui.Button):
|
||||
self.mentions_map = mentions_map or {}
|
||||
|
||||
async def callback(self, interaction: discord.Interaction):
|
||||
# Traducimos el texto
|
||||
translated = await translate_text(self.text, self.lang_code)
|
||||
# Intentamos recuperar el mensaje de la base de datos si falta contexto
|
||||
msg_context = None
|
||||
if not self.text or not self.mentions_map:
|
||||
# Recuperamos de la BD usando el ID del mensaje al que se responde
|
||||
# En Discord, si es un reply, el original_message es el mensaje original
|
||||
msg_id = self.original_message.id
|
||||
db_msg = get_message(msg_id)
|
||||
if db_msg:
|
||||
self.text = db_msg['content']
|
||||
self.mentions_map = db_msg['mentions_map']
|
||||
|
||||
# Verificamos si ya tenemos la traducción en caché
|
||||
cached = get_cached_translation(self.original_message.id, self.lang_code)
|
||||
if cached:
|
||||
translated = cached
|
||||
else:
|
||||
# Traducimos el texto
|
||||
translated = await translate_text(self.text, self.lang_code)
|
||||
# Guardamos en caché
|
||||
save_translation(self.original_message.id, self.lang_code, translated)
|
||||
|
||||
# Desescapamos el HTML para recuperar caracteres especiales
|
||||
import html
|
||||
|
||||
Reference in New Issue
Block a user