feat: Reminders #44

Merged
Anri merged 54 commits from feat/reminders into main 2023-01-17 12:15:15 +01:00
Showing only changes of commit 706713a8fb - Show all commits

View file

@ -1,4 +1,5 @@
# Comment contribuer ? <!-- omit in toc --> # Comment contribuer ? <!-- omit in toc -->
Ce guide contient méthodes et conseils sur comment aider le projet. Ce guide contient méthodes et conseils sur comment aider le projet.
Lisez attentivement si vous êtes un nouveau contributeur. 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). une [Pull Request](https://git.kennel.ml/ConfrerieDuKassoulait/Botanique/pulls).
## Sommaire <!-- omit in toc --> ## Sommaire <!-- omit in toc -->
- [Recevoir de l'aide](#recevoir-de-laide) - [Recevoir de l'aide](#recevoir-de-laide)
- [Langues](#langues) - [Langues](#langues)
- [Ajouter une langue](#ajouter-une-langue) - [Ajouter une langue](#ajouter-une-langue)
@ -16,15 +18,19 @@ une [Pull Request](https://git.kennel.ml/ConfrerieDuKassoulait/Botanique/pulls).
- [Projet](#projet) - [Projet](#projet)
- [Ajouter une commande](#ajouter-une-commande) - [Ajouter une commande](#ajouter-une-commande)
- [Ajouter un évènement](#ajouter-un-évènement) - [Ajouter un évènement](#ajouter-un-évènement)
- [Modèles](#modèles)
- [Boutons](#boutons)
- [Modifier du code](#modifier-du-code) - [Modifier du code](#modifier-du-code)
- [Soumettre ses modifications](#soumettre-ses-modifications) - [Soumettre ses modifications](#soumettre-ses-modifications)
- [Gestion du dépôt](#gestion-du-dépôt) - [Gestion du dépôt](#gestion-du-dépôt)
## Recevoir de l'aide ## Recevoir de l'aide
Si tu as besoin d'aide, tu peux poser ta question sur Si tu as besoin d'aide, tu peux poser ta question sur
le [Discord](https://discord.gg/Z5ePxH4). le [Discord](https://discord.gg/Z5ePxH4).
## Langues ## Langues
La langue par défaut est définie dans La langue par défaut est définie dans
[`src/utils/client.ts`](src/utils/client.ts) dans `client.config.default_lang`. [`src/utils/client.ts`](src/utils/client.ts) dans `client.config.default_lang`.
@ -33,8 +39,10 @@ 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. 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 : La norme pour les nom dans les fichiers est la suivante :
- Chaîne de charactère des commandes : - Chaîne de charactère des commandes :
`c` est utilisé pour `C`ommande. `c` est utilisé pour `C`ommande.
- `c_NOM-COMMANDE_name` : Nom de la commande - `c_NOM-COMMANDE_name` : Nom de la commande
- `c_NOM-COMMANDE_desc` : Description 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_name` : Nom de l'option X
@ -45,6 +53,7 @@ La norme pour les nom dans les fichiers est la suivante :
Évidemment ça peut s'additionner, Évidemment ça peut s'additionner,
par exemple : `c_NOM-COMMANDE_subX_optX_desc`. par exemple : `c_NOM-COMMANDE_subX_optX_desc`.
- Chaîne de charactère des évènements : - Chaîne de charactère des évènements :
`e` est utilisé pour `E`vènements. `e` est utilisé pour `E`vènements.
- `e_NOM-EVENEMENT_N` : `N` le nom de la chaîne de caractère - `e_NOM-EVENEMENT_N` : `N` le nom de la chaîne de caractère
@ -53,75 +62,88 @@ La norme pour les nom dans les fichiers est la suivante :
- `u_NOM-FICHIER-UTILS_N` : `N` le nom de la chaîne de caractère - `u_NOM-FICHIER-UTILS_N` : `N` le nom de la chaîne de caractère
### Ajouter une langue ### Ajouter une langue
1. Créer un nouveau fichier dans [src/locales/](./src/locales/), le fichier 1. Créer un nouveau fichier dans [src/locales/](./src/locales/), le fichier
doit être nommé `langue.json` avec `langue` suivant doit être nommé `langue.json` avec `langue` suivant
[cette liste](https://discord.com/developers/docs/reference#locales). [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, 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 3. Ce sont les valeurs des clés (le texte à gauche des `:`) qui doivent
être traduits. Merci par avance ! être traduits. Merci par avance !
> Ne vous forcez pas à tout traduire. Même une contribution avec > Ne vous forcez pas à tout traduire. Même une contribution avec
> une seule variable de modifiée compte ! > une seule variable de modifiée compte !
4. Une fois terminée, [ouvrez une Pull Request](#soumettre-ses-modifications). 4. Une fois terminée, [ouvrez une Pull Request](#soumettre-ses-modifications).
### Mettre à jour une langue ### Mettre à jour une langue
1. Rechercher la langue dans le dossier [src/locales/](./src/locales/). 1. Rechercher la langue dans le dossier [src/locales/](./src/locales/).
2. Modifier/Ajouter des traductions comme 2. Modifier/Ajouter des traductions comme
[expliquer au dessus](#ajouter-une-langue) (à partir du `3.`). [expliquer au dessus](#ajouter-une-langue) (à partir du `3.`).
> Pensez à vérifier si de nouvelles valeurs n'ont pas été ajouté dans > Pensez à vérifier si de nouvelles valeurs n'ont pas été ajouté dans
le fichier langue par défaut, [cf. au dessus](#langues). > le fichier langue par défaut, [cf. au dessus](#langues).
## Projet ## Projet
Le code se trouve dans le dosier [src/](./src/). Dans ce dossier il y a : 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 - [commands/](./src/commands/) qui contient toutes les commandes, rangés par
catégories catégories
- [events/](./src/events/) qui contient tous les évènements, rangés par - [events/](./src/events/) qui contient tous les évènements, rangés par
catégories catégories
- [locales/](./src/locales/) qui contient tous les fichiers de langue - [locales/](./src/locales/) qui contient tous les fichiers de langue
- [modules/](./src/modules/) qui contient les extensions utilisé, - [modules/](./src/modules/) qui contient les extensions utilisé,
par exemple, pour utiliser la fonction `capitalize()` d'un string, il faut par exemple, pour utiliser la fonction `capitalize()` d'un string, il faut
importer le fichier `string.ts` qui se trouve dans le dossier importer le fichier `string.ts` qui se trouve dans le dossier
- [utils/](./src/utils/) qui contient toutes les fonctions utilitaires, rangés - [utils/](./src/utils/) qui contient toutes les fonctions utilitaires, rangés
par fichiers par fichiers
Les dossiers [commands/](./src/commands/) et [events/](./src/events/) Les dossiers [commands/](./src/commands/) et [events/](./src/events/)
contiennent chaquin un fichier `loader.js` qui charge respectivement contiennent chaquin un fichier `loader.js` qui charge respectivement
les commandes et les évènements dans le bot. les commandes et les évènements dans le bot.
## Ajouter une commande ## Ajouter une commande
Pour ajouter une commande au bot, créez un fichier `nom-de-la-commande.ts` dans 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 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à. nouvelle catégorie si votre commande n'entre dans aucune qui existe déjà.
Le contenu du fichier doit commencer comme suit : Le contenu du fichier doit commencer comme suit :
```typescript ```typescript
import { SlashCommandBuilder } from '@discordjs/builders'; import { SlashCommandBuilder } from "@discordjs/builders";
import { Client, ChatInputCommandInteraction } from 'discord.js'; import { Client, ChatInputCommandInteraction } from "discord.js";
import { getLocale, getLocalizations } from '../../utils/locales'; import { getLocale, getLocalizations } from "../../utils/locales";
import { getFilename } from '../../utils/misc'; import { getFilename } from "../../utils/misc";
export default { export default {
data: (client: Client) => { data: (client: Client) => {
const filename = getFilename(__filename); const filename = getFilename(__filename);
return new SlashCommandBuilder() return new SlashCommandBuilder()
.setName( .setName(filename.toLowerCase())
filename.toLowerCase()) .setDescription(
.setDescription(client.locales.get(client.config.default_lang) client.locales
?.get(`c_${filename}_desc`) ?? '') .get(client.config.default_lang)
?.get(`c_${filename}_desc`) ?? ""
)
.setNameLocalizations( .setNameLocalizations(
getLocalizations(client, `c_${filename}_name`, true)) getLocalizations(client, `c_${filename}_name`, true)
)
.setDescriptionLocalizations( .setDescriptionLocalizations(
getLocalizations(client, `c_${filename}_desc`) getLocalizations(client, `c_${filename}_desc`)
); );
}, },
interaction: async (interaction: ChatInputCommandInteraction, client: Client) => { interaction: async (
interaction: ChatInputCommandInteraction,
client: Client
) => {
const loc = getLocale(client, interaction.locale); const loc = getLocale(client, interaction.locale);
/* Votre code ici */ /* Votre code ici */
}, },
}; };
``` ```
Ce template vous permet de commencé rapidement votre commande car il contient 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 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 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. `loc` sert.
Vous devez aussi ajouter **obligatoirement** : Vous devez aussi ajouter **obligatoirement** :
- `"c_COMMANDE_name": "NOM"` au fichier de langue, avec `COMMANDE` le nom de - `"c_COMMANDE_name": "NOM"` au fichier de langue, avec `COMMANDE` le nom de
la commande et `NOM` le nom de votre commande. la commande et `NOM` le nom de votre commande.
- `"c_COMMANDE_desc": "DESCRIPTION"` au fichier de langue, avec `COMMANDE` - `"c_COMMANDE_desc": "DESCRIPTION"` au fichier de langue, avec `COMMANDE`
le nom de la commande et `DESCRIPTION` la description de votre commande. le nom de la commande et `DESCRIPTION` la description de votre commande.
## Ajouter un évènement ## Ajouter un évènement
Pour ajouter le support d'un évènement au bot, créez un fichier 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 `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 pouvez créer une nouvelle catégorie si votre commande n'entre dans aucune qui
existe déjà. existe déjà.
Vous pouvez préciser que l'évènement ne sera déclenché qu'une seule fois avec Vous pouvez préciser que l'évènement ne sera déclenché qu'une seule fois avec
```typescript ```typescript
export const once = true; 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 de discord.js de l'évènement
([exemple ici pour l'évènement `ready`](./src/events/client/ready.ts#L3)) ([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 ## Modifier du code
Quand vous modifiez quelque chose, pensez à mettre-à-jour les langues. Si vous 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 ne savez pas traduire dans une langue, ne vous forcez pas, supprimer simplement
la traduction. la traduction.
- [Créez un fork](https://git.kennel.ml/repo/fork/76) et poussez - [Créez un fork](https://git.kennel.ml/repo/fork/76) et poussez
vos modifications dans ce dernier. vos modifications dans ce dernier.
Pour commencer, vous pouvez jeté un oeil aux Pour commencer, vous pouvez jeté un oeil aux
[tickets facilement résolvable](https://git.kennel.ml/ConfrerieDuKassoulait/Botanique/issues?state=open&labels=82). [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 - De préférences, les fonctions, méthodes et variables seront écrites
en anglais, ainsi que les commits afin que chacun puisse contribuer. en anglais, ainsi que les commits afin que chacun puisse contribuer.
## Soumettre ses modifications ## Soumettre ses modifications
1. Pensez à bien commenter votre code (en anglais) pour que n'importe qui 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 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 vous avez modifié n'est pas référencer ailleurs (exemple : si vous modifier
une variable d'environnement, il faut penser à mettre à jour le une variable d'environnement, il faut penser à mettre à jour le
[`README`](./README.md#variables-denvironnements)). [`README`](./README.md#variables-denvironnements)).
2. N'oubliez pas d'utiliser [les fichiers de langues](./src/locales/) pour vos 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 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 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. fonctionneront avec `npm run main`, ainsi que dans l'image Docker.
4. Lorsque vous vous sentez confiant dans vos modifications, ouvrez 4. Lorsque vous vous sentez confiant dans vos modifications, ouvrez
une [Pull Request](https://git.kennel.ml/ConfrerieDuKassoulait/Botanique/pulls) une [Pull Request](https://git.kennel.ml/ConfrerieDuKassoulait/Botanique/pulls)
afin que votre code puisse être revu et fusionné. Vous pouvez suivre cette afin que votre code puisse être revu et fusionné. Vous pouvez suivre cette
[condition de nommage](https://gist.github.com/joshbuchea/6f47e86d2510bce28f8e7f42ae84c716#example), [condition de nommage](https://gist.github.com/joshbuchea/6f47e86d2510bce28f8e7f42ae84c716#example),
ça aide à s'y retrouver plus rapidement. ça aide à s'y retrouver plus rapidement.
> **Explication** > **Explication**
> >
@ -192,10 +233,11 @@ afin que votre code puisse être revu et fusionné. Vous pouvez suivre cette
> supprimé. > supprimé.
## Gestion du dépôt ## Gestion du dépôt
- On ne push jamais directement sur la branche `main`. - On ne push jamais directement sur la branche `main`.
- Quand on merge des modifications vers `main`, on fait un *squash*, - Quand on merge des modifications vers `main`, on fait un _squash_,
l'historique des modifications reste disponible dans l'historique des modifications reste disponible dans
[le graph](https://git.kennel.ml/ConfrerieDuKassoulait/Botanique/graph). [le graph](https://git.kennel.ml/ConfrerieDuKassoulait/Botanique/graph).
- De préférences, suivre les indications de - De préférences, suivre les indications de
[ce post](https://gist.github.com/revett/88ee5abf5a9a097b4c88) (c'est un peu la [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)). même que dans le `4.` de [la partie précédente](#soumettre-ses-modifications)).