This commit is contained in:
hydrabolt
2016-04-16 22:58:49 +01:00
commit 9956e43c8e
43 changed files with 1634 additions and 0 deletions

View File

@@ -0,0 +1,53 @@
'use strict';
const request = require('superagent');
const Constants = require('../../util/Constants');
const UserAgentManager = require('./UserAgentManager');
const RESTMethods = require('./RESTMethods');
class RESTManager{
constructor(client) {
this.client = client;
this.queue = [];
this.userAgentManager = new UserAgentManager(this);
this.methods = new RESTMethods(this);
}
makeRequest(method, url, auth, data, file) {
/*
file is {file, name}
*/
let apiRequest = request[method](url);
if (auth) {
if (this.client.store.token) {
apiRequest.set('authorization', this.client.store.token);
} else {
throw Constants.Errors.NO_TOKEN;
}
}
if (data) {
apiRequest.send(data);
}
if (file) {
apiRequest.attach('file', file.file, file.name);
}
apiRequest.set('User-Agent', this.userAgentManager.userAgent);
return new Promise((resolve, reject) => {
apiRequest.end((err, res) => {
if (err) {
reject(err);
} else {
resolve(res ? res.body || {} : {});
}
});
});
}
};
module.exports = RESTManager;

View File

@@ -0,0 +1,37 @@
'use strict';
const Constants = require('../../util/Constants');
class RESTMethods{
constructor(restManager) {
this.rest = restManager;
}
LoginEmailPassword(email, password) {
return new Promise((resolve, reject) => {
this.rest.makeRequest('post', Constants.Endpoints.LOGIN, false, { email, password })
.then(data => {
this.rest.client.manager.connectToWebSocket(data.token, resolve, reject);
})
.catch(reject);
});
}
LoginToken(token) {
return new Promise((resolve, reject) => {
this.rest.client.manager.connectToWebSocket(token, resolve, reject);
});
}
GetGateway() {
return new Promise((resolve, reject) => {
this.rest.makeRequest('get', Constants.Endpoints.GATEWAY, true)
.then(res => resolve(res.url))
.catch(reject);
});
}
}
module.exports = RESTMethods;

View File

@@ -0,0 +1,24 @@
'use strict';
const Constants = require('../../util/Constants');
class UserAgentManager{
constructor(restManager) {
this.restManager = restManager;
this._userAgent = {
url: 'https://github.com/hydrabolt/discord.js',
version: Constants.Package.version,
};
}
set(info) {
this._userAgent.url = info.url || 'https://github.com/hydrabolt/discord.js';
this._userAgent.version = info.version || Constants.Package.version;
}
get userAgent() {
return `DiscordBot (${this._userAgent.url}, ${this._userAgent.version})`;
}
}
module.exports = UserAgentManager;