From 48f7a80dc4950e21377fdb4bd057d6972dfe26b9 Mon Sep 17 00:00:00 2001 From: nickpons666 Date: Mon, 23 Mar 2026 21:19:13 -0600 Subject: [PATCH] =?UTF-8?q?Fix:=20Mejorar=20manejo=20de=20menciones=20en?= =?UTF-8?q?=20traducciones=20usando=20placeholders=20m=C3=A1s=20robustos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Cambiar formato de placeholder de a 【M0】 (corchetes chinos) - El traductor ya no altera estos placeholders - Agregar verificación de placeholders antes de usar caché - Regenerar traducciones automáticamente si placeholders no coinciden - Compatible con formatos antiguos de placeholders --- botdiscord/bot.py | 16 ++++++++++++---- botdiscord/ui.py | 30 +++++++++++++++++++++++++----- 2 files changed, 37 insertions(+), 9 deletions(-) diff --git a/botdiscord/bot.py b/botdiscord/bot.py index ddea434..59cd331 100644 --- a/botdiscord/bot.py +++ b/botdiscord/bot.py @@ -94,6 +94,15 @@ async def on_member_join(member): ) text_escaped = html.escape(formatted_message) + mention_pattern = re.compile(r'<@!?(\d+)>|<@&(\d+)>|<#(\d+)>') + welcome_mentions_map = {} + + def replace_mention(match): + placeholder = f"【M{len(welcome_mentions_map)}】" + welcome_mentions_map[placeholder] = html.unescape(match.group(0)) + return placeholder + + text_to_translate = mention_pattern.sub(replace_mention, text_escaped) welcome_msg = await channel.send(formatted_message) print(f"[WELCOME] Mensaje enviado: {welcome_msg.id}") @@ -102,8 +111,8 @@ async def on_member_join(member): welcome_msg.id, member.guild.id, member.id, - text_escaped, - {}, + text_to_translate, + welcome_mentions_map, 'discord' ) @@ -153,13 +162,12 @@ async def on_message(message): active_codes = get_active_langs_for_guild(message.guild.id) if not active_codes: return - # Escapar y procesar menciones text_escaped = html.escape(message.content) mention_pattern = re.compile(r'<@!?(\d+)>|<@&(\d+)>|<#(\d+)>') mentions_map = {} def replace_mention(match): - placeholder = f"" + placeholder = f"【M{len(mentions_map)}】" mentions_map[placeholder] = html.unescape(match.group(0)) return placeholder diff --git a/botdiscord/ui.py b/botdiscord/ui.py index 680a187..76b2171 100644 --- a/botdiscord/ui.py +++ b/botdiscord/ui.py @@ -52,11 +52,22 @@ class TranslationButton(discord.ui.Button): return text = db_msg['content'] - mentions_map = db_msg['mentions_map'] + mentions_map = db_msg['mentions_map'] or {} cached = get_cached_translation(original_msg_id, self.lang_code) + needs_retranslate = False + if cached: - translated = cached + for placeholder in mentions_map.keys(): + if placeholder not in cached: + needs_retranslate = True + break + + if needs_retranslate: + translated = await translate_text(text, self.lang_code) + save_translation(original_msg_id, self.lang_code, translated) + else: + translated = cached else: translated = await translate_text(text, self.lang_code) save_translation(original_msg_id, self.lang_code, translated) @@ -65,7 +76,6 @@ class TranslationButton(discord.ui.Button): if mentions_map: for placeholder, mention in mentions_map.items(): translated = translated.replace(placeholder, mention) - translated = translated.replace(placeholder.replace(" ", ""), mention) guild_id = interaction.guild_id active_codes = get_active_languages(guild_id) @@ -145,8 +155,19 @@ class WelcomeTranslationButton(discord.ui.Button): mentions_map = db_msg['mentions_map'] or {} cached = get_cached_translation(original_msg_id, self.lang_code) + needs_retranslate = False + if cached: - translated = cached + for placeholder in mentions_map.keys(): + if placeholder not in cached: + needs_retranslate = True + break + + if needs_retranslate: + translated = await translate_text(text, self.lang_code) + save_translation(original_msg_id, self.lang_code, translated) + else: + translated = cached else: translated = await translate_text(text, self.lang_code) save_translation(original_msg_id, self.lang_code, translated) @@ -155,7 +176,6 @@ class WelcomeTranslationButton(discord.ui.Button): if mentions_map: for placeholder, mention in mentions_map.items(): translated = translated.replace(placeholder, mention) - translated = translated.replace(placeholder.replace(" ", ""), mention) guild_id = interaction.guild_id active_codes = get_active_languages(guild_id)