From df685203193faeaa392c4cb7cd9e140a241e3af5 Mon Sep 17 00:00:00 2001 From: Vlad Frangu Date: Mon, 6 Mar 2023 12:31:19 +0200 Subject: [PATCH] fix(Actions): inject built data by using a symbol (#9204) --- src/client/actions/Action.js | 6 +++--- src/client/actions/ActionsManager.js | 7 +++++++ src/structures/Message.js | 6 +++--- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/client/actions/Action.js b/src/client/actions/Action.js index 8d0b6df8b943..f3968344f660 100644 --- a/src/client/actions/Action.js +++ b/src/client/actions/Action.js @@ -34,7 +34,7 @@ class GenericAction { getChannel(data) { const id = data.channel_id ?? data.id; return ( - data.channel ?? + data[this.client.actions.injectedChannel] ?? this.getPayload( { id, @@ -51,7 +51,7 @@ class GenericAction { getMessage(data, channel, cache) { const id = data.message_id ?? data.id; return ( - data.message ?? + data[this.client.actions.injectedMessage] ?? this.getPayload( { id, @@ -86,7 +86,7 @@ class GenericAction { getUser(data) { const id = data.user_id; - return data.user ?? this.getPayload({ id }, this.client.users, id, PartialTypes.USER); + return data[this.client.actions.injectedUser] ?? this.getPayload({ id }, this.client.users, id, PartialTypes.USER); } getUserFromMember(data) { diff --git a/src/client/actions/ActionsManager.js b/src/client/actions/ActionsManager.js index 3c8e2d549fec..65415dd20af8 100644 --- a/src/client/actions/ActionsManager.js +++ b/src/client/actions/ActionsManager.js @@ -4,6 +4,13 @@ class ActionsManager { constructor(client) { this.client = client; + // These symbols represent fully built data that we inject at times when calling actions manually. Action#getUser, + // for example, will return the injected data (which is assumed to be a built structure) instead of trying to make + // it from provided data + this.injectedUser = Symbol('djs.actions.injectedUser'); + this.injectedChannel = Symbol('djs.actions.injectedChannel'); + this.injectedMessage = Symbol('djs.actions.injectedMessage'); + this.register(require('./ApplicationCommandPermissionsUpdate')); this.register(require('./AutoModerationActionExecution')); this.register(require('./AutoModerationRuleCreate')); diff --git a/src/structures/Message.js b/src/structures/Message.js index 45501935fee9..30752424aee3 100644 --- a/src/structures/Message.js +++ b/src/structures/Message.js @@ -802,9 +802,9 @@ class Message extends Base { return this.client.actions.MessageReactionAdd.handle( { - user: this.client.user, - channel: this.channel, - message: this, + [this.client.actions.injectedUser]: this.client.user, + [this.client.actions.injectedChannel]: this.channel, + [this.client.actions.injectedMessage]: this, emoji: Util.resolvePartialEmoji(emoji), }, true,