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é
