Aller au contenu principal

Fichiers à charger

Votre fichier manifeste doit contenir une liste de fichiers à charger, chaque fichier permet d'ajouter des fonctionnalités au bot telles que des commandes.

FAQ

Est-il possible d'ajouter plusieurs commandes dans un seul fichier ?

Non, chaque commande doit posséder un fichier dédié.

Une commande slash et un menu contextuel peuvent exister dans le même fichier ?

Oui, les deux utiliseront la même fonction execute.

L'utilisation de mon module via une commande texte provoque un problème, que faire ?

Le système utilisé pour que les commandes slash puisse être compatible avec les commandes textes peut avoir des problèmes et n'est pas parfait.

Si vous avez un problème, vous pouvez :

Créé une commande slash

Pour créé une commande slash, vous aurez besoin d'exporter une variable slashInfo :

const { SlashCommandBuilder } = require('discord.js')

module.exports = {
slashInfo: new SlashCommandBuilder()
.setName('helloworld')
.setDescription('Salut tout le monde !'),
}

Et aussi d'exporter une fonction execute, ce code sera exécuté lorsqu'une personne utilisera la commande :

const { SlashCommandBuilder } = require('discord.js')

module.exports = {
slashInfo: new SlashCommandBuilder()
.setName('helloworld')
.setDescription('Salut tout le monde !'),

async execute(interaction){
interaction.reply('Hello world')
}
}

Créé un menu contextuel

Démo des menus contextuels

La création de menus contextuels est similaire aux commandes slash, il suffit d'exporter une variable contextInfo et une fonction execute :

const { ContextMenuCommandBuilder, ApplicationCommandType } = require('discord.js')

module.exports = {
contextInfo: new ContextMenuCommandBuilder()
.setName("Hello")
.setType(ApplicationCommandType.User),

async execute(interaction){
interaction.reply('Hello world')
}
}

Boutons, modals, select

Bachero envoie à tous les modules les interactions en lien avec les boutons, les modals et les selects, utilisez donc un identifiant unique pour éviter les conflits entre les différents modules installés.

module.exports = {
interactionListener(listener){
// Quand un bouton est cliqué
listener.on('button', async (interaction) => {
console.log(`${interaction.username} a utilisé le bouton ${interaction.customId}`)
})

// Quand un modal est envoyé
listener.on('modal', async (interaction) => {
console.log(`${interaction.username} a renvoyé le modal ${interaction.customId}`)
})

// Quand un selectMenu est envoyé
listener.on('selectMenu', async (interaction) => {
console.log(`${interaction.username} a renvoyé le selectMenu ${interaction.customId}`)
})
}
}

Obtenir le client DiscordJS

Si vous vous trouvez limité par Bachero et que vous souhaitez effectuer des actions nécessitant l'accès au client DiscordJS, vous pouvez exporter une fonction getClient dans votre module.

module.exports = {
async getClient(client){
// On a le client
console.log(client)
},
}
attention

Lors de l'utilisation de commandes textes, le fichier est chargé deux fois (une fois pour la commande texte, et une fois pour la commande slash). Cependant, la fonction getClient n'est appelée que pour la commande slash.

Si vous souhaitez utiliser le client depuis la fonction execute, il est recommendé de l'obtenir depuis l'interaction :

module.exports = {
async execute(interaction){
// On a le client
console.log(interaction.client)
},
}

Commandes textes (par message avec préfixe)

Bachero supporte depuis la version 0.2.0 les commandes textes, c'est à dire les commandes par message classique et qui contiennent un préfixe.

Tous les modules sont compatibles par défaut avec cette fonctionnalité sans avoir à modifier son code (Bachero lui-même s'occupe de tout).

Chargement des fichiers

Lorsque la fonctionnalité est activée, les fichiers sont chargés deux fois, une fois pour les commandes slash et une fois pour les commandes textes.

Pour synchroniser des variables entre les deux chargements, vous pouvez :

  • Enregistrer votre variable dans global :
global.yourVariable = "Hello world"

Vous pouvez aussi vérifier le type d'interaction depuis la fonction execute pour éviter certains conflits.

Désactiver pour un module

Si vous souhaitez désactiver cette fonctionnalité pour un fichier de votre module, vous pouvez exporter la variable slashToText :

module.exports = {
slashToText: false,

async execute(interaction){
interaction.reply("Je ne peux pas venir d'une commande texte :>")
}
}

Détecter quelle méthode est utilisée pour exécuter votre commande

Depuis la fonction execute, l'interaction de base dispose d'une propriété sourceType pouvant être défini sur textCommand, slashCommand ou contextMenu.

module.exports = {
async execute(interaction){
interaction.reply("Je ne viens pas d'une commande texte, je viens de : " + interaction.sourceType)
}
}