* chore: format

* add: buttons and modals
This commit is contained in:
Mylloon 2023-01-17 10:46:26 +01:00
parent 9cb94f5f0a
commit 706713a8fb
Signed by: Anri
GPG key ID: A82D63DFF8D1317F

View file

@ -1,4 +1,5 @@
# Comment contribuer ? <!-- omit in toc -->
Ce guide contient méthodes et conseils sur comment aider le projet.
Lisez attentivement si vous êtes un nouveau contributeur.
@ -9,6 +10,7 @@ d'un [ticket](https://git.kennel.ml/ConfrerieDuKassoulait/Botanique/issues) ou
une [Pull Request](https://git.kennel.ml/ConfrerieDuKassoulait/Botanique/pulls).
## Sommaire <!-- omit in toc -->
- [Recevoir de l'aide](#recevoir-de-laide)
- [Langues](#langues)
- [Ajouter une langue](#ajouter-une-langue)
@ -16,15 +18,19 @@ une [Pull Request](https://git.kennel.ml/ConfrerieDuKassoulait/Botanique/pulls).
- [Projet](#projet)
- [Ajouter une commande](#ajouter-une-commande)
- [Ajouter un évènement](#ajouter-un-évènement)
- [Modèles](#modèles)
- [Boutons](#boutons)
- [Modifier du code](#modifier-du-code)
- [Soumettre ses modifications](#soumettre-ses-modifications)
- [Gestion du dépôt](#gestion-du-dépôt)
## Recevoir de l'aide
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`.
@ -33,95 +39,111 @@ 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 norme pour les nom dans les fichiers est la suivante :
- Chaîne de charactère des commandes :
`c` est utilisé pour `C`ommande.
- `c_NOM-COMMANDE_name` : Nom de la commande
- `c_NOM-COMMANDE_desc` : Description de la commande
- `c_NOM-COMMANDE_optX_name` : Nom de l'option X
- `c_NOM-COMMANDE_optX_desc` : Description de l'option X
- `c_NOM-COMMANDE_subX_name` : Nom de la sous-commande X
- `c_NOM-COMMANDE_subX_desc` : Description de la sous-commande X
- `c_NOM-COMMANDEX` : `X` le numéro de la chaîne de caractère
Évidemment ça peut s'additionner,
par exemple : `c_NOM-COMMANDE_subX_optX_desc`.
- Chaîne de charactère des évènements :
`e` est utilisé pour `E`vènements.
- `e_NOM-EVENEMENT_N` : `N` le nom de la chaîne de caractère
- Chaîne de charactère des utils :
`u` est utilisé pour `U`tilitaires.
- `u_NOM-FICHIER-UTILS_N` : `N` le nom de la chaîne de caractère
- Chaîne de charactère des commandes :
`c` est utilisé pour `C`ommande.
- `c_NOM-COMMANDE_name` : Nom de la commande
- `c_NOM-COMMANDE_desc` : Description de la commande
- `c_NOM-COMMANDE_optX_name` : Nom de l'option X
- `c_NOM-COMMANDE_optX_desc` : Description de l'option X
- `c_NOM-COMMANDE_subX_name` : Nom de la sous-commande X
- `c_NOM-COMMANDE_subX_desc` : Description de la sous-commande X
- `c_NOM-COMMANDEX` : `X` le numéro de la chaîne de caractère
Évidemment ça peut s'additionner,
par exemple : `c_NOM-COMMANDE_subX_optX_desc`.
- Chaîne de charactère des évènements :
`e` est utilisé pour `E`vènements.
- `e_NOM-EVENEMENT_N` : `N` le nom de la chaîne de caractère
- Chaîne de charactère des utils :
`u` est utilisé pour `U`tilitaires.
- `u_NOM-FICHIER-UTILS_N` : `N` le nom de la chaîne de caractère
### Ajouter une langue
1. Créer un nouveau fichier dans [src/locales/](./src/locales/), le fichier
doit être nommé `langue.json` avec `langue` suivant
[cette liste](https://discord.com/developers/docs/reference#locales).
doit être nommé `langue.json` avec `langue` suivant
[cette liste](https://discord.com/developers/docs/reference#locales).
2. Le contenu du fichier peut être copié du fichier de la langue par défaut,
[cf. au dessus](#langues).
[cf. au dessus](#langues).
3. 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 !
être traduits. Merci par avance !
> Ne vous forcez pas à tout traduire. Même une contribution avec
> une seule variable de modifiée compte !
4. Une fois terminée, [ouvrez une Pull Request](#soumettre-ses-modifications).
### Mettre à jour une langue
1. Rechercher la langue dans le dossier [src/locales/](./src/locales/).
2. Modifier/Ajouter des traductions comme
[expliquer au dessus](#ajouter-une-langue) (à 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](#langues).
[expliquer au dessus](#ajouter-une-langue) (à 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](#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
- [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, ChatInputCommandInteraction } from 'discord.js';
import { getLocale, getLocalizations } from '../../utils/locales';
import { getFilename } from '../../utils/misc';
import { SlashCommandBuilder } from "@discordjs/builders";
import { Client, ChatInputCommandInteraction } 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`)
);
},
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: ChatInputCommandInteraction, client: Client) => {
const loc = getLocale(client, interaction.locale);
interaction: async (
interaction: ChatInputCommandInteraction,
client: Client
) => {
const loc = getLocale(client, interaction.locale);
/* Votre code ici */
},
/* 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
@ -129,18 +151,21 @@ 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.
- `"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;
```
@ -149,39 +174,55 @@ 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))
## Modèles
Les modèles sont gérés [en dehors séparément du reste](./src/modals/).
## Boutons
Les boutons sont gérés [en dehors séparément du reste](./src/buttons/)
Chaque bouton à une implémentation séparée des autres, même si ils sont dans le
même message.
Contrairement aux autres éléments, les boutons doivent se faire collecter via
la fonction [`collect`](./src/buttons/loader.ts#L46) juste après leur déclaration.
## 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](https://git.kennel.ml/repo/fork/76) et poussez
vos modifications dans ce dernier.
- [Créez un fork](https://git.kennel.ml/repo/fork/76) et poussez
vos modifications dans ce dernier.
Pour commencer, vous pouvez jeté un oeil aux
[tickets facilement résolvable](https://git.kennel.ml/ConfrerieDuKassoulait/Botanique/issues?state=open&labels=82).
- De préférences, les fonctions, méthodes et variables seront écrites
en anglais, ainsi que les commits afin que chacun puisse contribuer.
- De préférences, les fonctions, méthodes et variables seront écrites
en anglais, ainsi que les commits afin que chacun puisse contribuer.
## Soumettre ses modifications
1. Pensez à bien commenter votre code (en anglais) 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`](./README.md#variables-denvironnements)).
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`](./README.md#variables-denvironnements)).
2. N'oubliez pas d'utiliser [les fichiers de langues](./src/locales/) pour vos
chaînes de caractère, [cf. cette partie](#langues) pour plus de précisions.
chaînes de caractère, [cf. cette partie](#langues) pour plus de précisions.
3. 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 avec `npm run main`, ainsi que dans l'image Docker.
n'est pas parce que vos modifications fonctionnent avec `npm run debug` qu'elles
fonctionneront avec `npm run main`, ainsi que dans l'image Docker.
4. Lorsque vous vous sentez confiant dans vos modifications, ouvrez
une [Pull Request](https://git.kennel.ml/ConfrerieDuKassoulait/Botanique/pulls)
afin que votre code puisse être revu et fusionné. Vous pouvez suivre cette
[condition de nommage](https://gist.github.com/joshbuchea/6f47e86d2510bce28f8e7f42ae84c716#example),
ça aide à s'y retrouver plus rapidement.
une [Pull Request](https://git.kennel.ml/ConfrerieDuKassoulait/Botanique/pulls)
afin que votre code puisse être revu et fusionné. Vous pouvez suivre cette
[condition de nommage](https://gist.github.com/joshbuchea/6f47e86d2510bce28f8e7f42ae84c716#example),
ça aide à s'y retrouver plus rapidement.
> **Explication**
>
@ -192,10 +233,11 @@ afin que votre code puisse être revu et fusionné. Vous pouvez suivre cette
> 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](https://git.kennel.ml/ConfrerieDuKassoulait/Botanique/graph).
- De préférences, suivre les indications de
[ce post](https://gist.github.com/revett/88ee5abf5a9a097b4c88) (c'est un peu la
même que dans le `4.` de [la partie précédente](#soumettre-ses-modifications)).
- 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](https://git.kennel.ml/ConfrerieDuKassoulait/Botanique/graph).
- De préférences, suivre les indications de
[ce post](https://gist.github.com/revett/88ee5abf5a9a097b4c88) (c'est un peu la
même que dans le `4.` de [la partie précédente](#soumettre-ses-modifications)).