Défis Bot Discord

Sur cette page tu trouveras différents défis à réaliser avec ton bot Discord !
Afin de réussir ces défis, pense bien à garder un onglet ouvert avec le menu Python : tu y trouveras de nombreuses ressources pour t’aider dans la partie “Bots Discord” 🙂

Liste des défis :

Défi 1 : Allô ? À l’huile !

Pour ce défi, il s’agit de créer un bot qui réponde “à l’huile !” à chaque fois que quelqu’un écrit “allo”.

Attention, il ne s’agit pas de créer une commande !allo, mais bien de vérifier si quelqu’un a écrit un message contenant le texte “allo”.

Puisqu’il ne s’agit pas de créer une commande, c’est donc qu’il faut créer un événement.
Plus précisément, un événement on_message qui permet de déclencher quelque chose lorsque le bot reçoit un message :

@bot.event
async def on_message(ctx):
      # Ton code ici

N’oublie pas que tu peux consulter la page Magic Makers sur la documentation Discord pour trouver ce que tu peux faire avec le Context (ctx).

En l’occurence, tu peux voir que sur le Context, tu as accès au Message, et que sur ce message, tu as accès au content (contenu) de ce dernier. Il s’agit alors de vérifier si ce contenu est égal à « allo » !

Défi 2 : Hasard, hasard

Pour ce défi, il te faudra créer une commande !choisir qui peut prendre autant d’arguments que voulu.

Le bot choisit alors l’un des arguments donnés au hasard. Utile si jamais on doit choisir quelqu’un au hasard !

Il est possible d’avoir un nombre indeterminé d’arguments de cette manière :

@bot.command(name= »nom_de_ma_commande »)
async def nom_de_ma_fonction(ctx, *args) :
      # Ton code ici

args est alors une variable qui contient la liste de tous les arguments donnée par l’utilisateur.
Pense à parcourir les ressources Magic Makers pour trouver ces informations : Les paramètres de commandes

Voici un exemple de code pour récupérer aléatoirement un élément d’une liste :

import random

ma_liste = [« fraise », « chocolat », « vanille »]
ma_variable = random.choice(ma_liste)
print(ma_variable)

Défi 3 : L’Info-Bot

Ici, tu vas devoir créer une commande !infos qui envoie un message privé à celui ou celle qui a écrit la commande.

Ce message privé indiquera des informations sur cette personne : sa date d’inscription sur Discord et son identifiant (id) !

On sait comment envoyer un message avec ctx.send(…).
Mais comment envoyer un message privé à quelqu’un ? Peut-être devrait-on essayer de récupérer l’auteur du message ? Peut-être que l’on peut trouver comment envoyer un message privé sur la page ressource Magic Makers sur la documentation Discord ?

Si tu as réussi à récupérer l’auteur de ce message : cet auteur est un Member (=membre du serveur).
On peut donc parcourir la documentation du Member pour trouver les attributs correspondant à l’identifiant (id) et à la date d’inscription.

Défi 4 : Un bot plein d’amour

C’est le bot le plus aimable du monde…

À chaque fois que quelqu’un réagit à un message avec l’emoji coeur, le bot envoie un message avec plein de coeurs !

Tu connais déjà l’événement on_message qui permet de faire quelque chose lorsque le bot détecte un nouveau message.

Il existe un événement on_reaction_add qui permet de faire quelque chose lorsque le bot détecte une nouvelle réaction :

@bot.event
async def on_reaction_add(reaction, utilisateur):
      # Ton code ici

Il est tout à fait possible d’utiliser des emojis sur Replit : tu peux par exemple copier-coller un emoji depuis Discord !
Pense à mettre des guillemets autour de ton emoji si tu l’utilises dans le code : c’est considéré comme du texte, on le met donc entre guillemets !

Défi 5 : Oui, tout à fait

Ce bot est tout le temps d’accord !
À chaque fois que quelqu’un poste un message, le bot répond avec l’une des phrases suivantes :

  • Tout à fait !
  • C’est exactement ça…
  • 100% d’accord !!!

Attention aux boucles infinies 😉

Petit rappel : ci-dessous, un exemple de code pour récupérer un élément au hasard dans une liste !

import random

