- Node.js LTS or latest
- Java 13 (other versions have some issues with Lavalink)
After cloning the repository, navigate to the project's folder and run the command npm i
to install all Node.js module dependencies.
Create an application.yml file in the root directory of the project.
Download the latest Lavalink jar from here and place it in the project's root directory (same directory as application.yml).
Either from the official site or follow the tutorial for your distro.
Get brew, then enter 'brew install postgresql'.
Create a .env
file in the root directory of the project and copy the contents of .env.example
to it. Change 'john' and 'doe' to the name of your OS's user.
Getting Postgres and Prisma to work together on Windows is not worth the hassle. Create an account on heroku and follow these steps:
- Open the dashboard and click on 'New' > 'Create new app', give it a name and select the closest region to you then click on 'Create app'.
- Go to 'Resources' tab, under 'Add-ons' search for 'Heroku Postgres' and select it. Click 'Submit Order Form' and then do the same step again (create another postgres instance).
- Create a
.env
file in the root directory of the project and create 2 empty variables there:DATABASE_URL="" SHADOW_DB_URL=""
- Click on each 'Heroku Postgres' addon you created, go to 'Settings' tab > Database Credentials > View Credentials and copy the each one's URI to either
DATABASE_URL
orSHADOW_DB_URL
. - In your terminal, run
npx prisma db push
and then runnpx prisma migrate dev
. - Done!
brew install redis
.
Download from here.
Follow the instructions here.
After you're done installing all the dependencies and entering all tokens and env variables, run npx prisma migrate dev
Before running node index.js
, make sure to open a separate terminal in the root directory and run java -jar LavaLink.jar
Create a config.json
file inside the 'src' directory with the following tokens:
This is the minimum amount of settings that need to be set for the core part (music) of the bot to work.
Generate spotify client id and secret here
If you're running the bot using Docker, set lava_host's value to "lavalink" in config.json and in application.yml at line 3
{
"client_id": "the-bots-client-id",
"client_secret": "the-bots-client-secret",
"token": "Your-Bot-Token",
"lava_host": "0.0.0.0",
"lava_pass": "youshallnotpass",
"lava_port": 2333,
"lava_secure": false,
"invite_url": "discord-bot-invite",
"spotify_client_id": "get-it-from-spotify-dev",
"spotify_client_secret": "get-it-from-spotify-dev"
}
For full command support, including lyrics, GIFs, news, and others, - (which some of them are part of Features to be added back) - All of the following settings need to be added. You can also choose to add only the ones for the functionalities you want.
{
"invite": "false",
"geniusLyricsAPI": "genius-api-key",
"tenorAPI": "tenor-API-key",
"newsAPI": "news-api-key",
"rawgAPI": "rawg-api-key",
"twitchClientID": "twitch-client-id",
"twitchClientSecret": "twitch-client-secret"
}
NOTE: When setting "invite": true
, remember to enable the Public Bot option in the Discord Developer Portal.
A full list of commands for use with Master Bot
Command | Description | Usage |
---|---|---|
/play | Play any song or playlist from youtube, you can do it by searching for a song by name or song url or playlist url | /play darude sandstorm |
/pause | Pause the current playing song | /pause |
/resume | Resume the current paused song | /resume |
/leave | Leaves voice channel if in one | /leave |
/remove | Remove a specific song from queue by its number in queue | /remove 4 |
/queue | Display the song queue | /queue |
/shuffle | Shuffle the song queue | /shuffle |
/skip | Skip the current playing song | /skip |
/skipall | Skip all songs in queue | /skipall |
/skipto | Skip to a specific song in the queue, provide the song number as an argument | /skipto 5 |
/volume | Adjust song volume | /volume 80 |
/music-trivia | Engage in a music trivia with your friends. You can add more songs to the trivia pool in resources/music/musictrivia.json | /music-trivia |
/loop | Loop the currently playing song or queue | /loop |
/lyrics | Get lyrics of any song or the lyrics of the currently playing song | /lyrics song-name |
/now-playing | Display the current playing song with a playback bar | /now-playing |
/move | Move song to a desired position in queue | /move 8 1 |
/queue-history | Display the queue history | /queue-history |
/create-playlist | Create a custom playlist | /create-playlist 'playlistname' |
/save-to-playlist | Add a song or playlist to a custom playlist | /save-to-playlist 'playlistname' 'yt or spotify url' |
/remove-from-playlist | Remove a track from a custom playlist | /remove-from-playlist 'playlistname' 'track location' |
/my-playlists | Display your custom playlists | /my-playlists |
/display-playlist | Display a custom playlist | /display-playlist 'playlistname' |
/delete-playlist | remove a custom playlist | /delete-playlist 'playlistname' |
Command | Description | Usage |
---|---|---|
/gif | Get a random gif | /gif |
/jojo | Get a random jojo gif | /jojo |
/gintama | Get a random gintama gif | /gintama |
/anime | Get a random anime gif | /anime |
/baka | Get a random baka gif | /baka |
/cat | Get a cute cat picture | /cat |
/doggo | Get a cute dog picture | /doggo |
/hug | Get a random hug gif | /hug |
/slap | Get a random slap gif | /slap |
/pat | Get a random pat gif | /pat |
/triggered | Get a random triggered gif | /triggered |
/amongus | Get a random Among Us gif | /amongus |
Command | Description | Usage |
---|---|---|
/fortune | Get a fortune cookie tip | /fortune |
/insult | Generate an evil insult | /insult |
/chucknorris | Get a satirical fact about Chuck Norris | /chucknorris |
/motivation | Get a random motivational quote | /motivation |
/random | Generate a random number between two provided numbers | /random 0 100 |
/8ball | Get the answer to anything! | /8ball Is this bot awesome? |
/rps | Rock Paper Scissors | /rps |
/bored | Generate a random activity! | /bored |
/advice | Get some advice! | /advice |
/game-search | Search for game information. | /game-search super-metroid |
/kanye | Get a random Kanye quote | /kanye |
/world-news | Latest headlines from reuters, you can change the news source to whatever news source you want, just change the source in line 13 in world-news.js or ynet-news.js | /world-news |
/translate | Translate to any language using Google translate.(only supported languages) | /translate english ありがとう |
/about | Info about me and the repo | /about |
/urban dictionary | Get definitions from urban dictionary | /urban javascript |
/activity | Generate an invite link to your voice channel's activity | /activity voicechannel Chill |
/twitch-status | Check the status of a Twitch steamer | /twitch-status streamer: bacon_fixation |
Using a Repl.it LavaLink server
Using a public LavaLink server
Using an Internal LavaLink server
Fork it and submit a pull request! Anyone is welcome to suggest new features and improve code quality!
Bacon Fixation - music controls (buttons), 'connect4', 'tic-tac-toe', 'game-search', 'google-translate', 'speedrun' commands, 'invite', 'vote', 'poll', 'welcome', 'mute', 'unmute', 'twitchstatus', 'twitch-announcer', 'welcome-message', 'tv-show-search', pi instructions and visual updates
ModoSN - 'resolve-ip', 'rps', '8ball', 'bored', 'trump', 'advice', 'kanye', 'urban dictionary' commands and visual updates
PhantomNimbi - bring back gif commands, lavalink config tweaks
Natemo6348 - 'mute', 'unmute'
kfirmeg - play command flags, dockerization, docker wiki
rafaeldamasceno - 'music-trivia' and Dockerfile improvements, minor tweaks
navidmafi - 'LeaveTimeOut' and 'MaxResponseTime' options, update issue template, fix leave command
Kyoyo - added back 'now-playing'
MontejoJorge - added back 'remind'
malokdev - 'uptime' command
chimaerra - minor command tweaks