import { Client } from '../models/client.ts' import { UserPayload } from '../types/user.ts' import { UserFlagsManager } from '../utils/userFlags.ts' import { Base } from './base.ts' export class User extends Base { id: string username: string discriminator: string avatar?: string bot?: boolean system?: boolean mfaEnabled?: boolean locale?: string verified?: boolean email?: string flags: UserFlagsManager /** * Nitro type of the User. * * 0 = No Nitro * 1 = Classic Nitro * 2 = Regular Nitro */ premiumType?: 0 | 1 | 2 publicFlags: UserFlagsManager get tag(): string { return `${this.username}#${this.discriminator}` } get nickMention(): string { return `<@!${this.id}>` } get mention(): string { return `<@${this.id}>` } constructor(client: Client, data: UserPayload) { super(client, data) this.id = data.id this.username = data.username this.discriminator = data.discriminator this.avatar = data.avatar this.bot = data.bot this.system = data.system this.mfaEnabled = data.mfa_enabled this.locale = data.locale this.verified = data.verified this.email = data.email this.flags = new UserFlagsManager(data.flags) this.premiumType = data.premium_type this.publicFlags = new UserFlagsManager(data.public_flags) } protected readFromData(data: UserPayload): void { super.readFromData(data) this.username = data.username ?? this.username this.discriminator = data.discriminator ?? this.discriminator this.avatar = data.avatar ?? this.avatar this.bot = data.bot ?? this.bot this.system = data.system ?? this.system this.mfaEnabled = data.mfa_enabled ?? this.mfaEnabled this.locale = data.locale ?? this.locale this.verified = data.verified ?? this.verified this.email = data.email ?? this.email this.flags = data.flags !== undefined ? new UserFlagsManager(data.flags) : this.flags this.premiumType = data.premium_type ?? this.premiumType this.publicFlags = data.public_flags !== undefined ? new UserFlagsManager(data.public_flags) : this.publicFlags } toString(): string { return this.mention } }