feat: locales #27
8 changed files with 77 additions and 10 deletions
|
@ -27,10 +27,16 @@ services:
|
|||
build: https://git.kennel.ml/ConfrerieDuKassoulait/Botanique.git#main
|
||||
container_name: Botanique
|
||||
environment:
|
||||
- TOKEN_DISCORD=your-token-goes-here
|
||||
- TOKEN_DISCORD=ton-token-va-ici
|
||||
restart: unless-stopped
|
||||
```
|
||||
|
||||
## Variables d'environnements
|
||||
| Nom | Commentaire | Valeur par défaut
|
||||
| :-----------: | :-----------: | :-:
|
||||
| TOKEN_DISCORD | Token Discord | Aucune
|
||||
| LANGUAGE | Langue du bot | en
|
||||
|
||||
---
|
||||
### Références
|
||||
[Photo de profil](https://picrew.me/image_maker/1497656)
|
||||
|
|
|
@ -7,11 +7,13 @@ export default {
|
|||
.setDescription('Pong!'),
|
||||
|
||||
interaction: async (interaction: CommandInteraction, client: Client) => {
|
||||
const loc = client.locale;
|
||||
|
||||
const sent = await interaction.reply({ content: 'Pinging...', fetchReply: true }) as Message;
|
||||
|
||||
interaction.editReply(
|
||||
`Roundtrip latency: \
|
||||
`${loc.get('c_ping1')}: \
|
||||
${sent.createdTimestamp - interaction.createdTimestamp}ms
|
||||
Websocket heartbeat: ${client.ws.ping}ms.`);
|
||||
${loc.get('c_ping2')}: ${client.ws.ping}ms.`);
|
||||
},
|
||||
};
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
import { Client } from 'discord.js';
|
||||
|
||||
export const once = true;
|
||||
|
||||
/** https://discord.js.org/#/docs/discord.js/main/class/Client?scrollTo=e-ready */
|
||||
export default async () => {
|
||||
console.log('Connected to Discord!');
|
||||
export default async (client: Client) => {
|
||||
console.log(client.locale.get('e_ready'));
|
||||
};
|
||||
|
|
|
@ -6,7 +6,7 @@ export default (interaction: Interaction, client: Client) => {
|
|||
const command = client.commands.get(interaction.commandName);
|
||||
if (!command) {
|
||||
return interaction.reply({
|
||||
content: 'Sorry, the command probably no longer exists...',
|
||||
content: client.locale.get('e_interacreate'),
|
||||
ephemeral: true,
|
||||
});
|
||||
}
|
||||
|
|
|
@ -40,7 +40,7 @@ const run = async () => {
|
|||
throw logStart(commands_name, false);
|
||||
});
|
||||
|
||||
console.log(`Botanique "${client.user?.username}" v${client.config.version} started!`);
|
||||
console.log(`Botanique "${client.user?.username}" v${client.config.version} ${client.locale.get('started')}!`);
|
||||
})
|
||||
.catch(() => {
|
||||
throw logStart(client_name, false);
|
||||
|
|
10
src/locales/en.json
Normal file
10
src/locales/en.json
Normal file
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"started": "started",
|
||||
|
||||
"e_interacreate": "Sorry, the command probably no longer exists...",
|
||||
|
||||
"e_ready": "Connected to Discord!",
|
||||
|
||||
"c_ping1": "Roundtrip latency",
|
||||
"c_ping2": "Websocket heartbeat"
|
||||
}
|
10
src/locales/fr.json
Normal file
10
src/locales/fr.json
Normal file
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"started": "démarré ",
|
||||
|
||||
"e_interacreate": "Désolé, la commande n'existe plus...",
|
||||
|
||||
"e_ready": "Connecté à Discord !",
|
||||
|
||||
"c_ping1": "Latence totale",
|
||||
"c_ping2": "Latence du Websocket"
|
||||
}
|
|
@ -1,5 +1,5 @@
|
|||
import { Client, Collection, Intents } from 'discord.js';
|
||||
import { readFileSync } from 'fs';
|
||||
import { readFileSync, existsSync } from 'fs';
|
||||
import { SlashCommandBuilder } from '@discordjs/builders';
|
||||
|
||||
const { version } = JSON.parse(readFileSync('./package.json').toString());
|
||||
|
@ -9,7 +9,8 @@ declare module 'discord.js' {
|
|||
export interface Client {
|
||||
config: {
|
||||
version: string,
|
||||
token_discord: string | undefined
|
||||
token_discord: string | undefined,
|
||||
lang: string
|
||||
},
|
||||
commands: Collection<
|
||||
string,
|
||||
|
@ -17,7 +18,8 @@ declare module 'discord.js' {
|
|||
data: SlashCommandBuilder,
|
||||
interaction: (interaction: CommandInteraction, client: Client) => unknown
|
||||
}
|
||||
>
|
||||
>,
|
||||
locale: Map<string, string>
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -33,10 +35,45 @@ export default async () => {
|
|||
client.config = {
|
||||
version: version,
|
||||
token_discord: process.env.TOKEN_DISCORD,
|
||||
lang: process.env.LANGUAGE ?? '',
|
||||
};
|
||||
|
||||
// Store the commands available
|
||||
client.commands = new Collection();
|
||||
|
||||
// Store all the strings
|
||||
client.locale = await getLocale(client);
|
||||
|
||||
return client;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Get all the strings corresponding to the locales specified in env variable
|
||||
* @returns Collection of strings
|
||||
*/
|
||||
const getLocale = async (client: Client) => {
|
||||
const default_lang = 'en';
|
||||
|
||||
// Check if there is a defined valid value
|
||||
const lang = client.config.lang === undefined ? default_lang : existsSync(
|
||||
`./src/locales/${client.config.lang}.json`,
|
||||
) ? client.config.lang : default_lang;
|
||||
|
||||
// Fallback to default language in case lang isn't valid
|
||||
if (client.config.lang !== lang) {
|
||||
client.config.lang = lang;
|
||||
}
|
||||
|
||||
const file: {
|
||||
[key: string]: string
|
||||
} = await import(
|
||||
`../locales/${lang}.json`
|
||||
);
|
||||
|
||||
return new Map(
|
||||
Object.keys(file).map(key => {
|
||||
return [key, file[key]];
|
||||
}),
|
||||
);
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue