drg-music2

1.4.2 • Public • Published

drg-music2

Drg Music 2

A simple to use framework to create and manage music playlists for Discord using discord.js.

How to use ?

You need to create a new MusicHandler.

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

const MusicHandler = require("drg-music2");
const music = new MusicHandler(client);

Then, you'll need to interact with the MusicHandler you just created.

Classes

This module lets you interact with 2 different classes.

MusicHandler extends EventEmitter

This is the main class.

Attributes

  • client (read-only)
    The Client used to initialize this MusicHandler.

  • guilds
    A Collection containing all Guilds where the Client is currently playing music, mapped by their ID.

  • channels
    A Collection containing all Guilds where the Client is currently playing music, mapped by their ID.

  • playlists
    A Collection containing all Playlists from the Guilds where the Client is currently playing music, , mapped by the corresponding ID.

Methods

  • join

    music.join(tojoin);

    tojoin: the GuildMember or VoiceChannel to join

    Returns: Promise<VoiceConnection>

  • leave

    music.leave(guild);

    guild: the Guild to leave

    Returns: Promise

  • add

    music.add(request, member, options);

    request: Youtube link/Youtube query/path to a local file
    member: the GuildMember who requested the music
    options is optional
    options.type: 'link', 'ytquery' or 'file'
    options.passes: how many times to send the voice packet to reduce packet loss

    Returns: Promise<MusicInfo (added music)>

  • remove

    music.remove(guild, index);

    guild: Guild
    index: the index of the music in the playlist (starting at 0)

    Returns: Promise<MusicInfo (removed music)>

  • playNext

  • skip
    Alias for playNext

  • clear

  • shuffle

  • resume

  • pause

  • togglePaused

  • toggleLooping

  • togglePlaylistLooping

  • getVolume

  • setVolume

  • isConnected

  • isPlaying

  • isPaused

  • isLooping

  • isPlaylistLooping

  • currentInfo

  • playlistInfo

Static methods

  • videoWebsite

  • playYoutube

  • youtubeInfo

  • queryYoutube

Events

  • clientMove: emitted when the Client that instantiated this MusicHandler moves from one VoiceChannel to another
    Returns: old VoiceChannel and new VoiceChannel

  • memberJoin: emitted when a GuildMember joins a VoiceChannel where the Client is playing music
    Returns: VoiceChannel and GuildMember

  • memberLeave: emitted when a GuildMember leaves a VoiceChannel where the Client is playing music
    Returns: VoiceChannel and GuildMember

  • start: emitted when the current music starts playing
    Returns: Playlist and MusicInfo (current music)

  • end: emitted when the current music ends
    Returns: Playlist and MusicInfo (current music)

  • next: emitted when the playlist switches to the next music
    Returns: Playlist and MusicInfo (next music)

  • empty: emitted when switching to the next music and the playlist is empty
    Returns: Playlist

Playlist

This class does not really store information and is more of an alias but in some cases it can be useful.

Attributes

  • guild (read-only)
    Guild represented by this Playlist

  • channel (read-only)
    VoiceChannel joined by the Client

  • firstJoinedAt (read-only)
    Date representing the first time the Client joined a VoiceChannel in this Guild

  • firstJoinedTimestamp (read-only)
    Alias for firstJoinedAt.getTime()

  • lastJoinedAt (read-only)
    Date representing the last time the Client joined a VoiceChannel in this Guild

  • lastJoinedTimestamp (read-only)
    Alias for lastJoinedAt.getTime()

  • connected (read-only)
    Whether or not the Client is connected in this Guild

  • playing (read-only)
    Whether or not the Client is currently playing music

  • paused
    Whether or not the Client is paused

  • looping
    Whether or not the Client is looping the current music

  • playlistLooping
    Whether or not the Client is looping the Playlist

  • current (read-only)
    Information about the current music

  • info (read-only)
    Information about all the musics in this Playlist

  • volume
    The volume at which music is played

Methods

Those methods are just an alias for the methods with the same name in MusicHandler, except you don't need to precise the guild as a parameter when it is required. Example: music.shuffle(guild) <==> music.playlists.get(guild.id).shuffle()

  • join
    Alias for MusicHandler.prototype.join

  • leave
    Alias for MusicHandler.prototype.leave

  • add
    Alias for MusicHandler.prototype.add

  • remove
    Alias for MusicHandler.prototype.remove

  • playNext
    Alias for MusicHandler.prototype.playNext

  • skip
    Alias for MusicHandler.prototype.skip

  • clear
    Alias for MusicHandler.prototype.clear

  • shuffle
    Alias for MusicHandler.prototype.shuffle

Example

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

const MusicHandler = require("drg-music2");
const music = new MusicHandler(client);

client.on("message", message => {

  if (message.content == "/join") {
    if (music.isConnected(message.guild)) {
      message.reply("I am already connected!");
      return;
    }
    music.join(message.member).then(() => {
      message.reply("hello!");
    }).catch(console.error);
  }

  else if (message.content == "/leave") {
    if (!music.isConnected(message.guild)) {
      message.reply("I am not connected!");
      return;
    }
    music.leave(message.guild).then(() => {
      message.reply("bye!");
    }).catch(console.error);
  }

  else if (message.content.startsWith("/request ")) {
    if (!music.isConnected(message.guild)) {
      message.reply("I am not connected!");
      return;
    }
    let youtubeLink = message.content.replace("/request ", "");
    music.add(youtubeLink, message.member).then(added => {
      message.reply(added.title + " has been added to the playlist!");
    }).catch(console.error);
  }

});

client.login("MYAWESOMEBOTTOKEN");

Readme

Keywords

none

Package Sidebar

Install

npm i drg-music2

Weekly Downloads

1

Version

1.4.2

License

ISC

Unpacked Size

39.3 kB

Total Files

3

Last publish

Collaborators

  • dragoteryx