DEV Community

Writing a music command for your discord.js bot (Updated March 2020)

Nir on May 25, 2019

Edit Nov 20: This guide is outdated because the play command code changes all the time. I recommend cloning my bot which is on GitHub if you're loo...
Collapse
 
syariefhdyttt profile image
Press F

Hello Nir, I got a problem at "Something went wrong with searching the video you requested :("

Collapse
 
galnir profile image
Nir

Did you generate an API key from youtube? And did you clone my repo or copy code?

Collapse
 
syariefhdyttt profile image
Press F

I play the song and the bot suddenly exits the voice channel and says "Cannot play song"

Thread Thread
 
syariefhdyttt profile image
Press F • Edited

can't play playlist and bots don't join on Voice Channel
thepracticaldev.s3.amazonaws.com/i...

Thread Thread
 
galnir profile image
Nir

So you did something wrong, did you generate an API key from youtube?

Thread Thread
 
syariefhdyttt profile image
Press F

yes i generated API key from youtube

Thread Thread
 
galnir profile image
Nir

Did you install everything I listed? Git, ffmpeg etc

Thread Thread
 
syariefhdyttt profile image
Press F

I installed everything in your package.json, and I didn't change it at all

Thread Thread
 
galnir profile image
Nir • Edited

I mean git, ffmpeg and python 2.7
It's in the prerequisites

Thread Thread
 
syariefhdyttt profile image
Press F

I have not installed ffmpeg and python2.7 on my computer, and I only install git

Thread Thread
 
syariefhdyttt profile image
Press F

What should I do after installing ffmpeg, python 2.7 and git?

Thread Thread
 
galnir profile image
Nir

You need to install them all, doesn't matter in which order

Thread Thread
 
syariefhdyttt profile image
Press F

I will try if there is a problem I will call you back, Thank you for the help.

Thread Thread
 
syariefhdyttt profile image
Press F

hello Nir, now the problem is here and I try to install node-opus in visual studio which is always error

thepracticaldev.s3.amazonaws.com/i...

Collapse
 
himeskitten profile image
Hime's Kitten • Edited

Hello Nir
Having error
TypeError: Cannot read property 'isTriviaRunning' of undefined

Collapse
 
galnir profile image
Nir

Did you extend the Guild class in index.js?

Collapse
 
zelphy profile image
Zelphy

I seem to have an issue with extend for the guild class line.
"Structures.extend('8', Guild => {
^

TypeError: Cannot read property 'extend' of undefined"

Thread Thread
 
galnir profile image
Nir

Did you import Structures like I did above?

const { Structures } = require('discord.js');

Thread Thread
 
zelphy profile image
Zelphy

Ya, It's in line 2, But when I 'node .' it still doesn't run due to the error

Thread Thread
 
galnir profile image
Nir

Did you install the master branch of discord.js?

npm install discord.js#master

Thread Thread
 
zelphy profile image
Zelphy

I tried to but it says that the '#' is an invalid character or smth

Thread Thread
 
galnir profile image
Nir • Edited

Sorry, it's

npm install discordjs/discord.js

And you need git in order for this to work

Thread Thread
 
syariefhdyttt profile image
Press F

hello nir,
I want to ask what is the purpose of git? and how to install it. sorry i am a beginner

Collapse
 
boldsen profile image
Boldsen

I get this error when using a link: 'No filter selected. Expected one of: idParam, myRated, chart, id'

Works fine when using the search function, only happens with links

Collapse
 
galnir profile image
Nir

What link did you try?

Collapse
 
boldsen profile image
Boldsen

any youtube link, when you do !play it gives this error. But not if you just do !play

Thread Thread
 
galnir profile image
Nir • Edited

This error is on your end, it's a youtube API error. I'll try to figure out why you're getting it

Did you modify any code? Also check if your dependencies are the same version as the repo's

Thread Thread
 
boldsen profile image
Boldsen

Didn't modify anything no, what do you mean with repo?

Thread Thread
 
galnir profile image
Nir

Repository. Compare your package.json with the package.json on my repo: github.com/galnir/Master-Bot

Thread Thread
 
boldsen profile image
Boldsen

my ytdl-core is 0.29.7 instead of 0.29.5 but youtube api and discord js + commando are the same

Thread Thread
 
boldsen profile image
Boldsen

Found the issue, was missing a / or \ somewhere in the query .split

Collapse
 
moritzruth profile image
Moritz Ruth

Great article!

Collapse
 
thiccswwss profile image
thiccswwss • Edited

Hey, everything seems to be working, but as soon as the bot joins the vc, it automatically leaves

Collapse
 
galnir profile image
Nir

Yeah there's an issue now with ytdl-core/YouTube

