Guava
Dead simple Discord music bot
Invite Guava
Overview
Guava is a Discord music bot with support for multiple different music and video streaming platforms. Guava is a part of >225 Discord servers and currently supports these services:
- YouTube
- Apple Music
- Spotify
- SoundCloud
- Bandcamp
- Deezer
- Twitch Streams
- Vimeo
Getting started is easy, simply invite Guava to your server and run /help
to see what all Guava has to offer.
Want to self-host?
Guava is built on Python and requires a Lavalink node running release v4
or higher with the LavaSrc and youtube-source plugins.
If you would like to run your own version of Guava, continue to read the information below.
NOTE: No matter which option you choose (Docker or bare metal) you will get a fatal error on first run due to missing the config.yaml
file. A new config.yaml file will be created for you with the necessary fields for configuration. For information on each configuration field, see Configuration.
Docker
To run Guava in Docker, use the provided docker-compose.yaml file as a template for the container.
In addition to the Guava container, you must also create a Lavalink node however you choose (bare metal or docker)
Bare metal
To run Guava on bare metal, follow the steps below.
- Install Python 3 and Pip
- Clone this repository
- Install the requirements with
pip install -r requirements.txt
- Run the
code/bot.py
file - Input information into the newly created config.yaml file.
- Re-run the
code/bot.py
file.
Lavalink
For instructions on setting up a Lavalink node on bare metal, look here. Refer to the plugin repositories for support on configuring them.
P.S. Only the Deezer/SoundCloud sources/search providers are needed in the LavaSrc plugin.
After setting up your Lavalink node, it is highly recommended to configure IPv6 rotation with at least a /64 or /48 block. IPv6 rotation helps to relieve issues from getting rate limited/blocked from YouTube and other sources. There are helpful guides for setting this up which are available on GitHub, however, this is the one that I have used .
An example of my personal application.yml
configuration file can be found here.
Configuration
BOT_INFO | REQUIRED
Field | Description | Requirement |
---|---|---|
TOKEN | The token for your bot. Create a bot at discord.com/developers | REQUIRED |
BOT_COLOR | HEX CODE : Color that will be used for message embeds |
REQUIRED |
BOT_INVITE_LINK | URL : Discord Invite link for your bot |
OPTIONAL - Adds an "Invite Me" button to the /help message |
FEEDBACK_CHANNEL_ID | CHANNEL ID : Discord channel for feedback messages to be sent to |
OPTIONAL - Used for feedback messages (/feedback) |
BUG_CHANNEL_ID | CHANNEL ID : Discord channel for bug messages to be sent to |
OPTIONAL - Used for bug reporting (/bug) |
LOG_SONGS | BOOLEAN : Whether or not to log song events in track_events.log |
OPTIONAL - default false |
LAVALINK | REQUIRED
Field | Description | Requirement |
---|---|---|
HOST | Host address for your Lavalink node | REQUIRED |
PORT | Port for your Lavalink node | REQUIRED |
PASSWORD | Password to authenticate into the Lavalink node | REQUIRED |
YOUTUBE | OPTIONAL
Field | Description | Requirement |
---|---|---|
ENABLED | BOOLEAN : Whether or not playing from YouTube is allowed/supported |
OPTIONAL |
SPOTIFY | OPTIONAL
Field | Description | Requirement |
---|---|---|
SPOTIFY_CLIENT_ID | CLIENT ID : ID from Spotify Developer account |
OPTIONAL - Used for Spotify support |
SPOTIFY_CLIENT_SECRET | CLIENT SECRET : Secret string from Spotify Developer account |
OPTIONAL - Used for Sporify support |
GENIUS | OPTIONAL
Field | Description | Requirement |
---|---|---|
GENIUS_CLIENT_ID | CLIENT ID : ID from Genius API Dashboard |
OPTIONAL - Used for the /lyrics command |
GENIUS_CLIENT_SECRET | CLIENT SECRET : Secret string from Genius API Dashboard |
OPTIONAL - Used for the /lyrics command |
AI | OPTIONAL
Field | Description | Requirement |
---|---|---|
SERVICE | Which providers API you will use. Supports groq or openai |
OPTIONAL - Used to support the /autoplay feature |
API_KEY | API key for the provider you are using | OPTIONAL - Used to support the /autoplay feature |
If you have any questions, feel free to email at contact@pkrm.dev. Thank you for checking out Guava, and happy coding.