- Mx47,
Bonjour à tous,
Je me suis lancé récemment dans le codage d’un bot audio pour Discord. J’utilise pour ce faire NodeJS et Discord.js. J’ai déjà un bon niveau en JavaScript.
J’ai commencé par coder deux commandes (play et stop, la base donc), qui fonctionnent bien. Elles permettent de streamer de l’audio depuis Youtube. Pour améliorer le bot, j’aimerais lui ajouter un système de playlist, mais je n’y arrive pas.
Voici mon code :
var discord = require('discord.js');
var bot = new discord.Client();
var ytdl = require('ytdl-core');
bot.login('ID');
bot.on('ready', function() {
console.log("R2-DJ is ready");
bot.user.setStatus('online');
});
bot.on('message', function(message) {
var answer = '';
var args = message.content.split(' ');
var queue = new Array();
function play(args) {
if (args[1].match(/https|http.*(^|=|\/)([0-9A-Za-z_-]{11})(\/|&|$|\?|#)/)) {
var id = args[1].match(/(^|=|\/)([0-9A-Za-z_-]{11})(\/|&|$|\?|#)/)[2];
let voiceChannel = message.guild.channels
.filter(function(channel) {
return channel.type === 'voice'
})
.first()
voiceChannel
.join()
.then(function(connection) {
let stream = ytdl(id, {
filter: 'audioonly'
});
message.delete();
var dispatcher = connection.playStream(stream);
var info = ytdl.getInfo(id, function(err, info) {
if (err) throw err;
answer = ` ▶ Tu écoutes actuellement ${'_' + info.title + '_'} (` + args[1] + `)`;
message.channel.send(answer);
});
dispatcher.on('end', function() {
voiceChannel.leave();
if (args[0] === '?play') {
message.channel.send('🎧 La musique est finie');
}
})
})
}
}
if (message.content.startsWith('?play')) {
play(args);
} else if (message.content.startsWith('?stop')) {
let voiceChannel = message.guild.channels
.filter(function(channel) {
return channel.type === 'voice'
})
.first()
voiceChannel.leave();
if (args[0] === '?stop') {
message.channel.send('⏹ Music stopped.');
}
} else if (message.content.startsWith('?add')) {
if (args[1].match(/https|http.*(^|=|\/)([0-9A-Za-z_-]{11})(\/|&|$|\?|#)/)) {
var id = args[1].match(/(^|=|\/)([0-9A-Za-z_-]{11})(\/|&|$|\?|#)/)[2];
} else {
message.channel.send('Blip bloup, tu n\'as pas entré une URL valide !');
}
queue.push(id);
console.log(queue);
var infoQueue = ytdl.getInfo(id, function(err, infoQueue) {
if (err) throw err;
message.channel.send(`${'_' + infoQueue.title + '_'} a été ajouté à la playlist !`);
});
} else if (message.content === '?queue') {
console.log(queue);
for (var i = 0; i < queue.length; i++) {
message.channel.send(i + 1 + '. ' + queue[i]);
}
} else if (message.content === '?save') {
// Sauvegarde la playlist dans un fichier
fs.writeFile('./playlist.txt', queue + '\n', function (err) {
if (err) throw err;
});
} else if ((message.content.startsWith('!')) && (user !== 'R2-DJ')) {
answer = 'Blip bloup Je ne comprends pas ta demande... ⚠. Vérifie ta syntaxe et recommence ' + user + '.';
}
// Le bot réagit si l'une des conditions est vérifiée
if ((answer !== '') && (user !== 'RD2-DJ')) {
// Si le bot n'a pas de réponse a donner, il dit qu'il ne comprend pas
message.channel.send(answer);
} else if ((answer === '') && (message.content.includes('@R2-DJ')) && (user !== 'R2-DJ')) {
message.channel.send("Erreur système : code d'erreur 1000, je n'ai pas compris ton message. ⚠");
}
});
J’ai créé une variable queue
, qui reprend tous les ID des vidéos Youtube ajoutées à la playlist, sous forme de tableau. L’ajout (via la commande ?add
) s’effectue correctement. mais lorsque je veux afficher la playlist (commande ?queue
), le console.log() me dit qu’elle est vide. J’en déduis donc que le contenu du tableau n’est pas sauvegardé, et je ne sais absolument pas pourquoi…
Sûrement une erreur de débutant .
Si vous avez une piste à me fournir, je suis preneur.
Merci et bonne fin de dimanche,
Mx47