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)