Comment créer des Commandes Slash ?
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)
Je m'appelle Thomas, et je code depuis plus de 20 ans. Depuis ma sortie de la première promotion de l'École 42, j'ai conçu et développé des centaines d'applications et de sites web. Sur ce blog, je partage avec vous les stratégies les plus efficaces pour maîtriser l'art de coder et progresser rapidement.