7.8 KiB
Comment contribuer ?
Ce guide contient méthodes et conseils sur comment aider le projet. Lisez attentivement si vous êtes un nouveau contributeur.
Ce guide n'est pas fixe et est mis à jour régulièrement. Si vous trouvez un problème quelconque, n'hésitez pas à le signaler par le biais d'un ticket ou à le corriger directement en soumettant une Pull Request.
Sommaire
- Recevoir de l'aide
- Langues
- Projet
- Ajouter une commande
- Ajouter un évènement
- Modifier du code
- Soumettre ses modifications
- Gestion du dépôt
Recevoir de l'aide
Si tu as besoin d'aide, tu peux poser ta question sur le Discord.
Langues
La langue par défaut est définie dans
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.
Ajouter une langue
- Créer un nouveau fichier dans src/locales/, le fichier
doit être nommé
langue.json
aveclangue
suivant cette liste. - Le contenu du fichier peut être copié du fichier de la langue par défaut, cf. au dessus.
- Ce sont les valeurs des clés (le texte à gauche des
:
) qui doivent être traduits. Merci par avance !
Ne vous forcez pas à tout traduire. Même une contribution avec une seule variable de modifiée compte !
- Une fois terminée, ouvrez une Pull Request.
Mettre à jour une langue
- Rechercher la langue dans le dossier src/locales/.
- Modifier/Ajouter des traductions comme
expliquer au dessus (à partir du
3.
).
Pensez à vérifier si de nouvelles valeurs n'ont pas été ajouté dans le fichier langue par défaut, cf. au dessus.
Projet
Le code se trouve dans le dosier src/. Dans ce dossier il y a :
- commands/ qui contient toutes les commandes, rangés par catégories
- events/ qui contient tous les évènements, rangés par catégories
- locales/ qui contient tous les fichiers de langue
- modules/ qui contient les extensions utilisé,
par exemple, pour utiliser la fonction
capitalize()
d'un string, il faut importer le fichierstring.ts
qui se trouve dans le dossier - utils/ qui contient toutes les fonctions utilitaires, rangés par fichiers
Les dossiers commands/ et 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/
. 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 :
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, c'est à ça que la variable
loc
sert.
Vous devez aussi ajouter obligatoirement :
"c_COMMANDE_name": "NOM"
au fichier de langue, avecCOMMANDE
le nom de la commande etNOM
le nom de votre commande."c_COMMANDE_desc": "DESCRIPTION"
au fichier de langue, avecCOMMANDE
le nom de la commande etDESCRIPTION
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/
. 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
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
)
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.
- Créez un fork et poussez vos modifications dans ce dernier.
Pour commencer, vous pouvez jeté un oeil aux tickets facilement résolvable.
Soumettre ses modifications
-
Pensez à bien commenter votre code pour que n'importe qui comprennent vos modifications. Vérifier bien dans tout les fichiers si ce que vous avez modifié n'est pas référencer ailleurs (exemple : si vous modifier une variable d'environnement, il faut penser à mettre à jour le
README
). -
N'oubliez pas d'utiliser les fichiers de langues pour vos chaînes de caractère, cf. cette partie pour plus de précisions.
-
Veuillez tester vos modifications avant de les soumettre. Attention, ce n'est pas parce que vos modifications fonctionnent avec
npm run debug
qu'elles fonctionneront avecnpm run main
, ainsi que dans l'image Docker. -
Lorsque vous vous sentez confiant dans vos modifications, ouvrez une Pull Request afin que votre code puisse être revu et fusionné. Vous pouvez suivre cette condition de nommage, ça aide à s'y retrouver plus rapidement.
Explication
npm run debug
execute le code depuis le dossiersrc
tandis quenpm run main
et l'image Docker le fait depuis le dossierdist
.Docker est cependant différent car dans l'image, le dossier
src
est supprimé.
Gestion du dépôt
- On ne push jamais directement sur la branche
main
. - Quand on merge des modifications vers
main
, on fait un squash, l'historique des modifications reste disponible dans le graph. - De préférences, suivre les indications de
ce post (c'est un peu la
même que dans le
4.
de la partie précédente).