Collapse
 
thiccswwss profile image
thiccswwss

Is there any way to get around the issue, or is it like that until youtube fixes it?

Thread Thread
 
galnir profile image
Nir

Try removing line 252 in play.js
If that solves it tell me, not near a pc atm

Thread Thread
 
thiccswwss profile image
thiccswwss

I deleted the line, there seems to still be an issue, is this the right bit of code?
quality: 'highestaudio',

Thread Thread
 
galnir profile image
Nir

Yeah so there's an issue with ytdl, I just saw more ppl reporting it

Collapse
 
galnir profile image
Nir • Edited

Update
Hey, updating ytdl-core to the latest version solves that error.

npm install ytdl-core@latest

Collapse
 
gameskedley profile image
Kedley_Games

I cloned your bot and installed the necessary programs. I get this error now, and can't seem to track it down.

An error occurred while running the command: TypeError: Cannot read property 'duration' of undefined

Seems to occur with whichever youtube link I enter, whether a long or short video.
Thoughts appreciated.

Collapse
 
galnir profile image
Nir

Hey, please open an issue in the bot's repo on Github and fill the issue template
github.com/galnir/Master-Bot

Collapse
 
yoshiyukiadly profile image
يوشيىوکي عدلي • Edited

UnhandledPromiseRejectionWarning: DiscordAPIError: Invalid Form Body

hi sorry to disturb, after install git it able to run , and when trying make it online, it return error as above shown in image. is ti means my discord id in config.json is wrong?

TypeError [CLIENT_MISSING_INTENTS]: Valid intents must be provided for the Client.
also got this error after install master discord.js

Collapse
 
valentijnslijper profile image
ValentijnSlijper

Upon running the node.js and fixing all the missing modules. I get this error and I can't find a solution.

First, the bot starts without a problem but after trying to play a song the bot joins the channel and crashes with the error: secretbox.methods.close is not a function.

Any help is appreciated,
Thanks in advance.


D:\Git\Private\Master-Bot-master>node index.js
Ready!
D:\Git\Private\Master-Bot-master\node_modules\discord.js\src\client\voice\dispatcher\StreamDispatcher.js:262
return [secretbox.methods.close(buffer, this._nonceBuffer, secret_key), this._nonceBuffer.slice(0, 4)];
^

TypeError: secretbox.methods.close is not a function
at StreamDispatcher._encrypt (D:\Git\Private\Master-Bot-master\node_modules\discord.js\src\client\voice\dispatcher\StreamDispatcher.js:262:33)
at StreamDispatcher._createPacket (D:\Git\Private\Master-Bot-master\node_modules\discord.js\src\client\voice\dispatcher\StreamDispatcher.js:281:49)
at StreamDispatcher._playChunk (D:\Git\Private\Master-Bot-master\node_modules\discord.js\src\client\voice\dispatcher\StreamDispatcher.js:253:27)
at StreamDispatcher._write (D:\Git\Private\Master-Bot-master\node_modules\discord.js\src\client\voice\dispatcher\StreamDispatcher.js:107:10)
at doWrite (_stream_writable.js:403:12)
at writeOrBuffer (_stream_writable.js:387:5)
at StreamDispatcher.Writable.write (_stream_writable.js:318:11)
at SingleSilence.ondata (_stream_readable.js:717:22)
at SingleSilence.emit (events.js:315:20)

at SingleSilence.Readable.read (_stream_readable.js:506:10)

Collapse
 
ogskies profile image
OGSkies

Hello Nir, I know everyone says that word but Idk what to say other than that
I checked your bot and used it but there is a small problem, is that it doesn't enter the VC and it doesn't
responds to me ever, I added every thing and the API, youtube API summary I added everything but the bot doesn't respond to me so if you can help I would appreciate that

Collapse
 
galnir profile image
Nir

Make sure you installed all the requirements correctly(python 2.7, ffmpeg) and also make sure that running 'npm i node-opus' doesn't fail

Collapse
 
anjayanimabar12 profile image
Hezza

Hello Nir, I got a problem at line 90 like these

const playlist = await youtube.getPlaylist(query); // get playlist data
^^^^^

SyntaxError: await is only valid in async function
pls react this pls...

Collapse
 
galnir profile image
Nir

It shouldn't happen unless you copied code over to another bot. If you want this to work perfectly, clone the master-bot repo and follow the instructions on the repo's page. Also this guide is outdated so it will not work well

Collapse
 
zeus1017 profile image
zeus1017
          const video = await youtube.getVideoByID(id);
                        ^^^^^

