Bulk deletion of messages (#336) (#337)

This commit is contained in:
Nicholas Tay
2016-05-11 02:21:55 +10:00
committed by abalabahaha
parent d73ebcdfd4
commit 71db8555fe
4 changed files with 174 additions and 66 deletions

View File

@@ -408,6 +408,22 @@ var Client = (function (_EventEmitter) {
return this.internal.deleteMessage(message, options).then(dataCallback(callback), errorCallback(callback));
};
/**
* Bulk deletes messages (if the client has permission to)
* @param {Array<MessageResolvable>} message the message to delete
* @param {function(err: Error)} [callback] callback to the method
* @returns {Promise<null, Error>} Resolves with null if the deletion was successful, otherwise rejects with an Error.
* @example
* // deleting messages
* client.deleteMessages([message1, message2]);
*/
Client.prototype.deleteMessages = function deleteMessages(messages) {
var callback = arguments.length <= 1 || arguments[1] === undefined ? function () /*err, {}*/{} : arguments[1];
return this.internal.deleteMessages(messages).then(dataCallback(callback), errorCallback(callback));
};
/**
* Edits a previously sent message (if the client has permission to)
* @param {MessageResolvable} message the message to edit

View File

@@ -837,6 +837,52 @@ var InternalClient = (function () {
});
};
// def deleteMessages
InternalClient.prototype.deleteMessages = function deleteMessages(_messages) {
if (!_messages instanceof Array) return Promise.reject(new Error("Messages provided must be in an array"));
if (_messages.length < 1) return Promise.reject(new Error("You must provide at least one message to delete"));
var messages = [];
var channel;
for (var _iterator4 = _messages, _isArray4 = Array.isArray(_iterator4), _i4 = 0, _iterator4 = _isArray4 ? _iterator4 : _iterator4[Symbol.iterator]();;) {
var _ref4;
if (_isArray4) {
if (_i4 >= _iterator4.length) break;
_ref4 = _iterator4[_i4++];
} else {
_i4 = _iterator4.next();
if (_i4.done) break;
_ref4 = _i4.value;
}
var _message = _ref4;
var message = this.resolver.resolveMessage(_message);
if (!message) return Promise.reject(new Error("Something other than a message could not be resolved in the array..."));
// ensure same channel
if (!channel) {
channel = message.channel;
} else {
if (message.channel.id !== channel.id) return Promise.reject(new Error("You can only bulk delete messages from the same channel at one time..."));
}
messages.push(message);
}
return this.apiRequest("post", _Constants.Endpoints.CHANNEL_MESSAGES(channel.id) + "/bulk_delete", true, {
messages: messages.map(function (m) {
return m.id;
})
}).then(function () {
return messages.forEach(function (m) {
return channel.messages.remove(m);
});
});
};
// def updateMessage
InternalClient.prototype.updateMessage = function updateMessage(msg, _content) {
@@ -1068,19 +1114,19 @@ var InternalClient = (function () {
if (data.permissions) {
newData.permissions = 0;
for (var _iterator4 = data.permissions, _isArray4 = Array.isArray(_iterator4), _i4 = 0, _iterator4 = _isArray4 ? _iterator4 : _iterator4[Symbol.iterator]();;) {
var _ref4;
for (var _iterator5 = data.permissions, _isArray5 = Array.isArray(_iterator5), _i5 = 0, _iterator5 = _isArray5 ? _iterator5 : _iterator5[Symbol.iterator]();;) {
var _ref5;
if (_isArray4) {
if (_i4 >= _iterator4.length) break;
_ref4 = _iterator4[_i4++];
if (_isArray5) {
if (_i5 >= _iterator5.length) break;
_ref5 = _iterator5[_i5++];
} else {
_i4 = _iterator4.next();
if (_i4.done) break;
_ref4 = _i4.value;
_i5 = _iterator5.next();
if (_i5.done) break;
_ref5 = _i5.value;
}
var perm = _ref4;
var perm = _ref5;
if (perm instanceof String || typeof perm === "string") {
newData.permissions |= _Constants.Permissions[perm] || 0;
@@ -1163,19 +1209,19 @@ var InternalClient = (function () {
var roledata = role.server.rolesOf(member);
if (roledata) {
for (var _iterator5 = roledata, _isArray5 = Array.isArray(_iterator5), _i5 = 0, _iterator5 = _isArray5 ? _iterator5 : _iterator5[Symbol.iterator]();;) {
var _ref5;
for (var _iterator6 = roledata, _isArray6 = Array.isArray(_iterator6), _i6 = 0, _iterator6 = _isArray6 ? _iterator6 : _iterator6[Symbol.iterator]();;) {
var _ref6;
if (_isArray5) {
if (_i5 >= _iterator5.length) break;
_ref5 = _iterator5[_i5++];
if (_isArray6) {
if (_i6 >= _iterator6.length) break;
_ref6 = _iterator6[_i6++];
} else {
_i5 = _iterator5.next();
if (_i5.done) break;
_ref5 = _i5.value;
_i6 = _iterator6.next();
if (_i6.done) break;
_ref6 = _i6.value;
}
var r = _ref5;
var r = _ref6;
if (r.id == role.id) {
return r;
@@ -1213,19 +1259,19 @@ var InternalClient = (function () {
return r.id;
});
for (var _iterator6 = roles, _isArray6 = Array.isArray(_iterator6), _i6 = 0, _iterator6 = _isArray6 ? _iterator6 : _iterator6[Symbol.iterator]();;) {
var _ref6;
for (var _iterator7 = roles, _isArray7 = Array.isArray(_iterator7), _i7 = 0, _iterator7 = _isArray7 ? _iterator7 : _iterator7[Symbol.iterator]();;) {
var _ref7;
if (_isArray6) {
if (_i6 >= _iterator6.length) break;
_ref6 = _iterator6[_i6++];
if (_isArray7) {
if (_i7 >= _iterator7.length) break;
_ref7 = _iterator7[_i7++];
} else {
_i6 = _iterator6.next();
if (_i6.done) break;
_ref6 = _i6.value;
_i7 = _iterator7.next();
if (_i7.done) break;
_ref7 = _i7.value;
}
var role = _ref6;
var role = _ref7;
if (!role.server.memberMap[member.id]) {
return Promise.reject(new Error("member not in server"));
@@ -1822,26 +1868,7 @@ var InternalClient = (function () {
if (!data.unavailable) {
client.emit("serverDeleted", server);
for (var _iterator7 = server.channels, _isArray7 = Array.isArray(_iterator7), _i7 = 0, _iterator7 = _isArray7 ? _iterator7 : _iterator7[Symbol.iterator]();;) {
var _ref7;
if (_isArray7) {
if (_i7 >= _iterator7.length) break;
_ref7 = _iterator7[_i7++];
} else {
_i7 = _iterator7.next();
if (_i7.done) break;
_ref7 = _i7.value;
}
var channel = _ref7;
self.channels.remove(channel);
}
self.servers.remove(server);
for (var _iterator8 = server.members, _isArray8 = Array.isArray(_iterator8), _i8 = 0, _iterator8 = _isArray8 ? _iterator8 : _iterator8[Symbol.iterator]();;) {
for (var _iterator8 = server.channels, _isArray8 = Array.isArray(_iterator8), _i8 = 0, _iterator8 = _isArray8 ? _iterator8 : _iterator8[Symbol.iterator]();;) {
var _ref8;
if (_isArray8) {
@@ -1853,22 +1880,41 @@ var InternalClient = (function () {
_ref8 = _i8.value;
}
var user = _ref8;
var channel = _ref8;
self.channels.remove(channel);
}
self.servers.remove(server);
for (var _iterator9 = server.members, _isArray9 = Array.isArray(_iterator9), _i9 = 0, _iterator9 = _isArray9 ? _iterator9 : _iterator9[Symbol.iterator]();;) {
var _ref9;
if (_isArray9) {
if (_i9 >= _iterator9.length) break;
_ref9 = _iterator9[_i9++];
} else {
_i9 = _iterator9.next();
if (_i9.done) break;
_ref9 = _i9.value;
}
var user = _ref9;
var found = false;
for (var _iterator9 = self.servers, _isArray9 = Array.isArray(_iterator9), _i9 = 0, _iterator9 = _isArray9 ? _iterator9 : _iterator9[Symbol.iterator]();;) {
var _ref9;
for (var _iterator10 = self.servers, _isArray10 = Array.isArray(_iterator10), _i10 = 0, _iterator10 = _isArray10 ? _iterator10 : _iterator10[Symbol.iterator]();;) {
var _ref10;
if (_isArray9) {
if (_i9 >= _iterator9.length) break;
_ref9 = _iterator9[_i9++];
if (_isArray10) {
if (_i10 >= _iterator10.length) break;
_ref10 = _iterator10[_i10++];
} else {
_i9 = _iterator9.next();
if (_i9.done) break;
_ref9 = _i9.value;
_i10 = _iterator10.next();
if (_i10.done) break;
_ref10 = _i10.value;
}
var s = _ref9;
var s = _ref10;
if (s.members.get("id", user.id)) {
found = true;
@@ -2230,19 +2276,19 @@ var InternalClient = (function () {
var testtime = Date.now();
for (var _iterator10 = data.members, _isArray10 = Array.isArray(_iterator10), _i10 = 0, _iterator10 = _isArray10 ? _iterator10 : _iterator10[Symbol.iterator]();;) {
var _ref10;
for (var _iterator11 = data.members, _isArray11 = Array.isArray(_iterator11), _i11 = 0, _iterator11 = _isArray11 ? _iterator11 : _iterator11[Symbol.iterator]();;) {
var _ref11;
if (_isArray10) {
if (_i10 >= _iterator10.length) break;
_ref10 = _iterator10[_i10++];
if (_isArray11) {
if (_i11 >= _iterator11.length) break;
_ref11 = _iterator11[_i11++];
} else {
_i10 = _iterator10.next();
if (_i10.done) break;
_ref10 = _i10.value;
_i11 = _iterator11.next();
if (_i11.done) break;
_ref11 = _i11.value;
}
var user = _ref10;
var user = _ref11;
server.memberMap[user.user.id] = {
roles: user.roles.map(function (pid) {

View File

@@ -511,6 +511,21 @@ export default class Client extends EventEmitter {
return this.internal.deleteMessage(message, options)
.then(dataCallback(callback), errorCallback(callback));
}
/**
* Bulk deletes messages (if the client has permission to)
* @param {Array<MessageResolvable>} message the message to delete
* @param {function(err: Error)} [callback] callback to the method
* @returns {Promise<null, Error>} Resolves with null if the deletion was successful, otherwise rejects with an Error.
* @example
* // deleting messages
* client.deleteMessages([message1, message2]);
*/
deleteMessages(messages, callback = (/*err, {}*/) => { }) {
return this.internal.deleteMessages(messages)
.then(dataCallback(callback), errorCallback(callback));
}
/**
* Edits a previously sent message (if the client has permission to)
* @param {MessageResolvable} message the message to edit

View File

@@ -689,6 +689,37 @@ export default class InternalClient {
.then(() => message.channel.messages.remove(message));
}
// def deleteMessages
deleteMessages(_messages) {
if (!_messages instanceof Array)
return Promise.reject(new Error("Messages provided must be in an array"));
if (_messages.length < 1)
return Promise.reject(new Error("You must provide at least one message to delete"))
var messages = [];
var channel;
for (var _message of _messages) {
var message = this.resolver.resolveMessage(_message);
if (!message)
return Promise.reject(new Error("Something other than a message could not be resolved in the array..."));
// ensure same channel
if (!channel) {
channel = message.channel;
} else {
if (message.channel.id !== channel.id)
return Promise.reject(new Error("You can only bulk delete messages from the same channel at one time..."));
}
messages.push(message);
}
return this.apiRequest("post", `${Endpoints.CHANNEL_MESSAGES(channel.id)}/bulk_delete`, true, {
messages: messages.map(m => m.id)
})
.then(() => messages.forEach(m => channel.messages.remove(m)));
}
// def updateMessage
updateMessage(msg, _content, options = {}) {