const Discord = require('discord.js');
const YTDL = require('ytdl-core');
const TOKEN = "NDA5OTc4Mjg2NjkzNjc5MTA0.DVmdow.yI4l0Z2UtZ2RgSBJqeWjkUtg7I0";
const PREFIX = "dm.";
function play(connection, message) {
var server = servers[message.guild.id]
server.dispatcher = connection.playStream(YTDL(server.queue[0], {filter: "audioonly"}));
server.queue.shift()
server.dispatcher.on("end", function() {
if (!server.queue[0]) play(connection, message);
else connection.disconnect();
});
}
const bot = new Discord.Client()
const servers = {};
bot.on("ready", function() {
console.log("I'm ready to play music !")
bot.user.setPresence({game: {name: Bot In Development | Users: ${bot.users.size},type: 0}});
bot.on('message', function(message) {
if (message.author.equals(bot.user)) return;
if (!message.content.startsWith(PREFIX)) return;
var args = message.content.substring(PREFIX.length).split(" ");
switch (args[0].toLowerCase()) {
case "play":
if (args[1]) {
message.channel.send('Please provide a link!');
return;
}
if (!message.member.voiceChannel) {
message.channel.send('You must be in a voice channel!');
return;
}
if(servers[message.guild.id]) servers[message.guild.id] = {
queue: []
};
var server = servers[message.guild.id]
if (!message.guild.voiceConnection) message.member.voiceChannel.join().then(function(connection) {
play(connection, message);
});
break;
case "skip":
var server = servers[message.guild.id];
if (server.dispatcher) server.dispatcher.end();
break;
case "stop":
var server = servers[message.guild.id];
if(!message.guild.voiceConnection) message.guild.voiceConnection.disconnect();
break;
}
})})
bot.login(TOKEN);
@GamerXD4 I would reset your token IMMIDEATLY as you've just given it away on a public platform, and users will abuse it by destroying anything the bot is connected on.
With that out of the way, make sure "server.queue[0]" is returning a valid YouTube URL. Try using console.log(server.queue[0]); before running it and send the results here.
Here's his code cleaned up and put into one code block:
const Discord = require('discord.js');
const YTDL = require('ytdl-core');
const TOKEN = "x";
const PREFIX = "dm.";
function play(connection, message) {
var server = servers[message.guild.id];
server.dispatcher = connection.playStream(YTDL(server.queue[0], {
filter: "audioonly"
}));
server.queue.shift()
server.dispatcher.on("end", function() {
if (!server.queue[0]) play(connection, message);
else connection.disconnect();
});
}
const bot = new Discord.Client()
const servers = {};
bot.on("ready", function() {
console.log("I'm ready to play music !")
bot.user.setPresence({
game: {
name: Bot In Development | Users: $ {
bot.users.size
},
type: 0
}
});
bot.on('message', function(message) {
if (message.author.equals(bot.user)) return;
if (!message.content.startsWith(PREFIX)) return;
var args = message.content.substring(PREFIX.length).split(" ");
switch (args[0].toLowerCase()) {
case "play":
if (args[1]) {
message.channel.send('Please provide a link!');
return;
}
if (!message.member.voiceChannel) {
message.channel.send('You must be in a voice channel!');
return;
}
if (servers[message.guild.id]) servers[message.guild.id] = {
queue: []
};
var server = servers[message.guild.id]
if (!message.guild.voiceConnection) message.member.voiceChannel.join().then(function(connection) {
play(connection, message);
});
break;
case "skip":
var server = servers[message.guild.id];
if (server.dispatcher) server.dispatcher.end();
break;
case "stop":
var server = servers[message.guild.id];
if (!message.guild.voiceConnection) message.guild.voiceConnection.disconnect();
break;
}
})
})
bot.login(TOKEN);
A few of your problems
if (args[1]) {
message.channel.send ('Please provide a link!');
return;
}
=> if a link is provided, respond there is no link
if (server.dispatcher)
=> server can be undefined when skipping
if (servers[message.guild.id]) servers[message.guild.id] = {
queue: []
};
=> better add it when it's not in there
const servers = {};
=> better use a Map for this
UR never pushing items to ur music q nether validating/handling ytdl's video not found errors
server.dispatcher.on("end", function() {
if (!server.queue[0]) play(connection, message);
else connection.disconnect();
});
=> when we have nothing in the q play it?
@FireController1847 Still say's 'Please provide a link'
@GamerXD4 Please ask for any further help with your code here.
@fent Requesting a close of this issue as it shouldn't be handled here, not an issue caused by the module.
Thanks you two for responding