From 7b629d8e202912181d0adb1da76fa2774f860e3e Mon Sep 17 00:00:00 2001 From: Clockward Date: Fri, 14 Jul 2023 11:55:24 +0100 Subject: [PATCH 1/2] Added a few new locales in english and french --- suggestions/clunk2/edits.py | 3 +- suggestions/cogs/suggestion_cog.py | 4 +-- suggestions/locales/en_GB.json | 13 ++++++- suggestions/locales/fr.json | 13 ++++++- suggestions/objects/queued_suggestion.py | 3 +- suggestions/objects/suggestion.py | 44 ++++++++++++------------ suggestions/qs_paginator.py | 2 +- 7 files changed, 53 insertions(+), 29 deletions(-) diff --git a/suggestions/clunk2/edits.py b/suggestions/clunk2/edits.py index 9014983..2d97389 100644 --- a/suggestions/clunk2/edits.py +++ b/suggestions/clunk2/edits.py @@ -22,6 +22,7 @@ async def update_suggestion_message( suggestion: Suggestion, bot: SuggestionsBot, time_after: float = 10, + locale : disnake.Locale ): if suggestion.suggestion_id in pending_edits: log.debug("Ignoring already existing item %s", suggestion.suggestion_id) @@ -32,7 +33,7 @@ async def update_suggestion_message( try: await MessageEditing( bot, channel_id=suggestion.channel_id, message_id=suggestion.message_id - ).edit(embed=await suggestion.as_embed(bot)) + ).edit(embed=await suggestion.as_embed(bot, locale)) except (disnake.HTTPException, disnake.NotFound): log.error("Failed to update suggestion %s", suggestion.suggestion_id) diff --git a/suggestions/cogs/suggestion_cog.py b/suggestions/cogs/suggestion_cog.py index fe3173b..811a055 100644 --- a/suggestions/cogs/suggestion_cog.py +++ b/suggestions/cogs/suggestion_cog.py @@ -87,7 +87,7 @@ async def suggestion_up_vote( ephemeral=True, ) - await update_suggestion_message(suggestion=suggestion, bot=self.bot) + await update_suggestion_message(suggestion=suggestion, bot=self.bot, locale=inter.locale) @components.button_listener() async def suggestion_down_vote( @@ -146,7 +146,7 @@ async def suggestion_down_vote( ephemeral=True, ) - await update_suggestion_message(suggestion=suggestion, bot=self.bot) + await update_suggestion_message(suggestion=suggestion, bot=self.bot, locale=inter.locale) # log.debug("Member %s down voted suggestion %s", member_id, suggestion_id) @commands.slash_command( diff --git a/suggestions/locales/en_GB.json b/suggestions/locales/en_GB.json index 29a607e..23cdfba 100644 --- a/suggestions/locales/en_GB.json +++ b/suggestions/locales/en_GB.json @@ -113,5 +113,16 @@ "CONFIG_GET_INNER_IMAGES_IN_SUGGESTIONS_MESSAGE": "This guild {} have images in suggestions.", "CONFIG_SUGGESTIONS_IMAGES_ENABLE_INNER_MESSAGE": "All new suggestions can include images.", "CONFIG_SUGGESTIONS_IMAGES_DISABLE_INNER_MESSAGE": "All new suggestions cannot include images.", - "VIEW_VOTERS_INNER_EMBED_TITLE": "Viewing voters" + "VIEW_VOTERS_INNER_EMBED_TITLE": "Viewing voters", + "RESULTS_SO_FAR": "Results so far", + "EMBED_RESULTS": "Results", + "SUGGESTION": "Suggestion", + "SUBMITTER_NAME": "Submitter", + "SUBMITTER_ANONYMOUS": "Anonymous", + "SUBMITTER_ID": "Submitter ID", + "PAGE": "Page", + "THREAD_FOR_SUGGESTION": "Thread for suggestion", + "SUGGESTION_STATUS_APPROVED": "Approved", + "SUGGESTION_STATUS_REJECTED": "Rejected", + "SUGGESTION_STATUS_CHANGED_BY": "By" } diff --git a/suggestions/locales/fr.json b/suggestions/locales/fr.json index 1348f72..d859cae 100644 --- a/suggestions/locales/fr.json +++ b/suggestions/locales/fr.json @@ -109,5 +109,16 @@ "CONFIG_GET_INNER_IMAGES_IN_SUGGESTIONS_MESSAGE": "Cette guilde {} autoriser les images dans les suggestions.", "CONFIG_SUGGESTIONS_IMAGES_ENABLE_INNER_MESSAGE": "Toutes les nouvelles suggestions peuvent inclure des images.", "CONFIG_SUGGESTIONS_IMAGES_DISABLE_INNER_MESSAGE": "Toutes les nouvelles suggestions ne peuvent pas inclure d'images.", - "VIEW_VOTERS_INNER_EMBED_TITLE": "Affichage des votants" + "VIEW_VOTERS_INNER_EMBED_TITLE": "Affichage des votants", + "RESULTS_SO_FAR": "Résultats", + "EMBED_RESULTS": "Résultats", + "SUGGESTION": "Suggestion", + "SUBMITTER_NAME": "Créer par", + "SUBMITTER_ANONYMOUS": "Anonyme", + "SUBMITTER_ID": "ID du créateur", + "PAGE": "Page", + "THREAD_FOR_SUGGESTION": "Fil de suggestion", + "SUGGESTION_STATUS_APPROVED": "Approuvée", + "SUGGESTION_STATUS_REJECTED": "Rejetée", + "SUGGESTION_STATUS_CHANGED_BY": "Par" } \ No newline at end of file diff --git a/suggestions/objects/queued_suggestion.py b/suggestions/objects/queued_suggestion.py index 1006138..d6e7b38 100644 --- a/suggestions/objects/queued_suggestion.py +++ b/suggestions/objects/queued_suggestion.py @@ -5,6 +5,7 @@ from typing import Optional, TYPE_CHECKING, overload from disnake import Embed +import disnake from suggestions.exceptions import UnhandledError from suggestions.objects import Suggestion @@ -129,7 +130,7 @@ def as_dict(self) -> dict: return data - async def as_embed(self, bot: SuggestionsBot) -> Embed: + async def as_embed(self, bot: SuggestionsBot, locale: disnake.Locale) -> Embed: user = await bot.get_or_fetch_user(self.suggestion_author_id) if self.is_anonymous: submitter = "Anonymous" diff --git a/suggestions/objects/suggestion.py b/suggestions/objects/suggestion.py index 7fa65a7..0ae4104 100644 --- a/suggestions/objects/suggestion.py +++ b/suggestions/objects/suggestion.py @@ -386,20 +386,20 @@ def as_dict(self) -> dict: return data - async def as_embed(self, bot: SuggestionsBot) -> Embed: + async def as_embed(self, bot: SuggestionsBot, locale: disnake.Locale) -> Embed: user = await bot.get_or_fetch_user(self.suggestion_author_id) if self.resolved_by: - return await self._as_resolved_embed(bot, user) + return await self._as_resolved_embed(bot, user, locale) if self.is_anonymous: - submitter = "Anonymous" + submitter = bot.get_locale("SUBMITTER_ANONYMOUS", locale) else: submitter = user.display_name embed: Embed = Embed( - description=f"**Submitter**\n{submitter}\n\n" - f"**Suggestion**\n{self.suggestion}", + description=f"**{bot.get_locale('SUBMITTER_NAME', locale)}**\n{submitter}\n\n" + f"**{bot.get_locale('SUGGESTION', locale)}**\n{self.suggestion}", colour=self.color, timestamp=bot.state.now, ) @@ -416,7 +416,7 @@ async def as_embed(self, bot: SuggestionsBot) -> Embed: if self.uses_views_for_votes: results = ( - f"**Results so far**\n{await bot.suggestion_emojis.default_up_vote()}: **{self.total_up_votes}**\n" + f"**{bot.get_locale('RESULTS_SO_FAR', locale)}**\n{await bot.suggestion_emojis.default_up_vote()}: **{self.total_up_votes}**\n" f"{await bot.suggestion_emojis.default_down_vote()}: **{self.total_down_votes}**" ) embed.description += f"\n\n{results}" @@ -424,25 +424,25 @@ async def as_embed(self, bot: SuggestionsBot) -> Embed: return embed async def _as_resolved_embed( - self, bot: SuggestionsBot, user: disnake.User + self, bot: SuggestionsBot, user: disnake.User, locale: disnake.Locale ) -> Embed: results = ( - f"**Results**\n{await bot.suggestion_emojis.default_up_vote()}: **{self.total_up_votes}**\n" + f"**{bot.get_locale('EMBED_RESULTS', locale)}**\n{await bot.suggestion_emojis.default_up_vote()}: **{self.total_up_votes}**\n" f"{await bot.suggestion_emojis.default_down_vote()}: **{self.total_down_votes}**" ) - + if self.is_anonymous: - submitter = "Anonymous" + submitter = bot.get_locale('SUBMITTER_ANONYMOUS', locale) else: submitter = f"<@{self.suggestion_author_id}>" - text = "Approved" if self.state == SuggestionState.approved else "Rejected" + text = bot.get_locale('SUGGESTION_STATUS_APPROVED', locale) if self.state == SuggestionState.approved else bot.get_locale('SUGGESTION_STATUS_REJECTED', locale) resolved_by_text = ( - "Anonymous" if self.anonymous_resolution else f"<@{self.resolved_by}>" + bot.get_locale('SUBMITTER_ANONYMOUS', locale) if self.anonymous_resolution else f"<@{self.resolved_by}>" ) embed = Embed( - description=f"{results}\n\n**Suggestion**\n{self.suggestion}\n\n" - f"**Submitter**\n{submitter}\n\n" - f"**{text} By**\n{resolved_by_text}\n\n", + description=f"{results}\n\n**{bot.get_locale('SUGGESTION', locale)}**\n{self.suggestion}\n\n" + f"**{bot.get_locale('SUBMITTER_NAME', locale)}**\n{submitter}\n\n" + f"**{text} {bot.get_locale('SUGGESTION_STATUS_CHANGED_BY', locale)}**\n{resolved_by_text}\n\n", colour=self.color, timestamp=bot.state.now, ) @@ -662,14 +662,14 @@ async def try_notify_user_of_decision(self, bot: SuggestionsBot): except disnake.HTTPException: log.debug("Failed to dm %s to tell them about their suggestion", user.id) - async def create_thread(self, message: disnake.Message): + async def create_thread(self, message: disnake.Message, bot: SuggestionsBot, locale: disnake.Locale): """Create a thread for this suggestion""" if self.state != SuggestionState.pending: raise ValueError( "Cannot create a thread for suggestions which aren't pending." ) - await message.create_thread(name=f"Thread for suggestion {self.suggestion_id}") + await message.create_thread(name=f"{bot.get_locale('THREAD_FOR_SUGGESTION', locale)} {self.suggestion_id}") async def update_vote_count( self, @@ -688,7 +688,7 @@ async def update_vote_count( try: await MessageEditing( bot, channel_id=self.channel_id, message_id=self.message_id - ).edit(embed=await self.as_embed(bot)) + ).edit(embed=await self.as_embed(bot, interaction.locale)) except (disnake.HTTPException, disnake.NotFound): await interaction.send( embed=bot.error_embed( @@ -722,7 +722,7 @@ async def edit_message_after_finalization( message: disnake.Message = await channel.fetch_message(self.message_id) try: - await message.edit(embed=await self.as_embed(bot), components=None) + await message.edit(embed=await self.as_embed(bot, interaction.locale), components=None) except disnake.Forbidden: raise commands.MissingPermissions( missing_permissions=[ @@ -749,7 +749,7 @@ async def edit_message_after_finalization( ) try: message: disnake.Message = await channel.send( - embed=await self.as_embed(bot) + embed=await self.as_embed(bot, interaction.locale) ) except disnake.Forbidden: raise commands.MissingPermissions( @@ -866,7 +866,7 @@ async def setup_initial_messages( ) channel: disnake.TextChannel = cast(disnake.TextChannel, channel) message: disnake.Message = await channel.send( - embed=await self.as_embed(bot), + embed=await self.as_embed(bot, interaction.locale), components=[ disnake.ui.Button( emoji=await bot.suggestion_emojis.default_up_vote(), @@ -893,7 +893,7 @@ async def setup_initial_messages( if guild_config.threads_for_suggestions: try: - await self.create_thread(message) + await self.create_thread(message, bot, interaction.locale) except disnake.HTTPException: log.debug( "Failed to create a thread on suggestion %s", diff --git a/suggestions/qs_paginator.py b/suggestions/qs_paginator.py index d8a7894..c8b9ee1 100644 --- a/suggestions/qs_paginator.py +++ b/suggestions/qs_paginator.py @@ -80,7 +80,7 @@ async def format_page(self) -> disnake.Embed: await self.remove_current_page() log.debug("Hit QueueImbalance") else: - embed: disnake.Embed = await suggestion.as_embed(self.bot) + embed: disnake.Embed = await suggestion.as_embed(self.bot, self.original_interaction.locale) if suggestion.is_anonymous: embed.set_footer(text=f"Page {self.current_page}/{self.total_pages}") else: From 108cfc0165b9e1289e6d3bdf4771fb1a2e60c4fe Mon Sep 17 00:00:00 2001 From: Clockward Date: Fri, 14 Jul 2023 12:24:33 +0100 Subject: [PATCH 2/2] Changed get_locale by get_localized_string as requested. --- suggestions/clunk2/edits.py | 4 +-- suggestions/cogs/suggestion_cog.py | 4 +-- suggestions/objects/queued_suggestion.py | 10 +++---- suggestions/objects/suggestion.py | 36 ++++++++++++------------ suggestions/qs_paginator.py | 2 +- 5 files changed, 28 insertions(+), 28 deletions(-) diff --git a/suggestions/clunk2/edits.py b/suggestions/clunk2/edits.py index 2d97389..90f74d1 100644 --- a/suggestions/clunk2/edits.py +++ b/suggestions/clunk2/edits.py @@ -22,7 +22,7 @@ async def update_suggestion_message( suggestion: Suggestion, bot: SuggestionsBot, time_after: float = 10, - locale : disnake.Locale + interaction : disnake.Interaction ): if suggestion.suggestion_id in pending_edits: log.debug("Ignoring already existing item %s", suggestion.suggestion_id) @@ -33,7 +33,7 @@ async def update_suggestion_message( try: await MessageEditing( bot, channel_id=suggestion.channel_id, message_id=suggestion.message_id - ).edit(embed=await suggestion.as_embed(bot, locale)) + ).edit(embed=await suggestion.as_embed(bot, interaction)) except (disnake.HTTPException, disnake.NotFound): log.error("Failed to update suggestion %s", suggestion.suggestion_id) diff --git a/suggestions/cogs/suggestion_cog.py b/suggestions/cogs/suggestion_cog.py index 811a055..f5c37e9 100644 --- a/suggestions/cogs/suggestion_cog.py +++ b/suggestions/cogs/suggestion_cog.py @@ -87,7 +87,7 @@ async def suggestion_up_vote( ephemeral=True, ) - await update_suggestion_message(suggestion=suggestion, bot=self.bot, locale=inter.locale) + await update_suggestion_message(suggestion=suggestion, bot=self.bot, interaction=inter) @components.button_listener() async def suggestion_down_vote( @@ -146,7 +146,7 @@ async def suggestion_down_vote( ephemeral=True, ) - await update_suggestion_message(suggestion=suggestion, bot=self.bot, locale=inter.locale) + await update_suggestion_message(suggestion=suggestion, bot=self.bot, interaction=inter) # log.debug("Member %s down voted suggestion %s", member_id, suggestion_id) @commands.slash_command( diff --git a/suggestions/objects/queued_suggestion.py b/suggestions/objects/queued_suggestion.py index d6e7b38..bbf8dbf 100644 --- a/suggestions/objects/queued_suggestion.py +++ b/suggestions/objects/queued_suggestion.py @@ -130,22 +130,22 @@ def as_dict(self) -> dict: return data - async def as_embed(self, bot: SuggestionsBot, locale: disnake.Locale) -> Embed: + async def as_embed(self, bot: SuggestionsBot, interaction: disnake.Interaction) -> Embed: user = await bot.get_or_fetch_user(self.suggestion_author_id) if self.is_anonymous: - submitter = "Anonymous" + submitter = bot.get_localized_string("SUBMITTER_ANONYMOUS", interaction) else: submitter = user.display_name embed: Embed = Embed( - description=f"**Submitter**\n{submitter}\n\n" - f"**Suggestion**\n{self.suggestion}", + description=f"**{bot.get_localized_string('SUBMITTER_NAME', interaction)}**\n{submitter}\n\n" + f"**{bot.get_localized_string('SUGGESTION', interaction)}**\n{self.suggestion}", colour=bot.colors.embed_color, timestamp=self.created_at, ) if not self.is_anonymous: embed.set_thumbnail(user.display_avatar) - embed.set_footer(text=f"Submitter ID: {self.suggestion_author_id}") + embed.set_footer(text=f"{bot.get_localized_string('SUBMITTER_ID', interaction)}: {self.suggestion_author_id}") if self.image_url: embed.set_image(self.image_url) diff --git a/suggestions/objects/suggestion.py b/suggestions/objects/suggestion.py index 0ae4104..2220d13 100644 --- a/suggestions/objects/suggestion.py +++ b/suggestions/objects/suggestion.py @@ -386,20 +386,20 @@ def as_dict(self) -> dict: return data - async def as_embed(self, bot: SuggestionsBot, locale: disnake.Locale) -> Embed: + async def as_embed(self, bot: SuggestionsBot, interaction: disnake.Interaction) -> Embed: user = await bot.get_or_fetch_user(self.suggestion_author_id) if self.resolved_by: - return await self._as_resolved_embed(bot, user, locale) + return await self._as_resolved_embed(bot, user, interaction) if self.is_anonymous: - submitter = bot.get_locale("SUBMITTER_ANONYMOUS", locale) + submitter = bot.get_localized_string("SUBMITTER_ANONYMOUS", interaction) else: submitter = user.display_name embed: Embed = Embed( - description=f"**{bot.get_locale('SUBMITTER_NAME', locale)}**\n{submitter}\n\n" - f"**{bot.get_locale('SUGGESTION', locale)}**\n{self.suggestion}", + description=f"**{bot.get_localized_string('SUBMITTER_NAME', interaction)}**\n{submitter}\n\n" + f"**{bot.get_localized_string('SUGGESTION', interaction)}**\n{self.suggestion}", colour=self.color, timestamp=bot.state.now, ) @@ -416,7 +416,7 @@ async def as_embed(self, bot: SuggestionsBot, locale: disnake.Locale) -> Embed: if self.uses_views_for_votes: results = ( - f"**{bot.get_locale('RESULTS_SO_FAR', locale)}**\n{await bot.suggestion_emojis.default_up_vote()}: **{self.total_up_votes}**\n" + f"**{bot.get_localized_string('RESULTS_SO_FAR', interaction)}**\n{await bot.suggestion_emojis.default_up_vote()}: **{self.total_up_votes}**\n" f"{await bot.suggestion_emojis.default_down_vote()}: **{self.total_down_votes}**" ) embed.description += f"\n\n{results}" @@ -424,25 +424,25 @@ async def as_embed(self, bot: SuggestionsBot, locale: disnake.Locale) -> Embed: return embed async def _as_resolved_embed( - self, bot: SuggestionsBot, user: disnake.User, locale: disnake.Locale + self, bot: SuggestionsBot, user: disnake.User, interaction: disnake.Interaction ) -> Embed: results = ( - f"**{bot.get_locale('EMBED_RESULTS', locale)}**\n{await bot.suggestion_emojis.default_up_vote()}: **{self.total_up_votes}**\n" + f"**{bot.get_localized_string('EMBED_RESULTS', interaction)}**\n{await bot.suggestion_emojis.default_up_vote()}: **{self.total_up_votes}**\n" f"{await bot.suggestion_emojis.default_down_vote()}: **{self.total_down_votes}**" ) if self.is_anonymous: - submitter = bot.get_locale('SUBMITTER_ANONYMOUS', locale) + submitter = bot.get_localized_string('SUBMITTER_ANONYMOUS', interaction) else: submitter = f"<@{self.suggestion_author_id}>" - text = bot.get_locale('SUGGESTION_STATUS_APPROVED', locale) if self.state == SuggestionState.approved else bot.get_locale('SUGGESTION_STATUS_REJECTED', locale) + text = bot.get_localized_string('SUGGESTION_STATUS_APPROVED', interaction) if self.state == SuggestionState.approved else bot.get_localized_string('SUGGESTION_STATUS_REJECTED', interaction) resolved_by_text = ( - bot.get_locale('SUBMITTER_ANONYMOUS', locale) if self.anonymous_resolution else f"<@{self.resolved_by}>" + bot.get_localized_string('SUBMITTER_ANONYMOUS', interaction) if self.anonymous_resolution else f"<@{self.resolved_by}>" ) embed = Embed( - description=f"{results}\n\n**{bot.get_locale('SUGGESTION', locale)}**\n{self.suggestion}\n\n" - f"**{bot.get_locale('SUBMITTER_NAME', locale)}**\n{submitter}\n\n" - f"**{text} {bot.get_locale('SUGGESTION_STATUS_CHANGED_BY', locale)}**\n{resolved_by_text}\n\n", + description=f"{results}\n\n**{bot.get_localized_string('SUGGESTION', interaction)}**\n{self.suggestion}\n\n" + f"**{bot.get_localized_string('SUBMITTER_NAME', interaction)}**\n{submitter}\n\n" + f"**{text} {bot.get_localized_string('SUGGESTION_STATUS_CHANGED_BY', interaction)}**\n{resolved_by_text}\n\n", colour=self.color, timestamp=bot.state.now, ) @@ -688,7 +688,7 @@ async def update_vote_count( try: await MessageEditing( bot, channel_id=self.channel_id, message_id=self.message_id - ).edit(embed=await self.as_embed(bot, interaction.locale)) + ).edit(embed=await self.as_embed(bot, interaction)) except (disnake.HTTPException, disnake.NotFound): await interaction.send( embed=bot.error_embed( @@ -722,7 +722,7 @@ async def edit_message_after_finalization( message: disnake.Message = await channel.fetch_message(self.message_id) try: - await message.edit(embed=await self.as_embed(bot, interaction.locale), components=None) + await message.edit(embed=await self.as_embed(bot, interaction), components=None) except disnake.Forbidden: raise commands.MissingPermissions( missing_permissions=[ @@ -749,7 +749,7 @@ async def edit_message_after_finalization( ) try: message: disnake.Message = await channel.send( - embed=await self.as_embed(bot, interaction.locale) + embed=await self.as_embed(bot, interaction) ) except disnake.Forbidden: raise commands.MissingPermissions( @@ -866,7 +866,7 @@ async def setup_initial_messages( ) channel: disnake.TextChannel = cast(disnake.TextChannel, channel) message: disnake.Message = await channel.send( - embed=await self.as_embed(bot, interaction.locale), + embed=await self.as_embed(bot, interaction), components=[ disnake.ui.Button( emoji=await bot.suggestion_emojis.default_up_vote(), diff --git a/suggestions/qs_paginator.py b/suggestions/qs_paginator.py index c8b9ee1..0058a2e 100644 --- a/suggestions/qs_paginator.py +++ b/suggestions/qs_paginator.py @@ -80,7 +80,7 @@ async def format_page(self) -> disnake.Embed: await self.remove_current_page() log.debug("Hit QueueImbalance") else: - embed: disnake.Embed = await suggestion.as_embed(self.bot, self.original_interaction.locale) + embed: disnake.Embed = await suggestion.as_embed(self.bot, self.original_interaction) if suggestion.is_anonymous: embed.set_footer(text=f"Page {self.current_page}/{self.total_pages}") else: