fix(ModalSubmitInteraction): Resolve components correctly (#11168)

* fix: resolve components correctly

* fix: remove redundant parameter

---------

Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
This commit is contained in:
Jiralite
2025-10-14 23:01:10 +01:00
committed by GitHub
parent 0add790169
commit 25b22c67aa

View File

@@ -155,31 +155,49 @@ class ModalSubmitInteraction extends BaseInteraction {
if (rawComponent.values) { if (rawComponent.values) {
data.values = rawComponent.values; data.values = rawComponent.values;
if (resolved) { if (resolved) {
const resolveCollection = (resolvedData, resolver) => { const { members, users, channels, roles } = resolved;
const collection = new Collection(); const valueSet = new Set(rawComponent.values);
for (const value of data.values) {
if (resolvedData?.[value]) { if (users) {
collection.set(value, resolver(resolvedData[value])); data.users = new Collection();
for (const [id, user] of Object.entries(users)) {
if (valueSet.has(id)) {
data.users.set(id, this.client.users._add(user));
} }
} }
}
return collection.size ? collection : null; if (channels) {
}; data.channels = new Collection();
const users = resolveCollection(resolved.users, user => this.client.users._add(user)); for (const [id, apiChannel] of Object.entries(channels)) {
if (users) data.users = users; if (valueSet.has(id)) {
data.channels.set(id, this.client.channels._add(apiChannel, this.guild) ?? apiChannel);
}
}
}
const channels = resolveCollection( if (members) {
resolved.channels, data.members = new Collection();
channel => this.client.channels._add(channel, this.guild) ?? channel,
);
if (channels) data.channels = channels;
const members = resolveCollection(resolved.members, member => this.guild?.members._add(member) ?? member); for (const [id, member] of Object.entries(members)) {
if (members) data.members = members; if (valueSet.has(id)) {
const user = users?.[id];
data.members.set(id, this.guild?.members._add({ user, ...member }) ?? member);
}
}
}
const roles = resolveCollection(resolved.roles, role => this.guild?.roles._add(role) ?? role); if (roles) {
if (roles) data.roles = roles; data.roles = new Collection();
for (const [id, role] of Object.entries(roles)) {
if (valueSet.has(id)) {
data.roles.set(id, this.guild?.roles._add(role) ?? role);
}
}
}
} }
} }