Skip to content
This repository was archived by the owner on Dec 5, 2024. It is now read-only.

Wailrone/discord.js-bot-handler-modules

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

📦 discord.js-bot-handler-modules

Cette structure vous permettra de facilement automatiser certaines tâches sur votre bot Discord.

Merci à @warix8 pour la base de la structure. N'hésitez pas à aller visiter son profil pour plus d'informations.

đź“– Documentation

Les bases

Le fichier config

Les différents paramètres du bot se feront pour la plupart dans le fichier configuration.json

{
  "bot": {
    "mainColor": "#FFFFFF",
    "errorWebhook": "WEBHOOK_URL",
    "token": "TOKEN",
    "defaultContact": "Wailrone™#0666",
    "ownersIDs": [
      "393378313663676427"
    ]
  },
  "emotes": {
    "SUCCESS": "🟢",
    "ERROR": "đź”´",
    "WARNING": "âš "
  }
}
  • mainColor - Couleur principale du bot, utilisĂ©e dans tous les embeds du bot.
  • errorWebhook - Lien du webhook qui vous renverra les diffĂ©rentes erreurs de votre bot.
  • token - Le token du bot.
  • defaultContact - Lorsqu'une erreur apparaĂ®t, le bot enverra un message avec la personne Ă  contacter par dĂ©faut.
  • ownersIDs - Ce tableau contient la liste des propriĂ©taires du bot.
  • emotes - Couleur principale du bot, utilisĂ©e dans tous les embeds du bot.

Démarrer le bot

Pour démarrer le bot, il vous suffit d'exécuter la commande npm start. Vous pouvez modifier le script dans le fichier package.json.

La commande tsc va dans un premier temps compiler les fichiers TypeScript en JavaScript. La commande node dist/shards.js va quant Ă  elle lancer le shardingManager.

Tous les fichiers compilés vont dans le dossier dist

{
  "scripts": {
    "start": "tsc && node dist/shards.js"
  }
}

Les modules

Les modules vous permettront de créer un dossier propre à une seule fonctionnalité de votre bot. Vous pourrez ainsi simplement glisser le dossier vers un bot utilisant la même structure.

Le module base

Dans le dossier modules, vous verrez le module base, il ne doit pas être supprimé. Vous pouvez cependant supprimer les commandes et components du module base. Seuls les events sont essentiels.

Ajouter un module

Dans le dossier modules, vous pouvez rajouter un dossier sur la base du module base. Il doit contenir ces dossier et fichiers :

└───moduleName
    │   config.json
    │   functions.ts
    │
    ├───commands
    │       Command.ts
    │
    ├───components
    │       Component.ts
    │
    └───events
            Event.ts

Configurations et fonctions du module

Vous avez également la possibilité d'ajouter un fichier config.json et un fichier functions.ts dans le dossier du module. Vous aurez la possibilité d'appeller les fonctions via ctx.module.config ou ctx.module.functions dans un fichier de Command ou de Component. Dans un fichier d'Event, vous pourrez appeler les fonctions via this.module.config ou this.module.functions. Voici la structure du fichier functions.ts :

import Client from "../../../main";
import ModuleFunctions from "../../utils/ModuleFunctions";

export default class Functions extends ModuleFunctions {
    client: typeof Client;

    constructor(client: typeof Client) {
        super(client);
    }

    exampleFunction(argument: string): boolean {
        console.log(argument, this.client.user?.tag);
        return true
    }

}

De la même façon que exampleFunction, vous pouvez rajouter autant de fonctions que vous le souhaitez. Concernant le fichier config.json, vous pouvez l'organiser comme vous voulez. Voici un exemple :

{
  "property": "Value 117"
}

Les events

Voici la structure de base d'un event :

"use strict";

import type Client from "../../../../main";
import {Events, Message, TextChannel} from "discord.js";
import ModuleEvent from "../../../utils/ModuleEvent";

