Built src again using the correct preset

This commit is contained in:
Amish Shah
2015-11-22 15:12:39 +00:00
parent 68b60c5464
commit b22995f254
27 changed files with 4288 additions and 3142 deletions

5
.babelrc Normal file
View File

@@ -0,0 +1,5 @@
{
"presets": [
"es2015"
]
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,3 +1,5 @@
"use strict";
exports.IDLE = 0; exports.IDLE = 0;
exports.LOGGING_IN = 1; exports.LOGGING_IN = 1;
exports.LOGGED_IN = 2; exports.LOGGED_IN = 2;

File diff suppressed because it is too large Load Diff

View File

@@ -2,6 +2,11 @@
/* global Buffer */ /* global Buffer */
; ;
var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var fs = require("fs"); var fs = require("fs");
var User = require("../../Structures/User.js"), var User = require("../../Structures/User.js"),
@@ -15,176 +20,263 @@ var User = require("../../Structures/User.js"),
Invite = require("../../Structures/Invite.js"), Invite = require("../../Structures/Invite.js"),
Games = require("../../../ref/gameMap.js"); Games = require("../../../ref/gameMap.js");
class Resolver { var Resolver = (function () {
constructor(internal) { function Resolver(internal) {
_classCallCheck(this, Resolver);
this.internal = internal; this.internal = internal;
} }
resolveGameID(resource) { _createClass(Resolver, [{
if (!isNaN(resource) && parseInt(resource) % 1 === 0) { key: "resolveGameID",
return resource; value: function resolveGameID(resource) {
} else if (typeof resource == "string" || resource instanceof String) { if (!isNaN(resource) && parseInt(resource) % 1 === 0) {
return resource;
} else if (typeof resource == "string" || resource instanceof String) {
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
for (var game of Games) { try {
if (game.name.toUpperCase() === resource.toUpperCase()) {
return game.id; for (var _iterator = Games[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var game = _step.value;
if (game.name.toUpperCase() === resource.toUpperCase()) {
return game.id;
}
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
} }
} }
return null;
} }
}, {
return null; key: "resolveToBase64",
} value: function resolveToBase64(resource) {
if (resource instanceof Buffer) {
resolveToBase64(resource) { resource = resource.toString("base64");
if (resource instanceof Buffer) { resource = "data:image/jpg;base64," + resource;
resource = resource.toString("base64"); }
resource = "data:image/jpg;base64," + resource; return resource;
} }
return resource; }, {
} key: "resolveInviteID",
value: function resolveInviteID(resource) {
if (resource instanceof Invite) {
return resource.id;
} else if (typeof resource == "string" || resource instanceof String) {
resolveInviteID(resource) { if (resource.indexOf("http") === 0) {
if (resource instanceof Invite) { var split = resource.split("/");
return resource.id; return split.pop();
} else if (typeof resource == "string" || resource instanceof String) { } else {
return resource;
if (resource.indexOf("http") === 0) { }
var split = resource.split("/"); }
return split.pop(); return null;
}
}, {
key: "resolveServer",
value: function resolveServer(resource) {
if (resource instanceof Server) {
return resource;
} else if (resource instanceof ServerChannel) {
return resource.server;
} else if (resource instanceof String || typeof resource === "string") {
return this.internal.servers.get("id", resource);
} else if (resource instanceof Message) {
if (resource.channel instanceof TextChannel) {
return resource.server;
}
}
return null;
}
}, {
key: "resolveFile",
value: function resolveFile(resource) {
if (typeof resource === "string" || resource instanceof String) {
return fs.createReadStream(resource);
} else { } else {
return resource; return resource;
} }
} }
return null; }, {
} key: "resolveMentions",
value: function resolveMentions(resource) {
// resource is a string
var _mentions = [];
var _iteratorNormalCompletion2 = true;
var _didIteratorError2 = false;
var _iteratorError2 = undefined;
resolveServer(resource) { try {
if (resource instanceof Server) { for (var _iterator2 = (resource.match(/<@[^>]*>/g) || [])[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
return resource; var mention = _step2.value;
} else if (resource instanceof ServerChannel) {
return resource.server;
} else if (resource instanceof String || typeof resource === "string") {
return this.internal.servers.get("id", resource);
} else if (resource instanceof Message) {
if (resource.channel instanceof TextChannel) {
return resource.server;
}
}
return null;
}
resolveFile(resource) { _mentions.push(mention.substring(2, mention.length - 1));
if (typeof resource === "string" || resource instanceof String) { }
return fs.createReadStream(resource); } catch (err) {
} else { _didIteratorError2 = true;
return resource; _iteratorError2 = err;
} } finally {
} try {
if (!_iteratorNormalCompletion2 && _iterator2.return) {
resolveMentions(resource) { _iterator2.return();
// resource is a string }
var _mentions = []; } finally {
for (var mention of resource.match(/<@[^>]*>/g) || []) { if (_didIteratorError2) {
_mentions.push(mention.substring(2, mention.length - 1)); throw _iteratorError2;
}
return _mentions;
}
resolveString(resource) {
// accepts Array, Channel, Server, User, Message, String and anything
// toString()-able
var final = resource;
if (resource instanceof Array) {
final = resource.join("\n");
}
return final.toString();
}
resolveUser(resource) {
/*
accepts a Message, Channel, Server, String ID, User, PMChannel
*/
var found = null;
if (resource instanceof User) {
found = resource;
} else if (resource instanceof Message) {
found = resource.author;
} else if (resource instanceof TextChannel) {
var lmsg = resource.lastMessage;
if (lmsg) {
found = lmsg.author;
}
} else if (resource instanceof Server) {
found = resource.owner;
} else if (resource instanceof PMChannel) {
found = resource.recipient;
} else if (resource instanceof String || typeof resource === "string") {
found = this.client.internal.users.get("id", resource);
}
return found;
}
resolveMessage(resource) {
// accepts a Message, PMChannel & TextChannel
var found = null;
if (resource instanceof TextChannel || resource instanceof PMChannel) {
found = resource.lastMessage;
} else if (resource instanceof Message) {
found = resource;
}
return found;
}
resolveVoiceChannel(resource) {
// resolveChannel will also work but this is more apt
if (resource instanceof VoiceChannel) {
return resource;
}
return null;
}
resolveChannel(resource) {
/*
accepts a Message, Channel, Server, String ID, User
*/
var self = this;
return new Promise((resolve, reject) => {
var found = null;
if (resource instanceof Message) {
found = resource.channel;
} else if (resource instanceof Channel) {
found = resource;
} else if (resource instanceof Server) {
found = resource.channels.get("id", resource.id);
} else if (resource instanceof String || typeof resource === "string") {
found = self.internal.channels.get("id", resource);
} else if (resource instanceof User) {
// see if a PM exists
var chatFound = false;
for (var pmchat of self.internal.private_channels) {
if (pmchat.recipient.equals(resource)) {
chatFound = pmchat;
break;
} }
} }
if (chatFound) {
// a PM already exists!
found = chatFound;
} else {
// PM does not exist :\
self.internal.startPM(resource).then(pmchannel => resolve(pmchannel)).catch(e => reject(e));
return;
}
} }
if (found) resolve(found);else reject(new Error("Didn't found anything"));
}); return _mentions;
} }
} }, {
key: "resolveString",
value: function resolveString(resource) {
// accepts Array, Channel, Server, User, Message, String and anything
// toString()-able
var final = resource;
if (resource instanceof Array) {
final = resource.join("\n");
}
return final.toString();
}
}, {
key: "resolveUser",
value: function resolveUser(resource) {
/*
accepts a Message, Channel, Server, String ID, User, PMChannel
*/
var found = null;
if (resource instanceof User) {
found = resource;
} else if (resource instanceof Message) {
found = resource.author;
} else if (resource instanceof TextChannel) {
var lmsg = resource.lastMessage;
if (lmsg) {
found = lmsg.author;
}
} else if (resource instanceof Server) {
found = resource.owner;
} else if (resource instanceof PMChannel) {
found = resource.recipient;
} else if (resource instanceof String || typeof resource === "string") {
found = this.client.internal.users.get("id", resource);
}
return found;
}
}, {
key: "resolveMessage",
value: function resolveMessage(resource) {
// accepts a Message, PMChannel & TextChannel
var found = null;
if (resource instanceof TextChannel || resource instanceof PMChannel) {
found = resource.lastMessage;
} else if (resource instanceof Message) {
found = resource;
}
return found;
}
}, {
key: "resolveVoiceChannel",
value: function resolveVoiceChannel(resource) {
// resolveChannel will also work but this is more apt
if (resource instanceof VoiceChannel) {
return resource;
}
return null;
}
}, {
key: "resolveChannel",
value: function resolveChannel(resource) {
/*
accepts a Message, Channel, Server, String ID, User
*/
var self = this;
return new Promise(function (resolve, reject) {
var found = null;
if (resource instanceof Message) {
found = resource.channel;
} else if (resource instanceof Channel) {
found = resource;
} else if (resource instanceof Server) {
found = resource.channels.get("id", resource.id);
} else if (resource instanceof String || typeof resource === "string") {
found = self.internal.channels.get("id", resource);
} else if (resource instanceof User) {
// see if a PM exists
var chatFound = false;
var _iteratorNormalCompletion3 = true;
var _didIteratorError3 = false;
var _iteratorError3 = undefined;
try {
for (var _iterator3 = self.internal.private_channels[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
var pmchat = _step3.value;
if (pmchat.recipient.equals(resource)) {
chatFound = pmchat;
break;
}
}
} catch (err) {
_didIteratorError3 = true;
_iteratorError3 = err;
} finally {
try {
if (!_iteratorNormalCompletion3 && _iterator3.return) {
_iterator3.return();
}
} finally {
if (_didIteratorError3) {
throw _iteratorError3;
}
}
}
if (chatFound) {
// a PM already exists!
found = chatFound;
} else {
// PM does not exist :\
self.internal.startPM(resource).then(function (pmchannel) {
return resolve(pmchannel);
}).catch(function (e) {
return reject(e);
});
return;
}
}
if (found) resolve(found);else reject(new Error("Didn't found anything"));
});
}
}]);
return Resolver;
})();
module.exports = Resolver; module.exports = Resolver;

View File

@@ -1,35 +1,75 @@
"use strict";
var API = "https://discordapp.com/api"; var API = "https://discordapp.com/api";
var Endpoints = { var Endpoints = {
// general endpoints // general endpoints
LOGIN: `${ API }/auth/login`, LOGIN: API + "/auth/login",
LOGOUT: `${ API }/auth/logout`, LOGOUT: API + "/auth/logout",
ME: `${ API }/users/@me`, ME: API + "/users/@me",
GATEWAY: `${ API }/gateway`, GATEWAY: API + "/gateway",
USER_CHANNELS: userID => `${ API }/users/${ userID }/channels`, USER_CHANNELS: function USER_CHANNELS(userID) {
AVATAR: (userID, avatar) => `${ API }/users/${ userID }/avatars/${ avatar }.jpg`, return API + "/users/" + userID + "/channels";
INVITE: id => `${ API }/invite/${ id }`, },
AVATAR: function AVATAR(userID, avatar) {
return API + "/users/" + userID + "/avatars/" + avatar + ".jpg";
},
INVITE: function INVITE(id) {
return API + "/invite/" + id;
},
// servers // servers
SERVERS: `${ API }/guilds`, SERVERS: API + "/guilds",
SERVER: serverID => `${ Endpoints.SERVERS }/${ serverID }`, SERVER: function SERVER(serverID) {
SERVER_ICON: (serverID, hash) => `${ Endpoints.SERVER(serverID) }/icons/${ hash }.jpg`, return Endpoints.SERVERS + "/" + serverID;
SERVER_PRUNE: serverID => `${ Endpoints.SERVER(serverID) }/prune`, },
SERVER_EMBED: serverID => `${ Endpoints.SERVER(serverID) }/embed`, SERVER_ICON: function SERVER_ICON(serverID, hash) {
SERVER_INVITES: serverID => `${ Endpoints.SERVER(serverID) }/invites`, return Endpoints.SERVER(serverID) + "/icons/" + hash + ".jpg";
SERVER_ROLES: serverID => `${ Endpoints.SERVER(serverID) }/roles`, },
SERVER_BANS: serverID => `${ Endpoints.SERVER(serverID) }/bans`, SERVER_PRUNE: function SERVER_PRUNE(serverID) {
SERVER_INTEGRATIONS: serverID => `${ Endpoints.SERVER(serverID) }/integrations`, return Endpoints.SERVER(serverID) + "/prune";
SERVER_MEMBERS: serverID => `${ Endpoints.SERVER(serverID) }/members`, },
SERVER_CHANNELS: serverID => `${ Endpoints.SERVER(serverID) }/channels`, SERVER_EMBED: function SERVER_EMBED(serverID) {
return Endpoints.SERVER(serverID) + "/embed";
},
SERVER_INVITES: function SERVER_INVITES(serverID) {
return Endpoints.SERVER(serverID) + "/invites";
},
SERVER_ROLES: function SERVER_ROLES(serverID) {
return Endpoints.SERVER(serverID) + "/roles";
},
SERVER_BANS: function SERVER_BANS(serverID) {
return Endpoints.SERVER(serverID) + "/bans";
},
SERVER_INTEGRATIONS: function SERVER_INTEGRATIONS(serverID) {
return Endpoints.SERVER(serverID) + "/integrations";
},
SERVER_MEMBERS: function SERVER_MEMBERS(serverID) {
return Endpoints.SERVER(serverID) + "/members";
},
SERVER_CHANNELS: function SERVER_CHANNELS(serverID) {
return Endpoints.SERVER(serverID) + "/channels";
},
// channels // channels
CHANNELS: `${ API }/channels`, CHANNELS: API + "/channels",
CHANNEL: channelID => `${ Endpoints.CHANNELS }/${ channelID }`, CHANNEL: function CHANNEL(channelID) {
CHANNEL_MESSAGES: channelID => `${ Endpoints.CHANNEL(channelID) }/messages`, return Endpoints.CHANNELS + "/" + channelID;
CHANNEL_INVITES: channelID => `${ Endpoints.CHANNEL(channelID) }/invites`, },
CHANNEL_TYPING: channelID => `${ Endpoints.CHANNEL(channelID) }/typing`, CHANNEL_MESSAGES: function CHANNEL_MESSAGES(channelID) {
CHANNEL_PERMISSIONS: channelID => `${ Endpoints.CHANNEL(channelID) }/permissions`, return Endpoints.CHANNEL(channelID) + "/messages";
CHANNEL_MESSAGE: (channelID, messageID) => `${ Endpoints.CHANNEL_MESSAGES(channelID) }/${ messageID }` },
CHANNEL_INVITES: function CHANNEL_INVITES(channelID) {
return Endpoints.CHANNEL(channelID) + "/invites";
},
CHANNEL_TYPING: function CHANNEL_TYPING(channelID) {
return Endpoints.CHANNEL(channelID) + "/typing";
},
CHANNEL_PERMISSIONS: function CHANNEL_PERMISSIONS(channelID) {
return Endpoints.CHANNEL(channelID) + "/permissions";
},
CHANNEL_MESSAGE: function CHANNEL_MESSAGE(channelID, messageID) {
return Endpoints.CHANNEL_MESSAGES(channelID) + "/" + messageID;
}
}; };
var Permissions = { var Permissions = {

View File

@@ -1,26 +1,44 @@
"use strict"; "use strict";
var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
var Equality = require("../Util/Equality.js"); var Equality = require("../Util/Equality.js");
var Cache = require("../Util/Cache.js"); var Cache = require("../Util/Cache.js");
var PermissionOverwrite = require("./PermissionOverwrite.js"); var PermissionOverwrite = require("./PermissionOverwrite.js");
var reg = require("../Util/ArgumentRegulariser.js").reg; var reg = require("../Util/ArgumentRegulariser.js").reg;
class Channel extends Equality { var Channel = (function (_Equality) {
_inherits(Channel, _Equality);
constructor(data, client) { function Channel(data, client) {
super(); _classCallCheck(this, Channel);
this.id = data.id;
this.client = client; var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(Channel).call(this));
_this.id = data.id;
_this.client = client;
return _this;
} }
get isPrivate() { _createClass(Channel, [{
return !!this.server; key: "delete",
} value: function _delete() {
return this.client.deleteChannel.apply(this.client, reg(this, arguments));
}
}, {
key: "isPrivate",
get: function get() {
return !!this.server;
}
}]);
delete() { return Channel;
return this.client.deleteChannel.apply(this.client, reg(this, arguments)); })(Equality);
}
}
module.exports = Channel; module.exports = Channel;

View File

@@ -1,64 +1,82 @@
"use strict"; "use strict";
var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var Permissions = require("../Constants.js").Permissions; var Permissions = require("../Constants.js").Permissions;
class ChannelPermissions { var ChannelPermissions = (function () {
constructor(permissions) { function ChannelPermissions(permissions) {
_classCallCheck(this, ChannelPermissions);
this.permissions = permissions; this.permissions = permissions;
} }
serialise(explicit) { _createClass(ChannelPermissions, [{
key: "serialise",
value: function serialise(explicit) {
var _this = this;
var hp = perm => this.hasPermission(perm, explicit); var hp = function hp(perm) {
return _this.hasPermission(perm, explicit);
};
return { return {
// general // general
createInstantInvite: hp(Permissions.createInstantInvite), createInstantInvite: hp(Permissions.createInstantInvite),
kickMembers: hp(Permissions.kickMembers), kickMembers: hp(Permissions.kickMembers),
banMembers: hp(Permissions.banMembers), banMembers: hp(Permissions.banMembers),
managePermissions: hp(Permissions.managePermissions), managePermissions: hp(Permissions.managePermissions),
manageChannel: hp(Permissions.manageChannel), manageChannel: hp(Permissions.manageChannel),
manageServer: hp(Permissions.manageServer), manageServer: hp(Permissions.manageServer),
// text // text
readMessages: hp(Permissions.readMessages), readMessages: hp(Permissions.readMessages),
sendMessages: hp(Permissions.sendMessages), sendMessages: hp(Permissions.sendMessages),
sendTTSMessages: hp(Permissions.sendTTSMessages), sendTTSMessages: hp(Permissions.sendTTSMessages),
manageMessages: hp(Permissions.manageMessages), manageMessages: hp(Permissions.manageMessages),
embedLinks: hp(Permissions.embedLinks), embedLinks: hp(Permissions.embedLinks),
attachFiles: hp(Permissions.attachFiles), attachFiles: hp(Permissions.attachFiles),
readMessageHistory: hp(Permissions.readMessageHistory), readMessageHistory: hp(Permissions.readMessageHistory),
mentionEveryone: hp(Permissions.mentionEveryone), mentionEveryone: hp(Permissions.mentionEveryone),
// voice // voice
voiceConnect: hp(Permissions.voiceConnect), voiceConnect: hp(Permissions.voiceConnect),
voiceSpeak: hp(Permissions.voiceSpeak), voiceSpeak: hp(Permissions.voiceSpeak),
voiceMuteMembers: hp(Permissions.voiceMuteMembers), voiceMuteMembers: hp(Permissions.voiceMuteMembers),
voiceDeafenMembers: hp(Permissions.voiceDeafenMembers), voiceDeafenMembers: hp(Permissions.voiceDeafenMembers),
voiceMoveMembers: hp(Permissions.voiceMoveMembers), voiceMoveMembers: hp(Permissions.voiceMoveMembers),
voiceUseVAD: hp(Permissions.voiceUseVAD) voiceUseVAD: hp(Permissions.voiceUseVAD)
}; };
}
serialize() {
// ;n;
return this.serialise();
}
hasPermission(perm, explicit = false) {
if (perm instanceof String || typeof perm === "string") {
perm = Permissions[perm];
} }
if (!perm) { }, {
return false; key: "serialize",
value: function serialize() {
// ;n;
return this.serialise();
} }
if (!explicit) { }, {
// implicit permissions allowed key: "hasPermission",
if (!!(this.permissions & Permissions.manageRoles)) { value: function hasPermission(perm) {
// manageRoles allowed, they have all permissions var explicit = arguments.length <= 1 || arguments[1] === undefined ? false : arguments[1];
return true;
if (perm instanceof String || typeof perm === "string") {
perm = Permissions[perm];
} }
if (!perm) {
return false;
}
if (!explicit) {
// implicit permissions allowed
if (!!(this.permissions & Permissions.manageRoles)) {
// manageRoles allowed, they have all permissions
return true;
}
}
return !!(this.permissions & perm);
} }
return !!(this.permissions & perm); }]);
}
} return ChannelPermissions;
})();
module.exports = ChannelPermissions; module.exports = ChannelPermissions;

View File

@@ -1,10 +1,16 @@
"use strict"; "use strict";
var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var Server = require("./Server.js"); var Server = require("./Server.js");
var ServerChannel = require("./ServerChannel.js"); var ServerChannel = require("./ServerChannel.js");
class Invite { var Invite = (function () {
constructor(data, chan, client) { function Invite(data, chan, client) {
_classCallCheck(this, Invite);
this.maxAge = data.max_age; this.maxAge = data.max_age;
this.code = data.code; this.code = data.code;
this.server = chan.server; this.server = chan.server;
@@ -18,9 +24,14 @@ class Invite {
this.xkcd = data.xkcdpass; this.xkcd = data.xkcdpass;
} }
toString() { _createClass(Invite, [{
return `https://discord.gg/${ this.code }`; key: "toString",
} value: function toString() {
} return "https://discord.gg/" + this.code;
}
}]);
return Invite;
})();
module.exports = Invite; module.exports = Invite;

View File

@@ -1,70 +1,95 @@
"use strict"; "use strict";
var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
var Cache = require("../Util/Cache.js"); var Cache = require("../Util/Cache.js");
var User = require("./User.js"); var User = require("./User.js");
var reg = require("../Util/ArgumentRegulariser.js").reg; var reg = require("../Util/ArgumentRegulariser.js").reg;
var Equality = require("../Util/Equality"); var Equality = require("../Util/Equality");
class Message extends Equality { var Message = (function (_Equality) {
constructor(data, channel, client) { _inherits(Message, _Equality);
super();
this.channel = channel;
this.client = client;
this.nonce = data.nonce;
this.attachments = data.attachments;
this.tts = data.tts;
this.embeds = data.embeds;
this.timestamp = Date.parse(data.timestamp);
this.everyoneMentioned = data.mention_everyone;
this.id = data.id;
if (data.edited_timestamp) this.editedTimestamp = Date.parse(data.edited_timestamp); function Message(data, channel, client) {
_classCallCheck(this, Message);
if (data.author instanceof User) this.author = data.author;else this.author = client.internal.users.add(new User(data.author, client)); var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(Message).call(this));
this.content = data.content; _this.channel = channel;
this.mentions = new Cache(); _this.client = client;
_this.nonce = data.nonce;
_this.attachments = data.attachments;
_this.tts = data.tts;
_this.embeds = data.embeds;
_this.timestamp = Date.parse(data.timestamp);
_this.everyoneMentioned = data.mention_everyone;
_this.id = data.id;
data.mentions.forEach(mention => { if (data.edited_timestamp) _this.editedTimestamp = Date.parse(data.edited_timestamp);
if (data.author instanceof User) _this.author = data.author;else _this.author = client.internal.users.add(new User(data.author, client));
_this.content = data.content;
_this.mentions = new Cache();
data.mentions.forEach(function (mention) {
// this is .add and not .get because it allows the bot to cache // this is .add and not .get because it allows the bot to cache
// users from messages from logs who may have left the server and were // users from messages from logs who may have left the server and were
// not previously cached. // not previously cached.
if (mention instanceof User) this.mentions.push(mention);else this.mentions.add(client.internal.users.add(new User(mention, client))); if (mention instanceof User) _this.mentions.push(mention);else _this.mentions.add(client.internal.users.add(new User(mention, client)));
}); });
return _this;
} }
isMentioned(user) { _createClass(Message, [{
user = this.client.internal.resolver.resolveUser(user); key: "isMentioned",
if (user) { value: function isMentioned(user) {
return this.mentions.has("id", user.id); user = this.client.internal.resolver.resolveUser(user);
} else { if (user) {
return false; return this.mentions.has("id", user.id);
} else {
return false;
}
} }
} }, {
key: "toString",
value: function toString() {
return this.content;
}
}, {
key: "delete",
value: function _delete() {
return this.client.deleteMessage.apply(this.client, reg(this, arguments));
}
}, {
key: "update",
value: function update() {
return this.client.updateMessage.apply(this.client, reg(this, arguments));
}
}, {
key: "reply",
value: function reply() {
return this.client.reply.apply(this.client, reg(this, arguments));
}
}, {
key: "replyTTS",
value: function replyTTS() {
return this.client.replyTTS.apply(this.client, reg(this, arguments));
}
}, {
key: "sender",
get: function get() {
return this.author;
}
}]);
toString() { return Message;
return this.content; })(Equality);
}
delete() {
return this.client.deleteMessage.apply(this.client, reg(this, arguments));
}
update() {
return this.client.updateMessage.apply(this.client, reg(this, arguments));
}
reply() {
return this.client.reply.apply(this.client, reg(this, arguments));
}
replyTTS() {
return this.client.replyTTS.apply(this.client, reg(this, arguments));
}
get sender() {
return this.author;
}
}
module.exports = Message; module.exports = Message;

View File

@@ -1,37 +1,59 @@
"use strict"; "use strict";
var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
var Channel = require("./Channel.js"); var Channel = require("./Channel.js");
var User = require("./User.js"); var User = require("./User.js");
var Equality = require("../Util/Equality.js"); var Equality = require("../Util/Equality.js");
var Cache = require("../Util/Cache.js"); var Cache = require("../Util/Cache.js");
var reg = require("../Util/ArgumentRegulariser.js").reg; var reg = require("../Util/ArgumentRegulariser.js").reg;
class PMChannel extends Channel { var PMChannel = (function (_Channel) {
constructor(data, client) { _inherits(PMChannel, _Channel);
super(data, client);
this.type = data.type || "text"; function PMChannel(data, client) {
this.lastMessageId = data.last_message_id; _classCallCheck(this, PMChannel);
this.messages = new Cache("id", 1000);
this.recipient = this.client.internal.users.add(new User(data.recipient, this.client)); var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(PMChannel).call(this, data, client));
_this.type = data.type || "text";
_this.lastMessageId = data.last_message_id;
_this.messages = new Cache("id", 1000);
_this.recipient = _this.client.internal.users.add(new User(data.recipient, _this.client));
return _this;
} }
/* warning! may return null */ /* warning! may return null */
get lastMessage() {
return this.messages.get("id", this.lastMessageID);
}
toString() { _createClass(PMChannel, [{
return this.recipient.toString(); key: "toString",
} value: function toString() {
return this.recipient.toString();
}
}, {
key: "sendMessage",
value: function sendMessage() {
return this.client.sendMessage.apply(this.client, reg(this, arguments));
}
}, {
key: "sendTTSMessage",
value: function sendTTSMessage() {
return this.client.sendTTSMessage.apply(this.client, reg(this, arguments));
}
}, {
key: "lastMessage",
get: function get() {
return this.messages.get("id", this.lastMessageID);
}
}]);
sendMessage() { return PMChannel;
return this.client.sendMessage.apply(this.client, reg(this, arguments)); })(Channel);
}
sendTTSMessage() {
return this.client.sendTTSMessage.apply(this.client, reg(this, arguments));
}
}
module.exports = PMChannel; module.exports = PMChannel;

View File

@@ -1,10 +1,15 @@
"use strict"; "use strict";
var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var Permissions = require("../Constants.js").Permissions; var Permissions = require("../Constants.js").Permissions;
class PermissionOverwrite { var PermissionOverwrite = (function () {
function PermissionOverwrite(data) {
_classCallCheck(this, PermissionOverwrite);
constructor(data) {
this.id = data.id; this.id = data.id;
this.type = data.type; // member or role this.type = data.type; // member or role
this.deny = data.deny; this.deny = data.deny;
@@ -12,59 +17,73 @@ class PermissionOverwrite {
} }
// returns an array of allowed permissions // returns an array of allowed permissions
get allowed() {
var allowed = [];
for (var permName in Permissions) {
if (permName === "manageRoles" || permName === "manageChannels") {
// these permissions do not exist in overwrites.
continue;
}
if (!!(this.allow & Permissions[permName])) { _createClass(PermissionOverwrite, [{
allowed.push(permName); key: "setAllowed",
} value: function setAllowed(allowedArray) {
var _this = this;
allowedArray.forEach(function (permission) {
if (permission instanceof String || typeof permission === "string") {
permission = Permissions[permission];
}
if (permission) {
_this.allow |= 1 << permission;
}
});
} }
return allowed; }, {
} key: "setDenied",
value: function setDenied(deniedArray) {
var _this2 = this;
// returns an array of denied permissions deniedArray.forEach(function (permission) {
get denied() { if (permission instanceof String || typeof permission === "string") {
var denied = []; permission = Permissions[permission];
for (var permName in Permissions) { }
if (permName === "manageRoles" || permName === "manageChannels") { if (permission) {
// these permissions do not exist in overwrites. _this2.deny |= 1 << permission;
continue; }
} });
if (!!(this.deny & Permissions[permName])) {
denied.push(permName);
}
} }
return denied; }, {
} key: "allowed",
get: function get() {
var allowed = [];
for (var permName in Permissions) {
if (permName === "manageRoles" || permName === "manageChannels") {
// these permissions do not exist in overwrites.
continue;
}
setAllowed(allowedArray) { if (!!(this.allow & Permissions[permName])) {
allowedArray.forEach(permission => { allowed.push(permName);
if (permission instanceof String || typeof permission === "string") { }
permission = Permissions[permission];
} }
if (permission) { return allowed;
this.allow |= 1 << permission; }
}
});
}
setDenied(deniedArray) { // returns an array of denied permissions
deniedArray.forEach(permission => {
if (permission instanceof String || typeof permission === "string") {
permission = Permissions[permission];
}
if (permission) {
this.deny |= 1 << permission;
}
});
}
} }, {
key: "denied",
get: function get() {
var denied = [];
for (var permName in Permissions) {
if (permName === "manageRoles" || permName === "manageChannels") {
// these permissions do not exist in overwrites.
continue;
}
if (!!(this.deny & Permissions[permName])) {
denied.push(permName);
}
}
return denied;
}
}]);
return PermissionOverwrite;
})();
module.exports = PermissionOverwrite; module.exports = PermissionOverwrite;

View File

@@ -1,5 +1,9 @@
"use strict"; "use strict";
var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var Permissions = require("../Constants.js").Permissions; var Permissions = require("../Constants.js").Permissions;
/* /*
@@ -14,10 +18,14 @@ example data
color: 0 } color: 0 }
*/ */
const DefaultRole = [Permissions.createInstantInvite, Permissions.readMessages, Permissions.readMessageHistory, Permissions.sendMessages, Permissions.sendTTSMessages, Permissions.embedLinks, Permissions.attachFiles, Permissions.readMessageHistory, Permissions.mentionEveryone, Permissions.voiceConnect, Permissions.voiceSpeak, Permissions.voiceUseVAD].reduce((previous, current) => previous | current, 0); var DefaultRole = [Permissions.createInstantInvite, Permissions.readMessages, Permissions.readMessageHistory, Permissions.sendMessages, Permissions.sendTTSMessages, Permissions.embedLinks, Permissions.attachFiles, Permissions.readMessageHistory, Permissions.mentionEveryone, Permissions.voiceConnect, Permissions.voiceSpeak, Permissions.voiceUseVAD].reduce(function (previous, current) {
return previous | current;
}, 0);
var Role = (function () {
function Role(data, server, client) {
_classCallCheck(this, Role);
class Role {
constructor(data, server, client) {
this.position = data.position || -1; this.position = data.position || -1;
this.permissions = data.permissions || (data.name === "@everyone" ? DefaultRole : 0); this.permissions = data.permissions || (data.name === "@everyone" ? DefaultRole : 0);
this.name = data.name || "@everyone"; this.name = data.name || "@everyone";
@@ -29,96 +37,113 @@ class Role {
this.client = client; this.client = client;
} }
serialise(explicit) { _createClass(Role, [{
key: "serialise",
value: function serialise(explicit) {
var _this = this;
var hp = perm => this.hasPermission(perm, explicit); var hp = function hp(perm) {
return _this.hasPermission(perm, explicit);
};
return { return {
// general // general
createInstantInvite: hp(Permissions.createInstantInvite), createInstantInvite: hp(Permissions.createInstantInvite),
kickMembers: hp(Permissions.kickMembers), kickMembers: hp(Permissions.kickMembers),
banMembers: hp(Permissions.banMembers), banMembers: hp(Permissions.banMembers),
manageRoles: hp(Permissions.manageRoles), manageRoles: hp(Permissions.manageRoles),
manageChannels: hp(Permissions.manageChannels), manageChannels: hp(Permissions.manageChannels),
manageServer: hp(Permissions.manageServer), manageServer: hp(Permissions.manageServer),
// text // text
readMessages: hp(Permissions.readMessages), readMessages: hp(Permissions.readMessages),
sendMessages: hp(Permissions.sendMessages), sendMessages: hp(Permissions.sendMessages),
sendTTSMessages: hp(Permissions.sendTTSMessages), sendTTSMessages: hp(Permissions.sendTTSMessages),
manageMessages: hp(Permissions.manageMessages), manageMessages: hp(Permissions.manageMessages),
embedLinks: hp(Permissions.embedLinks), embedLinks: hp(Permissions.embedLinks),
attachFiles: hp(Permissions.attachFiles), attachFiles: hp(Permissions.attachFiles),
readMessageHistory: hp(Permissions.readMessageHistory), readMessageHistory: hp(Permissions.readMessageHistory),
mentionEveryone: hp(Permissions.mentionEveryone), mentionEveryone: hp(Permissions.mentionEveryone),
// voice // voice
voiceConnect: hp(Permissions.voiceConnect), voiceConnect: hp(Permissions.voiceConnect),
voiceSpeak: hp(Permissions.voiceSpeak), voiceSpeak: hp(Permissions.voiceSpeak),
voiceMuteMembers: hp(Permissions.voiceMuteMembers), voiceMuteMembers: hp(Permissions.voiceMuteMembers),
voiceDeafenMembers: hp(Permissions.voiceDeafenMembers), voiceDeafenMembers: hp(Permissions.voiceDeafenMembers),
voiceMoveMembers: hp(Permissions.voiceMoveMembers), voiceMoveMembers: hp(Permissions.voiceMoveMembers),
voiceUseVAD: hp(Permissions.voiceUseVAD) voiceUseVAD: hp(Permissions.voiceUseVAD)
}; };
}
serialize() {
// ;n;
return this.serialise();
}
hasPermission(perm, explicit = false) {
if (perm instanceof String || typeof perm === "string") {
perm = Permissions[perm];
} }
if (!perm) { }, {
return false; key: "serialize",
value: function serialize() {
// ;n;
return this.serialise();
} }
if (!explicit) { }, {
// implicit permissions allowed key: "hasPermission",
if (!!(this.permissions & Permissions.manageRoles)) { value: function hasPermission(perm) {
// manageRoles allowed, they have all permissions var explicit = arguments.length <= 1 || arguments[1] === undefined ? false : arguments[1];
return true;
if (perm instanceof String || typeof perm === "string") {
perm = Permissions[perm];
} }
} if (!perm) {
// e.g. return false;
// !!(36953089 & Permissions.manageRoles) = not allowed to manage roles
// !!(36953089 & (1 << 21)) = voice speak allowed
return !!(this.permissions & perm);
}
setPermission(permission, value) {
if (permission instanceof String || typeof permission === "string") {
permission = Permissions[permission];
}
if (permission) {
// valid permission
if (value) {
this.permissions |= permission;
} else {
this.permissions &= ~permission;
} }
} if (!explicit) {
} // implicit permissions allowed
if (!!(this.permissions & Permissions.manageRoles)) {
// manageRoles allowed, they have all permissions
return true;
}
}
// e.g.
// !!(36953089 & Permissions.manageRoles) = not allowed to manage roles
// !!(36953089 & (1 << 21)) = voice speak allowed
setPermissions(obj) { return !!(this.permissions & perm);
obj.forEach((value, permission) => { }
}, {
key: "setPermission",
value: function setPermission(permission, value) {
if (permission instanceof String || typeof permission === "string") { if (permission instanceof String || typeof permission === "string") {
permission = Permissions[permission]; permission = Permissions[permission];
} }
if (permission) { if (permission) {
// valid permission // valid permission
this.setPermission(permission, value); if (value) {
this.permissions |= permission;
} else {
this.permissions &= ~permission;
}
} }
});
}
colorAsHex() {
var val = this.color.toString();
while (val.length < 6) {
val = "0" + val;
} }
return "#" + val; }, {
} key: "setPermissions",
} value: function setPermissions(obj) {
var _this2 = this;
obj.forEach(function (value, permission) {
if (permission instanceof String || typeof permission === "string") {
permission = Permissions[permission];
}
if (permission) {
// valid permission
_this2.setPermission(permission, value);
}
});
}
}, {
key: "colorAsHex",
value: function colorAsHex() {
var val = this.color.toString();
while (val.length < 6) {
val = "0" + val;
}
return "#" + val;
}
}]);
return Role;
})();
module.exports = Role; module.exports = Role;

View File

@@ -1,5 +1,13 @@
"use strict"; "use strict";
var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
var Equality = require("../Util/Equality.js"); var Equality = require("../Util/Equality.js");
var Endpoints = require("../Constants.js").Endpoints; var Endpoints = require("../Constants.js").Endpoints;
var Cache = require("../Util/Cache.js"); var Cache = require("../Util/Cache.js");
@@ -10,114 +18,173 @@ var Role = require("./Role.js");
var strictKeys = ["region", "ownerID", "name", "id", "icon", "afkTimeout", "afkChannelID"]; var strictKeys = ["region", "ownerID", "name", "id", "icon", "afkTimeout", "afkChannelID"];
class Server extends Equality { var Server = (function (_Equality) {
constructor(data, client) { _inherits(Server, _Equality);
super(); function Server(data, client) {
_classCallCheck(this, Server);
var self = this; var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(Server).call(this));
this.client = client;
this.region = data.region; var self = _this;
this.ownerID = data.owner_id; _this.client = client;
this.name = data.name;
this.id = data.id;
this.members = new Cache();
this.channels = new Cache();
this.roles = new Cache();
this.icon = data.icon;
this.afkTimeout = data.afkTimeout;
this.afkChannelID = data.afk_channel_id;
this.memberMap = {};
var self = this; _this.region = data.region;
_this.ownerID = data.owner_id;
_this.name = data.name;
_this.id = data.id;
_this.members = new Cache();
_this.channels = new Cache();
_this.roles = new Cache();
_this.icon = data.icon;
_this.afkTimeout = data.afkTimeout;
_this.afkChannelID = data.afk_channel_id;
_this.memberMap = {};
data.roles.forEach(dataRole => { var self = _this;
this.roles.add(new Role(dataRole, this, client));
data.roles.forEach(function (dataRole) {
_this.roles.add(new Role(dataRole, _this, client));
}); });
data.members.forEach(dataUser => { data.members.forEach(function (dataUser) {
this.memberMap[dataUser.user.id] = { _this.memberMap[dataUser.user.id] = {
roles: dataUser.roles.map(pid => self.roles.get("id", pid)), roles: dataUser.roles.map(function (pid) {
return self.roles.get("id", pid);
}),
mute: dataUser.mute, mute: dataUser.mute,
deaf: dataUser.deaf, deaf: dataUser.deaf,
joinedAt: Date.parse(dataUser.joined_at) joinedAt: Date.parse(dataUser.joined_at)
}; };
var user = client.internal.users.add(new User(dataUser.user, client)); var user = client.internal.users.add(new User(dataUser.user, client));
this.members.add(user); _this.members.add(user);
}); });
data.channels.forEach(dataChannel => { data.channels.forEach(function (dataChannel) {
if (dataChannel.type === "text") { if (dataChannel.type === "text") {
var channel = client.internal.channels.add(new TextChannel(dataChannel, client, this)); var channel = client.internal.channels.add(new TextChannel(dataChannel, client, _this));
this.channels.add(channel); _this.channels.add(channel);
} else { } else {
var channel = client.internal.channels.add(new VoiceChannel(dataChannel, client, this)); var channel = client.internal.channels.add(new VoiceChannel(dataChannel, client, _this));
this.channels.add(channel); _this.channels.add(channel);
} }
}); });
if (data.presences) { if (data.presences) {
for (var presence of data.presences) { var _iteratorNormalCompletion = true;
var user = client.internal.users.get("id", presence.user.id); var _didIteratorError = false;
if (user) { var _iteratorError = undefined;
user.status = presence.status;
user.gameID = presence.game_id; try {
for (var _iterator = data.presences[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var presence = _step.value;
var user = client.internal.users.get("id", presence.user.id);
if (user) {
user.status = presence.status;
user.gameID = presence.game_id;
}
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
} }
} }
} }
return _this;
} }
rolesOfUser(user) { _createClass(Server, [{
user = this.client.internal.resolver.resolveUser(user); key: "rolesOfUser",
if (user) { value: function rolesOfUser(user) {
return this.memberMap[user.id] ? this.memberMap[user.id].roles : []; user = this.client.internal.resolver.resolveUser(user);
} else { if (user) {
return null; return this.memberMap[user.id] ? this.memberMap[user.id].roles : [];
} } else {
} return null;
rolesOf(user) {
return this.rolesOfUser(user);
}
get iconURL() {
if (!this.icon) {
return null;
} else {
return Endpoints.SERVER_ICON(this.id, this.icon);
}
}
get afkChannel() {
return this.channels.get("id", this.afkChannelID);
}
get defaultChannel() {
return this.channels.get("id", this.id);
}
get owner() {
return this.members.get("id", this.ownerID);
}
toString() {
return this.name;
}
equalsStrict(obj) {
if (obj instanceof Server) {
for (var key of strictKeys) {
if (obj[key] !== this[key]) {
return false;
}
} }
} else {
return false;
} }
return true; }, {
} key: "rolesOf",
value: function rolesOf(user) {
return this.rolesOfUser(user);
}
}, {
key: "toString",
value: function toString() {
return this.name;
}
}, {
key: "equalsStrict",
value: function equalsStrict(obj) {
if (obj instanceof Server) {
var _iteratorNormalCompletion2 = true;
var _didIteratorError2 = false;
var _iteratorError2 = undefined;
} try {
for (var _iterator2 = strictKeys[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
var key = _step2.value;
if (obj[key] !== this[key]) {
return false;
}
}
} catch (err) {
_didIteratorError2 = true;
_iteratorError2 = err;
} finally {
try {
if (!_iteratorNormalCompletion2 && _iterator2.return) {
_iterator2.return();
}
} finally {
if (_didIteratorError2) {
throw _iteratorError2;
}
}
}
} else {
return false;
}
return true;
}
}, {
key: "iconURL",
get: function get() {
if (!this.icon) {
return null;
} else {
return Endpoints.SERVER_ICON(this.id, this.icon);
}
}
}, {
key: "afkChannel",
get: function get() {
return this.channels.get("id", this.afkChannelID);
}
}, {
key: "defaultChannel",
get: function get() {
return this.channels.get("id", this.id);
}
}, {
key: "owner",
get: function get() {
return this.members.get("id", this.ownerID);
}
}]);
return Server;
})(Equality);
module.exports = Server; module.exports = Server;

View File

@@ -1,77 +1,144 @@
"use strict"; "use strict";
var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
var Channel = require("./Channel.js"); var Channel = require("./Channel.js");
var Cache = require("../Util/Cache.js"); var Cache = require("../Util/Cache.js");
var PermissionOverwrite = require("./PermissionOverwrite.js"); var PermissionOverwrite = require("./PermissionOverwrite.js");
var ChannelPermissions = require("./ChannelPermissions.js"); var ChannelPermissions = require("./ChannelPermissions.js");
var reg = require("../Util/ArgumentRegulariser.js").reg; var reg = require("../Util/ArgumentRegulariser.js").reg;
class ServerChannel extends Channel { var ServerChannel = (function (_Channel) {
constructor(data, client, server) { _inherits(ServerChannel, _Channel);
super(data, client);
this.name = data.name; function ServerChannel(data, client, server) {
this.type = data.type; _classCallCheck(this, ServerChannel);
this.position = data.position;
this.permissionOverwrites = new Cache(); var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(ServerChannel).call(this, data, client));
this.server = server;
data.permission_overwrites.forEach(permission => { _this.name = data.name;
this.permissionOverwrites.add(new PermissionOverwrite(permission)); _this.type = data.type;
_this.position = data.position;
_this.permissionOverwrites = new Cache();
_this.server = server;
data.permission_overwrites.forEach(function (permission) {
_this.permissionOverwrites.add(new PermissionOverwrite(permission));
}); });
return _this;
} }
permissionsOf(user) { _createClass(ServerChannel, [{
user = this.client.internal.resolver.resolveUser(user); key: "permissionsOf",
if (user) { value: function permissionsOf(user) {
if (this.server.owner.equals(user)) { user = this.client.internal.resolver.resolveUser(user);
return new ChannelPermissions(4294967295); if (user) {
} if (this.server.owner.equals(user)) {
var everyoneRole = this.server.roles.get("name", "@everyone"); return new ChannelPermissions(4294967295);
var userRoles = [everyoneRole].concat(this.server.rolesOf(user) || []);
var userRolesID = userRoles.map(v => v.id);
var roleOverwrites = [],
memberOverwrites = [];
this.permissionOverwrites.forEach(overwrite => {
if (overwrite.type === "member" && overwrite.id === user.id) {
memberOverwrites.push(overwrite);
} else if (overwrite.type === "role" && overwrite.id in userRolesID) {
roleOverwrites.push(overwrite);
} }
}); var everyoneRole = this.server.roles.get("name", "@everyone");
var permissions = 0; var userRoles = [everyoneRole].concat(this.server.rolesOf(user) || []);
var userRolesID = userRoles.map(function (v) {
return v.id;
});
var roleOverwrites = [],
memberOverwrites = [];
for (var serverRole of userRoles) { this.permissionOverwrites.forEach(function (overwrite) {
permissions |= serverRole.permissions; if (overwrite.type === "member" && overwrite.id === user.id) {
memberOverwrites.push(overwrite);
} else if (overwrite.type === "role" && overwrite.id in userRolesID) {
roleOverwrites.push(overwrite);
}
});
var permissions = 0;
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
try {
for (var _iterator = userRoles[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var serverRole = _step.value;
permissions |= serverRole.permissions;
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
var _iteratorNormalCompletion2 = true;
var _didIteratorError2 = false;
var _iteratorError2 = undefined;
try {
for (var _iterator2 = roleOverwrites.concat(memberOverwrites)[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
var overwrite = _step2.value;
permissions = permissions & ~overwrite.deny;
permissions = permissions | overwrite.allow;
}
} catch (err) {
_didIteratorError2 = true;
_iteratorError2 = err;
} finally {
try {
if (!_iteratorNormalCompletion2 && _iterator2.return) {
_iterator2.return();
}
} finally {
if (_didIteratorError2) {
throw _iteratorError2;
}
}
}
return new ChannelPermissions(permissions);
} else {
return null;
} }
for (var overwrite of roleOverwrites.concat(memberOverwrites)) {
permissions = permissions & ~overwrite.deny;
permissions = permissions | overwrite.allow;
}
return new ChannelPermissions(permissions);
} else {
return null;
} }
} }, {
key: "permsOf",
value: function permsOf(user) {
return this.permissionsOf(user);
}
}, {
key: "mention",
value: function mention() {
return "<#" + this.id + ">";
}
}, {
key: "toString",
value: function toString() {
return this.mention();
}
}, {
key: "setName",
value: function setName() {
return this.client.setChannelName.apply(this.client, reg(this, arguments));
}
}]);
permsOf(user) { return ServerChannel;
return this.permissionsOf(user); })(Channel);
}
mention() {
return `<#${ this.id }>`;
}
toString() {
return this.mention();
}
setName() {
return this.client.setChannelName.apply(this.client, reg(this, arguments));
}
}
module.exports = ServerChannel; module.exports = ServerChannel;

View File

@@ -1,42 +1,66 @@
"use strict"; "use strict";
var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
var ServerChannel = require("./ServerChannel.js"); var ServerChannel = require("./ServerChannel.js");
var Cache = require("../Util/Cache.js"); var Cache = require("../Util/Cache.js");
var reg = require("../Util/ArgumentRegulariser.js").reg; var reg = require("../Util/ArgumentRegulariser.js").reg;
class TextChannel extends ServerChannel { var TextChannel = (function (_ServerChannel) {
constructor(data, client, server) { _inherits(TextChannel, _ServerChannel);
super(data, client, server);
this.topic = data.topic; function TextChannel(data, client, server) {
this.lastMessageID = data.last_message_id; _classCallCheck(this, TextChannel);
this.messages = new Cache("id", client.options.maximumMessages);
var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(TextChannel).call(this, data, client, server));
_this.topic = data.topic;
_this.lastMessageID = data.last_message_id;
_this.messages = new Cache("id", client.options.maximumMessages);
return _this;
} }
/* warning! may return null */ /* warning! may return null */
get lastMessage() {
return this.messages.get("id", this.lastMessageID);
}
setTopic() { _createClass(TextChannel, [{
return this.client.setTopic.apply(this.client, reg(this, arguments)); key: "setTopic",
} value: function setTopic() {
return this.client.setTopic.apply(this.client, reg(this, arguments));
}
}, {
key: "setNameAndTopic",
value: function setNameAndTopic() {
return this.client.setChannelNameAndTopic.apply(this.client, reg(this, arguments));
}
}, {
key: "update",
value: function update() {
return this.client.updateChannel.apply(this.client, reg(this, arguments));
}
}, {
key: "sendMessage",
value: function sendMessage() {
return this.client.sendMessage.apply(this.client, reg(this, arguments));
}
}, {
key: "sendTTSMessage",
value: function sendTTSMessage() {
return this.client.sendTTSMessage.apply(this.client, reg(this, arguments));
}
}, {
key: "lastMessage",
get: function get() {
return this.messages.get("id", this.lastMessageID);
}
}]);
setNameAndTopic() { return TextChannel;
return this.client.setChannelNameAndTopic.apply(this.client, reg(this, arguments)); })(ServerChannel);
}
update() {
return this.client.updateChannel.apply(this.client, reg(this, arguments));
}
sendMessage() {
return this.client.sendMessage.apply(this.client, reg(this, arguments));
}
sendTTSMessage() {
return this.client.sendTTSMessage.apply(this.client, reg(this, arguments));
}
}
module.exports = TextChannel; module.exports = TextChannel;

View File

@@ -1,43 +1,65 @@
"use strict"; "use strict";
var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
var Equality = require("../Util/Equality.js"); var Equality = require("../Util/Equality.js");
var Endpoints = require("../Constants.js").Endpoints; var Endpoints = require("../Constants.js").Endpoints;
class User extends Equality { var User = (function (_Equality) {
constructor(data, client) { _inherits(User, _Equality);
super();
this.client = client; function User(data, client) {
this.username = data.username; _classCallCheck(this, User);
this.discriminator = data.discriminator;
this.id = data.id; var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(User).call(this));
this.avatar = data.avatar;
this.status = data.status || "offline"; _this.client = client;
this.gameID = data.game_id || null; _this.username = data.username;
this.typing = { _this.discriminator = data.discriminator;
_this.id = data.id;
_this.avatar = data.avatar;
_this.status = data.status || "offline";
_this.gameID = data.game_id || null;
_this.typing = {
since: null, since: null,
channel: null channel: null
}; };
return _this;
} }
get avatarURL() { _createClass(User, [{
if (!this.avatar) { key: "mention",
return null; value: function mention() {
} else { return "<@" + this.id + ">";
return Endpoints.AVATAR(this.id, this.avatar);
} }
} }, {
key: "toString",
value: function toString() {
return this.mention();
}
}, {
key: "equalsStrict",
value: function equalsStrict(obj) {
if (obj instanceof User) return this.id === obj.id && this.username === obj.username && this.discriminator === obj.discriminator && this.avatar === obj.avatar && this.status === obj.status && this.gameID === obj.gameID;else return false;
}
}, {
key: "avatarURL",
get: function get() {
if (!this.avatar) {
return null;
} else {
return Endpoints.AVATAR(this.id, this.avatar);
}
}
}]);
mention() { return User;
return `<@${ this.id }>`; })(Equality);
}
toString() {
return this.mention();
}
equalsStrict(obj) {
if (obj instanceof User) return this.id === obj.id && this.username === obj.username && this.discriminator === obj.discriminator && this.avatar === obj.avatar && this.status === obj.status && this.gameID === obj.gameID;else return false;
}
}
module.exports = User; module.exports = User;

View File

@@ -1,11 +1,23 @@
"use strict"; "use strict";
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
var ServerChannel = require("./ServerChannel.js"); var ServerChannel = require("./ServerChannel.js");
class VoiceChannel extends ServerChannel { var VoiceChannel = (function (_ServerChannel) {
constructor(data, client, server) { _inherits(VoiceChannel, _ServerChannel);
super(data, client, server);
function VoiceChannel(data, client, server) {
_classCallCheck(this, VoiceChannel);
return _possibleConstructorReturn(this, Object.getPrototypeOf(VoiceChannel).call(this, data, client, server));
} }
}
return VoiceChannel;
})(ServerChannel);
module.exports = VoiceChannel; module.exports = VoiceChannel;

View File

@@ -1,3 +1,5 @@
"use strict";
exports.reg = function (c, a) { exports.reg = function (c, a) {
return [c].concat(Array.prototype.slice.call(a)); return [c].concat(Array.prototype.slice.call(a));
}; };

View File

@@ -1,83 +1,130 @@
"use strict"; "use strict";
class Cache extends Array { var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
constructor(discrim, limit) {
super(); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
this.discrim = discrim || "id";
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
var Cache = (function (_Array) {
_inherits(Cache, _Array);
function Cache(discrim, limit) {
_classCallCheck(this, Cache);
var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(Cache).call(this));
_this.discrim = discrim || "id";
return _this;
} }
get(key, value) { _createClass(Cache, [{
var found = null; key: "get",
this.forEach((val, index, array) => { value: function get(key, value) {
if (val.hasOwnProperty(key) && val[key] == value) { var found = null;
found = val; this.forEach(function (val, index, array) {
return; if (val.hasOwnProperty(key) && val[key] == value) {
found = val;
return;
}
});
return found;
}
}, {
key: "has",
value: function has(key, value) {
return !!this.get(key, value);
}
}, {
key: "getAll",
value: function getAll(key, value) {
var found = new Cache(this.discrim);
this.forEach(function (val, index, array) {
if (val.hasOwnProperty(key) && val[key] == value) {
found.push(val);
return;
}
});
return found;
}
}, {
key: "add",
value: function add(data) {
var exit = false;
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
try {
for (var _iterator = this[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var item = _step.value;
if (item[this.discrim] === data[this.discrim]) {
exit = item;
break;
}
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
} }
});
return found;
}
has(key, value) { if (exit) {
return !!this.get(key, value); return exit;
} } else {
if (this.limit && this.length >= this.limit) {
getAll(key, value) { this.splice(0, 1);
var found = new Cache(this.discrim); }
this.forEach((val, index, array) => { this.push(data);
if (val.hasOwnProperty(key) && val[key] == value) { return data;
found.push(val);
return;
}
});
return found;
}
add(data) {
var exit = false;
for (var item of this) {
if (item[this.discrim] === data[this.discrim]) {
exit = item;
break;
} }
} }
if (exit) { }, {
return exit; key: "update",
} else { value: function update(old, data) {
if (this.limit && this.length >= this.limit) { var item = this.get(this.discrim, old[this.discrim]);
this.splice(0, 1); if (item) {
var index = this.indexOf(item);
this[index] = data;
return this[index];
} else {
return false;
} }
this.push(data);
return data;
} }
} }, {
key: "random",
update(old, data) { value: function random() {
var item = this.get(this.discrim, old[this.discrim]); return this[Math.floor(Math.random() * this.length)];
if (item) { }
var index = this.indexOf(item); }, {
this[index] = data; key: "remove",
return this[index]; value: function remove(data) {
} else { var index = this.indexOf(data);
if (~index) {
this.splice(index, 1);
} else {
var item = this.get(this.discrim, data[this.discrim]);
if (item) {
this.splice(this.indexOf(item), 1);
}
}
return false; return false;
} }
} }]);
random() { return Cache;
return this[Math.floor(Math.random() * this.length)]; })(Array);
}
remove(data) {
var index = this.indexOf(data);
if (~index) {
this.splice(index, 1);
} else {
var item = this.get(this.discrim, data[this.discrim]);
if (item) {
this.splice(this.indexOf(item), 1);
}
}
return false;
}
}
module.exports = Cache; module.exports = Cache;

View File

@@ -1,3 +1,9 @@
"use strict";
var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
/* /*
The Equality Class is just used to show The Equality Class is just used to show
that a Class has an ID that can be used to that a Class has an ID that can be used to
@@ -9,24 +15,34 @@
Instead, use objectThatExtendsEquality.equals() Instead, use objectThatExtendsEquality.equals()
*/ */
class Equality {
constructor() {}
get eqDiscriminator() { var Equality = (function () {
return "id"; function Equality() {
_classCallCheck(this, Equality);
} }
equals(object) { _createClass(Equality, [{
if (object && object[this.eqDiscriminator] == this[this.eqDiscriminator]) { key: "equals",
return true; value: function equals(object) {
if (object && object[this.eqDiscriminator] == this[this.eqDiscriminator]) {
return true;
}
return false;
} }
return false; }, {
} key: "equalsStrict",
value: function equalsStrict(object) {
// override per class type
return;
}
}, {
key: "eqDiscriminator",
get: function get() {
return "id";
}
}]);
equalsStrict(object) { return Equality;
// override per class type })();
return;
}
}
module.exports = Equality; module.exports = Equality;

View File

@@ -1,5 +1,9 @@
"use strict"; "use strict";
var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var cpoc = require("child_process"); var cpoc = require("child_process");
var opus; var opus;
@@ -10,97 +14,132 @@ try {
} }
var VoicePacket = require("./VoicePacket.js"); var VoicePacket = require("./VoicePacket.js");
class AudioEncoder { var AudioEncoder = (function () {
constructor() { function AudioEncoder() {
_classCallCheck(this, AudioEncoder);
if (opus) { if (opus) {
this.opus = new opus.OpusEncoder(48000, 1); this.opus = new opus.OpusEncoder(48000, 1);
} }
this.choice = false; this.choice = false;
} }
opusBuffer(buffer) { _createClass(AudioEncoder, [{
key: "opusBuffer",
value: function opusBuffer(buffer) {
return this.opus.encode(buffer, 1920); return this.opus.encode(buffer, 1920);
}
getCommand(force) {
if (this.choice && force) return choice;
var choices = ["avconv", "ffmpeg"];
for (var choice of choices) {
var p = cpoc.spawnSync(choice);
if (!p.error) {
this.choice = choice;
return choice;
}
} }
}, {
key: "getCommand",
value: function getCommand(force) {
return "help"; if (this.choice && force) return choice;
}
encodeStream(stream, callback = function (err, buffer) {}) { var choices = ["avconv", "ffmpeg"];
var self = this;
return new Promise((resolve, reject) => {
var enc = cpoc.spawn(self.getCommand(), ["-f", "s16le", "-ar", "48000", "-ac", "1", // this can be 2 but there's no point, discord makes it mono on playback, wasted bandwidth.
"-af", "volume=1", "pipe:1", "-i", "-"]);
stream.pipe(enc.stdin); var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
enc.stdout.once("readable", function () { try {
callback(null, { for (var _iterator = choices[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
proc: enc, var choice = _step.value;
stream: enc.stdout,
instream: stream var p = cpoc.spawnSync(choice);
if (!p.error) {
this.choice = choice;
return choice;
}
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
return "help";
}
}, {
key: "encodeStream",
value: function encodeStream(stream) {
var callback = arguments.length <= 1 || arguments[1] === undefined ? function (err, buffer) {} : arguments[1];
var self = this;
return new Promise(function (resolve, reject) {
var enc = cpoc.spawn(self.getCommand(), ["-f", "s16le", "-ar", "48000", "-ac", "1", // this can be 2 but there's no point, discord makes it mono on playback, wasted bandwidth.
"-af", "volume=1", "pipe:1", "-i", "-"]);
stream.pipe(enc.stdin);
enc.stdout.once("readable", function () {
callback(null, {
proc: enc,
stream: enc.stdout,
instream: stream
});
resolve({
proc: enc,
stream: enc.stdout,
instream: stream
});
}); });
resolve({
proc: enc, enc.stdout.on("end", function () {
stream: enc.stdout, callback("end");
instream: stream reject("end");
});
enc.stdout.on("close", function () {
callback("close");
reject("close");
}); });
}); });
}
}, {
key: "encodeFile",
value: function encodeFile(file) {
var callback = arguments.length <= 1 || arguments[1] === undefined ? function (err, buffer) {} : arguments[1];
enc.stdout.on("end", function () { var self = this;
callback("end"); return new Promise(function (resolve, reject) {
reject("end"); var enc = cpoc.spawn(self.getCommand(), ["-f", "s16le", "-ar", "48000", "-ac", "1", // this can be 2 but there's no point, discord makes it mono on playback, wasted bandwidth.
}); "-af", "volume=1", "pipe:1", "-i", file]);
enc.stdout.on("close", function () { enc.stdout.once("readable", function () {
callback("close"); callback(null, {
reject("close"); proc: enc,
}); stream: enc.stdout
}); });
} resolve({
proc: enc,
encodeFile(file, callback = function (err, buffer) {}) { stream: enc.stdout
var self = this; });
return new Promise((resolve, reject) => {
var enc = cpoc.spawn(self.getCommand(), ["-f", "s16le", "-ar", "48000", "-ac", "1", // this can be 2 but there's no point, discord makes it mono on playback, wasted bandwidth.
"-af", "volume=1", "pipe:1", "-i", file]);
enc.stdout.once("readable", function () {
callback(null, {
proc: enc,
stream: enc.stdout
}); });
resolve({
proc: enc, enc.stdout.on("end", function () {
stream: enc.stdout callback("end");
reject("end");
});
enc.stdout.on("close", function () {
callback("close");
reject("close");
}); });
}); });
}
}]);
enc.stdout.on("end", function () { return AudioEncoder;
callback("end"); })();
reject("end");
});
enc.stdout.on("close", function () {
callback("close");
reject("close");
});
});
}
}
module.exports = AudioEncoder; module.exports = AudioEncoder;

View File

@@ -1,12 +1,25 @@
"use strict" "use strict"
// represents an intent of streaming music // represents an intent of streaming music
; ;
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
var EventEmitter = require("events"); var EventEmitter = require("events");
class StreamIntent extends EventEmitter { var StreamIntent = (function (_EventEmitter) {
constructor() { _inherits(StreamIntent, _EventEmitter);
super();
function StreamIntent() {
_classCallCheck(this, StreamIntent);
return _possibleConstructorReturn(this, Object.getPrototypeOf(StreamIntent).call(this));
} }
}
return StreamIntent;
})(EventEmitter);
module.exports = StreamIntent; module.exports = StreamIntent;

View File

@@ -8,6 +8,15 @@
*/ */
; ;
var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
var WebSocket = require("ws"); var WebSocket = require("ws");
var dns = require("dns"); var dns = require("dns");
var udp = require("dgram"); var udp = require("dgram");
@@ -17,291 +26,328 @@ var VoicePacket = require("./VoicePacket.js");
var StreamIntent = require("./StreamIntent.js"); var StreamIntent = require("./StreamIntent.js");
var EventEmitter = require("events"); var EventEmitter = require("events");
class VoiceConnection extends EventEmitter { var VoiceConnection = (function (_EventEmitter) {
constructor(channel, client, session, token, server, endpoint) { _inherits(VoiceConnection, _EventEmitter);
super();
this.id = channel.id; function VoiceConnection(channel, client, session, token, server, endpoint) {
this.voiceChannel = channel; _classCallCheck(this, VoiceConnection);
this.client = client;
this.session = session; var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(VoiceConnection).call(this));
this.token = token;
this.server = server; _this.id = channel.id;
this.endpoint = endpoint.replace(":80", ""); _this.voiceChannel = channel;
this.vWS = null; // vWS means voice websocket _this.client = client;
this.ready = false; _this.session = session;
this.vWSData = {}; _this.token = token;
this.encoder = new AudioEncoder(); _this.server = server;
this.udp = null; _this.endpoint = endpoint.replace(":80", "");
this.playingIntent = null; _this.vWS = null; // vWS means voice websocket
this.playing = false; _this.ready = false;
this.streamTime = 0; _this.vWSData = {};
this.streamProc = null; _this.encoder = new AudioEncoder();
this.KAI = null; _this.udp = null;
this.init(); _this.playingIntent = null;
_this.playing = false;
_this.streamTime = 0;
_this.streamProc = null;
_this.KAI = null;
_this.init();
return _this;
} }
destroy() { _createClass(VoiceConnection, [{
this.stopPlaying(); key: "destroy",
if (this.KAI) clearInterval(this.KAI); value: function destroy() {
this.vWS.close(); this.stopPlaying();
this.udp.close(); if (this.KAI) clearInterval(this.KAI);
this.client.internal.sendWS({ this.vWS.close();
op: 4, this.udp.close();
d: { this.client.internal.sendWS({
guild_id: null, op: 4,
channel_id: null, d: {
self_mute: true, guild_id: null,
self_deaf: false channel_id: null,
} self_mute: true,
}); self_deaf: false
} }
});
stopPlaying() {
this.playing = false;
this.playingIntent = null;
if (this.instream) {
this.instream.end();
this.instream.destroy();
} }
} }, {
key: "stopPlaying",
playStream(stream) { value: function stopPlaying() {
this.playing = false;
var self = this; this.playingIntent = null;
if (this.instream) {
var startTime = Date.now(); this.instream.end();
var sequence = 0; this.instream.destroy();
var time = 0;
var count = 0;
var length = 20;
if (self.playingIntent) {
self.stopPlaying();
}
self.playing = true;
var retStream = new StreamIntent();
var onWarning = false;
self.playingIntent = retStream;
function send() {
if (!self.playingIntent || !self.playing) {
self.setSpeaking(false);
retStream.emit("end");
self;
return;
} }
try { }
var buffer = stream.read(1920); }, {
if (!buffer) { key: "playStream",
setTimeout(send, length * 10); // give chance for some data in 200ms to appear value: function playStream(stream) {
var self = this;
var startTime = Date.now();
var sequence = 0;
var time = 0;
var count = 0;
var length = 20;
if (self.playingIntent) {
self.stopPlaying();
}
self.playing = true;
var retStream = new StreamIntent();
var onWarning = false;
self.playingIntent = retStream;
function send() {
if (!self.playingIntent || !self.playing) {
self.setSpeaking(false);
retStream.emit("end");
self;
return; return;
} }
try {
if (buffer.length !== 1920) { var buffer = stream.read(1920);
if (onWarning) { if (!buffer) {
retStream.emit("end");
stream.destroy();
self.setSpeaking(false);
return;
} else {
onWarning = true;
setTimeout(send, length * 10); // give chance for some data in 200ms to appear setTimeout(send, length * 10); // give chance for some data in 200ms to appear
return; return;
} }
}
count++; if (buffer.length !== 1920) {
sequence + 10 < 65535 ? sequence += 1 : sequence = 0; if (onWarning) {
time + 9600 < 4294967295 ? time += 960 : time = 0; retStream.emit("end");
stream.destroy();
self.sendBuffer(buffer, sequence, time, e => {}); self.setSpeaking(false);
return;
var nextTime = startTime + count * length; } else {
onWarning = true;
self.streamTime = count * length; setTimeout(send, length * 10); // give chance for some data in 200ms to appear
return;
setTimeout(send, length + (nextTime - Date.now()));
if (!self.playing) self.setSpeaking(true);
retStream.emit("time", self.streamTime);
} catch (e) {
retStream.emit("error", e);
}
}
self.setSpeaking(true);
send();
return retStream;
}
setSpeaking(value) {
this.playing = value;
if (this.vWS.readyState === WebSocket.OPEN) this.vWS.send(JSON.stringify({
op: 5,
d: {
speaking: value,
delay: 0
}
}));
}
sendPacket(packet, callback = function (err) {}) {
var self = this;
self.playing = true;
try {
if (self.vWS.readyState === WebSocket.OPEN) self.udp.send(packet, 0, packet.length, self.vWSData.port, self.endpoint, callback);
} catch (e) {
self.playing = false;
callback(e);
return false;
}
}
sendBuffer(rawbuffer, sequence, timestamp, callback) {
var self = this;
self.playing = true;
try {
if (!self.encoder.opus) {
self.playing = false;
self.emit("error", "No Opus!");
self.client.emit("debug", "Tried to use node-opus, but opus not available - install it!");
return;
}
var buffer = self.encoder.opusBuffer(rawbuffer);
var packet = new VoicePacket(buffer, sequence, timestamp, self.vWSData.ssrc);
return self.sendPacket(packet, callback);
} catch (e) {
self.playing = false;
self.emit("error", e);
return false;
}
}
test() {
this.playFile("C:/users/amish/desktop/audio.mp3").then(stream => {
stream.on("time", time => {
console.log("Time", time);
});
});
}
playFile(stream, callback = function (err, str) {}) {
var self = this;
return new Promise((resolve, reject) => {
this.encoder.encodeFile(stream).catch(error).then(data => {
self.streamProc = data.proc;
var intent = self.playStream(data.stream);
resolve(intent);
callback(null, intent);
});
function error(e = true) {
reject(e);
callback(e);
}
});
}
playRawStream(stream, callback = function (err, str) {}) {
var self = this;
return new Promise((resolve, reject) => {
this.encoder.encodeStream(stream).catch(error).then(data => {
self.streamProc = data.proc;
self.instream = data.instream;
var intent = self.playStream(data.stream);
resolve(intent);
callback(null, intent);
});
function error(e = true) {
reject(e);
callback(e);
}
});
}
init() {
var self = this;
dns.lookup(this.endpoint, (err, address, family) => {
self.endpoint = address;
var vWS = self.vWS = new WebSocket("wss://" + this.endpoint, null, { rejectUnauthorized: false });
var udpClient = self.udp = udp.createSocket("udp4");
var firstPacket = true;
var discordIP = "",
discordPort = "";
udpClient.bind({ exclusive: true });
udpClient.on('message', function (msg, rinfo) {
var buffArr = JSON.parse(JSON.stringify(msg)).data;
if (firstPacket === true) {
for (var i = 4; i < buffArr.indexOf(0, i); i++) {
discordIP += String.fromCharCode(buffArr[i]);
}
discordPort = msg.readUIntLE(msg.length - 2, 2).toString(10);
var wsDiscPayload = {
"op": 1,
"d": {
"protocol": "udp",
"data": {
"address": discordIP,
"port": Number(discordPort),
"mode": self.vWSData.modes[0] //Plain
}
} }
};
vWS.send(JSON.stringify(wsDiscPayload));
firstPacket = false;
}
});
vWS.on("open", () => {
vWS.send(JSON.stringify({
op: 0,
d: {
server_id: self.server.id,
user_id: self.client.internal.user.id,
session_id: self.session,
token: self.token
} }
}));
count++;
sequence + 10 < 65535 ? sequence += 1 : sequence = 0;
time + 9600 < 4294967295 ? time += 960 : time = 0;
self.sendBuffer(buffer, sequence, time, function (e) {});
var nextTime = startTime + count * length;
self.streamTime = count * length;
setTimeout(send, length + (nextTime - Date.now()));
if (!self.playing) self.setSpeaking(true);
retStream.emit("time", self.streamTime);
} catch (e) {
retStream.emit("error", e);
}
}
self.setSpeaking(true);
send();
return retStream;
}
}, {
key: "setSpeaking",
value: function setSpeaking(value) {
this.playing = value;
if (this.vWS.readyState === WebSocket.OPEN) this.vWS.send(JSON.stringify({
op: 5,
d: {
speaking: value,
delay: 0
}
}));
}
}, {
key: "sendPacket",
value: function sendPacket(packet) {
var callback = arguments.length <= 1 || arguments[1] === undefined ? function (err) {} : arguments[1];
var self = this;
self.playing = true;
try {
if (self.vWS.readyState === WebSocket.OPEN) self.udp.send(packet, 0, packet.length, self.vWSData.port, self.endpoint, callback);
} catch (e) {
self.playing = false;
callback(e);
return false;
}
}
}, {
key: "sendBuffer",
value: function sendBuffer(rawbuffer, sequence, timestamp, callback) {
var self = this;
self.playing = true;
try {
if (!self.encoder.opus) {
self.playing = false;
self.emit("error", "No Opus!");
self.client.emit("debug", "Tried to use node-opus, but opus not available - install it!");
return;
}
var buffer = self.encoder.opusBuffer(rawbuffer);
var packet = new VoicePacket(buffer, sequence, timestamp, self.vWSData.ssrc);
return self.sendPacket(packet, callback);
} catch (e) {
self.playing = false;
self.emit("error", e);
return false;
}
}
}, {
key: "test",
value: function test() {
this.playFile("C:/users/amish/desktop/audio.mp3").then(function (stream) {
stream.on("time", function (time) {
console.log("Time", time);
});
}); });
}
}, {
key: "playFile",
value: function playFile(stream) {
var _this2 = this;
var KAI; var callback = arguments.length <= 1 || arguments[1] === undefined ? function (err, str) {} : arguments[1];
vWS.on("message", msg => { var self = this;
var data = JSON.parse(msg); return new Promise(function (resolve, reject) {
switch (data.op) { _this2.encoder.encodeFile(stream).catch(error).then(function (data) {
case 2: self.streamProc = data.proc;
self.vWSData = data.d; var intent = self.playStream(data.stream);
resolve(intent);
callback(null, intent);
});
function error() {
var e = arguments.length <= 0 || arguments[0] === undefined ? true : arguments[0];
KAI = setInterval(() => { reject(e);
if (vWS && vWS.readyState === WebSocket.OPEN) vWS.send(JSON.stringify({ callback(e);
op: 3,
d: null
}));
}, data.d.heartbeat_interval);
self.KAI = KAI;
var udpPacket = new Buffer(70);
udpPacket.writeUIntBE(data.d.ssrc, 0, 4);
udpClient.send(udpPacket, 0, udpPacket.length, data.d.port, self.endpoint, err => {
if (err) self.emit("error", err);
});
break;
case 4:
self.ready = true;
self.mode = data.d.mode;
self.emit("ready", self);
break;
} }
}); });
}); }
} }, {
} key: "playRawStream",
value: function playRawStream(stream) {
var _this3 = this;
var callback = arguments.length <= 1 || arguments[1] === undefined ? function (err, str) {} : arguments[1];
var self = this;
return new Promise(function (resolve, reject) {
_this3.encoder.encodeStream(stream).catch(error).then(function (data) {
self.streamProc = data.proc;
self.instream = data.instream;
var intent = self.playStream(data.stream);
resolve(intent);
callback(null, intent);
});
function error() {
var e = arguments.length <= 0 || arguments[0] === undefined ? true : arguments[0];
reject(e);
callback(e);
}
});
}
}, {
key: "init",
value: function init() {
var _this4 = this;
var self = this;
dns.lookup(this.endpoint, function (err, address, family) {
self.endpoint = address;
var vWS = self.vWS = new WebSocket("wss://" + _this4.endpoint, null, { rejectUnauthorized: false });
var udpClient = self.udp = udp.createSocket("udp4");
var firstPacket = true;
var discordIP = "",
discordPort = "";
udpClient.bind({ exclusive: true });
udpClient.on('message', function (msg, rinfo) {
var buffArr = JSON.parse(JSON.stringify(msg)).data;
if (firstPacket === true) {
for (var i = 4; i < buffArr.indexOf(0, i); i++) {
discordIP += String.fromCharCode(buffArr[i]);
}
discordPort = msg.readUIntLE(msg.length - 2, 2).toString(10);
var wsDiscPayload = {
"op": 1,
"d": {
"protocol": "udp",
"data": {
"address": discordIP,
"port": Number(discordPort),
"mode": self.vWSData.modes[0] //Plain
}
}
};
vWS.send(JSON.stringify(wsDiscPayload));
firstPacket = false;
}
});
vWS.on("open", function () {
vWS.send(JSON.stringify({
op: 0,
d: {
server_id: self.server.id,
user_id: self.client.internal.user.id,
session_id: self.session,
token: self.token
}
}));
});
var KAI;
vWS.on("message", function (msg) {
var data = JSON.parse(msg);
switch (data.op) {
case 2:
self.vWSData = data.d;
KAI = setInterval(function () {
if (vWS && vWS.readyState === WebSocket.OPEN) vWS.send(JSON.stringify({
op: 3,
d: null
}));
}, data.d.heartbeat_interval);
self.KAI = KAI;
var udpPacket = new Buffer(70);
udpPacket.writeUIntBE(data.d.ssrc, 0, 4);
udpClient.send(udpPacket, 0, udpPacket.length, data.d.port, self.endpoint, function (err) {
if (err) self.emit("error", err);
});
break;
case 4:
self.ready = true;
self.mode = data.d.mode;
self.emit("ready", self);
break;
}
});
});
}
}]);
return VoiceConnection;
})(EventEmitter);
module.exports = VoiceConnection; module.exports = VoiceConnection;

View File

@@ -1,25 +1,26 @@
"use strict"; "use strict";
class VoicePacket { function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
constructor(data, sequence, time, ssrc) {
var audioBuffer = data, var VoicePacket = function VoicePacket(data, sequence, time, ssrc) {
returnBuffer = new Buffer(audioBuffer.length + 12); _classCallCheck(this, VoicePacket);
returnBuffer.fill(0); var audioBuffer = data,
returnBuffer[0] = 0x80; returnBuffer = new Buffer(audioBuffer.length + 12);
returnBuffer[1] = 0x78;
returnBuffer.writeUIntBE(sequence, 2, 2); returnBuffer.fill(0);
returnBuffer.writeUIntBE(time, 4, 4); returnBuffer[0] = 0x80;
returnBuffer.writeUIntBE(ssrc, 8, 4); returnBuffer[1] = 0x78;
for (var i = 0; i < audioBuffer.length; i++) { returnBuffer.writeUIntBE(sequence, 2, 2);
returnBuffer[i + 12] = audioBuffer[i]; returnBuffer.writeUIntBE(time, 4, 4);
} returnBuffer.writeUIntBE(ssrc, 8, 4);
return returnBuffer; for (var i = 0; i < audioBuffer.length; i++) {
returnBuffer[i + 12] = audioBuffer[i];
} }
}
return returnBuffer;
};
module.exports = VoicePacket; module.exports = VoicePacket;

View File

@@ -1,3 +1,5 @@
"use strict";
module.exports = { module.exports = {
Client: require("./Client/Client"), Client: require("./Client/Client"),
Channel: require("./Structures/Channel"), Channel: require("./Structures/Channel"),

View File

@@ -125,6 +125,7 @@ class VoiceConnection extends EventEmitter {
self.streamTime = count * length; self.streamTime = count * length;
setTimeout(send, length + (nextTime - Date.now())); setTimeout(send, length + (nextTime - Date.now()));
if (!self.playing) if (!self.playing)
self.setSpeaking(true); self.setSpeaking(true);