Comment créer des Commandes Slash ?

Article publié le et mis à jour le .

Dans l’article précédent de ce tutoriel, on a vu comment créer des commandes avec un préfixe (Partie 4).

Mais Discord a introduit les commandes slash, qui permettent une intégration plus fluide dans l’interface utilisateur. Contrairement aux commandes basées sur un préfixe comme !command, les commandes slash débutent par le symbole /. Cela améliore l’expérience des utilisateurs, qui peuvent sélectionner les commandes directement depuis la barre de chat et recevoir des suggestions pour remplir les paramètres.

1. Créer une commande slash

Les commandes slash sont très similaires aux commandes avec préfixe, mais elles requièrent quelques ajustements dans le code. Au lieu d’utiliser un objet context, elles utilisent un objet interaction. Voici un exemple basique :

@bot.tree.command(name="multiplication")
async def multiplication(interaction: discord.Interaction, a: int, b: int):
    await interaction.response.send_message(f"{a} x {b} = {a * b}")

2. Synchroniser les commandes

Après avoir créé la commande, il est nécessaire de synchroniser le bot avec Discord pour que la commande slash apparaisse dans le menu des suggestions. Cela peut être fait à l’aide d’un événement :

@bot.event
async def on_ready():
    await bot.tree.sync()
    print(f"Connecté en tant que {bot.user}")

3. Gérer plusieurs réponses avec Followup

Les interactions via slash command ne permettent qu’une seule réponse. Si vous souhaitez envoyer plusieurs réponses, utilisez followup. Voici un exemple de commande qui répète un message plusieurs fois :

@bot.tree.command(name="répète")
async def répète(interaction: discord.Interaction, nombre: int, message: str):
    await interaction.response.send_message(message)
    for _ in range(1, nombre):
        await interaction.followup.send(message)

4. Répondre aux commandes longues avec Defer

Les commandes slash doivent répondre dans un délai de 3 secondes, sinon elles échouent. Pour les commandes plus lentes, il est possible de différer la réponse avec defer :

@bot.tree.command(name="attend")
async def attend(interaction: discord.Interaction, secondes: int):
    await interaction.response.defer()
    await asyncio.sleep(secondes)
    await interaction.followup.send("J'ai fini d'attendre!")

En différant la réponse, Discord sait que la commande est en cours de traitement et n’annule pas la requête même si l’exécution prend du temps.

Conclusion

Les commandes slash facilitent l’interaction des utilisateurs avec votre bot Discord tout en offrant une meilleure expérience. Leur intégration demande quelques ajustements par rapport aux commandes avec préfixes, mais elles permettent des interactions plus dynamiques et fluides.

Mais il existe encore un autre type de commandes qui allie la puissance des commandes slash et la souplesse des commandes avec un préfixe … les commandes hybrides.

Lire la suite du tutoriel bot discord en python avec discord.py (Partie 6)