From 22f05c814519065b18450b59b1f005948b3ed374 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20Serna?= Date: Tue, 5 Jul 2022 15:52:32 -0300 Subject: [PATCH] Update Invite structure --- structures/Invite.ts | 90 ++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 82 insertions(+), 8 deletions(-) diff --git a/structures/Invite.ts b/structures/Invite.ts index 5d238e7..5b4eaa6 100644 --- a/structures/Invite.ts +++ b/structures/Invite.ts @@ -1,9 +1,50 @@ import type { Session } from "../session/Session.ts"; -import type { DiscordInvite } from "../vendor/external.ts"; +import type { Snowflake } from "../util/Snowflake.ts"; +import type { + DiscordChannel, + DiscordMemberWithUser, + DiscordInvite, + DiscordScheduledEventEntityMetadata, + ScheduledEventPrivacyLevel, + ScheduledEventStatus, + ScheduledEventEntityType +} from "../vendor/external.ts"; import { TargetTypes } from "../vendor/external.ts"; import InviteGuild from "./guilds/InviteGuild.ts"; import User from "./User.ts"; import Guild from "./guilds/Guild.ts"; +import { GuildChannel } from "./channels/GuildChannel.ts"; +import { Member } from "./Member.ts"; + +export interface InviteStageInstance { + /** The members speaking in the Stage */ + members: Partial[]; + /** The number of users in the Stage */ + participantCount: number; + /** The number of users speaking in the Stage */ + speakerCount: number; + /** The topic of the Stage instance (1-120 characters) */ + topic: string; +} + +export interface InviteScheduledEvent { + id: Snowflake; + guildId: string; + channelId?: string; + creatorId?: string; + name: string; + description?: string; + scheduledStartTime: string; + scheduledEndTime?: string; + privacyLevel: ScheduledEventPrivacyLevel; + status: ScheduledEventStatus; + entityType: ScheduledEventEntityType; + entityId?: string; + entityMetadata?: DiscordScheduledEventEntityMetadata; + creator?: User; + userCount?: number; + image?: string; +} /** * @link https://discord.com/developers/docs/resources/invite#invite-object @@ -24,16 +65,37 @@ export class Invite { this.approximatePresenceCount = data.approximate_presence_count; } - // TODO: fix this - // this.channel = data.channel; + if (data.channel) { + const guildId = (data.guild && data.guild?.id) ? data.guild.id : ""; + this.channel = new GuildChannel(session, (data.channel as DiscordChannel), guildId); + } + this.code = data.code; if (data.expires_at) { this.expiresAt = Number.parseInt(data.expires_at); } - // TODO: fix this - // this.xd = data.guild_scheduled_event + if (data.guild_scheduled_event) { + this.guildScheduledEvent = { + id: data.guild_scheduled_event.id, + guildId: data.guild_scheduled_event.guild_id, + channelId: data.guild_scheduled_event.channel_id ? data.guild_scheduled_event.channel_id : undefined, + creatorId: data.guild_scheduled_event.creator_id ? data.guild_scheduled_event.creator_id : undefined, + name: data.guild_scheduled_event.name, + description: data.guild_scheduled_event.description ? data.guild_scheduled_event.description : undefined, + scheduledStartTime: data.guild_scheduled_event.scheduled_start_time, + scheduledEndTime: data.guild_scheduled_event.scheduled_end_time ? data.guild_scheduled_event.scheduled_end_time : undefined, + privacyLevel: data.guild_scheduled_event.privacy_level, + status: data.guild_scheduled_event.status, + entityType: data.guild_scheduled_event.entity_type, + entityId: data.guild ? data.guild.id : undefined, + entityMetadata: data.guild_scheduled_event.entity_metadata ? data.guild_scheduled_event.entity_metadata : undefined, + creator: data.guild_scheduled_event.creator ? new User(session, data.guild_scheduled_event.creator) : undefined, + userCount: data.guild_scheduled_event.user_count ? data.guild_scheduled_event.user_count : undefined, + image: data.guild_scheduled_event.image ? data.guild_scheduled_event.image : undefined + }; + } if (data.inviter) { this.inviter = new User(session, data.inviter); @@ -43,10 +105,17 @@ export class Invite { this.targetUser = new User(session, data.target_user); } - // TODO: fix this - // this.stageInstance = data.stage_instance + if (data.stage_instance) { + const guildId = (data.guild && data.guild?.id) ? data.guild.id : ""; + this.stageInstance = { + members: data.stage_instance.members.map(m => new Member(session, (m as DiscordMemberWithUser), guildId)), + participantCount: data.stage_instance.participant_count, + speakerCount: data.stage_instance.speaker_count, + topic: data.stage_instance.topic + }; + } - // TODO: fix this + // TODO: create Application structure // this.targetApplication = data.target_application if (data.target_type) { @@ -63,6 +132,11 @@ export class Invite { inviter?: User; targetUser?: User; targetType?: TargetTypes; + channel?: Partial; + stageInstance?: InviteStageInstance; + guildScheduledEvent?: InviteScheduledEvent; + // TODO: create Application structure + // targetApplication?: Partial async delete(): Promise { await Guild.prototype.deleteInvite.call(this.guild, this.code);