riffy-extended
Version:
Riffy is a pro lavalink client. It is designed to be simple and easy to use, with a focus on stability and more features.
667 lines (581 loc) • 18.3 kB
TypeScript
import { EventEmitter } from "events";
export declare class Track {
constructor(data: any, requester: any, node: Node);
public track: string;
public info: {
identifier: string;
seekable: boolean;
author: string;
length: number;
stream: boolean;
sourceName: string;
title: string;
uri: string;
thumbnail: string | null;
requester: any;
};
public resolve(riffy: Riffy): Promise<Track>;
}
export interface RestOptions {
secure: boolean;
host: string;
port: number;
sessionId: string;
password: string;
restVersion: string;
}
interface RequestOptions {
guildId: string;
data: any;
}
interface RestResponse {
}
export declare class Rest extends EventEmitter {
constructor(riffy: Riffy, options: RestOptions);
public riffy: Riffy;
public url: string
public sessionId: RestOptions["sessionId"];
public password: RestOptions["password"];
public version: RestOptions["restVersion"];
public calls: number;
public setSessionId(sessionId: string): void;
public makeRequest(method: string, endpoint: string, body?: any): Promise<RestResponse | null>;
public getPlayers(): Promise<RestResponse | null>;
public updatePlayer(options: RequestOptions): Promise<void>;
public destroyPlayer(guildId: string): Promise<RestResponse | null>;
public getTracks(identifier: string): Promise<void>;
public decodeTrack(track: string, node?: any): Promise<void>;
public decodeTracks(tracks: any[]): Promise<void>;
public getStats(): Promise<void>;
public getInfo(): Promise<void>;
public getRoutePlannerStatus(): Promise<void>;
public getRoutePlannerAddress(address: string): Promise<void>;
public parseResponse(req: any): Promise<RestResponse | null>;
}
export declare class Queue extends Array<Track> {
currentIndex: number; // Индекс текущего трека
get size(): number;
get first(): Track | null;
add(track: Track): this;
remove(index: number): Track;
clear(): void;
shuffle(): void;
previous(): Track | null;
next(): Track | null;
setCurrent(index: number): void;
current(): Track | null;
}
export declare class Plugin {
constructor(name: string);
load(riffy: Riffy): void;
unload(riffy: Riffy): void;
}
export interface PlayerOptions {
guildId: string;
textChannel?: string;
voiceChannel?: string;
deaf?: boolean;
mute?: boolean;
defaultVolume?: number;
loop?: LoopOption;
}
export type LoopOption = "none" | "track" | "queue";
export declare class Player extends EventEmitter {
constructor(riffy: Riffy, node: Node, options: PlayerOptions);
public riffy: Riffy;
public node: Node;
public options: PlayerOptions;
public guildId: string;
public textChannel: string;
public voiceChannel: string;
public connection: Connection;
public deaf: boolean;
public mute: boolean;
public volume: number;
public loop: string;
public filters: Filters;
public data: {};
public queue: Queue;
public position: number;
public current: Track;
public previous: Track | null;
public playing: boolean;
public paused: boolean;
public connected: boolean;
public timestamp: number;
public ping: number;
public isAutoplay: boolean;
public play(): Promise<Player>;
public autoplay(player: Player): Promise<Player>;
public connect(options?: {
guildId: string;
voiceChannel: string;
deaf?: boolean;
mute?: boolean;
}): void;
public stop(): Player;
public pause(toggle?: boolean): Player;
public seek(position: number): void;
public setVolume(volume: number): Player;
public setLoop(mode: LoopOption): Player;
public setTextChannel(channel: string): Player;
public setVoiceChannel(channel: string, options?: {
mute?: boolean;
deaf?: boolean;
}): Player;
public disconnect(): Player;
public destroy(): void;
private handleEvent(payload: any): void;
private trackStart(player: Player, track: Track, payload: any): void;
private trackEnd(player: Player, track: Track, payload: any): void;
private trackError(player: Player, track: Track, payload: any): void;
private trackStuck(player: Player, track: Track, payload: any): void;
private socketClosed(player: Player, payload: any): void;
private set(key: string, value: any): void;
private get(key: string): any;
private send(data: any): void;
}
export type SearchPlatform = "ytsearch" | "ytmsearch" | "scsearch" | "spsearch" | "amsearch" | "dzsearch" | "ymsearch" | (string & {})
export type Version = "v3" | "v4";
export type LavalinkTrackLoadException = {
message: string | null,
severity: "common" | "suspicious" | "fault",
cause: string
}
export type nodeResponse = {
/**
* Array of Loaded Tracks
*/
tracks: Array<Track>;
/**
* Load Type - "TRACK_LOADED", "PLAYLIST_LOADED", "SEARCH_RESULT", "NO_MATCHES", "LOAD_FAILED" for v3 and "track", "playlist", "search", "error" for v4
*/
loadType: string | null
/**
* Playlist Info
*/
playlistInfo: {
name: string;
selectedTrack: number;
} | null;
/**
* Plugin Info
* ## Properties may not exist(Means Empty Object) if Lavalink/Node does not return/provide them
*/
pluginInfo: object;
exception: LavalinkTrackLoadException | null
}
export type RiffyOptions = {
send: (payload: {
op: number;
d: {
guild_id: string;
channel_id: string;
self_deaf: boolean;
self_mute: boolean;
}
}) => void;
defaultSearchPlatform?: SearchPlatform;
restVersion?: Version;
plugins?: Array<Plugin>;
} & Exclude<NodeOptions, "sessionId">
type k = string;
type v = any;
export declare class Riffy extends EventEmitter {
constructor(client: any, nodes: LavalinkNode[], options: RiffyOptions);
public client: any;
public nodes: Array<LavalinkNode>;
public nodeMap: Map<k, Node>;
public players: Map<k, Player>;
public options: RiffyOptions;
public clientId: string;
public initiated: boolean;
public send: RiffyOptions["send"];
public defaultSearchPlatform: string;
public restVersion: RiffyOptions["restVersion"];
public readonly leastUsedNodes: Array<Node>;
public init(clientId: string): this;
public createNode(options: any): Node;
public destroyNode(identifier: string): void;
public updateVoiceState(packet: any): void;
public fetchRegion(region: string): Array<LavalinkNode>;
/**
* Creates a connection based on the provided options.
*
* @param {Object} options - The options for creating the connection.
* @param {string} options.guildId - The ID of the guild.
* @param {string} [options.region] - The region for the connection.
* @param {number} [options.defaultVolume] - The default volume of the player. **By-Default**: **100**
* @param {LoopOption} [options.loop] - The loop mode of the player.
* @throws {Error} Throws an error if Riffy is not initialized or no nodes are available.
* @return {Player} The created player.
*/
public createConnection(options: {
guildId: string;
voiceChannel: string;
textChannel: string;
deaf?: boolean;
mute?: boolean;
/**
* @description Default volume of the player
* @default default 100
*/
defaultVolume?: number
loop?: LoopOption;
/**
* @description voice region (rtc Region) used for filtering node based on it
*/
region?: string;
}): Player;
public createPlayer(node: Node, options: PlayerOptions): Player;
public removeConnection(guildId: string): void;
/**
* @param {object} param0
* @param {string} param0.query used for searching as a search Query
* @param {*} param0.source A source to search the query on example:ytmsearch for youtube music
* @param {*} param0.requester the requester who's requesting
* @param {(string | Node)?} param0.node the node to request the query on either use node identifier/name or the node class itself
* @returns {nodeResponse} returned properties values are nullable if lavalink doesn't give them
* */
public resolve(params: {
query: string;
source?: string;
requester: any;
node?: string | Node
}): Promise<nodeResponse>;
public get(guildId: string): Player;
public on(event: "nodeConnect", listener: (node: Node) => void): this;
public on(event: "nodeReconnect", listener: (node: Node) => void): this;
public on(event: "nodeDisconnect", listener: (node: Node, reason: string) => void): this;
public on(event: "nodeCreate", listener: (node: Node) => void): this;
public on(event: "nodeDestroy", listener: (node: Node) => void): this;
public on(event: "nodeError", listener: (node: Node, error: Error) => void): this;
public on(event: "trackStart", listener: (player: Player, track: Track, payload: any) => void): this;
public on(event: "trackEnd", listener: (player: Player, track: Track, payload: any) => void): this;
public on(event: "trackError", listener: (player: Player, track: Track, payload: any) => void): this;
public on(event: "trackStuck", listener: (player: Player, track: Track, payload: any) => void): this;
public on(event: "socketClosed", listener: (player: Player, payload: any) => void): this;
public on(event: "playerCreate", listener: (player: Player) => void): this;
public on(event: "playerDisconnect", listener: (player: Player) => void): this;
public on(event: "playerMove", listener: (player: Player, oldChannel: string, newChannel: string) => void): this;
public on(event: "playerUpdate", listener: (player: Player, payload: any) => void): this;
public on(event: "queueEnd", listener: (player: Player) => void): this;
public on(event: "debug", listener: (message: string) => void): this;
}
export type LavalinkNode = {
/**
* The name of the node
*/
name?: string;
/**
* The IP of the node
*/
host: string;
/**
* The port of the node
*/
port: number;
/**
* The password of the node
*/
password: string;
/**
* Is node connection secured by SSL ?
* @default false
*/
secure?: boolean;
/**
* Voice Regions for the Node
*/
regions?: string[];
} & Partial<NodeOptions>
export type NodeOptions = {
/**
* The rest version of the node
*/
restVersion: Version;
/**
* The resume key of the node
* Ignored if node `restVersion` is not `v3`
*/
resumeKey?: string;
/**
* The session id of the node
*/
sessionId?: string;
/**
* The resume timeout of the node
*/
resumeTimeout?: number;
/**
* The auto resume of the node
*/
autoResume?: boolean;
/**
* The reconnect timeout of the node
*/
reconnectTimeout?: number;
/**
* The reconnect tries of the node
*/
reconnectTries?: number;
}
export declare class Node {
constructor(riffy: Riffy, node: LavalinkNode, options: NodeOptions);
public riffy: Riffy;
public name: LavalinkNode["name"];
public host: LavalinkNode["host"];
public port: LavalinkNode["port"];
public password: LavalinkNode["password"];
public secure: LavalinkNode["secure"];
public restVersion: NodeOptions["restVersion"];
public rest: Rest;
public wsUrl: string;
public restUrl: string;
private ws: null;
public resumeKey: NodeOptions["resumeKey"];
public sessionId: NodeOptions["sessionId"];
public regions: string[] | null;
public resumeTimeout: NodeOptions["resumeTimeout"];
public autoResume: NodeOptions["autoResume"];
public reconnectTimeout: NodeOptions["reconnectTimeout"];
public reconnectTries: NodeOptions["reconnectTries"];
public reconnectAttempt: number;
public reconnectAttempted: number;
public connected: boolean;
public reconnecting: boolean;
public stats: {
players: 0,
playingPlayers: 0,
uptime: 0,
memory: {
free: 0,
used: 0,
allocated: 0,
reservable: 0,
},
cpu: {
cores: 0,
systemLoad: 0,
lavalinkLoad: 0,
},
frameStats: {
sent: 0,
nulled: 0,
deficit: 0,
},
};
public connect(): void;
public open(): void;
public error(event: any): void;
public message(msg: any): void;
public close(event: any, reason: string): void;
public reconnect(): void;
public disconnect(): void;
readonly penalties: number;
}
export type FilterOptions = {
/**
* The volume of the player
*/
volume?: number;
/**
* The equalizer of the player
*/
equalizer?: Array<{ band: number; gain: number }>;
/**
* The karaoke of the player
*/
karaoke?: {
level: number;
monoLevel: number;
filterBand: number;
filterWidth: number;
} | null;
/**
* The timescale of the player
*/
timescale?: {
speed: number;
pitch: number;
rate: number;
} | null;
/**
* The tremolo of the player
*/
tremolo?: {
frequency: number;
depth: number;
} | null;
/**
* The vibrato of the player
*/
vibrato?: {
frequency: number;
depth: number;
} | null;
/**
* The rotation of the player
*/
rotation?: {
rotationHz: number;
} | null;
/**
* The distortion of the player
*/
distortion?: {
sinOffset: number;
sinScale: number;
cosOffset: number;
cosScale: number;
tanOffset: number;
tanScale: number;
offset: number;
scale: number;
} | null;
/**
* The channel mix of the player
*/
channelMix?: {
leftToLeft: number;
leftToRight: number;
rightToLeft: number;
rightToRight: number;
} | null;
/**
* The low pass of the player
*/
lowPass?: {
smoothing: number;
} | null;
/**
* The BassBoost of the player
*/
bassboost?: number | null;
/**
* The Slowmode of the player
*/
slowmode?: number | null;
/**
* The Nightcore of the player
*/
nightcore?: boolean | null;
/**
* The Vaporwave of the player
*/
vaporwave?: boolean | null;
/**
* The 8D of the player
*/
_8d?: boolean | null;
}
export declare class Filters {
constructor(player: Player, options: FilterOptions);
public player: Player;
public volume: FilterOptions["volume"];
public equalizer: FilterOptions["equalizer"];
public karaoke: FilterOptions["karaoke"];
public timescale: FilterOptions["timescale"];
public tremolo: FilterOptions["tremolo"];
public vibrato: FilterOptions["vibrato"];
public rotation: FilterOptions["rotation"];
public distortion: FilterOptions["distortion"];
public channelMix: FilterOptions["channelMix"];
public lowPass: FilterOptions["lowPass"];
public bassboost: FilterOptions["bassboost"];
public slowmode: FilterOptions["slowmode"];
public nightcore: FilterOptions["nightcore"];
public vaporwave: FilterOptions["vaporwave"];
public _8d: FilterOptions["_8d"];
public setEquilizer(band: Array<{ band: number; gain: number }>): this;
public setKaraoke(enabled: boolean, options?: {
level: number;
monoLevel: number;
filterBand: number;
filterWidth: number;
}): this;
public setTimescale(enabled: boolean, options?: {
speed: number;
pitch: number;
rate: number;
}): this;
public setTremolo(enabled: boolean, options?: {
frequency: number;
depth: number;
}): this;
public setVibrato(enabled: boolean, options?: {
frequency: number;
depth: number;
}): this;
public setRotation(enabled: boolean, options?: {
rotationHz: number;
}): this;
public setDistortion(enabled: boolean, options?: {
sinOffset: number;
sinScale: number;
cosOffset: number;
cosScale: number;
tanOffset: number;
tanScale: number;
offset: number;
scale: number;
}): this;
public setChannelMix(enabled: boolean, options?: {
leftToLeft: number;
leftToRight: number;
rightToLeft: number;
rightToRight: number;
}): this;
public setLowPass(enabled: boolean, options?: {
smoothing: number;
}): this;
public setBassboost(enabled: boolean, options?: {
value: number;
}): this;
public setSlowmode(enabled: boolean, options?: {
rate: number;
}): this;
public setNightcore(enabled: boolean, options?: {
rate: number;
}): this;
public setVaporwave(enabled: boolean, options?: {
pitch: number;
}): this;
public set8D(enabled: boolean, options?: {
rotationHz: number;
}): this;
public clearFilters(): this;
public updateFilters(): this;
}
export type Voice = {
/**
* The voice session id
*/
sessionId: string,
/**
* The voice event
*/
event: null,
/**
* The voice endpoint
*/
endpoint: string
}
export declare class Connection {
constructor(player: Player);
public player: Player;
public sessionId: string;
public voice: Voice;
public region: string;
public self_deaf: boolean;
public self_mute: boolean;
public voiceChannel: string;
public setServerUpdate(data: { endpoint: string; token: string }): void;
public setStateUpdate(data: {
session_id: string;
channel_id: string;
self_deaf: boolean;
self_mute: boolean;
}): void;
private updatePlayerVoiceData(): void;
}