add voice region getting (#1108)

* add voice region getting

* clean up this mess

* add docstrings

* Update VoiceRegion.js

* Update RESTMethods.js
This commit is contained in:
Gus Caplan
2017-01-18 18:14:44 -06:00
committed by Schuyler Cebulskie
parent ff92905848
commit 3f4cbd07dd
5 changed files with 79 additions and 0 deletions

View File

@@ -298,6 +298,14 @@ class Client extends EventEmitter {
return this.rest.methods.getWebhook(id, token);
}
/**
* Fetch available voice regions
* @returns {Collection<string, VoiceRegion>}
*/
fetchVoiceRegions() {
return this.rest.methods.fetchVoiceRegions();
}
/**
* Sweeps all channels' messages and removes the ones older than the max message lifetime.
* If the message has been edited, the time of the edit is used rather than the time of the original message.

View File

@@ -17,6 +17,7 @@ const UserProfile = require('../../structures/UserProfile');
const ClientOAuth2Application = require('../../structures/ClientOAuth2Application');
const Channel = require('../../structures/Channel');
const Guild = require('../../structures/Guild');
const VoiceRegion = require('../../structures/VoiceRegion');
class RESTMethods {
constructor(restManager) {
@@ -47,6 +48,15 @@ class RESTMethods {
return this.rest.makeRequest('get', Constants.Endpoints.botGateway, true);
}
fetchVoiceRegions(guildID) {
const endpoint = Constants.Endpoints[guildID ? 'guildVoiceRegions' : 'voiceRegions'];
return this.rest.makeRequest('get', guildID ? endpoint(guildID) : endpoint, true).then(res => {
const regions = new Collection();
for (const region of res) regions.set(region.id, new VoiceRegion(region));
return regions;
});
}
sendMessage(channel, content, { tts, nonce, embed, disableEveryone, split, code, reply } = {}, file = null) {
return new Promise((resolve, reject) => { // eslint-disable-line complexity
if (typeof content !== 'undefined') content = this.client.resolver.resolveString(content);

View File

@@ -322,6 +322,14 @@ class Guild {
return this.client.rest.methods.getGuildWebhooks(this);
}
/**
* Fetch available voice regions
* @returns {Collection<string, VoiceRegion>}
*/
fetchVoiceRegions() {
return this.client.rest.methods.fetchVoiceRegions(this.id);
}
/**
* Fetch a single guild member from a user.
* @param {UserResolvable} user The user to fetch the member for

View File

@@ -0,0 +1,50 @@
/**
* Represents a Discord voice region for guilds
*/
class VoiceRegion {
constructor(data) {
/**
* ID of the region
* @type {string}
*/
this.id = data.id;
/**
* Name of the region
* @type {string}
*/
this.name = data.name;
/**
* Whether the region is VIP-only
* @type {boolean}
*/
this.vip = data.vip;
/**
* Whether the region is deprecated
* @type {boolean}
*/
this.deprecated = data.deprecated;
/**
* Whether the region is optimal
* @type {boolean}
*/
this.optimal = data.optimal;
/**
* Whether the region is custom
* @type {boolean}
*/
this.custom = data.custom;
/**
* A sample hostname for what a connection might look like
* @type {string}
*/
this.sampleHostname = data.sample_hostname;
}
}
module.exports = VoiceRegion;

View File

@@ -105,6 +105,8 @@ const Endpoints = exports.Endpoints = {
relationships: (userID) => `${Endpoints.user(userID)}/relationships`,
note: (userID) => `${Endpoints.me}/notes/${userID}`,
voiceRegions: `${API}/voice/regions`,
// guilds
guilds: `${API}/guilds`,
guild: (guildID) => `${Endpoints.guilds}/${guildID}`,
@@ -124,6 +126,7 @@ const Endpoints = exports.Endpoints = {
guildChannels: (guildID) => `${Endpoints.guild(guildID)}/channels`,
guildEmojis: (guildID) => `${Endpoints.guild(guildID)}/emojis`,
guildSearch: (guildID) => `${Endpoints.guild(guildID)}/messages/search`,
guildVoiceRegions: (guildID) => `${Endpoints.guild(guildID)}/regions`,
// channels
channels: `${API}/channels`,