mirror of
https://github.com/discordjs/discord.js.git
synced 2026-03-15 02:53:31 +01:00
feat(MessageReaction): add remove method and Client#messageReactionRemoveEmoji (#3723)
* Add support for MessageReaction#remove and MESSAGE_REACTION_REMOVE_EMOJI * Remove reaction from cache Co-Authored-By: matthewfripp <50251454+matthewfripp@users.noreply.github.com> * fix: message may be partial * Clarify what the event entails * Document client in MessageReaction Co-Authored-By: SpaceEEC <spaceeec@yahoo.com> * await the REST call * Add MessageReaction#remove to typings Co-authored-by: matthewfripp <50251454+matthewfripp@users.noreply.github.com> Co-authored-by: SpaceEEC <spaceeec@yahoo.com>
This commit is contained in:
@@ -54,7 +54,7 @@ class GenericAction {
|
|||||||
return this.getPayload({
|
return this.getPayload({
|
||||||
emoji: data.emoji,
|
emoji: data.emoji,
|
||||||
count: message.partial ? null : 0,
|
count: message.partial ? null : 0,
|
||||||
me: user.id === this.client.user.id,
|
me: user ? user.id === this.client.user.id : false,
|
||||||
}, message.reactions, id, PartialTypes.REACTION);
|
}, message.reactions, id, PartialTypes.REACTION);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ class ActionsManager {
|
|||||||
this.register(require('./MessageReactionAdd'));
|
this.register(require('./MessageReactionAdd'));
|
||||||
this.register(require('./MessageReactionRemove'));
|
this.register(require('./MessageReactionRemove'));
|
||||||
this.register(require('./MessageReactionRemoveAll'));
|
this.register(require('./MessageReactionRemoveAll'));
|
||||||
|
this.register(require('./MessageReactionRemoveEmoji'));
|
||||||
this.register(require('./ChannelCreate'));
|
this.register(require('./ChannelCreate'));
|
||||||
this.register(require('./ChannelDelete'));
|
this.register(require('./ChannelDelete'));
|
||||||
this.register(require('./ChannelUpdate'));
|
this.register(require('./ChannelUpdate'));
|
||||||
|
|||||||
28
src/client/actions/MessageReactionRemoveEmoji.js
Normal file
28
src/client/actions/MessageReactionRemoveEmoji.js
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
const Action = require('./Action');
|
||||||
|
const { Events } = require('../../util/Constants');
|
||||||
|
|
||||||
|
class MessageReactionRemoveEmoji extends Action {
|
||||||
|
handle(data) {
|
||||||
|
const channel = this.getChannel(data);
|
||||||
|
if (!channel || channel.type === 'voice') return false;
|
||||||
|
|
||||||
|
const message = this.getMessage(data, channel);
|
||||||
|
if (!message) return false;
|
||||||
|
|
||||||
|
const reaction = this.getReaction(data, message);
|
||||||
|
if (!reaction) return false;
|
||||||
|
if (!message.partial) message.reactions.delete(reaction.emoji.id || reaction.emoji.name);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Emitted when a bot removes an emoji reaction from a cached message.
|
||||||
|
* @event Client#messageReactionRemoveEmoji
|
||||||
|
* @param {MessageReaction} reaction The reaction that was removed
|
||||||
|
*/
|
||||||
|
this.client.emit(Events.MESSAGE_REACTION_REMOVE_EMOJI, reaction);
|
||||||
|
return { reaction };
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = MessageReactionRemoveEmoji;
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
module.exports = (client, packet) => {
|
||||||
|
client.actions.MessageReactionRemoveEmoji.handle(packet.d);
|
||||||
|
};
|
||||||
@@ -15,6 +15,13 @@ class MessageReaction {
|
|||||||
* @param {Message} message The message the reaction refers to
|
* @param {Message} message The message the reaction refers to
|
||||||
*/
|
*/
|
||||||
constructor(client, data, message) {
|
constructor(client, data, message) {
|
||||||
|
/**
|
||||||
|
* The client that instantiated this message reaction
|
||||||
|
* @name MessageReaction#client
|
||||||
|
* @type {Client}
|
||||||
|
* @readonly
|
||||||
|
*/
|
||||||
|
Object.defineProperty(this, 'client', { value: client });
|
||||||
/**
|
/**
|
||||||
* The message that this reaction refers to
|
* The message that this reaction refers to
|
||||||
* @type {Message}
|
* @type {Message}
|
||||||
@@ -47,6 +54,16 @@ class MessageReaction {
|
|||||||
if (this.count == undefined) this.count = data.count;
|
if (this.count == undefined) this.count = data.count;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes all users from this reaction.
|
||||||
|
* @returns {Promise<MessageReaction>}
|
||||||
|
*/
|
||||||
|
async remove() {
|
||||||
|
await this.client.api.channels(this.message.channel.id).messages(this.message.id).reactions(this._emoji.identifier)
|
||||||
|
.delete();
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The emoji of this reaction, either an GuildEmoji object for known custom emojis, or a ReactionEmoji
|
* The emoji of this reaction, either an GuildEmoji object for known custom emojis, or a ReactionEmoji
|
||||||
* object which has fewer properties. Whatever the prototype of the emoji, it will still have
|
* object which has fewer properties. Whatever the prototype of the emoji, it will still have
|
||||||
|
|||||||
@@ -262,6 +262,7 @@ exports.Events = {
|
|||||||
MESSAGE_REACTION_ADD: 'messageReactionAdd',
|
MESSAGE_REACTION_ADD: 'messageReactionAdd',
|
||||||
MESSAGE_REACTION_REMOVE: 'messageReactionRemove',
|
MESSAGE_REACTION_REMOVE: 'messageReactionRemove',
|
||||||
MESSAGE_REACTION_REMOVE_ALL: 'messageReactionRemoveAll',
|
MESSAGE_REACTION_REMOVE_ALL: 'messageReactionRemoveAll',
|
||||||
|
MESSAGE_REACTION_REMOVE_EMOJI: 'messageReactionRemoveEmoji',
|
||||||
USER_UPDATE: 'userUpdate',
|
USER_UPDATE: 'userUpdate',
|
||||||
PRESENCE_UPDATE: 'presenceUpdate',
|
PRESENCE_UPDATE: 'presenceUpdate',
|
||||||
VOICE_SERVER_UPDATE: 'voiceServerUpdate',
|
VOICE_SERVER_UPDATE: 'voiceServerUpdate',
|
||||||
@@ -379,6 +380,7 @@ exports.WSEvents = keyMirror([
|
|||||||
'MESSAGE_REACTION_ADD',
|
'MESSAGE_REACTION_ADD',
|
||||||
'MESSAGE_REACTION_REMOVE',
|
'MESSAGE_REACTION_REMOVE',
|
||||||
'MESSAGE_REACTION_REMOVE_ALL',
|
'MESSAGE_REACTION_REMOVE_ALL',
|
||||||
|
'MESSAGE_REACTION_REMOVE_EMOJI',
|
||||||
'USER_UPDATE',
|
'USER_UPDATE',
|
||||||
'PRESENCE_UPDATE',
|
'PRESENCE_UPDATE',
|
||||||
'TYPING_START',
|
'TYPING_START',
|
||||||
|
|||||||
2
typings/index.d.ts
vendored
2
typings/index.d.ts
vendored
@@ -191,6 +191,7 @@ declare module 'discord.js' {
|
|||||||
public on(event: 'inviteCreate' | 'inviteDelete', listener: (invite: Invite) => void): this;
|
public on(event: 'inviteCreate' | 'inviteDelete', listener: (invite: Invite) => void): this;
|
||||||
public on(event: 'guildIntegrationsUpdate', listener: (guild: Guild) => void): this;
|
public on(event: 'guildIntegrationsUpdate', listener: (guild: Guild) => void): this;
|
||||||
public on(event: 'message' | 'messageDelete' | 'messageReactionRemoveAll', listener: (message: Message | PartialMessage) => void): this;
|
public on(event: 'message' | 'messageDelete' | 'messageReactionRemoveAll', listener: (message: Message | PartialMessage) => void): this;
|
||||||
|
public on(event: 'messageReactionRemoveEmoji', listener: (reaction: MessageReaction) => void): this;
|
||||||
public on(event: 'messageDeleteBulk', listener: (messages: Collection<Snowflake, Message | PartialMessage>) => void): this;
|
public on(event: 'messageDeleteBulk', listener: (messages: Collection<Snowflake, Message | PartialMessage>) => void): this;
|
||||||
public on(event: 'messageReactionAdd' | 'messageReactionRemove', listener: (messageReaction: MessageReaction, user: User | PartialUser) => void): this;
|
public on(event: 'messageReactionAdd' | 'messageReactionRemove', listener: (messageReaction: MessageReaction, user: User | PartialUser) => void): this;
|
||||||
public on(event: 'messageUpdate', listener: (oldMessage: Message | PartialMessage, newMessage: Message | PartialMessage) => void): this;
|
public on(event: 'messageUpdate', listener: (oldMessage: Message | PartialMessage, newMessage: Message | PartialMessage) => void): this;
|
||||||
@@ -1113,6 +1114,7 @@ declare module 'discord.js' {
|
|||||||
public message: Message;
|
public message: Message;
|
||||||
public readonly partial: boolean;
|
public readonly partial: boolean;
|
||||||
public users: ReactionUserStore;
|
public users: ReactionUserStore;
|
||||||
|
public remove(): Promise<MessageReaction>;
|
||||||
public fetch(): Promise<MessageReaction>;
|
public fetch(): Promise<MessageReaction>;
|
||||||
public toJSON(): object;
|
public toJSON(): object;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user