appujet / lavamusic

lavalink music bot base in shoukaku and discord.js v14
https://appujet.github.io/lavamusic/
GNU General Public License v3.0
549 stars 480 forks source link

No nodes available, please add a node first #487

Closed CallMeShepard closed 6 months ago

CallMeShepard commented 7 months ago

After entering the play command with the youtube link, an error pops up:

[30.11.2023] [20:49:21] [antiCrash.js] [Lavamusic] » ✖ error Uncaught Exception thrown: Error: No nodes available, please add a node first at ShoukakuClient.getNode (file:///C:/Users/Shepard/Downloads/Music/node_modules/shoukaku/dist/index.mjs:1270:13) at Play.run (file:///C:/Users/Shepard/Downloads/Music/dist/commands/music/Play.js:46:106) at MessageCreate.run (file:///C:/Users/Shepard/Downloads/Music/dist/events/client/MessageCreate.js:192:28)

MonsignorEduardo commented 7 months ago

I think is because lavalink 4.0 removed the v3 endpoints

image

https://github.com/lavalink-devs/Lavalink/releases/tag/4.0.0

MonsignorEduardo commented 7 months ago

This is my lavamusic docker-compose.yml

services:
  mongodb:
    container_name: lavamusic-mongodb
    # higher versions don't work on Apple Silicon
    image: bitnami/mongodb:4.4
    environment:
      MONGODB_ADVERTISED_HOSTNAME: 127.0.0.1
      MONGODB_REPLICA_SET_MODE: primary
      MONGODB_ROOT_USER: mongoadmin
      MONGODB_ROOT_PASSWORD: mongopassword
      MONGODB_REPLICA_SET_KEY: replicasetkey123
    restart: on-failure
    volumes:
      - mongodb_data:/data/db
    networks:
      - lavalink
  lavalink:
    container_name: lavalink
    image: ghcr.io/lavalink-devs/lavalink:3
    volumes:
      - ./application.yml:/opt/Lavalink/application.yml
      - ./plugins/:/opt/Lavalink/plugins/ # persist plugins between restarts, make sure to set the correct permissions (user: 322, group: 322)
    restart: on-failure
    networks:
      - lavalink
    expose:
      - 2333
  lavamusic:
    container_name: lavamusic
    image: ghcr.io/brblacky/lavamusic:main
    environment:
      TOKEN: TOKEN # Your bot token
      PREFIX: "!" # Your bot prefix
      OWNER_IDS: "1" # Your id
      CLIENT_ID: "1" # Your bot id
      GUILD_ID: "" # Your server Id if you want to use the for single server
      PRODUCTION: "true" # true for production
      SEARCH_ENGINE: ytsearch # ytsearch, scsearch or ytmsearch
      MAX_PLAYLIST_SIZE: "100" # Max playlist size
      MAX_QUEUE_SIZE: "100" # Max queue size
      DATABASE_URL: mongodb://mongoadmin:mongopassword@mongodb/lavamusic?authSource=admin&directConnection=true # Your mongodb url
      LAVALINK_URL: lavalink:2333 # Your lavalink url
      LAVALINK_AUTH: youshallnotpass # Your lavalink password
      LAVALINK_NAME: Blacky # Your lavalink name
      LAVALINK_SECURE: "false" # true if you are using https
    command: bash -c "apt-get update -y && apt-get install -y openssl && npx prisma
      generate && node dist/index.js"
    restart: on-failure
    depends_on:
      - lavalink
      - mongodb
    networks:
      - lavalink
volumes:
  mongodb_data: null
networks:
  # create a lavalink network you can add other containers to, to give them access to Lavalink
  lavalink:
    name: lavalink

And this is the application.yml

server: # REST and WS server
  port: 2333
  address: 0.0.0.0
  http2:
    enabled: false # Whether to enable HTTP/2 support
plugins:
  lavasrc:
    providers: # Custom providers for track loading. This is the default
      # - "dzisrc:%ISRC%" # Deezer ISRC provider
      # - "dzsearch:%QUERY%" # Deezer search provider
      - "ytsearch:\"%ISRC%\"" # Will be ignored if track does not have an ISRC. See https://en.wikipedia.org/wiki/International_Standard_Recording_Code
      - "ytsearch:%QUERY%" # Will be used if track has no ISRC or no track could be found for the ISRC
      #  you can add multiple other fallback sources here
    sources:
      spotify: true # Enable Spotify source
      applemusic: false # Enable Apple Music source
      youtube: true # Enable YouTube search source (https://github.com/topi314/LavaSearch)
    spotify:
      clientId: "JEJE"
      clientSecret: "JEJE"
      countryCode: "ES" # the country code you want to use for filtering the artists top tracks. See https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2
      playlistLoadLimit: 6 # The number of pages at 100 tracks each
      albumLoadLimit: 6 # The number of pages at 50 tracks each
    applemusic:
      countryCode: "ES" # the country code you want to use for filtering the artists top tracks and language. See https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2
      mediaAPIToken: "JEJE" # apple music api token
      playlistLoadLimit: 6 # The number of pages at 300 tracks each
      albumLoadLimit: 6 # The number of pages at 300 tracks each
lavalink:
  plugins:
    - dependency: "com.github.TopiSenpai.LavaSrc:lavasrc-plugin:3.2.10"
      repository: "https://maven.topi.wtf/releases"
      snapshot: false
  server:
    password: "youshallnotpass"
    sources:
      youtube: true
      bandcamp: true
      soundcloud: true
      twitch: true
      vimeo: true
      http: true
      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