npm: 5.8.0
node: v10.15.2 - package managers may install v12.x.x which could cause issues
ffmpeg 4.1.3-0ubuntu1
- Install Node.js: https://nodejs.org/
- If using Windows, I generally install Cmder as a console emulator to avoid issues: http://cmder.net/
- Clone the repo or download a zip and unpackage it.
- Navigate to the root folder and in the console, type
npm install
- You should see packages beginning to install
- Once this is complete, go here: https://discordapp.com/developers/applications/me
- Log in or create an account
- Click New App
- Fill in App Name and anything else you'd like to include
- Click Create App
- This will provide you with your Client ID and Client Secret
- Click Create Bot User
- This will provide you with your bot Username and Token
- Take all of the information from the page and enter it into the
config/keys template.js
file, replacing the placeholders. - Navigate to the
config/plex template.js
file and replace the placeholders with your Plex Server information- To get your token, following the instructions here: https://support.plex.tv/hc/en-us/articles/204059436-Finding-an-authentication-token-X-Plex-Token
- To get your machineId or "machineIdentifier", follow the instructions here: https://support.plex.tv/hc/en-us/articles/201638786-Plex-Media-Server-URL-Commands
- In the first example under "Base Server Capabilities", you can see the information returned when you type
http://[PMS_IP_Address]:32400/?X-Plex-Token=YourTokenGoesHere
into your address bar of a web browser. Copy everything between the quotes for the parameter "machineIdentifier" and paste it into the "machineId" property inconfig/plex template.js
- In the first example under "Base Server Capabilities", you can see the information returned when you type
- The identifier, product, version, and deviceName can be anything you want
- The last thing you want to do locally is rename the config files to
plex.js
andkeys.js
which should be ignored by git to protect your privacy. - Once you have the configs set up correctly, you'll need to authorize your bot on a server you have administrative access to. For documentation, you can read: https://discordapp.com/developers/docs/topics/oauth2#bots. The steps are as follows:
- Go to
https://discordapp.com/api/oauth2/authorize?client_id=[CLIENT_ID]&scope=bot&permissions=1
where [CLIENT_ID] is the Discord App Client ID - Select Add a bot to a server and select the server to add it to
- Click Authorize
- You should now see your bot in your server listed as Offline
- Go to
- To bring your bot Online, navigate to the root of the app (where
index.js
is located) and in your console, typenode index.js
- This will start your server. The console will need to be running for the bot to run.
If I am missing any steps, feel free to reach out or open an issue/bug in the Issues for this repository.
- Join a Discord voice channel.
- Upon playing a song, the bot will join your channel and play your desired song.
!clear <number of messages>
: removes messages within the last 14 days up to the number specified!shutdown
: shuts the bot down if the user is an admin!ping
: returnspong
and logs the bots pings!leave
: makes the bot leave the voice channel if its connected to one!join
: makes the bot join the user's voice channel if they are connected to one
!plexTest
: a test to see make sure your Plex server is connected properly!clearqueue
: clears all songs in queue!nextpage
: get next page of songs if desired song is not listed!pause
: pauses current song if one is playing!play <query to search for>
: bot will join voice channel and play song if one song available. if more than one, bot will return a list to choose from!playsong <song number>
: plays a song from the generated song list!playa <album>
: plays an album!playartist <artist>
: play an entire discography!removesong <song queue number>
: removes song by index from the song queue!resume
: resumes song if previously paused!skip
: skips the current song if one is playing and plays the next song in queue if it exists!stop
: stops song if one is playing!viewqueue
: displays current song queue
Update the config\keys template.js
file with your information:
module.exports = {
'clientId' : 'DISCORD_CLIENT_ID',
'clientSecret' : 'DISCORD_CLIENT_SECRET',
'username' : 'DISCORD_BOT_USERNAME',
'botToken' : 'DISCORD_BOT_TOKEN',
};
And update the config\plex template.js
file with your Plex information:
module.exports= {
'hostname' : 'PLEX_LOCAL_IP',
'port' : 'PLEX_LOCAL_PORT'
'username' : 'PLEX_USERNAME',
'password' : 'PLEX_PASSWORD',
'token' : 'PLEX_TOKEN',
'machineId' : 'PLEX_MACHINEID',
'managedUser' : 'PLEX_MANAGED_USERNAME',
'options' : {
'identifier': 'APP_IDENTIFIER',
'product' : 'APP_PRODUCT_NAME',
'version' : 'APP_VERSION_NUMBER',
'deviceName': 'APP_DEVICE_NAME',
'platform' : 'Discord',
'device' : 'Discord'
}
};
If you see any bugs or have any suggestions, use the issue tracker. Thanks!
- Make !nextpage count continue to increase rather than restarting each page
- move to next gen javascript w/babel
- use uri/headers for plex.query as shown at end
- albums queuing selection
- artist queuing
- read up on youtube api - Rhythm-Bot on github
- direct file playing - dispatcher = connection.playArbitraryInput(url).on('end', () => ...
- url command
- retype readme and add a license
- separate commands into js files - partially done
- make code look less shitty
- pulling of lyrics
- fix
found = false
inbot.js
- add timing to shutdown command and
shutdown now
to shutdown immediately, possibly -r to restart
- handle case where user types
!play
when another song is playing - fix !stop again
- make playlists
- albums queuing
- randomizing queue:
!shuffle
- add default value to
clear
to prevent NaN error
return api.query({ uri: '/', extraHeaders: { 'X-TEST-HEADER': 'X-TEST-HEADER-VAL' } }).then(result => {
expect(result).to.be.an('object');
nockServer.done();
});