Skip to content

Commit

Permalink
added language setup. fixed using languages per guild
Browse files Browse the repository at this point in the history
  • Loading branch information
camalot committed May 12, 2024
1 parent 3385a49 commit 17cc2d2
Show file tree
Hide file tree
Showing 7 changed files with 120 additions and 111 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/lint.yaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
name: Lint Helm Chart
name: Lint Code Base
on:
push:
branches:
Expand Down
144 changes: 41 additions & 103 deletions bot/cogs/lib/mongodb/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,47 @@ def set(self, settings: GuildSettings):
)
return False

def get_language(self, guildId: int) -> str:
_method = inspect.stack()[0][3]
try:
if self.connection is None:
self.open()
gs = self.connection.guild_settings.find_one({"guild_id": str(guildId)})
if gs:
return gs['language']
return "en-us"
except Exception as ex:
self.log(
guildId=guildId,
level=LogLevel.ERROR,
method=f"{self._module}.{self._class}.{_method}",
message=f"{ex}",
stackTrace=traceback.format_exc(),
)
return "en-us"

def set_language(self, guildId: int, language: str) -> bool:
_method = inspect.stack()[0][3]
try:
if self.connection is None:
self.open()
result = self.connection.guild_settings.update_one(
{"guild_id": str(guildId)},
{"$set": {"language": language, "timestamp": utils.get_timestamp()}},
)
if result.modified_count == 0:
return False
return True
except Exception as ex:
self.log(
guildId=guildId,
level=LogLevel.ERROR,
method=f"{self._module}.{self._class}.{_method}",
message=f"{ex}",
stackTrace=traceback.format_exc(),
)
return False

def set_default_role(self, guildId: int, roleId: int, categoryId: typing.Optional[int] = None, userId: typing.Optional[int] = None) -> bool:
_method = inspect.stack()[0][3]
try:
Expand Down Expand Up @@ -269,49 +310,6 @@ def set_setting(self, guildId: int, key: str, value: typing.Any) -> bool:
)
return False

# def set_guild_category_settings(self, settings: GuildCategorySettings) -> bool:
# _method = inspect.stack()[0][3]
# try:
# if self.connection is None:
# self.open()
# payload = {
# "guild_id": settings.guild_id,
# "voice_category_id": settings.category_id,
# "timestamp": utils.get_timestamp(),
# }

# if settings.channel_limit is not None:
# payload['channel_limit'] = settings.channel_limit
# if settings.channel_locked is not None:
# payload['channel_locked'] = settings.channel_locked
# if settings.bitrate is not None:
# payload['bitrate'] = settings.bitrate
# if settings.default_role is not None:
# payload['default_role'] = settings.default_role
# if settings.auto_game is not None:
# payload['auto_game'] = settings.auto_game
# if settings.allow_soundboard is not None:
# payload['allow_soundboard'] = settings.allow_soundboard
# if settings.auto_name is not None:
# payload['auto_name'] = settings.auto_name


# self.connection.category_settings.update_one(
# {"guild_id": settings.guild_id, "voice_category_id": settings.category_id},
# { "$set": payload },
# upsert=True,
# )
# return True
# except Exception as ex:
# self.log(
# guildId=int(settings.guild_id) if settings else 0,
# level=LogLevel.ERROR,
# method=f"{self._module}.{self._class}.{_method}",
# message=f"{ex}",
# stackTrace=traceback.format_exc(),
# )
# return False

def get_guild_category_settings(self, guildId: int, categoryId: int) -> typing.Optional[GuildCategorySettings]:
_method = inspect.stack()[0][3]
try:
Expand Down Expand Up @@ -369,63 +367,3 @@ def update_guild_create_channel_settings(
stackTrace=traceback.format_exc(),
)
return False
# def set_guild_settings_language(self, guildId: int, language: str):
# if self.connection is None:
# self.open()
# gs = self.get_guild_settings(guildId=guildId)
# if not gs:
# return False
# payload = {
# "language": language,
# "timestamp": utils.get_timestamp()
# }
# self.connection.guild_settings.update_one({"guild_id": guildId}, { "$set": payload })