SyntaxError: await is only valid in async function
?[90m at wrapSafe (internal/modules/cjs/loader.js:1072:16)?[39m
?[90m at Module._compile (internal/modules/cjs/loader.js:1122:27)?[39m
?[90m at Object.Module._extensions..js (internal/modules/cjs/loader.js:1178:10)?[39m
?[90m at Module.load (internal/modules/cjs/loader.js:1002:32)?[39m
?[90m at Function.Module._load (internal/modules/cjs/loader.js:901:14)?[39m
?[90m at Module.require (internal/modules/cjs/loader.js:1044:19)?[39m
?[90m at require (internal/modules/cjs/helpers.js:77:18)?[39m

-can you plz help me with that?

Collapse
 
ogskies profile image
OGSkies

Hello Nir, I know everyone says that word but Idk what to say other than that
I checked your bot and used it but there is a small problem, is that it doesnt enter the vc and it doesnt
responds to me ever, i added every thing and the api, youtube api summary i added everything but the bot doesnt reponds to me so if you can help i would apreciate that

Collapse
 
tigulima profile image
Te Rasgo Shiny

Hi Nir! Thx for this awesome work u r sharing. But I'd still need some more of ur help... I installed discord.js-commendo but it won't recognize it, leaving me with the problem:

"Error: cannot find module 'discord.js-commando'"

I've been searching what could it be for the last couple of days and I've got nothing... What should I do?

Collapse
 
galnir profile image
Nir

I think you misspelled the name of the package, it's as the error says 'discord.js-commando' and not 'commendo'.
It shouldn't throw any errors, all you need to do is install it in the right directory using npm or yarn

Collapse
 
satanis0504 profile image
Satanis0504

Hello, I am a beginner. After basically following your steps and using command !play I have this error and my bot says this:

An error occurred while running the command: TypeError: Cannot read property 'isTriviaRunning' of undefined
You shouldn't ever receive an error like this.
Please contact [my discord id]

Collapse
 
galnir profile image
Nir

This usually happens if you copy code instead of cloning the repository. Make sure you clone it using Git and follow the instructions in the repository

Collapse
 
neeeeeeedonuts profile image
NeeeeeeeDonuts

Hello Nir, I imported the packages and got This Error.

TypeError: Cannot read property 'extend' of undefined

Please help!

Collapse
 
galnir profile image
Nir

You did not install the master version of discord.js

enter
npm i discordjs/discord.js

Collapse
 
webcreate794 profile image
WebCreate794

Current you just told us where to put those commands because nothing works for me

Collapse
 
sahhas16 profile image
sahhas16

hi nir, whenever i give a command the bot says the same response 3-5 times. Pls helpp

Collapse
 
iseizuu profile image
Vegui Izumi

how to auto play song without choosing?

Collapse
 
samccoelho profile image
Samuel Coelho

Hey! I'm having a lot of problems with the audio quality ('play' command), is there anything I can do to fix? I know it isn't my internet because this happens with any video and on any network.

Collapse
 
crazymedic profile image
crazy-medic

Hello Nir, i get a problem on the line => const thumbnail = video.thumbnails.high.url; says url is not defined

Collapse
 
galnir profile image
Nir

Did you install everything I listed?

Collapse
 
crazymedic profile image
crazy-medic • Edited

yes it works fine without that line but once that line is added it gives that error

edit - i had to replace the variable of the embed with the yt link for imgs - i.ytimg.com/vi/${song.id}/hqdefaul... for getting the thumbnail instead of that declaration and it still worked fine

Thread Thread
 
galnir profile image
Nir

I don't know why you're getting thumbnails errors, I run the bot on 2 machines and never got that error

Collapse
 
boldsen profile image
Boldsen

If the bot is playing on server 1, and i use the play command on server 2, it will add it to the queue, and only join server 2 voice channel after it is done in server 1. How do i fix this?

Collapse
 
galnir profile image
Nir • Edited

This no longer happens. The bot supports playing on multiple guilds at a time.

Collapse
 
iasgamer profile image
iasgamer

TypeError: connection.play is not a function

Collapse
 
galnir profile image
Nir

Sorry for the late response.

This error is emitted because you are using the stable version of discord.js.
In order to use .play() you need to be on the master version

Collapse
 
auracle profile image
Auracle

tons of error, outdated sadly, good start tho gained time
i think

Collapse
 
galnir profile image
Nir

Can you elaborate what errors?

Collapse
 
galnir profile image
Nir

Try the solutions I provided in this issue:
github.com/galnir/Master-Bot/issue...

Collapse
 
ggtylera profile image
ggtylerr

Is there any way around ffmpeg? I'm trying to make it on repl.it but it seems like it doesn't support it :/

Collapse
 
galnir profile image
Nir

Nope :/