feat(MessageManager): extend API coverage (#4869)

Co-authored-by: Sugden <28943913+NotSugden@users.noreply.github.com>
Co-authored-by: izexi <43889168+izexi@users.noreply.github.com>
Co-authored-by: Advaith <advaithj1@gmail.com>
This commit is contained in:
monbrey
2021-05-11 08:32:15 +10:00
committed by GitHub
parent 7ce741dacd
commit c56c4a8dc8
3 changed files with 109 additions and 53 deletions

View File

@@ -2,6 +2,7 @@
const BaseManager = require('./BaseManager');
const { TypeError } = require('../errors');
const APIMessage = require('../structures/APIMessage');
const Message = require('../structures/Message');
const Collection = require('../util/Collection');
const LimitedCollection = require('../util/LimitedCollection');
@@ -113,6 +114,81 @@ class MessageManager extends BaseManager {
* @returns {?Snowflake}
*/
/**
* Edits a message, even if it's not cached.
* @param {MessageResolvable} message The message to edit
* @param {MessageEditOptions} [options] The options to provide
* @returns {Promise<Message>}
*/
async edit(message, options) {
message = this.resolveID(message);
if (!message) throw new TypeError('INVALID_TYPE', 'message', 'MessageResolvable');
const { data } = APIMessage.create(this, options).resolveData();
const d = await this.client.api.channels[this.channel.id].messages[message].patch({ data });
if (this.cache.has(message)) {
const clone = this.cache.get(message)._clone();
clone._patch(d);
return clone;
}
return this.add(d);
}
/**
* Publishes a message in an announcement channel to all channels following it, even if it's not cached.
* @param {MessageResolvable} message The message to publish
* @returns {Promise<Message>}
*/
async crosspost(message) {
message = this.resolveID(message);
if (!message) throw new TypeError('INVALID_TYPE', 'message', 'MessageResolvable');
const data = await this.client.api.channels(this.channel.id).messages(message).crosspost.post();
return this.cache.get(data.id) || this.add(data);
}
/**
* Pins a message to the channel's pinned messages, even if it's not cached.
* @param {MessageResolvable} message The message to pin
* @returns {Promise<void>}
*/
async pin(message) {
message = this.resolveID(message);
if (!message) throw new TypeError('INVALID_TYPE', 'message', 'MessageResolvable');
await this.client.api.channels(this.channel.id).pins(message).put();
}
/**
* Unins a message from the channel's pinned messages, even if it's not cached.
* @param {MessageResolvable} message The message to unpin
* @returns {Promise<void>}
*/
async unpin(message) {
message = this.resolveID(message);
if (!message) throw new TypeError('INVALID_TYPE', 'message', 'MessageResolvable');
await this.client.api.channels(this.channel.id).pins(message).delete();
}
/**
* Adds a reaction to a message, even if it's not cached.
* @param {MessageResolvable} message The messag to react to
* @param {EmojiIdentifierResolvable} emoji The emoji to react with
* @returns {Promise<void>}
*/
async react(message, emoji) {
message = this.resolveID(message);
if (!message) throw new TypeError('INVALID_TYPE', 'message', 'MessageResolvable');
emoji = this.client.emojis.resolveIdentifier(emoji);
if (!emoji) throw new TypeError('EMOJI_TYPE', 'emoji', 'EmojiIdentifierResolvable');
// eslint-disable-next-line newline-per-chained-call
await this.client.api.channels(this.channel.id).messages(message).reactions(emoji, '@me').put();
}
/**
* Deletes a message, even if it's not cached.
* @param {MessageResolvable} message The message to delete