# def insert_or_update_guild_settings(self, guildId: int, prefix: str, defaultRole: int, adminRole: int, language: str):
# try:
# if self.connection is None:
# self.open()
# gs = self.get_guild_settings(guildId=guildId)
# if gs:
# return self.update_guild_settings(guildId=gs.guild_id, prefix=prefix, defaultRole=defaultRole, adminRole=adminRole, language=language)
# else:
# return self.insert_guild_settings(guildId=guildId, prefix=prefix, defaultRole=defaultRole, adminRole=adminRole, language=language)
# except Exception as ex:
# print(ex)
# traceback.print_exc(ex)
# return False
# def insert_guild_settings(self, guildId: int, prefix: str, defaultRole: int, adminRole: int, language: str):
# try:
# if self.connection is None:
# self.open()
# payload = {
# "guild_id": guildId,
# "prefix": prefix,
# "default_role": defaultRole,
# "admin_role": adminRole,
# "language": language,
# "timestamp": utils.get_timestamp()
# }
# self.connection.guild_settings.insert_one(payload)
# return True
# except Exception as ex:
# print(ex)
# traceback.print_exc()
# return False
# def update_guild_settings(self, guildId: int, prefix: str, defaultRole: int, adminRole: int, language: str):
# try:
# if self.connection is None:
# self.open()
# payload = {
# "prefix": prefix,
# "default_role": defaultRole,
# "admin_role": adminRole,
# "language": language,
# "timestamp": utils.get_timestamp()
# }
# self.connection.guild_settings.update_one({"guild_id": guildId}, { "$set": payload })
# return True
# except Exception as ex:
# print(ex)
# traceback.print_exc()
# return False
9 changes: 8 additions & 1 deletion bot/cogs/lib/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,9 @@ def load_language_manifest(self):

