280 lines
6.5 KiB
Dart
280 lines
6.5 KiB
Dart
import 'dart:convert';
|
|
|
|
import 'package:libac_dart/utils/DictTools.dart';
|
|
|
|
import '../../structs/Bitmasks.dart';
|
|
import '../../structs/Snowflake.dart';
|
|
|
|
class User {
|
|
Snowflake 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<String, dynamic> toJson() {
|
|
return {
|
|
"id": id.toString(),
|
|
"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<String, dynamic>? js) {
|
|
if (js == null) return null;
|
|
return User(
|
|
id: Snowflake.parse(js['id'] as String, Snowflake.DiscordEpoch),
|
|
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;
|
|
Snowflake sku;
|
|
|
|
AvatarDecorationData({required this.asset, required this.sku});
|
|
|
|
String encode() {
|
|
return json.encode(toJson());
|
|
}
|
|
|
|
Map<String, dynamic> toJson() {
|
|
return {"asset": asset, "sku_id": sku.toString()};
|
|
}
|
|
|
|
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: Snowflake.parse(js['sku_id'] as String, Snowflake.DiscordEpoch));
|
|
}
|
|
}
|
|
|
|
class Team {
|
|
String? icon;
|
|
Snowflake id;
|
|
List<TeamMember> members;
|
|
String name;
|
|
Snowflake ownerUserId;
|
|
|
|
Team(
|
|
{required this.icon,
|
|
required this.id,
|
|
required this.members,
|
|
required this.name,
|
|
required this.ownerUserId});
|
|
|
|
String encode() {
|
|
return json.encode(toJson());
|
|
}
|
|
|
|
Map<String, dynamic> toJson() {
|
|
List<Map<String, dynamic>> membersJs = [];
|
|
for (TeamMember tm in members) {}
|
|
|
|
return {
|
|
"icon": icon,
|
|
"id": id.toString(),
|
|
"members": membersJs,
|
|
"name": name,
|
|
"owner_user_id": ownerUserId.toString()
|
|
};
|
|
}
|
|
|
|
factory Team.fromJson(String js) {
|
|
return Team.decode(json.decode(js));
|
|
}
|
|
|
|
factory Team.decode(Map<String, dynamic> js) {
|
|
List<TeamMember> memberjs = [];
|
|
List<Map<String, dynamic>> mmap =
|
|
js['members'] as List<Map<String, dynamic>>;
|
|
for (var entry in mmap) {
|
|
memberjs.add(TeamMember.decode(entry));
|
|
}
|
|
|
|
return Team(
|
|
icon: js['icon'],
|
|
id: Snowflake.parse(js['id'], Snowflake.DiscordEpoch),
|
|
members: memberjs,
|
|
name: js['name'],
|
|
ownerUserId:
|
|
Snowflake.parse(js['owner_user_id'], Snowflake.DiscordEpoch));
|
|
}
|
|
}
|
|
|
|
class TeamMember {
|
|
MembershipState membershipState;
|
|
Snowflake 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<String, dynamic> toJson() {
|
|
return {
|
|
"membership_state": membershipState,
|
|
"team_id": teamId.toString(),
|
|
"user": user.toJson(),
|
|
"role": role
|
|
};
|
|
}
|
|
|
|
factory TeamMember.fromJson(String js) {
|
|
return TeamMember.decode(json.decode(js));
|
|
}
|
|
|
|
factory TeamMember.decode(Map<String, dynamic> js) {
|
|
return TeamMember(
|
|
membershipState: MembershipState.of(js['membership_state']),
|
|
teamId: Snowflake.parse(js['team_id'], Snowflake.DiscordEpoch),
|
|
user: User.decode(js['user'] as Map<String, dynamic>)!,
|
|
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;
|
|
}
|
|
}
|
|
}
|
|
}
|