AccueilA proposContact

Création d'un bot Discord avec OpenAI

Par Franck Anso
Publié dans Tech
22 févr. 2022
3 min

L’intelligence artificielle est en plein boom en ce moment mais il peut être difficile d’entrainer sa propre IA. Des sociétés comme OpenAI ont publié des APIs pour interagir avec des réseaux de neurone pré-entrainés.

Nous allons nous amuser avec OpenAI pour faire un bot Discord.

Pré-requis

Pour créer notre IA, nous allons avoir besoin d’un compte OpenAI et d’un compte Discord.

A la création du compte, OpenAI vous crédite de 18$ valable 3 mois. Il n’y a malheureusement pas de free tiers mais cela sera suffisant pour s’amuser un peu.

Configuration de Discord

Création d’un server

Pour créer un serveur, il vous suffit de cliquer sur le ”+” dans le menu de gauche.

add server

Ajoutez une application

Rendez-vous sur https://discord.com/developers/applications et cliquez sur le bouton “New application” en haut à droite.

Il ne vous reste plus qu’à lui donner un nom comme “OpenAIBot” et appuyer sur le bouton “Create”.

create application

Une fois l’application créée, dirigez-vous vers la section “Bot”, puis appuyez sur “Add Bot”.

create bot

Créez un token pour votre bot

Une fois votre bot créé, il va falloir lui donner un accès. Pour cela, cliquez sur “Reset Token”. Copiez-collez dans un fichier le token.

Le token n’apparaitra qu’une fois. Si vous ne l’avez pas sauvegardé, cliquez de nouveau sur “Reset Token”.

reset token

Il va falloir maintenant donner des accès au bot. Pour cela, il existe un générateur d’URL OAuth2 qui va nous aider à configurer la bonne URL à appeler. Pour l’utiliser, cliquez sur “OAuth2”, puis “URL Generator”.

url generator

Sélectionnez le scope “bot” dans la première partie.

scope

Puis les droits “Read Messages/View Channels” et “Send Messages” dans la deuxième partie. Copiez ensuite l’URL générée et collez là dans un nouvel onglet. Sélectionnez enfin le serveur que vous avez créé.

permissions

De retour sur votre chat, vous allez trouver votre bot.

Création de la base de code

Créez un nouveau dossier et nommez-le par exemple openaibot.

Ouvrez un terminal, placez vous dans le dossier et initialisez un projet NodeJS :

$ npm init -y

En allant dans le dossier vous trouverez un fichier package.json.

Installez maintenant la dépendance à Discord.

$ npm install discord.js

Ce projet est compatible avec DiscordJS 13. Si dans le fichier package.json vous voyez la version 14.x.x alors veuillez la descendre en 13.10.3.

Installez ensuite dotenv qui va nous permettre de séparer notre token d’accès de notre code.

$ npm install dotenv

Créer un fichier .env à la racine du projet. Et copier coller le contenu suivant en remplaçant par votre token obtenu plus haut :

DISCORD_TOKEN=<token>

Il ne faut surtout pas commit votre fichier .env.

Créer un fichier openaibot.js. Et copier/coller le code suivant :

const { Client, Intents } = require("discord.js");
const client = new Client({
intents: [Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES]
});
require("dotenv").config();
const TOKEN = process.env.DISCORD_TOKEN;
client.on("ready", () => {
console.log("I am ready!");
});
client.on("messageCreate", (message) => {
if (message.content.startsWith("!ping")) {
message.channel.send("pong!");
}
});
client.login(TOKEN);

Exécuter la commande ci-dessous dans votre terminal. Le bot devrait maintenant apparaître comme disponible.

$ npm start

Si vous envoyez la commande !ping dans le channel Discord, alors le bot vous répondra pong!.

Au tour d’OpenAI

Maintenant que nous avons un bot qui fonctionne nous allons lui donner un peu d’intelligence grâce à OpenAI.

Nous allons commencer par créer un token d’accès en allant sur https://beta.openai.com/account/api-keys. Il devrait déjà y avoir un token d’enregistrer. Si c’est le cas cliquez sur “Reveal” sinon créez en un. Comme tout à l’heure mettez le token de côté.

