Skip to content
This repository has been archived by the owner on Jun 1, 2024. It is now read-only.
/ spotify Public archive

A DisTube custom plugin for supporting Spotify.

License

Notifications You must be signed in to change notification settings

distubejs/spotify

Repository files navigation

npm peer dependency version npm GitHub Repo stars Discord

Buy Me a Coffee at ko-fi.com

@distube/spotify

A DisTube custom plugin for supporting Spotify URL.

Feature

This plugin grabs the songs on Spotify then searches on YouTube and plays with DisTube.

Installation

npm install @distube/spotify@latest

Usage

const Discord = require("discord.js");
const client = new Discord.Client();

const { DisTube } = require("distube");
const { SpotifyPlugin } = require("@distube/spotify");
const distube = new DisTube(client, {
  plugins: [new SpotifyPlugin()],
});

Documentation

SpotifyPlugin([SpotifyPluginOptions])

  • SpotifyPluginOptions.parallel: Default is true. Whether or not searching the playlist in parallel.
  • SpotifyPluginOptions.emitEventsAfterFetching: Default is false. Emits addList and playSong event before or after fetching all the songs.

    If false, DisTube plays the first song -> emits addList and playSong events -> fetches all the rest
    If true, DisTube plays the first song -> fetches all the rest -> emits addList and playSong events

  • SpotifyPluginOptions.api: (Optional) Spotify API options.
    • SpotifyPluginOptions.api.clientId: Client ID of your Spotify application (Optional - Used when the plugin cannot get the credentials automatically)
    • SpotifyPluginOptions.api.clientSecret: Client Secret of your Spotify application (Optional - Used when the plugin cannot get the credentials automatically)
    • SpotifyPluginOptions.api.topTracksCountry: Country code of the top artist tracks (ISO 3166-1 alpha-2 country code). Default is US.

Example

new SpotifyPlugin({
  parallel: true,
  emitEventsAfterFetching: false,
  api: {
    clientId: "SpotifyAppClientID",
    clientSecret: "SpotifyAppClientSecret",
    topTracksCountry: "VN",
  },
});
Use SoundCloudPlugin to search instead of YouTube
import { DisTube } from "distube";
import { SpotifyPlugin } from "@distube/spotify";
import { SoundCloudPlugin } from "@distube/soundcloud";

const scPlugin = new SoundCloudPlugin();

class NewSpotifyPlugin extends SpotifyPlugin {
  override async search(query: string) {
    try {
      return new Song((await scPlugin.search(query, { limit: 1 }))[0]);
    } catch {
      return null;
    }
  }
}

const distube = new DisTube(client, {
  plugins: [new NewSpotifyPlugin(), scPlugin],
});