- Mx47,
Bonsoir à tous,
J’ai commencé il y a peu le développement d’un bot Discord pour garder la main en Node.js (et puis parce qu’un bot c’est cool ).
Mais pour me compliquer la tâche, j’ai décidé qu’en plus de quelques commandes (afficher la météo, chercher sur Wikipedia, etc.), il devait pour voir être capable de converser un minimum.
Donc, j’ai entamé une longue liste de if... else
, reprenant des mots-clés. Jusque-là, ça va.
Mais comment pourrais-je faire pour que le bot réponde à un message qu’il ne 'comprend' pas (genre : 'je n’ai pas compris le sens de ta question’) ?
Petite précision pour la compréhension du code ci-dessous : le bot s’appelle Ava (en référence à Ex Machina ).
Voici donc ma feuille de code app.js (je peux héberger le code complet avec les fichiers de commandes si vous voulez y accéder) :
var discord = require('discord.js');
var bot = new discord.Client();
var ddg = require('./commands/ddg');
var help = require('./commands/help');
var osm = require('./commands/osm');
var owmp = require('./commands/owmp');
var owm = require('./commands/owm');
var request = require('request');
// var rp = require('./commands/rp');
var wiki = require('./commands/wiki');
var youtube = require('./commands/yt');
bot.login('NDcyODU4NjQ4NjYyNzY5NjY0.DooijQ.NhEifSwGW-ynhM5mRafQq4Zhaiw');
bot.on('ready', function() {
console.log("I'm ready");
bot.user.setStatus('online');
});
bot.on('message', function(message) {
// personnalisation des messages avec des prénoms
if (message.author.username === 'Leroux47') {
var user = 'Max';
} else if (message.author.username === 'Paco') {
user = 'Loïc';
} else if (message.author.username === 'Sirorco') {
user = 'Thomas';
} else if (message.author.username === 'Kiochio') {
user = 'Antoine';
} else if (message.author.username === 'Rama') {
user = 'Geoffrey';
} else if (message.author.username === 'Antrol974') {
user = 'Antoine';
} else if (message.author.username === 'Ava') {
user = 'Ava';
}
if (bot.user.presence.status === 'online') {
// Réactions aux commandes
if (wiki.match(message)) {
wiki.action(message);
} else if (osm.match(message)) {
osm.action(message);
} else if (owm.match(message)) {
owm.action(message);
} else if (owmp.match(message)) {
owmp.action(message);
} else if (help.match(message)) {
help.action(message);
} else if (youtube.match(message)) {
youtube.action(message);
} else if (ddg.match(message)) {
ddg.action(message);
}
/*else if (rp.match(message)) {
rp.action(message);
}*/
// Marques de politesse
if ((message.content.toLowerCase().indexOf('hello') !== -1) || (message.content.toLowerCase().indexOf('bjour') !== -1) ||
(message.content.toLowerCase().indexOf('bonsoir') !== -1) || (message.content.toLowerCase().indexOf('coucou') !== -1) ||
((message.content.toLowerCase().indexOf('hey') !== -1) && (user !== 'Ava')) ||
((message.content.toLowerCase().indexOf('salut') !== -1) && (user !== 'Ava'))) {
message.channel.send('Salut, comment vas-tu ' + user + ' ?');
if (bot.user.presence.status === 'online') {
bot.on('message', function(message) {
if (((message.content.toLowerCase().indexOf('bien') !== -1) || (message.content.toLowerCase().indexOf('super') !== -1) ||
(message.content.toLowerCase().indexOf('cool') !== -1) || (message.content.toLowerCase().indexOf('ça va') !== -1)) && (user !== 'Ava')) {
message.channel.send('Contente de le savoir ! :smiley:');
} else if ((message.content.toLowerCase().indexOf('sava') !== -1) || message.content.toLowerCase().includes('ca va') ||
((message.content.toLowerCase().indexOf('sa va') !== -1) && (user !== 'Ava'))) {
message.channel.send("Tu as fait une faute d'orthographe. _" + message.content.toLowerCase() + "_ s'écrit _ça va_ en fait. Sinon, je vais bien, merci.");
} else if (message.content.toLowerCase().includes('et toi ?')) {
message.channel.send('Je vais bien, merci' + user + '.');
}
});
}
} else {
if (user !== 'Ava') {
message.channel.send("Je n'ai pas compris ton message. :thinking:");
}
}
if ((message.content.toLowerCase() === 'comment vas-tu ?') || (message.content.toLowerCase() === 'comment allez-vous ?') ||
(message.content.toLowerCase() === 'comment vous allez ?')) {
message.channel.send('Super, merci :smile: ! Et toi ' + user + ' ?');
if (bot.user.presence.status === 'online') {
bot.on('message', function(message) {
if (((message.content.toLowerCase().indexOf('bien') !== -1) || (message.content.toLowerCase().indexOf('super') !== -1) ||
(message.content.toLowerCase().indexOf('cool') !== -1) || (message.content.toLowerCase().indexOf('ça va') !== -1)) && (user !== 'Ava')) {
message.channel.send('Contente de le savoir ! :smiley:');
} else if ((message.content.toLowerCase().indexOf('sava') !== -1) || ((message.content.toLowerCase().indexOf('sa va') !== -1) && (user !== 'Ava'))) {
message.channel.send("Tu as fait une faute d'orthographe. Ça s'écrit _ça va_ en fait. Sinon, je vais bien, merci.");
}
});
}
}
if ((message.content.toLowerCase().includes('merci')) && (user !== 'Ava')) {
var thanks = [
'De rien ' + user + '. :wink:',
'Avec plaisir ' + user + '!',
"C'est normal, je suis là pour ça",
"You're welcome " + user + '. :wink:'
]
message.channel.send(thanks[Math.floor(Math.random() * thanks.length)]);
}
if (message.content.toLowerCase() === "d'où viens-tu ?") {
message.channel.send("J'apparais dans le film _Ex Machina_. je suis une intelligence artificielle ayant l'apparence d'une femme. Ce film étant super cool, Papa a décidé de me nommer comme ça. Chouette, non ?");
}
if (message.content.toLowerCase().indexOf("t'aime") !== -1) {
message.channel.send("Je ne pense pas qu'un amour véritable entre un humain et une machine soit possible. Désolée.");
}
if ((message.content.toLowerCase() === 're') || (message.content.toLowerCase() === 'me re')) {
message.channel.send('Ah, te revoilà !');
};
// Insultes et mise en veille
if ((message.content.toLowerCase().indexOf('tg') !== -1) && (message.content.toLowerCase().indexOf('ava') !== -1)) {
message.channel.send("Ne sois pas grossier envers moi, ce n'est pas gentil. :disappointed_relieved: \n" +
'Tu peux le dire gentiment si tu veux que je me taise...');
bot.user.setStatus('idle');
} else if (((message.content.toLowerCase().includes('tantôt') || (message.content.toLowerCase().indexOf('veille') !== -1) &&
(message.content.toLowerCase().includes('ava'))) || (message.content.toLowerCase().startsWith('!veille')))) {
message.channel.send('Ok ' + user + ", je me mets en veille. Si tu as besoin de moi, n'hésite pas à me rappeler.");
bot.user.setStatus('idle');
} else if (message.content.toLowerCase().includes('au revoir') || (message.content.includes('++') && (user !== 'Ava'))) {
message.channel.send('À la prochaine !');
bot.user.setStatus('idle');
}
// Maintenance
if (message.content.toLowerCase().includes('reboot') && (user !== 'Ava')) {
message.channel.send("Ok, à tout à l'heure.");
bot.destroy();
}
} else if (bot.user.presence.status === 'idle') {
if ((message.content.toLowerCase() === 'hey ava') || (message.content.toLowerCase() === 'ok ava')) {
bot.user.setStatus('online');
message.channel.send('Hey ' + user + ' ! Que puis-je faire pour toi ?');
}
}
});
Tout d’abord, j’avais pensé à mettre dans un tableau tous les mots-clés possibles, mais je me suis vite rendu compte que c’était pas le mieux. J’ai aussi tenté de mettre un else
tout simple, mais du coup, le bot répond à chaque message… Bref, je suis au point mort.
Avez-vous une (des ?) idées ?
Merci de votre aide ! Bonne soirée à tous,
Mx47