Donnons vie à notre bot

Retournez sur votre projet et installez la librairie openai.

$ npm install openai

Créez ensuite un fichier ai.js à la racine de votre projet et copiez-collez le code ci-dessous :

const {Configuration, OpenAIApi} = require("openai");
require("dotenv").config();
const TOKEN = process.env.OPENAI_TOKEN;
const configuration = new Configuration({
apiKey: TOKEN
});
const openai = new OpenAIApi(configuration);
async function ask(prompt) {
const response = await openai.createCompletion({
model: "text-davinci-002",
max_tokens: 256,
prompt
});
return response.data.choices[0].text;
}
module.exports = {
ask
}
  • model permet de choisir le réseau de neurone à appliquer. Ici nous prenons le plus performant et donc le plus cher.
  • max_tokens permet d’avoir des réponses de 256 tokens. A peu de chose prêt 1 token = 1 mot.
  • prompt la chaîne de caractère à interpréter

N’oubliez pas de mettre le token OpenAI dans le fichier .env que nous avons créé plus tôt.

DISCORD_TOKEN=<token>
OPENAI_TOKEN=<token>

Il ne nous reste plus qu’à modifier le fichier bot.js pour plugger la demande à OpenAI.

const { Client, Intents } = require("discord.js");
const client = new Client({
intents: [Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES]
});
const { ask } = require("./ai.js");
require("dotenv").config();
const TOKEN = process.env.DISCORD_TOKEN;
client.on("ready", () => {
console.log("I am ready!");
});
client.on("messageCreate", async (message) => {
if (message.content.startsWith("!ask")) {
const prompt = message.content.substring(message.content.indexOf(' ') + 1);
const answer = await ask(prompt);
message.channel.send(answer);
}
});
client.login(TOKEN);

Nous avons rajouté la dépendance à ai.js et modifier un peu le contenu de lecture du message pour plugger la demander à OpenID.

Testons !

Lancez votre bot via la commande suivante :

$ npm start

Puis dans votre channel, vous pouvez poser des questions à votre bot.

Voici quelques exemples.

!ask Crée une table des planètes du système solaire et de leur distance en unité astronomique
Mercure : 0,4 unité astronomique
Vénus : 0,7 unité astronomique
Terre : 1 unité astronomique
Mars : 1,3 unité astronomique
Jupiter : 5,2 unité astronomique
Saturne : 9,5 unité astronomique
Uranus : 19,2 unité astronomique
Neptune : 30,1 unité astronomique
Pluton : 39,5 unité astronomique
!ask Create a table of programming languages and their usage on github
Python - 10,000,000+
Java - 9,000,000+
JavaScript - 8,000,000+
Ruby - 5,000,000+
C++ - 3,000,000+
PHP - 2,000,000+
Objective C - 1,000,000+
C# - 1,000,000+
Shell - 1,000,000+
C - 800,000+
Perl - 600,000+
!ask What are trending topics in UI/UX?
1. The importance of designing for mobile first
2. The trend toward more minimalistic designs
3. The increasing use of emerging technologies such as Augmented Reality and Virtual Reality in UI/UX design
!ask Could you write a helloworld in Java?
class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World!"); } }
!ask Could you write a css animation for me?
Here's a simple CSS animation that shows a square moving from left to right:
@keyframes move-right {
from {
transform: translateX(0);
}
to {
transform: translateX(100px);
}
}
.moving-square {
width: 100px;
height: 100px;
background-color: red;
animation: move-right 2s linear;
}

Nous n’avons vu qu’un cas d’utilisation d’OpenAI parmi beaucoup d’autres. N’hésitez pas à jeter un œil sur cette page.

Vous trouverez les sources de cet article sur Github.

Comment je peux vous aider ?

Je reste à l’affût des dernières tendances et l’IA en fait partie.

Si vous avez un projet autour des chatbot et de l’IA, n’hésitez pas à me contacter.


Tags

#bot#openai
Previous Article
Comment le servant leadership peut-il dynamiser votre équipe ?

Catégories

Management
Tech
UI/UX

Publications liées

URL shortener avec Cloudflare Workers

08 sept. 2022
5 min

Liens rapides

Social Media