diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 20d5c03..850d791 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -11,8 +11,12 @@ une [Pull Request](https://git.kennel.ml/ConfrerieDuKassoulait/Botanique/pulls). ## Sommaire - [Recevoir de l'aide](#recevoir-de-laide) - [Langues](#langues) - - [Ajouter une langue](#ajouter-une-langue) - - [Mettre à jour une langue](#mettre-à-jour-une-langue) + - [Ajouter une langue](#ajouter-une-langue) + - [Mettre à jour une langue](#mettre-à-jour-une-langue) +- [Projet](#projet) +- [Ajouter une commande](#ajouter-une-commande) +- [Ajouter un évènement](#ajouter-un-évènement) +- [Modifier du code](#modifier-du-code) - [Soumettre ses modifications](#soumettre-ses-modifications) - [Gestion du dépôt](#gestion-du-dépôt) @@ -21,12 +25,12 @@ Si tu as besoin d'aide, tu peux poser ta question sur le [Discord](https://discord.gg/Z5ePxH4). ## Langues -La langue par défaut est définie dans [`src/utils/client.ts`](src/utils/client.ts) -dans `client.config.default_lang`. +La langue par défaut est définie dans +[`src/utils/client.ts`](src/utils/client.ts) dans `client.config.default_lang`. -La langue par défaut fait office de solution de secours dans le cas où une traduction -est incomplète. On part donc du postulat que la langue par défaut contient toujours -toutes les chaînes de caractère dont le bot a besoin. +La langue par défaut fait office de solution de secours dans le cas où une +traduction est incomplète. On part donc du postulat que la langue par défaut +contient toujours toutes les chaînes de caractère dont le bot a besoin. ### Ajouter une langue @@ -48,6 +52,89 @@ doit être nommé `langue.json` avec `langue` suivant > Pensez à vérifier si de nouvelles valeurs n'ont pas été ajouté dans le fichier langue par défaut, [cf. au dessus](#langues). +## Projet +Le code se trouve dans le dosier [src/](./src/). Dans ce dossier il y a : +- [commands/](./src/commands/) qui contient toutes les commandes, rangés par +catégories +- [events/](./src/events/) qui contient tous les évènements, rangés par +catégories +- [locales/](./src/locales/) qui contient tous les fichiers de langue +- [modules/](./src/modules/) qui contient les extensions utilisé, + par exemple, pour utiliser la fonction `capitalize()` d'un string, il faut + importer le fichier `string.ts` qui se trouve dans le dossier +- [utils/](./src/utils/) qui contient toutes les fonctions utilitaires, rangés +par fichiers + +Les dossiers [commands/](./src/commands/) et [events/](./src/events/) +contiennent chaquin un fichier `loader.js` qui charge respectivement +les commandes et les évènements dans le bot. + +## Ajouter une commande +Pour ajouter une commande au bot, créez un fichier `nom-de-la-commande.ts` dans +un sous dossier de [`src/commands/`](./src/commands/). Vous pouvez créer une +nouvelle catégorie si votre commande n'entre dans aucune qui existe déjà. + +Le contenu du fichier doit commencer comme suit : +```typescript +import { SlashCommandBuilder } from '@discordjs/builders'; +import { Client, CommandInteraction } from 'discord.js'; +import { getLocale, getLocalizations } from '../../utils/locales'; +import { getFilename } from '../../utils/misc'; + +export default { + data: (client: Client) => { + const filename = getFilename(__filename); + return new SlashCommandBuilder() + .setName( + filename.toLowerCase()) + .setDescription(client.locales.get(client.config.default_lang) + ?.get(`c_${filename}_desc`) ?? '') + .setNameLocalizations( + getLocalizations(client, `c_${filename}_name`, true)) + .setDescriptionLocalizations( + getLocalizations(client, `c_${filename}_desc`) + ); + }, + + interaction: async (interaction: CommandInteraction, client: Client) => { + const loc = getLocale(client, interaction.locale); + + /* Votre code ici */ + }, +}; +``` +Ce template vous permet de commencé rapidement votre commande car il contient +déjà tout ce qu'il faut pour le support des langues. Pensez bien à ne pas écrire +directement vos chaînes de caractères ici mais bien dans +les [fichiers de langues](./src/locales/), c'est à ça que la variable +`loc` sert. + +Vous devez aussi ajouter **obligatoirement** : +- `"c_COMMANDE_name": "NOM"` au fichier de langue, avec `COMMANDE` le nom de +la commande et `NOM` le nom de votre commande. +- `"c_COMMANDE_desc": "DESCRIPTION"` au fichier de langue, avec `COMMANDE` +le nom de la commande et `DESCRIPTION` la description de votre commande. + +## Ajouter un évènement +Pour ajouter le support d'un évènement au bot, créez un fichier +`nom-evenement.ts` dans un sous dossier de [`src/events/`](./src/events/). Vous +pouvez créer une nouvelle catégorie si votre commande n'entre dans aucune qui +existe déjà. + +Vous pouvez préciser que l'évènement ne sera déclenché qu'une seule fois avec +```typescript +export const once = true; +``` + +De préférence, merci de mettre un lien en commentaire vers la documentation +de discord.js de l'évènement +([exemple ici pour l'évènement `ready`](./src/events/client/ready.ts#L3)) + +## Modifier du code +Quand vous modifiez quelque chose, pensez à mettre-à-jour les langues. Si vous +ne savez pas traduire dans une langue, ne vous forcez pas, supprimer simplement +la traduction. + ## Soumettre ses modifications 1. Lorsque vous vous sentez confiant dans vos modifications, ouvrez une [Pull Request](https://git.kennel.ml/ConfrerieDuKassoulait/Botanique/pulls) diff --git a/README.md b/README.md index bc3532a..328433b 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# 🌱 Botanique 🌱 +# 🌱 Botanique [**Ajoute le bot à ton serveur**](https://discord.com/api/oauth2/authorize?client_id=965598852407230494&permissions=8&scope=bot%20applications.commands)