# Chapitre 2 - Découvrez de nouvelles fonctionnalités

{% hint style="danger" %}

## MESSAGE IMPORTANT.

Cette documentation n'est plus à jour depuis trop longtemps. Si vous voulez de l'aide, veuillez [rejoindre ce serveur Discord](https://thomasbnt.dev/discord) et [lire cet article](https://thomasbnt.dev/blog/robot-discord-basique) qui date de Septembre 2021 mais qui est fréquemment mis à jour.

Si vous souhaitez un robot pour automatiquement supprimer les insultes, n'hésitez pas à vous renseigner sur [Mr. Robøt](https://mrrobot.app).
{% endhint %}

### Envoyer des messages privés

Pour commencer, on peut demander très rapidement au robot d'envoyer un message privé.

* Testez l'exemple ci-dessous:

{% code title="mp.js" %}

```javascript
if (msg.content.startsWith(prefix + "mp")) {
    msg.author.send("Salut !") // Texte envoyé en message privé par l'auteur de la commande
}
```

{% endcode %}

* Tapez la commande ".mp" dans un salon textuel sur un serveur depuis lequel le robot peut accéder.

![](/files/-LBm3p8uR1EYgROIWf7k)

Par message privé, votre robot aura répondu:

![](/files/-LBm3yIyh0zYnrj78FYg)

Vous pouvez combiner plusieurs réponses, afin d'obtenir le résultat suivant, par exemple:

![Réponse dans le serveur.](/files/-LBm81VDMCyighpfl2Yy)

![Réponse en message privé.](/files/-LBmAMUu6Uonux4cJsr9)

Voici le code source de la commande:

{% code title="help.js" %}

```javascript
if (msg.content.startsWith(prefix + "help")) {
msg.channel.send("La liste des commandes vous a été envoyée en message privé ! :white_check_mark:")
msg.author.send("Liste des commandes disponibles sur le robot:\n\n.help **-** Affiche la liste des commandes disponibles sur le bot.\n.ping **-** Répond à l'utilisateur afin de tetser la réactivité du bot.\n.mp **-** Envoie un message privé à l'utilisateur.\n.markdown **-** Affiche toutes les combinaisons possibles de Markdown sur Discord.")
}
```

{% endcode %}

Vous trouvez peut être que le message n'est pas très esthétique, et oui, on peut faire plus beau !

Pour rendre un message plus joli, vous pouvez utiliser des **embeds**.

Il existe 2 différents type d'embeds:

### Le "petit embed"

Le "petit embed" est vraiment très simple, et permet de rédiger des messages très courts.

{% code title="embed.js" %}

```javascript
if (msg.content.startsWith(prefix + "embed")) {
const embed = {
  color: 3447003,
  description: "Contenu du message."
  }
  msg.channel.send({embed});
  });
```

{% endcode %}

![](/files/-LBmYx4F43xQJAYx2dPr)

### L'embed normal

L'embed normal est le plus utilisé et convient pour à peu près toutes les utilisations.

{% code title="embed.js" %}

```javascript
if (msg.content.startsWith(prefix + "embed")) {
const embed = {
   color: 16746215,
   author: {
     name: msg.author.username,
     icon_url: msg.author.avatarURL
   },
   title: "Titre de l'embed.",
   url: "https://devcommunity.gitbook.io/bot",
   description: "Description de l'embed",
   fields: [{
       name: "Catégories",
       value: "Un embed est divisé en différentes catégories."
     },
     {
       name: "Markdown",
       value: "Markdown, qui a été expliqué dans le chapitre précédent, est utilisable ici."
     },
     {
       name: "Hyperliens",
       value: "Vous pouvez utiliser des hyperliens. Celui-ci mène à [DuckDuckGo](https://duckduckgo.com)."
     }
   ],
   timestamp: new Date(),
   footer: {
     icon_url: client.user.avatarURL,
     text: client.user.username
   }
 }
 msg.channel.send({embed});
});
```

{% endcode %}

![](/files/-LBpLt0Lkh0abxCdoNd_)

En comparant le code et l'image ci-dessus, vous connaissez quels champs affichent quoi et pouvez ainsi créer vos propres embeds.

Merci à [Anidiots Guide](https://legacy.gitbook.com/@anidiotsguide_old) pour la partie embed.

Vos messages seront désormais plus jolis. Mais ne nous arrêtons pas en si bon chemin !

### Expulser un utilisateur

Si votre bot prend en charge des fonctions de modération, la commande pour kick un utilisateur est indispensable. Voici le code pour réaliser une telle fonction :

{% code title="kick.js" %}

```javascript
if (msg.content.startsWith(prefix + "kick")) { // On exécute les instructions en dessous si la commande "kick" est utilisée
    if (msg.member.hasPermission("KICK_MEMBERS")) { // On exécute les instructions en dessous si l'auteur de la commande à la permission d'expulser un utilisateur. Sinon, on exécute les actions présentes à partir de la ligne 7
        let member = msg.mentions.members.first(); // La variable nommée "member" contient désormais comme valeur l'identifiant de la personne à expulser
        member.kick(member); // On expulse l'utilisateur correspondant à l'identifiant trouvé dans la variable "member"
        msg.channel.send(":white_check_mark: " + member.displayName + " a été expulsé(e) !") // On confirme que l'utilisateur a été expulsé (optionnel)
        console.log(msg.author.tag + " a expulsé " + member.displayName + " (" + member + ") du serveur " + msg.guild.name) // On dit dans la console que l'utilisateur a été expulsé (optionnel)
    }   else { // Voir le commentaire de la ligne 2
        msg.channel.send(":x: Vous n'avez pas la permission d'expulser un utilisateur.") // On infome l'auteur de la commande qu'il n'a pas les permissions nécessaires pour effectuer cette action (optionnel)
        console.log(msg.author.tag + " a voulu expulser un utilisateur sur le serveur " + msg.guild.name + ", mais il n'avait pas la permission d'expulser un utilisateur.") // On dit dans la console que l'auteur de la commande n'a pas pu effectuer cette action (optionnel)
    }
}
```

{% endcode %}

### Bannir un utilisateur

Bannir un utilisateur ressemble énormément à la manière dont on expulse un utilisateur. Voici le code de la commande :

{% code title="ban.js" %}

```javascript
if (msg.content.startsWith(prefix + "kick")) { // On exécute les instructions en dessous si la commande "kick" est utilisée
    if (msg.member.hasPermission("KICK_MEMBERS")) { // On exécute les instructions en dessous si l'auteur de la commande à la permission de bannir un utilisateur. Sinon, on exécute les actions présentes à partir de la ligne 7
        let member = msg.mentions.members.first(); // La variable nommée "member" contient désormais comme valeur l'identifiant de la personne à bannir
        member.kick(member); // On bannit l'utilisateur correspondant à l'identifiant trouvé dans la variable "member"
        msg.channel.send(":white_check_mark: " + member.displayName + " a été expulsé(e) !") // On confirme que l'utilisateur a été banni (optionnel)
        console.log(msg.author.tag + " a banni " + member.displayName + " (" + member + ") du serveur " + msg.guild.name) // On dit dans la console que l'utilisateur a été banni (optionnel)
    }   else { // Voir le commentaire de la ligne 2
        msg.channel.send(":x: Vous n'avez pas la permission de bannir un utilisateur.") // On infome l'auteur de la commande qu'il n'a pas les permissions nécessaires pour effectuer cette action (optionnel)
        console.log(msg.author.tag + " a voulu bannir un utilisateur sur le serveur " + msg.guild.name + ", mais il n'avait pas la permission de bannir un un utilisateur.") // On dit dans la console que l'auteur de la commande n'a pas pu effectuer cette action (optionnel)
    }
}

```

{% endcode %}

**Le contenu de cet page n'est pas terminé intégralement. Il sera terminé prochainement.**


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://devcommunity.gitbook.io/bot/robot-discord-pas-a-pas/chapitre-2-decouvrez-de-nouvelles-fonctionnalites.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
