Skip to content

Connect Lavalink and congfigure Lavalink

CPS edited this page Aug 21, 2024 · 1 revision

🌐 Connecting Lavalink to Your Discord Bot

To integrate Lavalink with your Discord bot, follow these steps to configure and connect Lavalink properly.

1. Download and Set Up Lavalink

  1. Download Lavalink:

  2. Install Java:

    • Lavalink requires Java 17 or newer.
  3. Create Lavalink Configuration File:

    • In the directory where you placed the Lavalink .jar file, create an application.yml file with the following configuration:
server: # REST and WS server
  port: 2333
  address: 0.0.0.0
  http2:
    enabled: false # Whether to enable HTTP/2 support
plugins:
#  name: # Name of the plugin
#    some_key: some_value # Some key-value pair for the plugin
#    another_key: another_value
lavalink:
  plugins:
#    - dependency: "com.github.example:example-plugin:1.0.0" # required, the coordinates of your plugin
#      repository: "https://maven.example.com/releases" # optional, defaults to the Lavalink releases repository by default
#      snapshot: false # optional, defaults to false, used to tell Lavalink to use the snapshot repository instead of the release repository
#  pluginsDir: "./plugins" # optional, defaults to "./plugins"
#  defaultPluginRepository: "https://maven.lavalink.dev/releases" # optional, defaults to the Lavalink release repository
#  defaultPluginSnapshotRepository: "https://maven.lavalink.dev/snapshots" # optional, defaults to the Lavalink snapshot repository
  server:
    password: "youshallnotpass"
    sources:
      # The default Youtube source is now deprecated and won't receive further updates. Please use https://github.com/lavalink-devs/youtube-source#plugin instead.
      youtube: false
      bandcamp: true
      soundcloud: true
      twitch: true
      vimeo: true
      nico: true
      http: true # warning: keeping HTTP enabled without a proxy configured could expose your server's IP address.
      local: false
    filters: # All filters are enabled by default
      volume: true
      equalizer: true
      karaoke: true
      timescale: true
      tremolo: true
      vibrato: true
      distortion: true
      rotation: true
      channelMix: true
      lowPass: true
    bufferDurationMs: 400 # The duration of the NAS buffer. Higher values fare better against longer GC pauses. Duration <= 0 to disable JDA-NAS. Minimum of 40ms, lower values may introduce pauses.
    frameBufferDurationMs: 5000 # How many milliseconds of audio to keep buffered
    opusEncodingQuality: 10 # Opus encoder quality. Valid values range from 0 to 10, where 10 is best quality but is the most expensive on the CPU.
    resamplingQuality: LOW # Quality of resampling operations. Valid values are LOW, MEDIUM and HIGH, where HIGH uses the most CPU.
    trackStuckThresholdMs: 10000 # The threshold for how long a track can be stuck. A track is stuck if does not return any audio data.
    useSeekGhosting: true # Seek ghosting is the effect where whilst a seek is in progress, the audio buffer is read from until empty, or until seek is ready.
    youtubePlaylistLoadLimit: 6 # Number of pages at 100 each
    playerUpdateInterval: 5 # How frequently to send player updates to clients, in seconds
    youtubeSearchEnabled: true
    soundcloudSearchEnabled: true
    gc-warnings: true
    #ratelimit:
      #ipBlocks: ["1.0.0.0/8", "..."] # list of ip blocks
      #excludedIps: ["...", "..."] # ips which should be explicit excluded from usage by lavalink
      #strategy: "RotateOnBan" # RotateOnBan | LoadBalance | NanoSwitch | RotatingNanoSwitch
      #searchTriggersFail: true # Whether a search 429 should trigger marking the ip as failing
      #retryLimit: -1 # -1 = use default lavaplayer value | 0 = infinity | >0 = retry will happen this numbers times
    #youtubeConfig: # Required for avoiding all age restrictions by YouTube, some restricted videos still can be played without.
      #email: "" # Email of Google account
      #password: "" # Password of Google account
    #httpConfig: # Useful for blocking bad-actors from ip-grabbing your music node and attacking it, this way only the http proxy will be attacked
      #proxyHost: "localhost" # Hostname of the proxy, (ip or domain)
      #proxyPort: 3128 # Proxy port, 3128 is the default for squidProxy
      #proxyUser: "" # Optional user for basic authentication fields, leave blank if you don't use basic auth
      #proxyPassword: "" # Password for basic authentication

metrics:
  prometheus:
    enabled: false
    endpoint: /metrics

sentry:
  dsn: ""
  environment: ""
#  tags:
#    some_key: some_value
#    another_key: another_value

logging:
  file:
    path: ./logs/

  level:
    root: INFO
    lavalink: INFO

  request:
    enabled: true
    includeClientInfo: true
    includeHeaders: false
    includeQueryString: true
    includePayload: true
    maxPayloadLength: 10000


  logback:
    rollingpolicy:
      max-file-size: 1GB
      max-history: 30
  1. Run Lavalink:

    • Open a terminal in the directory containing Lavalink .jar and run:
    java -jar Lavalink.jar
    • Lavalink should now be running on port 2333 (or your configured port).

2. Configure Lavalink in Your Bot

  1. Edit config.json:

    • Open your config.json file and configure the Lavalink node settings. Use the details you set up in application.yml:
    {
      "clientId": "",
      "prefix": "!",
      "messages": {
        "COOLDOWN_MESSAGE": "You are on <duration> cooldown!"
      },
      "ownerID": [""],
      "adminId": [""],
      "uri": "",
      "nodes": [
        {
          "host": "localhost",  // Lavalink host (e.g., 'localhost' if running locally)
          "port": 2333,          // Lavalink port
          "password": "youshouldpass",  // Lavalink password
          "identifier": "LavalinkNode1", // A unique name for this node
          "retryAmount": 1000,
          "retrydelay": 10000,
          "resumeStatus": true,
          "resumeTimeout": 1000,
          "secure": false // Set to true if using SSL
        }
      ]
    }

4. Test Your Lavalink Connection

  • Start your bot and check the logs for successful connection messages from Lavalink. Ensure that no errors are logged related to node connection issues.

5. Troubleshooting Lavalink Issues

  • Cannot Connect to Lavalink:

    • Verify Lavalink is running and accessible at the configured host and port.
    • Check if the password and other settings in config.json match those in application.yml.
  • Bot Not Playing Music:

    • Ensure your bot is connected to a voice channel and Lavalink is properly configured.
  • Lavalink Logs:

    • Review lavalink.log for detailed error messages or connection issues.

By following these instructions, you should be able to successfully connect and configure Lavalink for your Discord bot.


Wiki Sidebar

  • Home

    • Introduction and Overview
    • Features and Capabilities
  • Installing and Configuring the Bot

    • Prerequisites
    • Installation Steps
    • Configuration Guide
      • .env Configuration
      • config.json Configuration
  • Connecting MongoDB

    • Setting Up MongoDB
    • Connecting MongoDB via Driver URL
    • Configuring MongoDB in Your Bot
  • Connecting Lavalink

    • Downloading and Setting Up Lavalink
    • Configuring Lavalink in Your Bot
    • Connecting the Bot to Lavalink
    • Troubleshooting Lavalink Connections
  • FAQ

    • Common Issues and Solutions
    • How to Enable Message Content Intent
    • Bot Permissions and Command Issues
    • Music Playback and Node Configuration
    • Admin Management and Token Changes

Clone this wiki locally