Skip to content

Commit 11b236f

Browse files
authored
fix(ModalSubmitInteraction): Resolve crash on handling populated select menus (#11158)
* fix: handle receiving new selects * fix: handle missing user object
1 parent 1d5b983 commit 11b236f

File tree

1 file changed

+21
-9
lines changed

1 file changed

+21
-9
lines changed

packages/discord.js/src/structures/ModalSubmitInteraction.js

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,10 @@ class ModalSubmitInteraction extends BaseInteraction {
8080
* @type {Array<ActionRowModalData | LabelModalData | TextDisplayModalData>}
8181
*/
8282
this.components = data.data.components?.map(component =>
83-
ModalSubmitInteraction.transformComponent(component, data.data.resolved),
83+
ModalSubmitInteraction.transformComponent(component, data.data.resolved, {
84+
client: this.client,
85+
guild: this.guild,
86+
}),
8487
);
8588

8689
/**
@@ -121,22 +124,25 @@ class ModalSubmitInteraction extends BaseInteraction {
121124
* Transforms component data to discord.js-compatible data
122125
* @param {*} rawComponent The data to transform
123126
* @param {APIInteractionDataResolved} [resolved] The resolved data for the interaction
127+
* @param {*} [extra] Extra data required for the transformation
124128
* @returns {ModalData[]}
125129
*/
126-
static transformComponent(rawComponent, resolved) {
130+
static transformComponent(rawComponent, resolved, { client, guild } = {}) {
127131
if ('components' in rawComponent) {
128132
return {
129133
type: rawComponent.type,
130134
id: rawComponent.id,
131-
components: rawComponent.components.map(component => this.transformComponent(component, resolved)),
135+
components: rawComponent.components.map(component =>
136+
this.transformComponent(component, resolved, { client, guild }),
137+
),
132138
};
133139
}
134140

135141
if ('component' in rawComponent) {
136142
return {
137143
type: rawComponent.type,
138144
id: rawComponent.id,
139-
component: this.transformComponent(rawComponent.component, resolved),
145+
component: this.transformComponent(rawComponent.component, resolved, { client, guild }),
140146
};
141147
}
142148

@@ -164,19 +170,25 @@ class ModalSubmitInteraction extends BaseInteraction {
164170
return collection.size ? collection : null;
165171
};
166172

167-
const users = resolveCollection(resolved.users, user => this.client.users._add(user));
173+
const users = resolveCollection(resolved.users, user => client.users._add(user));
168174
if (users) data.users = users;
169175

170176
const channels = resolveCollection(
171177
resolved.channels,
172-
channel => this.client.channels._add(channel, this.guild) ?? channel,
178+
channel => client.channels._add(channel, guild) ?? channel,
173179
);
174180
if (channels) data.channels = channels;
175181

176-
const members = resolveCollection(resolved.members, member => this.guild?.members._add(member) ?? member);
177-
if (members) data.members = members;
182+
const members = new Collection();
178183

179-
const roles = resolveCollection(resolved.roles, role => this.guild?.roles._add(role) ?? role);
184+
for (const [id, member] of Object.entries(resolved.members)) {
185+
const user = users.get(id);
186+
members.set(id, guild?.members._add({ user, ...member }) ?? member);
187+
}
188+
189+
if (members.size > 0) data.members = members;
190+
191+
const roles = resolveCollection(resolved.roles, role => guild?.roles._add(role) ?? role);
180192
if (roles) data.roles = roles;
181193
}
182194
}

0 commit comments

Comments
 (0)