Files
discordeno/transformers/interaction.ts
meister03 aca0e3cf1b Merge Dev into Main (#2345)
* Simplify SfetchMembers (#2339)

Co-authored-by: meister03

* Create leaveVoiceChannel.ts (#2342)

* Update editFollowupMessage.ts (#2344)

* Update editInteractionResponse.ts (#2343)

* Update editMessage.ts (#2341)

* Update calculateShardId.ts

Fix wrong shardId calculations

* Add Role Icon to Edit (#2346)

Co-authored-by: meister03

* Add mix max length (#2347)

Co-authored-by: meister03

* style: deno fmt

* Fix Disabled Options (#2368)

Co-authored-by: meister03 <meisterpi@gmail.com>

* Add app_permissions (#2369)

Co-authored-by: meister03 <meisterpi@gmail.com>

* thread_id instead of threadId (#2378)

Co-authored-by: Veeti K <veeti@veetik.com>

* feat: Create `ApplicationCommandFlags` enumerator. (#2384)

Co-authored-by: vxern <vxern@wordcollector.co.uk>

* Small Changes in a bulk pr to close the issues (#2370)

* Initial Commit

* Close #2364

* Add preset whitelist to automod #2356 -> Resolve Issue

* Close [api-docs] AutoMod message intent updates (#5083) #2330

* Breaking Channge | [api-docs] Update message type names (#5093)

* message.interaction.name changed attitude | [api-docs] Update Change_Log.md #2333

* #2333 also closes #2316

* Clarify 45 chars length | Add those on permission plugins | [api-docs] text input label has max 45 characters (#4689) #2137

* Clarify webhook naming restrictions (#4625) #2094

* 8th August Webhook new View Channel perm | Closes #2363

* 8th August Webhook new View Channel perm | Closes #2363

* Document thread_name for execute webhook (#5007) #2263

* Close Update create and modify channel documentation (#4867) #2237

* unnecesary nullable tag in Modify Guild Member params (#5164) #2355

* deno fmt

* deno fmt

* Use .includefor disallowed webhook names"

* Add Missing Enums & #2367, #2362, #2361, #2371, #2372. #2349, #2358, #2325 back

* deno fmt :(

Co-authored-by: meister03 <meisterpi@gmail.com>
Co-authored-by: LTS20050703 <87189679+lts20050703@users.noreply.github.com>

Co-authored-by: Tomato6966 <chris.pre03@gmail.com>
Co-authored-by: ITOH <to@itoh.at>
Co-authored-by: meister03 <meisterpi@gmail.com>
Co-authored-by: Veeti K <veeti@veetik.com>
Co-authored-by: vxern <vxern@wordcollector.co.uk>
Co-authored-by: LTS20050703 <87189679+lts20050703@users.noreply.github.com>
2022-08-23 08:46:01 -04:00

150 lines
5.4 KiB
TypeScript

import { Bot } from "../bot.ts";
import {
DiscordAttachment,
DiscordInteraction,
DiscordInteractionDataOption,
DiscordInteractionDataResolved,
} from "../types/discord.ts";
import { ChannelTypes } from "../types/shared.ts";
import { Collection } from "../util/collection.ts";
import { Attachment } from "./attachment.ts";
import { Member, User } from "./member.ts";
import { Message } from "./message.ts";
import { Role } from "./role.ts";
import { Optionalize } from "../types/shared.ts";
export function transformInteraction(bot: Bot, payload: DiscordInteraction) {
const guildId = payload.guild_id ? bot.transformers.snowflake(payload.guild_id) : undefined;
const user = bot.transformers.user(bot, payload.member?.user || payload.user!);
const interaction = {
// UNTRANSFORMED STUFF HERE
type: payload.type,
token: payload.token,
version: payload.version,
locale: payload.locale,
guildLocale: payload.guild_locale,
// TRANSFORMED STUFF BELOW
guildId,
user,
id: bot.transformers.snowflake(payload.id),
applicationId: bot.transformers.snowflake(payload.application_id),
appPermissions: payload.app_permissions ? bot.transformers.snowflake(payload.app_permissions) : undefined,
message: payload.message ? bot.transformers.message(bot, payload.message) : undefined,
channelId: payload.channel_id ? bot.transformers.snowflake(payload.channel_id) : undefined,
member: payload.member && guildId ? bot.transformers.member(bot, payload.member, guildId, user.id) : undefined,
data: payload.data
? {
componentType: payload.data.component_type,
customId: payload.data.custom_id,
components: payload.data.components?.map((component) => bot.transformers.component(bot, component)),
values: payload.data.values,
id: payload.data.id ? bot.transformers.snowflake(payload.data.id) : undefined,
name: payload.data.name,
resolved: payload.data.resolved
? transformInteractionDataResolved(bot, payload.data.resolved, guildId)
: undefined,
options: payload.data.options?.map((opt) => bot.transformers.interactionDataOptions(bot, opt)),
targetId: payload.data.target_id ? bot.transformers.snowflake(payload.data.target_id) : undefined,
guildId: payload.data.guild_id ? bot.transformers.snowflake(payload.data.guild_id) : undefined,
}
: undefined,
};
return interaction as Optionalize<typeof interaction>;
}
export function transformInteractionDataOption(bot: Bot, option: DiscordInteractionDataOption) {
const opt = {
name: option.name,
type: option.type,
value: option.value,
options: option.options,
focused: option.focused,
};
return opt as Optionalize<typeof opt>;
}
export function transformInteractionDataResolved(bot: Bot, resolved: DiscordInteractionDataResolved, guildId?: bigint) {
const transformed: {
messages?: Collection<bigint, Message>;
users?: Collection<bigint, User>;
members?: Collection<bigint, Member>;
roles?: Collection<bigint, Role>;
channels?: Collection<bigint, { id: bigint; name: string; type: ChannelTypes; permissions: bigint }>;
attachments?: Collection<bigint, Attachment>;
} = {};
if (resolved.messages) {
transformed.messages = new Collection(
Object.entries(resolved.messages).map(([id, value]) => {
const message: Message = bot.transformers.message(bot, value);
return [message.id, message];
}),
);
}
if (resolved.users) {
transformed.users = new Collection(
Object.entries(resolved.users).map(([id, value]) => {
const user = bot.transformers.user(bot, value);
return [user.id, user];
}),
);
}
if (guildId && resolved.members) {
transformed.members = new Collection(
Object.entries(resolved.members).map(([id, value]) => {
const member: Member = bot.transformers.member(bot, value, guildId, bot.transformers.snowflake(id));
return [member.id, member];
}),
);
}
if (guildId && resolved.roles) {
transformed.roles = new Collection(
Object.entries(resolved.roles).map(([id, value]) => {
const role = bot.transformers.role(bot, { role: value, guildId });
return [role.id, role];
}),
);
}
if (resolved.channels) {
transformed.channels = new Collection(
Object.entries(resolved.channels).map(([key, value]) => {
const id = bot.transformers.snowflake(key);
const channel = value as { id: string; name: string; type: ChannelTypes; permissions: string };
return [
id,
{
id,
name: channel.name,
type: channel.type,
permissions: bot.transformers.snowflake(channel.permissions),
},
];
}),
);
}
if (resolved.attachments) {
transformed.attachments = new Collection(
Object.entries(resolved.attachments).map(([key, value]) => {
const id = bot.transformers.snowflake(key);
return [id, bot.transformers.attachment(bot, value as DiscordAttachment)];
}),
);
}
return transformed as Optionalize<typeof transformed>;
}
export interface Interaction extends ReturnType<typeof transformInteraction> {}
export interface InteractionDataResolved extends ReturnType<typeof transformInteractionDataResolved> {}
export interface InteractionDataOption extends ReturnType<typeof transformInteractionDataOption> {}