From f6959a848fc0d5b63f5d5471bffcc1158b13f44d Mon Sep 17 00:00:00 2001 From: Amish Shah Date: Thu, 26 Oct 2017 14:17:56 +0100 Subject: [PATCH] Start some docs crap --- .../voice/dispatcher/StreamDispatcher.js | 26 ++++++++++++++----- test/voice.js | 8 ++++-- 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/src/client/voice/dispatcher/StreamDispatcher.js b/src/client/voice/dispatcher/StreamDispatcher.js index 99aaf57c0..1a3f7c98d 100644 --- a/src/client/voice/dispatcher/StreamDispatcher.js +++ b/src/client/voice/dispatcher/StreamDispatcher.js @@ -10,6 +10,11 @@ const TIMESTAMP_INC = (48000 / 100) * CHANNELS; const nonce = Buffer.alloc(24); nonce.fill(0); +/** + * @external Stream.writable + * @see {@link https://nodejs.org/api/stream.html#stream_class_stream_writable} + */ + /** * The class that sends voice packet data to the voice connection. * ```js @@ -20,6 +25,7 @@ nonce.fill(0); * }); * ``` * @implements {VolumeInterface} + * @extends {stream.Writable} */ class StreamDispatcher extends Writable { constructor(player, streamOptions) { @@ -64,10 +70,16 @@ class StreamDispatcher extends Writable { super._destroy(err, cb); } + /** + * Pauses playback + */ pause() { this.pausedSince = Date.now(); } + /** + * Resumes playback + */ unpause() { this.pausedTime += Date.now() - this.pausedSince; this.pausedSince = null; @@ -90,11 +102,11 @@ class StreamDispatcher extends Writable { _playChunk(chunk) { if (this.player.dispatcher !== this) return; - this.setSpeaking(true); - this.sendPacket(this.createPacket(this._sdata.sequence, this._sdata.timestamp, chunk)); + this._setSpeaking(true); + this._sendPacket(this._createPacket(this._sdata.sequence, this._sdata.timestamp, chunk)); } - createPacket(sequence, timestamp, buffer) { + _createPacket(sequence, timestamp, buffer) { const packetBuffer = Buffer.alloc(buffer.length + 28); packetBuffer.fill(0); packetBuffer[0] = 0x80; @@ -111,24 +123,24 @@ class StreamDispatcher extends Writable { return packetBuffer; } - sendPacket(packet) { + _sendPacket(packet) { let repeats = 1; /** * Emitted whenever the dispatcher has debug information. * @event StreamDispatcher#debug * @param {string} info The debug info */ - this.setSpeaking(true); + this._setSpeaking(true); while (repeats--) { this.player.voiceConnection.sockets.udp.send(packet) .catch(e => { - this.setSpeaking(false); + this._setSpeaking(false); this.emit('debug', `Failed to send a packet ${e}`); }); } } - setSpeaking(value) { + _setSpeaking(value) { if (this.speaking === value) return; if (this.player.voiceConnection.status !== VoiceStatus.CONNECTED) return; this.speaking = value; diff --git a/test/voice.js b/test/voice.js index b66a4b38a..c88cbed31 100644 --- a/test/voice.js +++ b/test/voice.js @@ -3,6 +3,8 @@ const Discord = require('../'); const ytdl = require('ytdl-core'); +const prism = require('prism-media'); +const fs = require('fs'); const client = new Discord.Client({ fetchAllMembers: false, apiRequestMethod: 'sequential' }); @@ -27,7 +29,9 @@ client.on('message', m => { conn.player.on('error', (...e) => console.log('player', ...e)); if (!connections.has(m.guild.id)) connections.set(m.guild.id, { conn, queue: [] }); m.reply('ok!'); - conn.playStream(ytdl('https://www.youtube.com/watch?v=i3Jv9fNPjgk')); + const d = conn.playOpusStream( + fs.createReadStream('C:/users/amish/downloads/s.ogg').pipe(new prism.OggOpusDemuxer()) + ); }); } else { m.reply('Specify a voice channel!'); @@ -37,7 +41,7 @@ client.on('message', m => { const url = m.content.split(' ').slice(1).join(' ') .replace(//g, ''); - const stream = ytdl(item.url, { filter: 'audioonly' }, { passes: 3 }); + const stream = ytdl(url, { filter: 'audioonly' }, { passes: 3 }); m.guild.voiceConnection.playStream(stream); } } else if (m.content.startsWith('/skip')) {