mirror of
https://github.com/discordjs/discord.js.git
synced 2026-03-09 16:13:31 +01:00
fix(ModalSubmitInteraction): Better resolving of components (#11162)
* fix: fix value crash * fix: use a set * fix: `const`
This commit is contained in:
@@ -158,39 +158,55 @@ class ModalSubmitInteraction extends BaseInteraction {
|
|||||||
|
|
||||||
if (rawComponent.values) {
|
if (rawComponent.values) {
|
||||||
data.values = rawComponent.values;
|
data.values = rawComponent.values;
|
||||||
|
|
||||||
|
/* eslint-disable max-depth */
|
||||||
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, client.users._add(user));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return collection.size ? collection : null;
|
|
||||||
};
|
|
||||||
|
|
||||||
const users = resolveCollection(resolved.users, user => client.users._add(user));
|
|
||||||
if (users) data.users = users;
|
|
||||||
|
|
||||||
const channels = resolveCollection(
|
|
||||||
resolved.channels,
|
|
||||||
channel => client.channels._add(channel, guild) ?? channel,
|
|
||||||
);
|
|
||||||
if (channels) data.channels = channels;
|
|
||||||
|
|
||||||
const members = new Collection();
|
|
||||||
|
|
||||||
for (const [id, member] of Object.entries(resolved.members ?? {})) {
|
|
||||||
const user = users.get(id);
|
|
||||||
members.set(id, guild?.members._add({ user, ...member }) ?? member);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (members.size > 0) data.members = members;
|
if (channels) {
|
||||||
|
data.channels = new Collection();
|
||||||
|
|
||||||
const roles = resolveCollection(resolved.roles, role => guild?.roles._add(role) ?? role);
|
for (const [id, apiChannel] of Object.entries(channels)) {
|
||||||
if (roles) data.roles = roles;
|
if (valueSet.has(id)) {
|
||||||
|
data.channels.set(id, client.channels._add(apiChannel, guild) ?? apiChannel);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (members) {
|
||||||
|
data.members = new Collection();
|
||||||
|
|
||||||
|
for (const [id, member] of Object.entries(members)) {
|
||||||
|
if (valueSet.has(id)) {
|
||||||
|
const user = users?.[id];
|
||||||
|
data.members.set(id, guild?.members._add({ user, ...member }) ?? member);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (roles) {
|
||||||
|
data.roles = new Collection();
|
||||||
|
|
||||||
|
for (const [id, role] of Object.entries(roles)) {
|
||||||
|
if (valueSet.has(id)) {
|
||||||
|
data.roles.set(id, guild?.roles._add(role) ?? role);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* eslint-enable max-depth */
|
||||||
}
|
}
|
||||||
|
|
||||||
return data;
|
return data;
|
||||||
|
|||||||
Reference in New Issue
Block a user