Fix: Mejorar manejo de menciones en traducciones usando placeholders más robustos
- Cambiar formato de placeholder de <m0 /> 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
This commit is contained in:
@@ -94,6 +94,15 @@ async def on_member_join(member):
|
|||||||
)
|
)
|
||||||
|
|
||||||
text_escaped = html.escape(formatted_message)
|
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)
|
welcome_msg = await channel.send(formatted_message)
|
||||||
print(f"[WELCOME] Mensaje enviado: {welcome_msg.id}")
|
print(f"[WELCOME] Mensaje enviado: {welcome_msg.id}")
|
||||||
@@ -102,8 +111,8 @@ async def on_member_join(member):
|
|||||||
welcome_msg.id,
|
welcome_msg.id,
|
||||||
member.guild.id,
|
member.guild.id,
|
||||||
member.id,
|
member.id,
|
||||||
text_escaped,
|
text_to_translate,
|
||||||
{},
|
welcome_mentions_map,
|
||||||
'discord'
|
'discord'
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -153,13 +162,12 @@ async def on_message(message):
|
|||||||
active_codes = get_active_langs_for_guild(message.guild.id)
|
active_codes = get_active_langs_for_guild(message.guild.id)
|
||||||
if not active_codes: return
|
if not active_codes: return
|
||||||
|
|
||||||
# Escapar y procesar menciones
|
|
||||||
text_escaped = html.escape(message.content)
|
text_escaped = html.escape(message.content)
|
||||||
mention_pattern = re.compile(r'<@!?(\d+)>|<@&(\d+)>|<#(\d+)>')
|
mention_pattern = re.compile(r'<@!?(\d+)>|<@&(\d+)>|<#(\d+)>')
|
||||||
mentions_map = {}
|
mentions_map = {}
|
||||||
|
|
||||||
def replace_mention(match):
|
def replace_mention(match):
|
||||||
placeholder = f"<m{len(mentions_map)} />"
|
placeholder = f"【M{len(mentions_map)}】"
|
||||||
mentions_map[placeholder] = html.unescape(match.group(0))
|
mentions_map[placeholder] = html.unescape(match.group(0))
|
||||||
return placeholder
|
return placeholder
|
||||||
|
|
||||||
|
|||||||
@@ -52,11 +52,22 @@ class TranslationButton(discord.ui.Button):
|
|||||||
return
|
return
|
||||||
|
|
||||||
text = db_msg['content']
|
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)
|
cached = get_cached_translation(original_msg_id, self.lang_code)
|
||||||
|
needs_retranslate = False
|
||||||
|
|
||||||
if cached:
|
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:
|
else:
|
||||||
translated = await translate_text(text, self.lang_code)
|
translated = await translate_text(text, self.lang_code)
|
||||||
save_translation(original_msg_id, self.lang_code, translated)
|
save_translation(original_msg_id, self.lang_code, translated)
|
||||||
@@ -65,7 +76,6 @@ class TranslationButton(discord.ui.Button):
|
|||||||
if mentions_map:
|
if mentions_map:
|
||||||
for placeholder, mention in mentions_map.items():
|
for placeholder, mention in mentions_map.items():
|
||||||
translated = translated.replace(placeholder, mention)
|
translated = translated.replace(placeholder, mention)
|
||||||
translated = translated.replace(placeholder.replace(" ", ""), mention)
|
|
||||||
|
|
||||||
guild_id = interaction.guild_id
|
guild_id = interaction.guild_id
|
||||||
active_codes = get_active_languages(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 {}
|
mentions_map = db_msg['mentions_map'] or {}
|
||||||
|
|
||||||
cached = get_cached_translation(original_msg_id, self.lang_code)
|
cached = get_cached_translation(original_msg_id, self.lang_code)
|
||||||
|
needs_retranslate = False
|
||||||
|
|
||||||
if cached:
|
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:
|
else:
|
||||||
translated = await translate_text(text, self.lang_code)
|
translated = await translate_text(text, self.lang_code)
|
||||||
save_translation(original_msg_id, self.lang_code, translated)
|
save_translation(original_msg_id, self.lang_code, translated)
|
||||||
@@ -155,7 +176,6 @@ class WelcomeTranslationButton(discord.ui.Button):
|
|||||||
if mentions_map:
|
if mentions_map:
|
||||||
for placeholder, mention in mentions_map.items():
|
for placeholder, mention in mentions_map.items():
|
||||||
translated = translated.replace(placeholder, mention)
|
translated = translated.replace(placeholder, mention)
|
||||||
translated = translated.replace(placeholder.replace(" ", ""), mention)
|
|
||||||
|
|
||||||
guild_id = interaction.guild_id
|
guild_id = interaction.guild_id
|
||||||
active_codes = get_active_languages(guild_id)
|
active_codes = get_active_languages(guild_id)
|
||||||
|
|||||||
Reference in New Issue
Block a user