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

@@ -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 = {}) {