Node-ytdl-core: Says 'Please provide a link" after i put a link in?

Created on 5 Feb 2018  路  5Comments  路  Source: fent/node-ytdl-core

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);

not a bug

All 5 comments

@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);

None of this is related to ytdl-core but whatever

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

Was this page helpful?
0 / 5 - 0 ratings

Related issues

gohjoseph picture gohjoseph  路  4Comments

FireController1847 picture FireController1847  路  5Comments

HcgRandon picture HcgRandon  路  5Comments

arcovoltaico picture arcovoltaico  路  6Comments

r0hin picture r0hin  路  3Comments