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