Comment réagir aux Events avec les Listeners ?

Article publié le et mis à jour le .

Dans l’article précédent, on a vu comment installer tout ce qu’il faut pour créer un client pour un bot discord en python avec discord.py (Partie 2).

Discord.py est une bibliothèque qui permet de créer des bots Discord en Python.

Après avoir configuré le bot, l’une des étapes importantes est d’apprendre à interagir avec les événements Discord, comme l’envoi de messages, la suppression de ceux-ci, ou encore la modification d’un message. Voyons comment observer et réagir à ces événements en quelques étapes.

Créer un fichier d’événements

La première étape consiste à organiser notre code en créant un nouveau fichier events.py.

Ce fichier contiendra la logique des événements que notre bot doit écouter. On commence par copier la configuration de base du bot depuis client.py et la coller dans events.py.

Le Décorateur client.event

Chaque événement est capturé via un décorateur spécifique dans Discord.py : @client.event.

Ce décorateur indique à Discord que la fonction qui le suit doit être exécutée lorsqu’un événement particulier se produit. Par exemple, l’événement on_message s’exécute chaque fois qu’un message est envoyé sur un serveur où le bot est actif.

Voici un exemple de fonction qui réagit à l’envoi d’un message :

@client.event
async def on_message(message):
    if message.author == client.user:
        return
    if message.content.lower().startswith("bonjour"):
        await message.channel.send("Bonjour, c'est le bot !")

Cette fonction fait plusieurs choses :

  1. Elle vérifie que l’auteur du message n’est pas le bot lui-même pour éviter une boucle infinie.
  2. Elle répond uniquement si le message commence par “bonjour”.
  3. Elle utilise await pour gérer les opérations asynchrones, notamment l’envoi de réponses.

Gérer les Erreurs avec async et await

Si vous oubliez d’ajouter le mot-clé async ou await là où c’est nécessaire, le bot générera des erreurs. Mais pas de panique, ces erreurs sont facilement identifiables et corrigibles en ajustant simplement la syntaxe de vos fonctions.

Gérer la Suppression et la Modification des Messages

En plus de l’envoi de messages, vous pouvez également réagir à la suppression ou à la modification d’un message grâce aux événements on_message_delete et on_message_edit.

Exemple pour détecter la suppression d’un message :

@client.event
async def on_message_delete(message):
    await message.channel.send(f"{message.author} a supprimé : {message.content}")

Pour réagir à la modification d’un message :

@client.event
async def on_message_edit(before, after):
    await before.channel.send(f"Le message de {before.author} est passé de '{before.content}' à '{after.content}'")

L’événement on_ready

Enfin, l’événement on_ready s’exécute lorsque le bot est prêt et connecté à Discord. Vous pouvez l’utiliser pour effectuer des tâches initiales, comme synchroniser des commandes ou notifier que le bot est actif.

@client.event
async def on_ready():
    print("Le bot est prêt")

Assurez-vous que la fonction est une coroutines (avec async) et qu’elle utilise le décorateur @client.event pour être reconnue par Discord.py.

Conclusion

Vous avez désormais une idée claire de la façon dont on peut utiliser Discord.py pour interagir avec divers événements sur un serveur Discord.

Observer des événements comme l’envoi, la suppression, ou la modification de messages est fondamental pour créer des bots réactifs et engageants.

N’oubliez pas d’utiliser les bonnes pratiques, comme l’ajout de types ou l’utilisation de async/await, pour éviter les erreurs et de garantir une bonne gestion des tâches asynchrones.

Et maintenant qu’on a vu comment écouter des événements, voyons comment créer notre première commande !

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