const GuildChannel = require('./GuildChannel'); const Collection = require('../util/Collection'); /** * Represents a Server Voice Channel on Discord. * @extends {GuildChannel} */ class VoiceChannel extends GuildChannel { constructor(guild, data) { super(guild, data); /** * The members in this Voice Channel. * @type {Collection} */ this.members = new Collection(); this.type = 'voice'; } setup(data) { super.setup(data); /** * The bitrate of this voice channel * @type {number} */ this.bitrate = data.bitrate; /** * The maximum amount of users allowed in this channel - 0 means unlimited. * @type {number} */ this.userLimit = data.user_limit; } /** * Sets the bitrate of the channel * @param {number} bitrate The new bitrate * @returns {Promise} * @example * // set the bitrate of a voice channel * voiceChannel.setBitrate(48000) * .then(vc => console.log(`Set bitrate to ${vc.bitrate} for ${vc.name}`)) * .catch(console.log); */ setBitrate(bitrate) { return this.rest.client.rest.methods.updateChannel(this, { bitrate }); } /** * Attempts to join this Voice Channel * @returns {Promise} * @example * // join a voice channel * voiceChannel.join() * .then(connection => console.log('Connected!')) * .catch(console.log); */ join() { return this.client.voice.joinChannel(this); } /** * Leaves this voice channel * @example * // leave a voice channel * voiceChannel.leave(); */ leave() { const connection = this.client.voice.connections.get(this.guild.id); if (connection && connection.channel.id === this.id) connection.disconnect(); } /** * If connected to this guild's voice channel and the client is marked as being in this voice channel, * then this will give the relevant voice connection. * @type {VoiceConnection} * @readonly */ get connection() { const connection = this.client.voice.connections.get(this.guild.id); if (connection.channel.id === this.id) { return connection; } return undefined; } } module.exports = VoiceChannel;