Bonjour, je suis un petit développeur qui a construit un petit bot discord. Je le code en javascrip avec Visual Studio Code et je tente de l'héberger avec Heroku.
Mais malheureusement les problèmes commencent. Mon bot fonctionne totallement en debug sur VSC mais non pas sur l'hébergement fait de Héroku.
Je vous laisse si dessous le code de chaque dossier (avec le token caché bien sur). Je crois que Heroku ne host pas vraiment bien (sachant que certaines commande sont désactivés par Héroku mais non par le debug de VSC).
Index.js :
const config = require('./config.json');
const prefix = "!";
const ytdl = require("ytdl-core");
require("dotenv").config();
const client = new Discord.Client();
const queue = new Map();
client.login("TOKEN");
client.once("ready", () => {
console.log("Ready!");
client.user.setActivity("Developped by Aiiryy⌛");
});
client.once("reconnecting", () => {
console.log("Reconnecting!");
});
client.once("disconnect", () => {
console.log("Disconnect!");
});
client.on("message", async message => {
if (message.author.bot) {
return;
}
if (!message.content.startsWith(prefix)) {
return;
}
const serverQueue = queue.get(message.guild.id);
if (message.content.startsWith(`${prefix}play`)) {
execute(message, serverQueue); // On appel execute qui soit initialise et lance la musique soit ajoute à la queue la musique
return;
}
else if (message.content.startsWith(`${prefix}skip`)) {
skip(message, serverQueue); // Permettra de passer à la musique suivante
return;
}
else if (message.content.startsWith(`${prefix}stop`)) {
stop(message, serverQueue); // Permettra de stopper la lecture
return;
}
else {
message.channel.send("You need to enter a valid command!");
}
});
async function execute(message, serverQueue) {
const args = message.content.split(" "); // On récupère les arguments dans le message pour la suite
const voiceChannel = message.member.voice.channel;
if (!voiceChannel) // Si l'utilisateur n'est pas dans un salon vocal
{
return message.channel.send(
"Vous devez être dans un salon vocal!"
);
}
const permissions = voiceChannel.permissionsFor(message.client.user); // On récupère les permissions du bot pour le salon vocal
if (!permissions.has("CONNECT") || !permissions.has("SPEAK")) { // Si le bot n'a pas les permissions
return message.channel.send(
"J'ai besoin des permissions pour rejoindre le salon et pour y jouer de la musique!"
);
}
const songInfo = await ytdl.getInfo(args[1]);
const song = {
title: songInfo.videoDetails.title,
url : songInfo.videoDetails.video_url,
};
if (!serverQueue) {
const queueConstruct = {
textChannel : message.channel,
voiceChannel: voiceChannel,
connection : null,
songs : [],
volume : 0.00000000001,
playing : true,
};
// On ajoute la queue du serveur dans la queue globale:
queue.set(message.guild.id, queueConstruct);
// On y ajoute la musique
queueConstruct.songs.push(song);
try {
// On connecte le bot au salon vocal et on sauvegarde l'objet connection
var connection = await voiceChannel.join();
queueConstruct.connection = connection;
// On lance la musique
play(message.guild, queueConstruct.songs[0]);
}
catch (err) {
//On affiche les messages d'erreur si le bot ne réussi pas à se connecter, on supprime également la queue de lecture
console.log(err);
queue.delete(message.guild.id);
return message.channel.send(err);
}
}
else {
serverQueue.songs.push(song);
console.log(serverQueue.songs);
return message.channel.send(`${song.title} has been added to the queue!`);
}
}
function skip(message, serverQueue) {
if (!message.member.voice.channel) // on vérifie que l'utilisateur est bien dans un salon vocal pour skip
{
return message.channel.send(
"Vous devez être dans un salon vocal pour passer une musique!"
);
}
if (!serverQueue) // On vérifie si une musique est en cours
{
return message.channel.send("Aucune lecture de musique en cours !");
}
serverQueue.connection.dispatcher.end(); // On termine la musique courante, ce qui lance la suivante grâce à l'écoute d'événement
// finish
}
function stop(message, serverQueue) {
if (!message.member.voice.channel) // on vérifie que l'utilisateur est bien dans un salon vocal pour skip
{
return message.channel.send(
"Vous devez être dans un salon vocal pour stopper la lecture!"
);
}
if (!serverQueue) // On vérifie si une musique est en cours
{
return message.channel.send("Aucune lecture de musique en cours !");
}
serverQueue.songs = [];
serverQueue.connection.dispatcher.end();
}
function play(guild, song) {
console.log(song);
const serverQueue = queue.get(guild.id); // On récupère la queue de lecture
if (!song) { // Si la musique que l'utilisateur veux lancer n'existe pas on annule tout et on supprime la queue de lecture
serverQueue.voiceChannel.leave();
queue.delete(guild.id);
return;
}
const dispatcher = serverQueue.connection
.play(ytdl(song.url, { filter: 'audioonly' }))
.on("finish", () => { //
serverQueue.songs.shift(); //
play(guild, serverQueue.songs[0]);
})
.on("error", error => console.error(error));
dispatcher.setVolume(0.1);
serverQueue.textChannel.send(`Démarrage de la musique: **${song.title}**`);
}
Pour le config.json :
"prefix": "!",
"token": "TOKEN"
}
et ceci dans le procfile (important pour pouvoir host sur Héroku)
worker: node index.js
Si je pourrais enfin trouver la solution pour pouvoir lancer mon bot discord musique à temps plein.. Merci beaucoup d'avance pour vos réponses. Je suis à disposition pour répondre à d'eventuelles questions.
const Discord = require("discord.js");
)Oui c'est une erreur de ma part sur le post je l'ai belle et bien mit, et le P majuscule est bien mis sur le dossier
Voici un lien github avec le code tout entier sans faute avec les tokens retirés https://github.com/Aiiryy/testbotcode.git
je suis bête... normalement ça devrait être bon https://github.com/Aiiryy/testbotcode.git
Euh... y'a des petits problèmes :
ok.env
, c'est juste .env
qu'il devrait s'appellerclient.on(...)
et pas client.once(...)
const config = require("./config.json")
mais tu ne l'utilise pas. Utilise config.token
pour le token (ou process.env.TOKEN
, si tu mets ton token dans le .env
- recommandé) et config.prefix
pour le préfix, etc.Bonjour, merci de vouloir m'aider, malgré toutes les indications que j'ai suivis, le bot a toujours le meme problème. Le host fonctionne et mon bot se connecte bien mais aucun son ne sort du bot lorsque qu'il est hebergé (alors que avec le Debug de VSC tout marche bien). j'ai mis a jour le code du github si vous voulez reverifier. Merci de votre aide
Bonjour,
Pour une meuilleure utilisation, vous pouvez utiliser Glitch (éditeur HTML/CSS/JS en ligne avec sauvegardes) + UptimeRobot.
PS : si y'a besoin de plus d'explications, me mp sur DIscord : UnMecBanal#1117
PS 2 : j'ai fait des pull requests sur GitHub, à vous de voir ;)