export default class extends ModuleEvent {
    constructor(client: typeof Client) {
        super({
            client: client,
            name: Events.MessageCreate,
        });
        this.client = client;
    }

    async run(message: Message) {
        // Your code here ( example for messageCreate event )
    }
}

Les options d'un event

  • name : Events - Nom de l'event. DĂ©faut : null

Les commandes

Voici la structure de base d'une commande, dans une commande, vous avez accès au Context. via ctx :

"use strict";

import Command from "../../../utils/Command";
import Context from "../../../utils/Context";
import Client from "../../../../main";

export default class extends Command {
    constructor() {
        super({
            name: "commandName",
            category: "owners",
            description: "Command Description",
            userPerms: [PermissionsBitField.Flags.Administrator],
            ownerOnly: true,
            options: [{
                type: ApplicationCommandOptionType.String,
                name: 'option',
                required: true,
                description: 'Option Description.'
            }],
        });
    }

    async run(ctx: Context) {
        // Your code here
    }
}

Les options de la commande

  • name : string - Nom de la commande. DĂ©faut : null
  • description : string - Description de la commande. DĂ©faut : null
  • category : string - CatĂ©gorie de la commande. DĂ©faut : null
  • examples : string[] - Exemples de commandes. DĂ©faut : []
  • options : ApplicationCommandOptionData[] - Options de la commande. DĂ©faut : []
  • userPerms : PermissionResolvable - Permissions requises pour utiliser la commande. DĂ©faut : []
  • botPerms : PermissionResolvable - Permissions requises par le bot pour utiliser cette commande. DĂ©faut : []
  • disabled : boolean - Si la commande est dĂ©sactivĂ©e ou non. DĂ©faut : false
  • ownerOnly : boolean - Si la commande est rĂ©servĂ©e aux propriĂ©taires du bot. DĂ©faut : false
  • cooldown : number - Temps de cooldown en ms entre chaque exĂ©cution de la commande. DĂ©faut : false
  • type : ApplicationCommandType - Type de la commande. DĂ©faut : ApplicationCommandType.ChatInput
  • isAvailableInDM : boolean - Si la commande est disponible en messages privĂ©s ou non. DĂ©faut : false

Les components

Voici la structure de base d'un component, dans un component, vous avez accès au Context. via ctx :

"use strict";


import type Context from "../../../utils/Context";
import Component from "../../../utils/Component";

export default class extends Component {
    constructor() {
        super({
            customId: "example",
            customIdParams: ["userId", "guildId"],
        });
    }

    async run(ctx: Context) {
        // Your code here
    }
}

Les options de la commande

  • customId : string - Identifiant unique du component. DĂ©faut : null
  • customIdParams : string[] - Nom des paramètres prĂ©sents dans les components. DĂ©faut : []

Fonctionnement des components

Lorsque vous créez un component, vous pouvez ajouter des paramètres dans l'identifiant du component. Pour cela, il suffit de les séparer avec des :.

Voici un exemple :

Vous souhaitez faire un bouton qui supprime un message précis dans un salon précis. Lorsque vous allez créer votre component vous mettrez votre identifiant sous le format suivant : deleteMessage:channelId:messageId.

  • Nous allons partir du principe que l'identifiant sera deleteMessage:812366241679147048:831511069948117012 Dans le fichier correspondant Ă  ce component, vous allez pouvoir mettre en options customIdParams : ["channelId", "messageId"].
  • Lorsqu'un utilisateur cliquera sur le bouton, vous allez pouvoir rĂ©cupĂ©rer les paramètres dans le Context via ctx.customIdParams, et le customId ( ici deleteMessage via ctx.customId ). Doncctx.customIdParams vaudra :
{
  channelId: "812366241679147048",
  messageId: "831511069948117012"
}

Context

⚠️ Zone en travaux 🚧

console.log('Coming soon ! La documentation est en cours de rédaction.')

Des questions ? Rejoignez mon serveur Discord

About

Typescript discord.js bot handler with modules

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published