From cd25848bdc2d732c150634853c25d801966ebd10 Mon Sep 17 00:00:00 2001 From: abalabahaha Date: Sat, 30 Jan 2016 14:11:21 -0800 Subject: [PATCH] voiceStateUpdate stored per-server, some docs --- docs/docs_cache.rst | 7 +++++- docs/docs_channel.rst | 10 ++++++++ docs/docs_client.rst | 37 +++++++++++------------------ docs/docs_message.rst | 5 ++++ docs/docs_resolvables.rst | 17 ++++++++++++++ docs/docs_server.rst | 45 +++++++++++------------------------- lib/Client/Client.js | 4 +--- lib/Client/InternalClient.js | 17 +------------- lib/Structures/Server.js | 29 +++++++++++++++++++++++ src/Client/Client.js | 4 ++-- src/Client/InternalClient.js | 23 ++++-------------- src/Structures/Server.js | 31 +++++++++++++++++++++++++ 12 files changed, 134 insertions(+), 95 deletions(-) diff --git a/docs/docs_cache.rst b/docs/docs_cache.rst index c5fd669e3..46d43b2a5 100644 --- a/docs/docs_cache.rst +++ b/docs/docs_cache.rst @@ -48,4 +48,9 @@ Updates an old object in the Cache (if it exists) with the new one. remove(data) ~~~~~~~~~~~~ -Removes an object from the cache if it exists. \ No newline at end of file +Removes an object from the cache if it exists. + +random() +~~~~~~~~~~~~ + +Get a random object from the cache. \ No newline at end of file diff --git a/docs/docs_channel.rst b/docs/docs_channel.rst index af661e27b..1303afdc1 100644 --- a/docs/docs_channel.rst +++ b/docs/docs_channel.rst @@ -26,3 +26,13 @@ isPrivate ~~~~~~~~~ Indicates whether the channel is PM channel, is `Boolean`. + +-------- + +Functions +--------- + +delete() +~~~~~~~~~~~~~~~ + +Deletes the channel. \ No newline at end of file diff --git a/docs/docs_client.rst b/docs/docs_client.rst index 40a4f46fd..62ec89d06 100644 --- a/docs/docs_client.rst +++ b/docs/docs_client.rst @@ -140,7 +140,7 @@ sendFile(channel, attachment, name, `callback`) Sends a file to the specified channel. - **channel** - a `Channel Resolvable`_ -- **attachment** - A ReadableStream, String or Buffer +- **attachment** - A `File Resolvable`_ - **name** - (Optional) `String`, name of the file containing the extension - **callback** - `function` taking the following: - **error** - error if any occurred @@ -520,21 +520,19 @@ addMemberToRole(member, role, `callback`) Adds a member of a server to a role in the server - **member** - A `User Resolvable`_ -- **role** - A Role_ +- **role** - A `Role Resolvable`_ or an array of `Role Resolvable`_ - **callback** - `function` that takes the following: - **error** - error if any occurred -addMemberToRoles(member, roles, `callback`) +memberHasRole(member, role) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -**Aliases** : `addUserToRole` +**Aliases** : `userHasRole` -Adds a member of a server to a role in the server +Returns if a user has a role - **member** - A `User Resolvable`_ -- **roles** - An array of Role_ objects -- **callback** - `function` that takes the following: - - **error** - error if any occurred +- **role** - A `Role Resolvable`_ or an array of `Role Resolvable`_ removeMemberFromRole(member, role, `callback`) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -544,19 +542,7 @@ removeMemberFromRole(member, role, `callback`) Removes a member of a server from a role in the server - **member** - A `User Resolvable`_ -- **role** - A Role_ -- **callback** - `function` that takes the following: - - **error** - error if any occurred - -removeMemberFromRoles(member, roles, `callback`) -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -**Aliases** : `removeUserFromRole` - -Removes a member of a server from a role in the server - -- **member** - A `User Resolvable`_ -- **role** - A array of Role_ objects +- **role** - A `Role Resolvable`_ or an array of `Role Resolvable`_ - **callback** - `function` that takes the following: - **error** - error if any occurred @@ -716,9 +702,14 @@ Emitted when a user is unbanned from a server. Supplies two parameters, a User_ voiceJoin ~~~~~~~~ -Emitted when a user joins a voice channel, supplies a User_ and a VoiceChannel_ +Emitted when a user joins a voice channel, supplies a VoiceChannel_ and a User_ voiceLeave ~~~~~~~~~~ -Emitted when a user leaves a voice channel, supplies a User_ and a VoiceChannel_ +Emitted when a user leaves a voice channel, supplies a VoiceChannel_ and a User_ + +voiceStateUpdate +~~~~~~~~~~ + +Emitted when a user mutes/deafens, supplies a VoiceChannel_, User_, an object containing the old mute/self_mute/deaf/self_deaf properties, and an object containing the new mute/self_mute/deaf/self_deaf properties diff --git a/docs/docs_message.rst b/docs/docs_message.rst index 0192c1b75..528a910c9 100644 --- a/docs/docs_message.rst +++ b/docs/docs_message.rst @@ -69,6 +69,11 @@ content `String`, content of the message. +cleanContent +~~~~~~~ + +`String`, content of the message with valid user mentions (<@123>) replaced with "@username". + mentions ~~~~~~~~ diff --git a/docs/docs_resolvables.rst b/docs/docs_resolvables.rst index 11af9065c..e7d343c8a 100644 --- a/docs/docs_resolvables.rst +++ b/docs/docs_resolvables.rst @@ -18,6 +18,23 @@ A Channel Resolvable allows: - User_ (in some instances) - String of Channel ID +File Resolvable +------------------ + +A File Resolvable allows: + +- URL +- Local file path +- Readable stream + +Role Resolvable +------------------ + +A Role Resolvable allows: + +- Role ID +- Role_ + Voice Channel Resolvable ------------------------ diff --git a/docs/docs_server.rst b/docs/docs_server.rst index 1903f9554..3928dc4fa 100644 --- a/docs/docs_server.rst +++ b/docs/docs_server.rst @@ -85,16 +85,21 @@ Functions rolesOfUser(user) ~~~~~~~~~~~~~~~~~ -**Aliases**: `rolesOf` +**Aliases**: `rolesOf`, `rolesOfMember` Returns an array of the roles affecting a user server-wide. ------- +usersWithRole(user, role) +~~~~~~~~~~~~~~~~~ + +**Aliases**: `membersWithRole` + +Returns an array of users that have the specified role. detailsOfUser(user) ~~~~~~~~~~~~~~~~~~~ -**Aliases** `detailsOf` +**Aliases** `detailsOf`, `detailsOfMember` Returns an object containing metadata of a user within the server, containing a structure similar to the following: @@ -102,12 +107,13 @@ Returns an object containing metadata of a user within the server, containing a { joinedAt : 1449339323747, - mute : false, - deaf : false + roles: [], + mute : false, + self_mute : false, + deaf : false, + self_deaf : false } ----------- - leave() ~~~~~~~ @@ -115,45 +121,29 @@ leave() | **Aliases** `delete` | **See** client.leaveServer_ ------- - -| - createInvite(`options`, `callback`) ~~~~~~~ | **Shortcut of** ``client.createInvite(server, options, callback)`` | **See** client.createInvite_ -| - ------- createRole(`data`, `callback`) ~~~~~~~ | **Shortcut of** ``client.createRole(server, data, callback)`` | **See** client.createRole_ -| - ------- createChannel(name, `type`, `callback`) ~~~~~~~ | **Shortcut of** ``client.createChannel(server, name, type, callback)`` | **See** client.createChannel_ -| - ------- getBans(`callback`) ~~~~~~~~~~~~~~~~~~~ | **Shortcut of** ``client.getBans(server, callback)`` | **See** client.getBans_ -| - ------- banMember(user, `length`, `callback`) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -161,9 +151,6 @@ banMember(user, `length`, `callback`) | **Shortcut of** ``client.banMember(member, server, length, callback)`` | **Aliases** `banUser, ban` | **See** client.banMember_ -| - ------- unbanMember(user, `callback`) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -171,9 +158,6 @@ unbanMember(user, `callback`) | **Shortcut of** ``client.unbanMember(member, server, callback)`` | **Aliases** `unbanUser, unban` | **See** client.unbanMember_ -| - ------- kickMember(user, `callback`) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -181,9 +165,6 @@ kickMember(user, `callback`) | **Shortcut of** ``client.kickMember(member, server, callback)`` | **Aliases** `kickUser, kick` | **See** client.kickMember_ -| - ------- .. _client.leaveServer : ./docs_client.html#leaveserver-server-callback .. _client.createInvite : ./docs_client.html#createinvite-channel-options-callback diff --git a/lib/Client/Client.js b/lib/Client/Client.js index c7981517c..e6158910f 100644 --- a/lib/Client/Client.js +++ b/lib/Client/Client.js @@ -406,9 +406,7 @@ var Client = (function (_EventEmitter) { // def addUserToRole Client.prototype.userHasRole = function userHasRole(member, role) { - var callback = arguments.length <= 2 || arguments[2] === undefined ? function () /*err, {}*/{} : arguments[2]; - - return this.memberHasRole(member, role, callback); + return this.memberHasRole(member, role); }; // def removeMemberFromRole diff --git a/lib/Client/InternalClient.js b/lib/Client/InternalClient.js index 1301ef383..d85a39db8 100644 --- a/lib/Client/InternalClient.js +++ b/lib/Client/InternalClient.js @@ -1710,22 +1710,7 @@ var InternalClient = (function () { // in voice channel var channel = self.channels.get("id", data.channel_id); if (channel && channel.type === "voice") { - var oldState = { - mute: user.voiceState.mute, - self_mute: user.voiceState.self_mute, - deaf: user.voiceState.deaf, - self_deaf: user.voiceState.self_deaf - }; - user.voiceState.mute = data.mute; - user.voiceState.self_mute = data.self_mute; - user.voiceState.deaf = data.deaf; - user.voiceState.self_deaf = data.self_deaf; - if ((oldState.mute != user.voiceState.mute || oldState.self_mute != user.voiceState.self_mute || oldState.deaf != user.voiceState.deaf || oldState.self_deaf != user.voiceState.self_deaf) && oldState.mute !== undefined) { - client.emit("voiceStateUpdate", channel, user, oldState); - } else { - server.eventVoiceJoin(user, channel); - client.emit("voiceJoin", channel, user); - } + server.eventVoiceStateUpdate(channel, user, data); } else { client.emit("warn", "voice state channel not in cache"); } diff --git a/lib/Structures/Server.js b/lib/Structures/Server.js index 92ff9ac36..e222b079f 100644 --- a/lib/Structures/Server.js +++ b/lib/Structures/Server.js @@ -88,7 +88,9 @@ var Server = (function (_Equality) { return self.roles.get("id", pid); }), mute: dataUser.mute, + self_mute: dataUser.self_mute, deaf: dataUser.deaf, + self_deaf: dataUser.self_deaf, joinedAt: Date.parse(dataUser.joined_at) }; var user = client.internal.users.add(new _User2["default"](dataUser.user, client)); @@ -174,6 +176,10 @@ var Server = (function (_Equality) { return this.detailsOf(user); }; + Server.prototype.detailsOfMember = function detailsOfMember(user) { + return this.detailsOf(user); + }; + Server.prototype.details = function details(user) { return this.detailsOf(user); }; @@ -207,6 +213,29 @@ var Server = (function (_Equality) { user.voiceChannel = channel; }; + Server.prototype.eventVoiceStateUpdate = function eventVoiceStateUpdate(channel, user, data) { + // removes from other speaking channels first + if (!this.memberMap[user.id]) { + this.memberMap[user.id] = {}; + } + var oldState = { + mute: this.memberMap[user.id].mute, + self_mute: this.memberMap[user.id].self_mute, + deaf: this.memberMap[user.id].deaf, + self_deaf: this.memberMap[user.id].self_deaf + }; + this.memberMap[user.id].mute = data.mute; + this.memberMap[user.id].self_mute = data.self_mute; + this.memberMap[user.id].deaf = data.deaf; + this.memberMap[user.id].self_deaf = data.self_deaf; + if ((oldState.mute != data.mute || oldState.self_mute != data.self_mute || oldState.deaf != data.deaf || oldState.self_deaf != data.self_deaf) && oldState.mute !== undefined) { + this.client.emit("voiceStateUpdate", channel, user, oldState, this.memberMap[user.id]); + } else { + this.eventVoiceJoin(user, channel); + this.client.emit("voiceJoin", channel, user); + } + }; + Server.prototype.eventVoiceLeave = function eventVoiceLeave(user) { for (var _iterator3 = this.channels.getAll("type", "voice"), _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) { var _ref3; diff --git a/src/Client/Client.js b/src/Client/Client.js index b9f4ff5eb..d95da5af6 100644 --- a/src/Client/Client.js +++ b/src/Client/Client.js @@ -344,8 +344,8 @@ export default class Client extends EventEmitter { } // def addUserToRole - userHasRole(member, role, callback = (/*err, {}*/) => { }) { - return this.memberHasRole(member, role, callback); + userHasRole(member, role) { + return this.memberHasRole(member, role); } // def removeMemberFromRole diff --git a/src/Client/InternalClient.js b/src/Client/InternalClient.js index 1d1998994..b7737dacb 100644 --- a/src/Client/InternalClient.js +++ b/src/Client/InternalClient.js @@ -1373,7 +1373,9 @@ export default class InternalClient { server.memberMap[data.user.id] = { roles: data.roles.map(pid => server.roles.get("id", pid)), mute: false, + self_mute: false, deaf: false, + self_deaf: false, joinedAt: Date.parse(data.joined_at) }; @@ -1409,7 +1411,9 @@ export default class InternalClient { if (user) { server.memberMap[data.user.id].roles = data.roles.map(pid => server.roles.get("id", pid)); server.memberMap[data.user.id].mute = data.mute; + server.memberMap[data.user.id].self_mute = data.self_mute; server.memberMap[data.user.id].deaf = data.deaf; + server.memberMap[data.user.id].self_deaf = data.self_deaf; client.emit("serverMemberUpdated", server, user); } else { client.emit("warn", "server member removed but user doesn't exist in cache"); @@ -1500,24 +1504,7 @@ export default class InternalClient { // in voice channel var channel = self.channels.get("id", data.channel_id); if (channel && channel.type === "voice") { - var oldState = { - mute: user.voiceState.mute, - self_mute: user.voiceState.self_mute, - deaf: user.voiceState.deaf, - self_deaf: user.voiceState.self_deaf - }; - user.voiceState.mute = data.mute; - user.voiceState.self_mute = data.self_mute; - user.voiceState.deaf = data.deaf; - user.voiceState.self_deaf = data.self_deaf; - if ((oldState.mute != user.voiceState.mute || oldState.self_mute != user.voiceState.self_mute - || oldState.deaf != user.voiceState.deaf || oldState.self_deaf != user.voiceState.self_deaf) - && oldState.mute !== undefined) { - client.emit("voiceStateUpdate", channel, user, oldState); - } else { - server.eventVoiceJoin(user, channel); - client.emit("voiceJoin", channel, user); - } + server.eventVoiceStateUpdate(channel, user, data); } else { client.emit("warn", "voice state channel not in cache"); } diff --git a/src/Structures/Server.js b/src/Structures/Server.js index 30551e3e5..e3ce78f36 100644 --- a/src/Structures/Server.js +++ b/src/Structures/Server.js @@ -50,7 +50,9 @@ export default class Server extends Equality { this.memberMap[dataUser.user.id] = { roles: dataUser.roles.map((pid) => self.roles.get("id", pid)), mute: dataUser.mute, + self_mute: dataUser.self_mute, deaf: dataUser.deaf, + self_deaf: dataUser.self_deaf, joinedAt: Date.parse(dataUser.joined_at) }; var user = client.internal.users.add(new User(dataUser.user, client)); @@ -108,6 +110,10 @@ export default class Server extends Equality { return this.detailsOf(user); } + detailsOfMember(user) { + return this.detailsOf(user); + } + details(user) { return this.detailsOf(user); } @@ -169,6 +175,31 @@ export default class Server extends Equality { user.voiceChannel = channel; } + eventVoiceStateUpdate(channel, user, data) { + // removes from other speaking channels first + if (!this.memberMap[user.id]) { + this.memberMap[user.id] = {}; + } + var oldState = { + mute: this.memberMap[user.id].mute, + self_mute: this.memberMap[user.id].self_mute, + deaf: this.memberMap[user.id].deaf, + self_deaf: this.memberMap[user.id].self_deaf + }; + this.memberMap[user.id].mute = data.mute; + this.memberMap[user.id].self_mute = data.self_mute; + this.memberMap[user.id].deaf = data.deaf; + this.memberMap[user.id].self_deaf = data.self_deaf; + if ((oldState.mute != data.mute || oldState.self_mute != data.self_mute + || oldState.deaf != data.deaf || oldState.self_deaf != data.self_deaf) + && oldState.mute !== undefined) { + this.client.emit("voiceStateUpdate", channel, user, oldState, this.memberMap[user.id]); + } else { + this.eventVoiceJoin(user, channel); + this.client.emit("voiceJoin", channel, user); + } + } + eventVoiceLeave(user) { for (let chan of this.channels.getAll("type", "voice")) { if (chan.members.has(user)) {