Les décorateurs Discord

Il est possible d’utiliser des décorateurs sur les commandes Discord.
Tu trouveras toutes les informations à ce sujet sur cette page :

C’est quoi un décorateur ?

 

Tu as déjà vu dans le code de tes bots Discord des choses qui ressemblaient à « @bot.quelquechose » juste avant une fonction ? C’est un décorateur !

Les décorateurs s’appellent ainsi car ils ne sont pas écrits dans les fonctions mais juste à l’extérieur de celles-ci – un peu comme un vêtement qui servirait à les décorer !

Un décorateur permet d’attacher dynamiquement de nouvelles responsabilités à un objet (plus spécifiquement, dans notre cas, à une fonction).

Pas de panique, c’est moins compliqué que ça en a l’air ! Cela veut simplement dire que c’est une petite ligne qui ajoute de nouvelles responsabilités / fonctionnalités à notre fonction.

Par exemple, tu as sans doute déjà vu le décorateur @bot.command().
Quand on le rajoute devant une fonction, celle-ci a alors une nouvelle responsabilité : cette fonction est maintenant une commande de bot !

Dans le cas de Discord.py, les décorateurs servent surtout à spécifier un comportement voulu sur une commande ou un événement (par exemple, on peut préciser que la commande ne peut être lancée qu’en message privé avec un décorateur).

Tu trouveras sur cette page de nombreux exemples de décorateurs. La liste exhaustive est disponible sur la documentation Discord.py.

command()

Le décorateur que tu utiliseras le plus !

Il permet de spécifier qu’une fonction est une commande de bot. Tu peux préciser le nom de cette commande entre les parenthèses (autrement, le nom de la commande sera le même que le nom de la fonction).

event()

Celui-ci aussi, tu vas probablement beaucoup l’utiliser !

Il permet de préciser que la fonction est un événement. Le nom de la fonction est alors très important pour préciser le type d’événement :

  • on_message pour que la fonction se lance dès que le bot détecte qu’un nouveau message a été posté
  • on_reaction_add pour que la fonction se lance dès que le bot détecte une nouvelle réaction

guild_only()

Ajoute ce décorateur devant une commande et celle-ci ne pourra être lancée qu’en public.

dm_only()

Ajoute ce décorateur devant une commande et celle-ci ne pourra être lancée qu’en privé.

has_role()

Ajoute ce décorateur devant une commande et celle-ci ne pourra être lancée que par les utilisateurs ayant le rôle demandé.

has_any_role()

Ajoute ce décorateur devant une commande et celle-ci ne pourra être lancée que par les utilisateurs ayant au moins l’un des rôles demandés.

check()

Ajoute ce décorateur devant une commande pour que celle-ci ne puisse être lancée qu’à une certaine condition.

C’est à toi de préciser cette condition ! Sur l’exemple ci-contre, la commande ne pourra être lancée que si l’utilisateur ayant lancé la commande possède l’identifiant 85309593344815104.

cooldown()

Ajoute ce décorateur devant une commande pour que celle-ci ne puisse pas être lancée à répétition.

Par exemple,la commande ci-contre a un cooldown de 5 secondes – autrement dit, après l’avoir appelée, il faudra attendre au moins 5 secondes avant de pouvoir l’appeler à nouveau.

rate est le nombre de fois que l’on peut lancer la commande avant de déclencher le cooldown
per est le nombre de secondes à attendre avant de pouvoir relancer la commande une fois le cooldown activé

Retour en haut