{"version":3,"file":"User.mjs","sourceRoot":"","sources":["../../src/payloads/User.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAsC,SAAS,EAA2B,WAAW,EAAqE,MAAM,uBAAuB,CAAC;AAC/L,OAAO,QAAQ,MAAM,uBAAuB,CAAC;AAC7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAExD,aAAa;AACb,MAAM,OAAO,IAAI;IAiCb,YAAY,IAAa;QAhCzB,oBAAoB;QACpB;;;;;WAAW;QACX,0DAA0D;QAC1D;;;;;WAAiB;QACjB,qCAAqC;QACrC;;;;;WAAsB;QACtB,6BAA6B;QAC7B;;;;;WAAsB;QACtB,6FAA6F;QAC7F;;;;;WAA4B;QAC5B,6BAA6B;QAC7B;;;;;WAAuB;QACvB,wDAAwD;QACxD;;;;;WAAc;QACd,2DAA2D;QAC3D;;;;;WAAsB;QACtB,oCAAoC;QACpC;;;;;WAAkB;QAClB,wCAAwC;QACxC;;;;;WAAsB;QACtB,oGAAoG;QACpG;;;;;WAAqB;QACrB,yDAAyD;QACzD;;;;;WAA8B;QAC9B,2CAA2C;QAC3C;;;;;WAAwB;QACxB,8FAA8F;QAC9F;;;;;WAAiB;QACjB,8FAA8F;QAC9F;;;;;WAAmB;QAIf,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;QAClB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC9B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;QACxC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC1B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC;QACrC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC1B,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;QACpB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACxB,IAAI,CAAC,KAAK,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAsB,CAAC;QAC1C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC;QACnC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC;QACrC,IAAI,CAAC,WAAW,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC;QACzD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC1B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IAClC,CAAC;IAED,yCAAyC;IACzC,IAAI,SAAS;QACT,OAAO,IAAI,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED,kCAAkC;IAClC,SAAS,CAAC,SAAwD,EAAE,SAAS,EAAE,WAAW,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE;QACvG,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QAC9B,OAAO,oBAAoB,GAAG,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,GAAG,SAAS,MAAM,CAAC,IAAI,EAAE,CAAC;IACxH,CAAC;IAED,oCAAoC;IACpC,SAAS,CAAC,SAAwD,EAAE,SAAS,EAAE,WAAW,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE;QACvG,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QAC9B,OAAO,oBAAoB,GAAG,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,GAAG,SAAS,MAAM,CAAC,IAAI,EAAE,CAAC;IACxH,CAAC;IAED,4CAA4C;IAC5C,IAAI,gBAAgB;QAChB,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAA4B,CAAC;QAC9D,OAAO,oBAAoB,GAAG,SAAS,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IACtE,CAAC;IAED,oDAAoD;IACpD,gBAAgB,CAAC,SAAwD,EAAE,SAAS,EAAE,WAAW,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE;QAC9G,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,gBAAgB,CAAC;IAC3D,CAAC;CAEJ;AAGD,MAAM,OAAO,SAAU,SAAQ,QAAQ;IACnC,YAAY,KAAa;QACrB,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACzB,CAAC;IAED,kCAAkC;IAClC,GAAG,CAAC,IAA2B;QAC3B,OAAO,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IACnC,CAAC;IAED,0CAA0C;IAC1C,OAAO;QACH,OAAO,IAAI,CAAC,QAAQ,KAAK,EAAE,CAAC;IAChC,CAAC;CAEJ;AAED,eAAe,IAAI,CAAC","sourcesContent":["import { DiscordSnowflake } from \"@sapphire/snowflake\";\nimport { APIUser, UserFlags as APIUserFlags, CDNRoutes, DefaultUserAvatarAssets, ImageFormat, LocaleString, UserAvatarFormat, UserBannerFormat, UserPremiumType } from \"discord-api-types/v10\";\nimport BitField from \"../basic/BitField.mjs\";\nimport { DISCORD_CDN_BASE_URL } from \"../constants.mjs\";\n\n/** A user */\nexport class User {\n    /** The user's id */\n    id: string;\n    /** The user's username, not unique across the platform */\n    username: string;\n    /** The user's 4-digit discord-tag */\n    discriminator: string;\n    /** The user's avatar hash */\n    avatar: string | null;\n    /** The user's banner color encoded as an integer representation of hexadecimal color code */\n    accentColor?: number | null;\n    /** The user's banner hash */\n    banner?: string | null;\n    /** Whether the user belongs to an OAuth2 application */\n    bot?: boolean;\n    /** The user's email (not available on all user objects) */\n    email?: string | null;\n    /** The flags on a user's account */\n    flags?: UserFlags;\n    /** The user's chosen language option */\n    locale?: LocaleString;\n    /** Whether the user has two factor enabled on their account (not available on all user objects)  */\n    mfaEnabled?: boolean;\n    /** The type of Nitro subscription on a user's account */\n    premiumType?: UserPremiumType;\n    /** The public flags on a user's account */\n    publicFlags?: UserFlags;\n    /** Whether the user is an Official Discord System user (part of the urgent message system) */\n    system?: boolean;\n    /** Whether the email on this account has been verified (not available on all user objects) */\n    verified?: boolean;\n\n\n    constructor(user: APIUser) {\n        this.id = user.id;\n        this.username = user.username;\n        this.discriminator = user.discriminator;\n        this.avatar = user.avatar;\n        this.accentColor = user.accent_color;\n        this.banner = user.banner;\n        this.bot = user.bot;\n        this.email = user.email;\n        this.flags = new UserFlags(user.flags || 0);\n        this.locale = user.locale as LocaleString;\n        this.mfaEnabled = user.mfa_enabled;\n        this.premiumType = user.premium_type;\n        this.publicFlags = new UserFlags(user.public_flags || 0);\n        this.system = user.system;\n        this.verified = user.verified;\n    }\n\n    /** The date that the user was created */\n    get createdAt(): Date {\n        return new Date(DiscordSnowflake.timestampFrom(this.id));\n    }\n\n    /** The avatar url for the user */\n    avatarURL(config: { extension: UserAvatarFormat, size: number } = { extension: ImageFormat.PNG, size: 512 }): string | null {\n        if (!this.avatar) return null;\n        return DISCORD_CDN_BASE_URL + CDNRoutes.userAvatar(this.id, this.avatar, config.extension) + `?size=${config.size}`;\n    }\n\n    /** The url for the user's banner */\n    bannerURL(config: { extension: UserBannerFormat, size: number } = { extension: ImageFormat.PNG, size: 512 }): string | null {\n        if (!this.banner) return null;\n        return DISCORD_CDN_BASE_URL + CDNRoutes.userBanner(this.id, this.banner, config.extension) + `?size=${config.size}`;\n    }\n\n    /** The url for the user's default avatar */\n    get defaultAvatarURL(): string {\n        const modulo = Number(this.id) % 6 as DefaultUserAvatarAssets;\n        return DISCORD_CDN_BASE_URL + CDNRoutes.defaultUserAvatar(modulo);\n    }\n\n    /** The url for the user's current display avatar */\n    displayAvatarURL(config: { extension: UserAvatarFormat, size: number } = { extension: ImageFormat.PNG, size: 512 }): string {\n        return this.avatarURL(config) || this.defaultAvatarURL;\n    }\n\n}\n\n\nexport class UserFlags extends BitField {\n    constructor(flags: number) {\n        super(BigInt(flags));\n    }\n\n    /** Whether the user has a flag */\n    has(flag: bigint | APIUserFlags): boolean {\n        return super.has(BigInt(flag));\n    }\n\n    /** Weather the user even has any flags */\n    isEmpty(): boolean {\n        return this.bitfield === 0n;\n    }\n\n}\n\nexport default User;"]}