Bacon-Fixation / Master-Bot

A Discord music bot with playlist support, music quiz command, lyrics, gifs and more

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

A Discord Music Bot written in JavaScript using the discord.js v13 library

image image

System dependencies

Installing the Node.js dependencies

After cloning the repository, navigate to the project's folder and run the command npm i to install all Node.js module dependencies.

Setup

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

PostgreSQL

Linux

Either from the official site or follow the tutorial for your distro.

MacOS

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.

Windows

Getting Postgres and Prisma to work together on Windows is not worth the hassle. Create an account on heroku and follow these steps:

  1. 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'.
  2. 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).
  3. Create a .env file in the root directory of the project and create 2 empty variables there: DATABASE_URL="" SHADOW_DB_URL=""
  4. 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 or SHADOW_DB_URL.
  5. In your terminal, run npx prisma db push and then run npx prisma migrate dev.
  6. Done!

Redis

MacOS

brew install redis.

Windows

Download from here.

Linux

Follow the instructions here.

Important

After you're done installing all the dependencies and entering all tokens and env variables, run npx prisma migrate dev

Lavalink startup

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:

Minimum settings

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"
}

Full settings

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.

Commands

A full list of commands for use with Master Bot

Music

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'

Gifs

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

Other

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

Resources

Getting a Tenor API key

Getting a NewsAPI API key

Getting a Genius API key

Getting a rawg API key

Getting a Twitch API key

Installing Node.js on Debian

Installing Node.js on Windows

Installing on a Raspberry Pi

Using a Repl.it LavaLink server

Using a public LavaLink server

Using an Internal LavaLink server

Contributing

Fork it and submit a pull request! Anyone is welcome to suggest new features and improve code quality!

Contributors ❤️

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

About

A Discord music bot with playlist support, music quiz command, lyrics, gifs and more

License:GNU General Public License v3.0


Languages

Language:TypeScript 98.9%Language:Lua 0.7%Language:Shell 0.2%Language:Dockerfile 0.1%