ma_liste = [« fraise », « chocolat », « vanille »]
ma_variable = random.choice(ma_liste)
print(ma_variable)

Pour éviter que le bot se réponde à lui-même, on peut vérifier si la personne qui a posté le message n’est pas un bot.

Comment faire cela ? Un petit tour sur la page Magic Makers sur la documentation Discord s’impose 😉 .

Défi 6 : Un petit mot gentil

Apportons un peu de gentillesse dans ce monde !

Pour ce défi, il te faut créer une commande qui permet d’envoyer “<pseudo>, tu es formidable !” en mentionnant la personne voulue.

Il est possible de spécifier le type d’argument donné par l’utilisateur.

Par exemple, dans le code ci-dessous, l’argument donné sera converti en Member (si possible) :

@bot.command(« nom_de_la_commande »)
async def nom_de_la_fonction(ctx, destinataire: discord.Member):
      # Ton code ici

La mention est un attribut que tu peux trouver dans la documentation Discord (tu peux aussi t’aider de la page ressource Magic Makers pour trouver plus facilement les différents points d’entrée de cette documentation).

Est-ce  que ce sera sur la classe Context ? Sur la classe Message ? Sur la classe Member ?…
à toi de chercher, mais l’une des options est plus logique que les autres 🙂

Défi 7 : Timidité

Les bots aussi ont leurs défauts ! Celui-ci est un peu timide…

À toi de créer une commande !salut auquel le bot peut répondre de deux façons :

  • “Salut ! Comment vas-tu ?” si on lui écrit en message privé
  • “Je suis timide, je ne réponds qu’en privé…” si on lui écrit en public !

Deux informations pour t’aider à commencer ce défi :

  • Tu peux déjà rechercher des informations sur isinstance() en Python sur Google. Cela te sera utile pour ce défi !
  • La classe Discord correspondant à un salon textuel public est TextChannel, ou plus précisément discord.channel.TextChannel

L’idée serait donc de pouvoir vérifier si le salon dans lequel a été posté la commande est un TextChannel. Si c’est le cas, on sait qu’on devra répondre « Je suis timide etc. » !

Pour trouver comment récupérer « le salon dans lequel a été posté la commande », tu connais la chanson : un petit tour sur la page ressource Magic Makers sur la documentation Discord s’impose !

Défi 8 : Coubeh

Ici, il te faudra créer un bot qui répond “coubeh” dès que quelqu’un poste un message finissant par “quoi” ou “koi”.

Si tu préfères, le bot peut aussi répondre « feur » plutôt que « coubeh » !

Cela doit aussi marcher pour “quoi ?”, “QUOI”, “pourquoi…  !?”, etc.
Il faudra donc trouver un moyen d’ignorer les espaces et autres signes de ponctuation !

Le savais-tu ? En Python, on peut récupérer le dernier élement d’une liste avec la syntaxe ma_liste[-1], ou l’avant-dernier avec ma_liste[-2], etc.

Il est même possible de récupérer plusieurs éléments d’un coup ! Par exemple, on peut récupérer les 10 derniers éléments en écrivant ma_liste[-10:]

Et cela fonctionne également pour les chaînes de caractère (=textes), vu que ceux-ci peuvent être considérés comme des listes de caractères 😉

Pour ce qui est « d’ignorer les espaces et la ponctuation », il va falloir rechercher sur internet ce qu’il est possible de faire avec des string (chaînes de caractère) en Python.
Dans tes recherches tu tomberas par exemples sur des fonctions comme lower(), trim(), isalnum()

Défi 9 : Jeu des réactions

Pour ce défi, il s’agit de créer le jeu des réactions : on lance une commande !demander_emoji, et le bot demande alors de réagir avec un emoji choisi au hasard.

Le premier joueur qui réagit au message avec le bon emoji gagne – le bot envoie donc un message pour féliciter le joueur.

Comme tu auras besoin à la fois d’une commande et d’un événement pour ce défi, n’oublie pas la ligne await bot.process_commands(message) à la fin de ton événement pour que tes commandes continuent de fonctionner !

Pour s’assurer que l’utilisateur réagit bien au message du bot et non pas à un autre message, on peut vérifier, lorsque le bot reçoit une réaction, si l’id du message sur lequel la réaction a été mise correspond à l’id du message du bot.

Retour en haut