175 lines
4.2 KiB
Dart
175 lines
4.2 KiB
Dart
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? flags;
|
|
PremiumType? premiumType;
|
|
UserFlags? 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<String, dynamic> 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!.flags,
|
|
if (premiumType != null) "premium_type": premiumType!.flag,
|
|
if (publicFlags != null) "public_flags": publicFlags!.flags,
|
|
if (decoration != null) "avatar_decoration_data": decoration!.toJson()
|
|
};
|
|
}
|
|
|
|
factory User.fromJson(String js) {
|
|
return User.decode(json.decode(js));
|
|
}
|
|
|
|
factory User.decode(Map<String, dynamic> js) {
|
|
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: UserFlags.decode(setor(js, "flags", null)),
|
|
premiumType: PremiumType.decode(setor(js, "premium_type", null)),
|
|
publicFlags: UserFlags.decode(setor(js, "public_flags", null)),
|
|
decoration: AvatarDecorationData.decode(
|
|
setor(js, "avatar_decoration_data", null)));
|
|
}
|
|
}
|
|
|
|
enum UserFlags implements MaskEnum {
|
|
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);
|
|
|
|
static UserFlags? decode(dynamic value) {
|
|
if (value == null) return null;
|
|
int flag = value as int;
|
|
|
|
for (var val in values) {
|
|
if (val == flag) {
|
|
return val;
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
@override
|
|
int getValue() {
|
|
return flags;
|
|
}
|
|
|
|
@override
|
|
List<UserFlags> getValues() {
|
|
return values;
|
|
}
|
|
}
|
|
|
|
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<String, dynamic> toJson() {
|
|
return {"asset": asset, "sku_id": sku};
|
|
}
|
|
|
|
factory AvatarDecorationData.fromJson(String js) {
|
|
return AvatarDecorationData.decode(json.decode(js));
|
|
}
|
|
|
|
factory AvatarDecorationData.decode(Map<String, dynamic> js) {
|
|
return AvatarDecorationData(
|
|
asset: js['asset'] as String, sku: js['sku_id'] as String);
|
|
}
|
|
}
|