Improve docs a bit

This commit is contained in:
Crawl
2017-04-30 04:30:44 +02:00
parent 3f8c0a4d11
commit ac92d2cecc
83 changed files with 716 additions and 711 deletions

View File

@@ -2,7 +2,7 @@ const Collection = require('../../util/Collection');
const VoiceConnection = require('./VoiceConnection');
/**
* Manages all the voice stuff for the Client
* Manages all the voice stuff for the client.
* @private
*/
class ClientVoiceManager {
@@ -37,7 +37,7 @@ class ClientVoiceManager {
}
/**
* Sets up a request to join a voice channel
* Sets up a request to join a voice channel.
* @param {VoiceChannel} channel The voice channel to join
* @returns {Promise<VoiceConnection>}
*/

View File

@@ -64,7 +64,7 @@ class VoiceBroadcast extends VolumeInterface {
const volume = old || dispatcher.volume;
/**
* Emitted whenever a stream dispatcher unsubscribes from the broadcast
* Emitted whenever a stream dispatcher unsubscribes from the broadcast.
* @event VoiceBroadcast#unsubscribe
* @param {StreamDispatcher} dispatcher The unsubscribed dispatcher
*/
@@ -98,7 +98,7 @@ class VoiceBroadcast extends VolumeInterface {
this._dispatchers.get(n).add(dispatcher);
});
/**
* Emitted whenever a stream dispatcher subscribes to the broadcast
* Emitted whenever a stream dispatcher subscribes to the broadcast.
* @event VoiceBroadcast#subscribe
* @param {StreamDispatcher} dispatcher The subscribed dispatcher
*/
@@ -115,7 +115,7 @@ class VoiceBroadcast extends VolumeInterface {
}
/**
* Plays any audio stream across the broadcast
* Plays any audio stream across the broadcast.
* @param {ReadableStream} stream The audio stream to play
* @param {StreamOptions} [options] Options for playing the stream
* @returns {VoiceBroadcast}
@@ -169,21 +169,21 @@ class VoiceBroadcast extends VolumeInterface {
ffmpegArguments: ffmpegArguments.concat(['-ss', String(options.seek)]),
});
/**
* Emitted whenever an error occurs
* Emitted whenever an error occurs.
* @event VoiceBroadcast#error
* @param {Error} error the error that occurred
* @param {Error} error The error that occurred
*/
transcoder.once('error', e => {
if (this.listenerCount('error') > 0) this.emit('error', e);
/**
* Emitted whenever the VoiceBroadcast has any warnings
* Emitted whenever the VoiceBroadcast has any warnings.
* @event VoiceBroadcast#warn
* @param {string|Error} warning the warning that was raised
* @param {string|Error} warning The warning that was raised
*/
else this.emit('warn', e);
});
/**
* Emitted once the broadcast (the audio stream) ends
* Emitted once the broadcast (the audio stream) ends.
* @event VoiceBroadcast#end
*/
transcoder.once('end', () => this.killCurrentTranscoder());
@@ -197,7 +197,7 @@ class VoiceBroadcast extends VolumeInterface {
/**
* Plays a stream of 16-bit signed stereo PCM at 48KHz.
* @param {ReadableStream} stream The audio stream to play.
* @param {ReadableStream} stream The audio stream to play
* @param {StreamOptions} [options] Options for playing the stream
* @returns {VoiceBroadcast}
*/
@@ -227,7 +227,7 @@ class VoiceBroadcast extends VolumeInterface {
/**
* Play an arbitrary input that can be [handled by ffmpeg](https://ffmpeg.org/ffmpeg-protocols.html#Description)
* @param {string} input the arbitrary input
* @param {string} input The arbitrary input
* @param {StreamOptions} [options] Options for playing the stream
* @returns {VoiceBroadcast}
*/
@@ -239,7 +239,7 @@ class VoiceBroadcast extends VolumeInterface {
}
/**
* Pauses the entire broadcast - all dispatchers also pause
* Pauses the entire broadcast - all dispatchers also pause.
*/
pause() {
this.paused = true;
@@ -251,7 +251,7 @@ class VoiceBroadcast extends VolumeInterface {
}
/**
* Resumes the entire broadcast - all dispatchers also resume
* Resumes the entire broadcast - all dispatchers also resume.
*/
resume() {
this.paused = false;
@@ -351,7 +351,7 @@ class VoiceBroadcast extends VolumeInterface {
}
/**
* End the current broadcast, all subscribed dispatchers will also end
* End the current broadcast, all subscribed dispatchers will also end.
*/
destroy() {
this.end();

View File

@@ -83,18 +83,18 @@ class VoiceConnection extends EventEmitter {
this.player.on('debug', m => {
/**
* Debug info from the connection
* Debug info from the connection.
* @event VoiceConnection#debug
* @param {string} message the debug message
* @param {string} message The debug message
*/
this.emit('debug', `audio player - ${m}`);
});
this.player.on('error', e => {
/**
* Warning info from the connection
* Warning info from the connection.
* @event VoiceConnection#warn
* @param {string|Error} warning the warning
* @param {string|Error} warning The warning
*/
this.emit('warn', e);
});
@@ -126,8 +126,8 @@ class VoiceConnection extends EventEmitter {
}
/**
* Sets whether the voice connection should display as "speaking" or not
* @param {boolean} value whether or not to speak
* Sets whether the voice connection should display as "speaking" or not.
* @param {boolean} value Whether or not to speak
* @private
*/
setSpeaking(value) {
@@ -145,7 +145,7 @@ class VoiceConnection extends EventEmitter {
}
/**
* Sends a request to the main gateway to join a voice channel
* Sends a request to the main gateway to join a voice channel.
* @param {Object} [options] The options to provide
*/
sendVoiceStateUpdate(options = {}) {
@@ -163,7 +163,7 @@ class VoiceConnection extends EventEmitter {
}
/**
* Set the token and endpoint required to connect to the the voice servers
* Set the token and endpoint required to connect to the the voice servers.
* @param {string} token The voice token
* @param {string} endpoint The voice endpoint
* @returns {void}
@@ -195,7 +195,7 @@ class VoiceConnection extends EventEmitter {
}
/**
* Sets the Session ID for the connection
* Sets the Session ID for the connection.
* @param {string} sessionID The voice session ID
*/
setSessionID(sessionID) {
@@ -210,7 +210,7 @@ class VoiceConnection extends EventEmitter {
} else if (sessionID !== this.authentication.sessionID) {
this.authentication.sessionID = sessionID;
/**
* Emitted when a new session ID is received
* Emitted when a new session ID is received.
* @event VoiceConnection#newSession
* @private
*/
@@ -219,7 +219,7 @@ class VoiceConnection extends EventEmitter {
}
/**
* Checks whether the voice connection is authenticated
* Checks whether the voice connection is authenticated.
* @private
*/
checkAuthenticated() {
@@ -229,7 +229,7 @@ class VoiceConnection extends EventEmitter {
clearTimeout(this.connectTimeout);
this.status = Constants.VoiceStatus.CONNECTING;
/**
* Emitted when we successfully initiate a voice connection
* Emitted when we successfully initiate a voice connection.
* @event VoiceConnection#authenticated
*/
this.emit('authenticated');
@@ -238,7 +238,7 @@ class VoiceConnection extends EventEmitter {
}
/**
* Invoked when we fail to initiate a voice connection
* Invoked when we fail to initiate a voice connection.
* @param {string} reason The reason for failure
* @private
*/
@@ -247,7 +247,7 @@ class VoiceConnection extends EventEmitter {
this.status = Constants.VoiceStatus.DISCONNECTED;
if (this.status === Constants.VoiceStatus.AUTHENTICATING) {
/**
* Emitted when we fail to initiate a voice connection
* Emitted when we fail to initiate a voice connection.
* @event VoiceConnection#failed
* @param {Error} error The encountered error
*/
@@ -258,7 +258,7 @@ class VoiceConnection extends EventEmitter {
}
/**
* Move to a different voice channel in the same guild
* Move to a different voice channel in the same guild.
* @param {VoiceChannel} channel The channel to move to
* @private
*/
@@ -268,7 +268,7 @@ class VoiceConnection extends EventEmitter {
}
/**
* Attempts to authenticate to the voice server
* Attempts to authenticate to the voice server.
* @private
*/
authenticate() {
@@ -278,7 +278,7 @@ class VoiceConnection extends EventEmitter {
}
/**
* Attempts to reconnect to the voice server (typically after a region change)
* Attempts to reconnect to the voice server (typically after a region change).
* @param {string} token The voice token
* @param {string} endpoint The voice endpoint
* @private
@@ -289,7 +289,7 @@ class VoiceConnection extends EventEmitter {
this.status = Constants.VoiceStatus.RECONNECTING;
/**
* Emitted when the voice connection is reconnecting (typically after a region change)
* Emitted when the voice connection is reconnecting (typically after a region change).
* @event VoiceConnection#reconnecting
*/
this.emit('reconnecting');
@@ -308,14 +308,14 @@ class VoiceConnection extends EventEmitter {
this.cleanup();
this.status = Constants.VoiceStatus.DISCONNECTED;
/**
* Emitted when the voice connection disconnects
* Emitted when the voice connection disconnects.
* @event VoiceConnection#disconnect
*/
this.emit('disconnect');
}
/**
* Cleans up after disconnect
* Cleans up after disconnect.
* @private
*/
cleanup() {
@@ -335,7 +335,7 @@ class VoiceConnection extends EventEmitter {
}
/**
* Connect the voice connection
* Connect the voice connection.
* @private
*/
connect() {
@@ -360,7 +360,7 @@ class VoiceConnection extends EventEmitter {
}
/**
* Invoked when the voice websocket is ready
* Invoked when the voice websocket is ready.
* @param {Object} data The received data
* @private
*/
@@ -381,7 +381,7 @@ class VoiceConnection extends EventEmitter {
}
/**
* Invoked when a session description is received
* Invoked when a session description is received.
* @param {string} mode The encryption mode
* @param {string} secret The secret key
* @private
@@ -400,7 +400,7 @@ class VoiceConnection extends EventEmitter {
}
/**
* Invoked when a speaking event is received
* Invoked when a speaking event is received.
* @param {Object} data The received data
* @private
*/
@@ -414,7 +414,7 @@ class VoiceConnection extends EventEmitter {
}
}
/**
* Emitted whenever a user starts/stops speaking
* Emitted whenever a user starts/stops speaking.
* @event VoiceConnection#speaking
* @param {User} user The user that has started/stopped speaking
* @param {boolean} speaking Whether or not the user is speaking
@@ -500,8 +500,8 @@ class VoiceConnection extends EventEmitter {
}
/**
* Plays a voice broadcast
* @param {VoiceBroadcast} broadcast the broadcast to play
* Plays a voice broadcast.
* @param {VoiceBroadcast} broadcast The broadcast to play
* @returns {StreamDispatcher}
* @example
* // Play a broadcast

View File

@@ -4,7 +4,7 @@ const Constants = require('../../util/Constants');
const EventEmitter = require('events').EventEmitter;
/**
* Represents a UDP Client for a Voice Connection
* Represents a UDP client for a Voice Connection.
* @extends {EventEmitter}
* @private
*/
@@ -25,7 +25,7 @@ class VoiceConnectionUDPClient extends EventEmitter {
this.socket = null;
/**
* The address of the discord voice server
* The address of the Discord voice server
* @type {?string}
*/
this.discordAddress = null;
@@ -57,7 +57,7 @@ class VoiceConnectionUDPClient extends EventEmitter {
}
/**
* The port of the discord voice server
* The port of the Discord voice server
* @type {number}
* @readonly
*/
@@ -66,7 +66,7 @@ class VoiceConnectionUDPClient extends EventEmitter {
}
/**
* Tries to resolve the voice server endpoint to an address
* Tries to resolve the voice server endpoint to an address.
* @returns {Promise<string>}
*/
findEndpointAddress() {
@@ -83,7 +83,7 @@ class VoiceConnectionUDPClient extends EventEmitter {
}
/**
* Send a packet to the UDP client
* Send a packet to the UDP client.
* @param {Object} packet The packet to send
* @returns {Promise<Object>}
*/

View File

@@ -10,7 +10,7 @@ try {
}
/**
* Represents a Voice Connection's WebSocket
* Represents a Voice Connection's WebSocket.
* @extends {EventEmitter}
* @private
*/
@@ -18,6 +18,12 @@ class VoiceWebSocket extends EventEmitter {
constructor(voiceConnection) {
super();
/**
* The client of this voice WebSocket
* @type {Client}
*/
this.client = voiceConnection.voiceManager.client;
/**
* The Voice Connection that this WebSocket serves
* @type {VoiceConnection}
@@ -41,16 +47,7 @@ class VoiceWebSocket extends EventEmitter {
}
/**
* The client of this voice websocket
* @type {Client}
* @readonly
*/
get client() {
return this.voiceConnection.voiceManager.client;
}
/**
* Resets the current WebSocket
* Resets the current WebSocket.
*/
reset() {
if (this.ws) {
@@ -86,7 +83,7 @@ class VoiceWebSocket extends EventEmitter {
/**
* Sends data to the WebSocket if it is open.
* @param {string} data the data to send to the WebSocket
* @param {string} data The data to send to the WebSocket
* @returns {Promise<string>}
*/
send(data) {
@@ -102,7 +99,7 @@ class VoiceWebSocket extends EventEmitter {
/**
* JSON.stringify's a packet and then sends it to the WebSocket Server.
* @param {Object} packet the packet to send
* @param {Object} packet The packet to send
* @returns {Promise<string>}
*/
sendPacket(packet) {
@@ -115,7 +112,7 @@ class VoiceWebSocket extends EventEmitter {
}
/**
* Called whenever the WebSocket opens
* Called whenever the WebSocket opens.
*/
onOpen() {
this.sendPacket({
@@ -132,8 +129,8 @@ class VoiceWebSocket extends EventEmitter {
}
/**
* Called whenever a message is received from the WebSocket
* @param {MessageEvent} event the message event that was received
* Called whenever a message is received from the WebSocket.
* @param {MessageEvent} event The message event that was received
* @returns {void}
*/
onMessage(event) {
@@ -145,7 +142,7 @@ class VoiceWebSocket extends EventEmitter {
}
/**
* Called whenever the connection to the WebSocket Server is lost
* Called whenever the connection to the WebSocket server is lost.
*/
onClose() {
if (!this.dead) this.client.setTimeout(this.connect.bind(this), this.attempts * 1000);
@@ -160,7 +157,7 @@ class VoiceWebSocket extends EventEmitter {
}
/**
* Called whenever a valid packet is received from the WebSocket
* Called whenever a valid packet is received from the WebSocket.
* @param {Object} packet The received packet
*/
onPacket(packet) {
@@ -168,7 +165,7 @@ class VoiceWebSocket extends EventEmitter {
case Constants.VoiceOPCodes.READY:
this.setHeartbeat(packet.d.heartbeat_interval);
/**
* Emitted once the voice websocket receives the ready packet
* Emitted once the voice WebSocket receives the ready packet.
* @param {Object} packet The received packet
* @event VoiceWebSocket#ready
*/
@@ -176,7 +173,7 @@ class VoiceWebSocket extends EventEmitter {
break;
case Constants.VoiceOPCodes.SESSION_DESCRIPTION:
/**
* Emitted once the Voice Websocket receives a description of this voice session
* Emitted once the Voice Websocket receives a description of this voice session.
* @param {string} encryptionMode The type of encryption being used
* @param {SecretKey} secretKey The secret key used for encryption
* @event VoiceWebSocket#sessionDescription
@@ -185,7 +182,7 @@ class VoiceWebSocket extends EventEmitter {
break;
case Constants.VoiceOPCodes.SPEAKING:
/**
* Emitted whenever a speaking packet is received
* Emitted whenever a speaking packet is received.
* @param {Object} data
* @event VoiceWebSocket#speaking
*/
@@ -193,7 +190,7 @@ class VoiceWebSocket extends EventEmitter {
break;
default:
/**
* Emitted when an unhandled packet is received
* Emitted when an unhandled packet is received.
* @param {Object} packet
* @event VoiceWebSocket#unknownPacket
*/
@@ -203,7 +200,7 @@ class VoiceWebSocket extends EventEmitter {
}
/**
* Sets an interval at which to send a heartbeat packet to the WebSocket
* Sets an interval at which to send a heartbeat packet to the WebSocket.
* @param {number} interval The interval at which to send a heartbeat packet
*/
setHeartbeat(interval) {
@@ -213,7 +210,7 @@ class VoiceWebSocket extends EventEmitter {
}
if (this.heartbeatInterval) {
/**
* Emitted whenver the voice websocket encounters a non-fatal error
* Emitted whenver the voice WebSocket encounters a non-fatal error.
* @param {string} warn The warning
* @event VoiceWebSocket#warn
*/
@@ -224,7 +221,7 @@ class VoiceWebSocket extends EventEmitter {
}
/**
* Clears a heartbeat interval, if one exists
* Clears a heartbeat interval, if one exists.
*/
clearHeartbeat() {
if (!this.heartbeatInterval) {
@@ -236,7 +233,7 @@ class VoiceWebSocket extends EventEmitter {
}
/**
* Sends a heartbeat packet
* Sends a heartbeat packet.
*/
sendHeartbeat() {
this.sendPacket({ op: Constants.VoiceOPCodes.HEARTBEAT, d: null }).catch(() => {

View File

@@ -53,7 +53,7 @@ class StreamDispatcher extends VolumeInterface {
/**
* How many passes the dispatcher should take when sending packets to reduce packet loss. Values over 5
* aren't recommended, as it means you are using 5x more bandwidth. You _can_ edit this at runtime.
* aren't recommended, as it means you are using 5x more bandwidth. You _can_ edit this at runtime
* @type {number}
* @readonly
*/
@@ -100,7 +100,7 @@ class StreamDispatcher extends VolumeInterface {
/**
* Stops the current stream permanently and emits an `end` event.
* @param {string} [reason='user'] An optional reason for stopping the dispatcher.
* @param {string} [reason='user'] An optional reason for stopping the dispatcher
*/
end(reason = 'user') {
this.destroy('end', reason);
@@ -110,7 +110,7 @@ class StreamDispatcher extends VolumeInterface {
if (this.speaking === value) return;
this.speaking = value;
/**
* Emitted when the dispatcher starts/stops speaking
* Emitted when the dispatcher starts/stops speaking.
* @event StreamDispatcher#speaking
* @param {boolean} value Whether or not the dispatcher is speaking
*/
@@ -126,7 +126,7 @@ class StreamDispatcher extends VolumeInterface {
sendPacket(packet) {
let repeats = this.passes;
/**
* Emitted whenever the dispatcher has debug information
* Emitted whenever the dispatcher has debug information.
* @event StreamDispatcher#debug
* @param {string} info the debug info
*/
@@ -260,7 +260,7 @@ class StreamDispatcher extends VolumeInterface {
if (!data.startTime) {
/**
* Emitted once the dispatcher starts streaming
* Emitted once the dispatcher starts streaming.
* @event StreamDispatcher#start
*/
this.emit('start');
@@ -281,7 +281,7 @@ class StreamDispatcher extends VolumeInterface {
this.setSpeaking(false);
this.emit(type, reason);
/**
* Emitted once the dispatcher ends
* Emitted once the dispatcher ends.
* @param {string} [reason] the reason the dispatcher ended
* @event StreamDispatcher#end
*/
@@ -291,9 +291,9 @@ class StreamDispatcher extends VolumeInterface {
startStreaming() {
if (!this.stream) {
/**
* Emitted if the dispatcher encounters an error
* Emitted if the dispatcher encounters an error.
* @event StreamDispatcher#error
* @param {string} error the error message
* @param {string} error The error message
*/
this.emit('error', 'No stream');
return;

View File

@@ -13,7 +13,7 @@ const ffmpegArguments = [
];
/**
* An Audio Player for a Voice Connection
* An Audio Player for a Voice Connection.
* @private
* @extends {EventEmitter}
*/

View File

@@ -21,7 +21,7 @@ class VoiceReceiver extends EventEmitter {
super();
/*
Need a queue because we don't get the ssrc of the user speaking until after the first few packets,
so we queue up unknown SSRCs until they become known, then empty the queue.
so we queue up unknown SSRCs until they become known, then empty the queue
*/
this.queues = new Map();
this.pcmStreams = new Map();
@@ -29,7 +29,7 @@ class VoiceReceiver extends EventEmitter {
this.opusEncoders = new Map();
/**
* Whether or not this receiver has been destroyed.
* Whether or not this receiver has been destroyed
* @type {boolean}
*/
this.destroyed = false;
@@ -91,7 +91,7 @@ class VoiceReceiver extends EventEmitter {
}
/**
* Invoked when a user stops speaking
* Invoked when a user stops speaking.
* @param {User} user The user that stopped speaking
* @private
*/
@@ -153,7 +153,7 @@ class VoiceReceiver extends EventEmitter {
* @event VoiceReceiver#warn
* @param {string} reason The reason for the warning. If it happened because the voice packet could not be
* decrypted, this would be `decrypt`. If it happened because the voice packet could not be decoded into
* PCM, this would be `decode`.
* PCM, this would be `decode`
* @param {string} message The warning message
*/
this.emit('warn', 'decrypt', 'Failed to decrypt voice packet');

View File

@@ -1,5 +1,5 @@
/**
* Represents a Secret Key used in encryption over voice
* Represents a Secret Key used in encryption over voice.
* @private
*/
class SecretKey {

View File

@@ -10,51 +10,6 @@ class VolumeInterface extends EventEmitter {
this.setVolume(volume || 1);
}
applyVolume(buffer, volume) {
volume = volume || this._volume;
if (volume === 1) return buffer;
const out = new Buffer(buffer.length);
for (let i = 0; i < buffer.length; i += 2) {
if (i >= buffer.length - 1) break;
const uint = Math.min(32767, Math.max(-32767, Math.floor(volume * buffer.readInt16LE(i))));
out.writeInt16LE(uint, i);
}
return out;
}
/**
* Sets the volume relative to the input stream - i.e. 1 is normal, 0.5 is half, 2 is double.
* @param {number} volume The volume that you want to set
*/
setVolume(volume) {
/**
* Emitted when the volume of this interface changes
* @event VolumeInterface#volumeChange
* @param {number} oldVolume The old volume of this interface
* @param {number} newVolume The new volume of this interface
*/
this.emit('volumeChange', this._volume, volume);
this._volume = volume;
}
/**
* Set the volume in decibels
* @param {number} db The decibels
*/
setVolumeDecibels(db) {
this.setVolume(Math.pow(10, db / 20));
}
/**
* Set the volume so that a perceived value of 0.5 is half the perceived volume etc.
* @param {number} value The value for the volume
*/
setVolumeLogarithmic(value) {
this.setVolume(Math.pow(value, 1.660964));
}
/**
* The current volume of the broadcast
* @readonly
@@ -81,6 +36,51 @@ class VolumeInterface extends EventEmitter {
get volumeLogarithmic() {
return Math.pow(this._volume, 1 / 1.660964);
}
applyVolume(buffer, volume) {
volume = volume || this._volume;
if (volume === 1) return buffer;
const out = new Buffer(buffer.length);
for (let i = 0; i < buffer.length; i += 2) {
if (i >= buffer.length - 1) break;
const uint = Math.min(32767, Math.max(-32767, Math.floor(volume * buffer.readInt16LE(i))));
out.writeInt16LE(uint, i);
}
return out;
}
/**
* Sets the volume relative to the input stream - i.e. 1 is normal, 0.5 is half, 2 is double.
* @param {number} volume The volume that you want to set
*/
setVolume(volume) {
/**
* Emitted when the volume of this interface changes.
* @event VolumeInterface#volumeChange
* @param {number} oldVolume The old volume of this interface
* @param {number} newVolume The new volume of this interface
*/
this.emit('volumeChange', this._volume, volume);
this._volume = volume;
}
/**
* Set the volume in decibels.
* @param {number} db The decibels
*/
setVolumeDecibels(db) {
this.setVolume(Math.pow(10, db / 20));
}
/**
* Set the volume so that a perceived value of 0.5 is half the perceived volume etc.
* @param {number} value The value for the volume
*/
setVolumeLogarithmic(value) {
this.setVolume(Math.pow(value, 1.660964));
}
}
module.exports = VolumeInterface;