import 'dart:convert'; import 'package:libac_dart/utils/DictTools.dart'; import '../structs/Bitmasks.dart'; class User { String id; String username; String discriminator; String? globalName; String? avatar; bool? bot; bool? system; bool? mfaEnabled; String? banner; int? accentColor; String? locale; bool? verified; String? email; /// UserFlags BitMask? flags; /// PremiumType BitMask? premiumType; /// UserFlags BitMask? publicFlags; AvatarDecorationData? decoration; User( {required this.id, required this.username, required this.discriminator, this.globalName, this.avatar, this.bot, this.system, this.mfaEnabled, this.banner, this.accentColor, this.locale, this.verified, this.email, this.flags, this.premiumType, this.publicFlags, this.decoration}); String encode() { return json.encode(toJson()); } Map toJson() { return { "id": id, "username": username, "discriminator": discriminator, "global_name": globalName, "avatar": avatar, if (bot != null) "bot": bot, if (system != null) "system": system, if (mfaEnabled != null) "mfa_enabled": mfaEnabled, if (banner != null) "banner": banner, if (accentColor != null) "accent_color": accentColor, if (locale != null) "locale": locale, if (verified != null) "verified": verified, if (email != null) "email": email, if (flags != null) "flags": flags!.value, if (premiumType != null) "premium_type": premiumType!.value, if (publicFlags != null) "public_flags": publicFlags!.value, if (decoration != null) "avatar_decoration_data": decoration!.toJson() }; } factory User.fromJson(String js) { return User.decode(json.decode(js))!; } static User? decode(Map? js) { if (js == null) return null; return User( id: js['id'] as String, username: js['username'] as String, discriminator: js['discrimination'] as String, globalName: js['global_name'], avatar: js['avatar'], bot: setor(js, "bot", null), system: setor(js, "system", null), mfaEnabled: setor(js, "mfa_enabled", null), banner: setor(js, "banner", null), accentColor: setor(js, "accent_color", null), locale: setor(js, "locale", null), verified: setor(js, "verified", null), email: setor(js, "email", null), flags: BitMask.of(setor(js, "flags", null)), premiumType: BitMask.of(setor(js, "premium_type", null)), publicFlags: BitMask.of(setor(js, "public_flags", null)), decoration: AvatarDecorationData.decode( setor(js, "avatar_decoration_data", null))); } } enum UserFlags { DiscordEmployee(1 << 0), PartneredServerOwner(1 << 1), HypeSquadEvents(1 << 2), BugHunterLv1(1 << 3), HouseBravery(1 << 6), HouseBrilliance(1 << 7), HouseBalance(1 << 8), EarlyNitro(1 << 9), Team(1 << 10), BugHunterLv2(1 << 14), VerifiedBot(1 << 16), VerifiedEarlyDeveloper(1 << 17), ModeratorProgramAlumni(1 << 18), BotHTTP(1 << 19), ActiveDeveloper(1 << 22); final int flags; const UserFlags(this.flags); } enum PremiumType { None(0), Classic(1), Nitro(2), Basic(3); final int flag; const PremiumType(this.flag); } class AvatarDecorationData { String asset; String sku; AvatarDecorationData({required this.asset, required this.sku}); String encode() { return json.encode(toJson()); } Map toJson() { return {"asset": asset, "sku_id": sku}; } factory AvatarDecorationData.fromJson(String js) { return AvatarDecorationData.decode(json.decode(js)); } factory AvatarDecorationData.decode(Map js) { return AvatarDecorationData( asset: js['asset'] as String, sku: js['sku_id'] as String); } } class Team { String? icon; String id; List members; String name; String ownerUserId; Team( {required this.icon, required this.id, required this.members, required this.name, required this.ownerUserId}); String encode() { return json.encode(toJson()); } Map toJson() { List> membersJs = []; for (TeamMember tm in members) {} return { "icon": icon, "id": id, "members": membersJs, "name": name, "owner_user_id": ownerUserId }; } factory Team.fromJson(String js) { return Team.decode(json.decode(js)); } factory Team.decode(Map js) { List memberjs = []; List> mmap = js['members'] as List>; for (var entry in mmap) { memberjs.add(TeamMember.decode(entry)); } return Team( icon: js['icon'], id: js['id'], members: memberjs, name: js['name'], ownerUserId: js['owner_user_id']); } } class TeamMember { MembershipState membershipState; String teamId; User user; String role; TeamMember( {required this.membershipState, required this.teamId, required this.user, required this.role}); String encode() { return json.encode(toJson()); } Map toJson() { return { "membership_state": membershipState, "team_id": teamId, "user": user.toJson(), "role": role }; } factory TeamMember.fromJson(String js) { return TeamMember.decode(json.decode(js)); } factory TeamMember.decode(Map js) { return TeamMember( membershipState: MembershipState.of(js['membership_state']), teamId: js['team_id'], user: User.decode(js['user'] as Map)!, role: js['role']); } } enum MembershipState { INVITED(1), ACCEPTED(2); final int val; const MembershipState(this.val); static MembershipState of(int val) { switch (val) { case 1: { return MembershipState.INVITED; } case 2: { return MembershipState.ACCEPTED; } default: { return MembershipState.INVITED; } } } }