Fix duplicate streamWatching, locale guild et console log/error
All checks were successful
Build and Push Docker Image / build-and-push (push) Successful in 3m43s
All checks were successful
Build and Push Docker Image / build-and-push (push) Successful in 3m43s
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
import type { Locale } from "discord.js"
|
||||
import frLocale from "@/locales/fr.json"
|
||||
import enLocale from "@/locales/en.json"
|
||||
import dbGuild from "@/schemas/guild"
|
||||
import { logConsoleError } from "./console"
|
||||
|
||||
// Variables d'environnement pour les locales avec valeurs par défaut
|
||||
const DEFAULT_LOCALE = process.env.DEFAULT_LOCALE ?? 'fr'
|
||||
@@ -11,6 +13,21 @@ type LocaleData = Record<string, unknown>
|
||||
type ReplacementParams = Record<string, string | number>
|
||||
type TranslationKey = string
|
||||
|
||||
/**
|
||||
* Récupère la locale configurée pour un serveur
|
||||
* @param guildId - L'ID du serveur Discord
|
||||
* @returns La locale configurée ou 'fr' par défaut
|
||||
*/
|
||||
export async function getGuildLocale(guildId: string): Promise<string> {
|
||||
try {
|
||||
const guildProfile = await dbGuild.findOne({ guildId })
|
||||
return guildProfile?.guildLocale ?? 'fr'
|
||||
} catch (error) {
|
||||
logConsoleError('mongoose', 'locale.fetch_error', { guildId }, error as Error)
|
||||
return 'fr'
|
||||
}
|
||||
}
|
||||
|
||||
// Conversion des imports en type LocaleData
|
||||
const frLocaleData = frLocale as unknown as LocaleData
|
||||
const enLocaleData = enLocale as unknown as LocaleData
|
||||
@@ -104,6 +121,40 @@ export function getCommandLocalizations(baseKey: string) {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Fonction de localisation utilisant la locale du serveur
|
||||
* @param guildLocale - La locale configurée du serveur
|
||||
* @param key - La clé de traduction (ex: "player.not_in_voice")
|
||||
* @param params - Les paramètres à remplacer dans la traduction
|
||||
* @returns La chaîne traduite
|
||||
*/
|
||||
export function tGuild(guildLocale: string, key: TranslationKey, params: ReplacementParams = {}): string {
|
||||
return t(guildLocale, key, params)
|
||||
}
|
||||
|
||||
/**
|
||||
* Fonction helper pour obtenir la locale appropriée (serveur ou utilisateur)
|
||||
* @param guildId - L'ID du serveur (optionnel)
|
||||
* @param userLocale - La locale de l'utilisateur
|
||||
* @returns La locale à utiliser
|
||||
*/
|
||||
export async function getLocaleForContext(guildId: string | null, userLocale: string): Promise<string> {
|
||||
if (guildId) return await getGuildLocale(guildId)
|
||||
return userLocale
|
||||
}
|
||||
|
||||
/**
|
||||
* Fonction de traduction intelligente qui utilise automatiquement la locale du serveur
|
||||
* @param interaction - L'interaction Discord
|
||||
* @param key - La clé de traduction
|
||||
* @param params - Les paramètres de remplacement
|
||||
* @returns La chaîne traduite
|
||||
*/
|
||||
export async function tSmart(interaction: { guild: { id: string } | null; locale: string }, key: TranslationKey, params: ReplacementParams = {}): Promise<string> {
|
||||
const locale = await getLocaleForContext(interaction.guild?.id ?? null, interaction.locale)
|
||||
return t(locale, key, params)
|
||||
}
|
||||
|
||||
// Export des constantes de locale
|
||||
export { DEFAULT_LOCALE, CONSOLE_LOCALE }
|
||||
|
||||
|
||||
Reference in New Issue
Block a user