🏷️ Add typings

This commit is contained in:
Androz2091 2020-11-01 16:19:41 +01:00
parent e90ccec8fd
commit 74b465c4a6
5 changed files with 156 additions and 25 deletions

View file

@ -1,8 +1,9 @@
{
"name": "discord-player",
"version": "3.0.0-beta.3",
"version": "3.0.0-beta.4",
"description": "Complete framework to facilitate music commands using discord.js v12",
"main": "index.js",
"types": "typings/index.d.ts",
"scripts": {
"test": "node index.js",
"generate-docs": "node_modules/.bin/jsdoc --configure .jsdoc.json --verbose"

View file

@ -214,7 +214,9 @@ class Player extends EventEmitter {
Object.keys(newFilters).forEach((filterName) => {
queue.filters[filterName] = newFilters[filterName]
})
this._playYTDLStream(queue, true)
this._playYTDLStream(queue, true).then(() => {
resolve()
})
})
}
@ -357,22 +359,17 @@ class Player extends EventEmitter {
* client.player.pause(message);
*/
pause (message) {
return new Promise((resolve, reject) => {
// Get guild queue
const queue = this.queues.find((g) => g.guildID === message.guild.id)
if (!queue) return reject(new Error('Not playing'))
// Pause the dispatcher
queue.voiceConnection.dispatcher.pause()
queue.paused = true
// Resolve the guild queue
resolve(queue.playing)
})
// Get guild queue
const queue = this.queues.find((g) => g.guildID === message.guild.id)
if (!queue) return this.emit('error', 'NotPlaying', message)
// Pause the dispatcher
queue.voiceConnection.dispatcher.pause()
queue.paused = true
}
/**
* Resume the music in the server.
* @param {Discord.Message} message
* @returns {Queue}
* @example
* client.player.resume(message);
*/
@ -383,8 +380,6 @@ class Player extends EventEmitter {
// Pause the dispatcher
queue.voiceConnection.dispatcher.resume()
queue.paused = false
// Resolve the guild queue
return queue
}
/**
@ -410,7 +405,6 @@ class Player extends EventEmitter {
* Change the server volume.
* @param {Discord.Message} message
* @param {number} percent
* @returns {Queue}
* @example
* client.player.setVolume(message, 90);
*/
@ -421,8 +415,6 @@ class Player extends EventEmitter {
// Update volume
queue.volume = percent
queue.voiceConnection.dispatcher.setVolumeLogarithmic(queue.calculatedVolume / 200)
// Return the queue
return queue
}
/**
@ -439,7 +431,6 @@ class Player extends EventEmitter {
/**
* Clears the server queue.
* @param {Discord.Message} message
* @returns {Queue}
*/
clearQueue (message) {
// Get guild queue
@ -447,8 +438,6 @@ class Player extends EventEmitter {
if (!queue) return this.emit('error', 'NotPlaying', message)
// Clear queue
queue.tracks = []
// Return the queue
return queue
}
/**
@ -501,7 +490,7 @@ class Player extends EventEmitter {
/**
* Shuffle the queue of the server.
* @param {Discord.Message} message
* @returns {}
* @returns {Queue}
*/
shuffle (message) {
// Get guild queue
@ -715,8 +704,6 @@ module.exports = Player
* @event Player#queueCreate
* @param {Discord.Message} message
* @param {Queue} queue
* @param {Object} playlist
* @param {Track} track
*/
/**

View file

@ -54,7 +54,7 @@ class Queue extends EventEmitter {
* Whether the stream is currently paused.
* @type {boolean}
*/
this.paused = this.voiceConnection && this.voiceConnection.dispatcher && this.voiceConnection.dispatcher.paused;
this.paused = this.voiceConnection && this.voiceConnection.dispatcher && this.voiceConnection.dispatcher.paused
/**
* Whether the repeat mode is enabled.
* @type {boolean}

21
tsconfig.json Normal file
View file

@ -0,0 +1,21 @@
{
"compilerOptions": {
"strict": true,
"moduleResolution": "node",
"declaration": false,
"removeComments": false,
"alwaysStrict": true,
"pretty": false,
"module": "commonjs",
"target": "es2019",
"lib": [
"esnext",
"esnext.array",
"esnext.asynciterable",
"esnext.intl",
"esnext.symbol"
],
"sourceMap": false,
"skipDefaultLibCheck": true
}
}

122
typings/index.d.ts vendored Normal file
View file

@ -0,0 +1,122 @@
declare module 'discord-player' {
import { EventEmitter } from 'events';
import { Client, Collection, Message, MessageCollector, Snowflake, User, VoiceChannel, VoiceConnection } from 'discord.js';
import { result as YtplPlaylist } from 'ytpl';
import { Stream } from 'stream';
export const version: string;
class Util {
static isVoiceEmpty(channel: VoiceChannel): boolean;
static isSoundcloudLink(query: string): boolean;
static isSpotifyLink(query: string): boolean;
static isYTPlaylistLink(query: string): boolean;
static isYTVideoLink(query: string): boolean;
}
export class Player extends EventEmitter {
constructor(client: Client, options?: PlayerOptions)
public client: Client;
public util: Util;
public options: PlayerOptions;
public queues: Collection<Snowflake, Queue>;
public filters: PlayerFilters;
public isPlaying(message: Message): boolean;
public setFilters(message: Message, newFilters: Partial<Filters>): Promise<void>;
public play(message: Message, query: string): Promise<void>;
public pause(message: Message): void;
public resume(message: Message): void;
public stop(message: Message): void;
public setVolume(message: Message, percent: number): void;
public getQueue(message: Message): Queue;
public clearQueue(message: Message): void;
public skip(message: Message): void;
public nowPlaying(message: Message): Track;
public setRepeatMode(message: Message): boolean;
public shuffle(message: Message): Queue;
public remove(message: Message, trackOrPosition: Track|number): Track;
public createProgressBar(message: Message, progressBarOptions: ProgressBarOptions): string;
public on<K extends keyof PlayerEvents>(event: K, listener: (...args: PlayerEvents[K]) => void): this;
public once<K extends keyof PlayerEvents>(event: K, listener: (...args: PlayerEvents[K]) => void): this;
public emit<K extends keyof PlayerEvents>(event: K, ...args: PlayerEvents[K]): boolean;
}
interface PlayerOptions {
leaveOnEnd: boolean;
leaveOnStop: boolean;
leaveOnEmpty: boolean;
leaveOnEmptyCooldown: number;
}
type Filters = 'bassboost' | '8D' | 'vaporwave' | 'nightcore'| 'phaser' | 'tremolo' | 'vibrato' | 'reverse' | 'treble' | 'normalizer' | 'surrounding' | 'pulsator' | 'subboost' | 'karaoke' | 'flanger' | 'gate' | 'haas' | 'mcompand';
type FiltersStatuses = {
[key in Filters]: boolean;
}
type PlayerFilters = {
[key in Filters]: string
}
interface ProgressBarOptions {
timecodes: boolean;
}
interface CustomPlaylist {
tracks: Track[];
duration: number;
thumbnail: string;
requestedBy: User;
}
type Playlist = YtplPlaylist & CustomPlaylist;
interface PlayerEvents {
searchResults: [Message, string, Track[]];
searchInvalidResponse: [Message, string, Track[], string, MessageCollector];
searchCancel: [Message, string, Track[]];
noResults: [Message, string];
playlistAdd: [Message, Queue, Playlist];
trackAdd: [Message, Queue, Track];
trackStart: [Message, Track];
botDisconnect: [Message];
channelEmpty: [Message, Queue];
musicStop: [];
queueCreate: [Message, Queue];
queueEnd: [Message, Queue];
error: [string, Message];
}
class Queue {
constructor(guildID: string, message: Message, filters: PlayerFilters);
public guildID: string;
public voiceConnection?: VoiceConnection;
public stream: Stream;
public tracks: Track[];
public stopped: boolean;
public lastSkipped: boolean;
public volume: number;
public paused: boolean;
public repeatMode: boolean;
public filters: FiltersStatuses;
public firstMessage: Message;
private additionalStreamTime: number;
// these are getters
public playing: Track;
public calculatedVolume: number;
}
class Track {
constructor(videoData: object, user: User, player: Player);
public player: Player;
public title: string;
public description: string;
public author: string;
public url: string;
public thumbnail: string;
public duration: string;
public views: number;
public requestedBy: User;
public fromPlaylist: boolean;
// these are getters
public durationMS: number;
public queue: Queue;
}
}