def get_string(self, guildId: int, key: str, *args, **kwargs) -> str:
_method = inspect.stack()[1][3]
print(f"get_string: {guildId}, {key}, {args}, {kwargs}")
print(f"self.strings: {self.strings}")
print(f"self.language: {self.language}")
if not key:
return ''
if str(guildId) in self.strings:
Expand All @@ -99,7 +102,11 @@ def get_string(self, guildId: int, key: str, *args, **kwargs) -> str:
else:
return utils.str_replace(f"{key}", *args, **kwargs)
else:
if key in self.strings[self.language]:
# get guild language
lang = self.get_language(guildId)
if key in self.strings[lang]:
return utils.str_replace(self.strings[lang][key], *args, **kwargs)
elif key in self.strings[self.language]:
return utils.str_replace(self.strings[self.language][key], *args, **kwargs)
else:
return utils.str_replace(f"{key}", *args, **kwargs)
Expand Down
61 changes: 61 additions & 0 deletions bot/cogs/setup.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import glob
import discord
from discord import app_commands
from discord.ext import commands
Expand Down Expand Up @@ -762,5 +763,65 @@ async def admin(self, ctx, action: typing.Optional[AddRemoveAction], role: typi
self.log.error(guild_id, f"{self._module}.{_method}", f"{e}", traceback.format_exc())


# @staticmethod
async def language_autocomplete(self, interaction: discord.Interaction, current: str) -> typing.List[app_commands.Choice[str]]:
# return as list of discord.app_commands.Choice
languages = self.settings.languages
# languages is a dictionary of language code and language name
# set the choice value to the language code
# set the choice name to the language name
# loop the language dictionary keys and return a list of discord.app_commands.Choice
return [
app_commands.Choice(name=value, value=key)
for key, value in languages.items()
if current.lower() in key.lower() or current == "" or current.lower() in value.lower()
]

@group.command(name="language", description="Get or Set the language for the bot")
@commands.guild_only()
@app_commands.guild_only()
@commands.has_permissions(administrator=True)
@app_commands.default_permissions(administrator=True)
@app_commands.describe(language="The language to set for the bot")
@app_commands.autocomplete(language=language_autocomplete)
async def language(self, interaction: discord.Interaction, language: typing.Optional[str]) -> None:
_method = inspect.stack()[0][3]
if interaction.guild is None:
return
guild_id = interaction.guild.id
try:
if not self._users.isAdmin(interaction):
await interaction.response.send_message(
self.settings.get_string(guild_id, "info_permission_denied"),
ephemeral=True,
)
return

if language is None or language == "":
language = self.settings.db.get_language(guildId=guild_id)
await interaction.response.send_message(
self.settings.get_string(guildId=guild_id, key="info_language_get", language=language),
ephemeral=True,
)
return

if not language.lower() in [key.lower() for key,value in self.settings.languages.items()]:
await interaction.response.send_message(
self.settings.get_string(guildId=guild_id, key="info_language_not_found", language=language),
ephemeral=True,
)
return

self.settings.db.set_language(guildId=guild_id, language=language)
self.settings.set_guild_strings(guildId=guild_id, lang=language)
await interaction.response.send_message(
self.settings.get_string(guildId=guild_id, key="info_language_set", language=language),
ephemeral=True,
)
except Exception as e:
self.log.error(guild_id, f"{self._module}.{_method}", f"{e}", traceback.format_exc())
await self.messaging.notify_of_error(interaction)


async def setup(bot):
await bot.add_cog(SetupCog(bot))
5 changes: 3 additions & 2 deletions languages/de-de.json
Original file line number Diff line number Diff line change
Expand Up @@ -111,8 +111,9 @@
"info_channel_limit": "Sie haben das Kanallimit auf {{limit}} festgelegt.",
"info_locked": "Sprachkanal gesperrt. 🔒",
"info_unlocked": "Sprachkanal entsperrt. 🔓",
"info_get_language": "Meine derzeit konfigurierte Sprache ist `{{language}}`.\n\nVerwenden Sie zum Ändern den Befehl `set-language`.",
"info_set_language": "Sie haben die aktuell konfigurierte Sprache in `{{language}}` geändert.",
"info_language_get": "Meine derzeit konfigurierte Sprache ist `{{language}}`.",
"info_language_not_found": "Ich konnte die Sprache `{{language}}` nicht finden. Bitte versuche es erneut.",
"info_language_set": "Sie haben die konfigurierte Sprache auf `{{language}}` eingestellt.",
"ready_to_go": "Herzlichen Glückwunsch, Sie sind fertig eingerichtet und können loslegen. ✔",
"setup_not_configured": "Der Voice Create-Bot ist für diesen Discord nicht konfiguriert.\n\n\n**Bitte führen Sie den Befehl `init` aus.**",
"ask_enabled_auto_game": "**Möchtest du, dass ich deinen Kanaltitel ändere, wenn sich dein Spielstatus ändert?**",
Expand Down
5 changes: 3 additions & 2 deletions languages/en-us.json
Original file line number Diff line number Diff line change
Expand Up @@ -111,8 +111,9 @@
"info_channel_limit": "You have set the channel limit to be {{limit}}.",
"info_locked": "Voice channel locked. 🔒",
"info_unlocked": "Voice channel unlocked. 🔓",
"info_get_language": "My currently configured language is `{{language}}`.\n\nUse `set-language` command to change.",
"info_set_language": "You have changed the currently configured language to `{{language}}`.",
"info_language_get": "My currently configured language is `{{language}}`.",
"info_language_not_found": "I was unable to find the language `{{language}}`. Please try again.",
"info_language_set": "You have set the configured language to `{{language}}`.",
"ready_to_go": "Congratulations, you are all setup and ready to go. ✔",
"setup_not_configured": "Voice Create bot not configured for this discord.\n\n\n**Please run `init` command.**",
"ask_enabled_auto_game": "**Would you like me to change your channel title when your game status changes?**",
Expand Down
5 changes: 3 additions & 2 deletions languages/es-mx.json
Original file line number Diff line number Diff line change
Expand Up @@ -111,8 +111,9 @@
"info_channel_limit": "Ha establecido el límite de canal en {{limit}}.",
"info_locked": "Canal de voz bloqueado. 🔒",
"info_unlocked": "Canal de voz desbloqueado. 🔓",
"info_get_language": "Mi idioma configurado actualmente es `{{language}}`.\n\nUse el comando `set-language` para cambiar.",
"info_set_language": "Ha cambiado el idioma configurado actualmente a `{{language}}`.",
"info_language_get": "Mi idioma configurado actualmente es `{{language}}`.",
"info_language_not_found": "No pude encontrar el idioma `{{idioma}}`. Inténtalo de nuevo.",
"info_language_set": "Ha configurado el idioma configurado en `{{language}}`.",
"ask_enabled_auto_game": "**¿Quieres que cambie el título de tu canal cuando cambie el estado de tu juego?**",
"ask_create_channel_name": "**Ingrese el nombre del canal de voz: (ejemplo: + Crear canal)**",
"ask_admin_role": "**¿Cuál es su función de administrador del servidor?**\n\nEstos son administradores de bots de creación de voz.",
Expand Down

0 comments on commit 17cc2d2

Please sign in to comment.