Skip to content

Commit 249b707

Browse files
committed
add user clans
1 parent 7dc8bae commit 249b707

File tree

4 files changed

+52
-0
lines changed

4 files changed

+52
-0
lines changed

lib/src/http/managers/user_manager.dart

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import 'package:nyxx/src/models/user/application_role_connection.dart';
2020
import 'package:nyxx/src/models/user/avatar_decoration_data.dart';
2121
import 'package:nyxx/src/models/user/connection.dart';
2222
import 'package:nyxx/src/models/user/user.dart';
23+
import 'package:nyxx/src/models/user/user_clan.dart';
2324
import 'package:nyxx/src/utils/cache_helpers.dart';
2425
import 'package:nyxx/src/utils/parsing_helpers.dart';
2526

@@ -58,6 +59,7 @@ class UserManager extends ReadOnlyManager<User> {
5859
publicFlags: hasPublicFlags ? UserFlags(raw['public_flags'] as int) : null,
5960
avatarDecorationHash: avatarDecorationData?.asset,
6061
avatarDecorationData: avatarDecorationData,
62+
clan: maybeParse(raw['clan'], parseUserClan),
6163
);
6264
}
6365

@@ -101,6 +103,17 @@ class UserManager extends ReadOnlyManager<User> {
101103
);
102104
}
103105

106+
/// Parse a [UserClan] from [raw].
107+
UserClan parseUserClan(Map<String, Object?> raw) {
108+
return UserClan(
109+
identityGuildId: Snowflake.parse(raw['identity_guild_id']!),
110+
isIdentityEnabled: raw['identity_enabled'] as bool,
111+
tag: raw['tag'] as String,
112+
badgeHash: raw['badge'] as String,
113+
client: client,
114+
);
115+
}
116+
104117
@override
105118
Future<User> fetch(Snowflake id) async {
106119
final route = HttpRoute()..users(id: id.toString());

lib/src/http/route.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -344,4 +344,7 @@ extension RouteHelpers on HttpRoute {
344344

345345
/// Adds the [`send-soundboard-sound`](https://discord.com/developers/docs/resources/soundboard#send-soundboard-sound) part to this [HttpRoute].
346346
void sendSoundboardSound() => add(HttpRoutePart('send-soundboard-sound'));
347+
348+
/// Adds the [`clan-badges`](https://discord.com/developers/docs/reference#image-formatting-cdn-endpoints)
349+
void clanBadges({String? id}) => add(HttpRoutePart('clan-badges', [if (id != null) HttpRouteParam(id)]));
347350
}

lib/src/models/user/user.dart

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import 'package:nyxx/src/models/locale.dart';
77
import 'package:nyxx/src/models/message/author.dart';
88
import 'package:nyxx/src/models/snowflake_entity/snowflake_entity.dart';
99
import 'package:nyxx/src/models/user/avatar_decoration_data.dart';
10+
import 'package:nyxx/src/models/user/user_clan.dart';
1011
import 'package:nyxx/src/utils/enum_like.dart';
1112
import 'package:nyxx/src/utils/flags.dart';
1213

@@ -77,6 +78,9 @@ class User extends PartialUser implements MessageAuthor, CommandOptionMentionabl
7778
/// The user's avatar deciration data.
7879
final AvatarDecorationData? avatarDecorationData;
7980

81+
/// The user's clan data.
82+
final UserClan? clan;
83+
8084
/// {@macro user}
8185
/// @nodoc
8286
User({
@@ -97,6 +101,7 @@ class User extends PartialUser implements MessageAuthor, CommandOptionMentionabl
97101
required this.publicFlags,
98102
required this.avatarDecorationHash,
99103
required this.avatarDecorationData,
104+
required this.clan,
100105
});
101106

102107
/// This user's banner.

lib/src/models/user/user_clan.dart

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import 'package:nyxx/src/client.dart';
2+
import 'package:nyxx/src/http/cdn/cdn_asset.dart';
3+
import 'package:nyxx/src/http/route.dart';
4+
import 'package:nyxx/src/models/guild/guild.dart';
5+
import 'package:nyxx/src/models/snowflake.dart';
6+
import 'package:nyxx/src/utils/to_string_helper/to_string_helper.dart';
7+
8+
class UserClan with ToStringHelper {
9+
final NyxxRest _client;
10+
11+
/// The ID of this user's primary clan
12+
final Snowflake identityGuildId;
13+
14+
/// Whether the user is displaying their clan tag
15+
final bool isIdentityEnabled;
16+
17+
/// The text of the user's clan tag. Limited to 4 characters
18+
final String tag;
19+
20+
/// The clan badge hash.
21+
final String badgeHash;
22+
23+
UserClan({required this.identityGuildId, required this.badgeHash, required this.isIdentityEnabled, required this.tag, required NyxxRest client})
24+
: _client = client;
25+
26+
/// The guild of this user's primary clan
27+
PartialGuild get identifyGuild => PartialGuild(id: identityGuildId, manager: _client.guilds);
28+
29+
/// The clan badge
30+
CdnAsset get badge => CdnAsset(client: _client, base: HttpRoute()..clanBadges(id: identityGuildId.toString()), hash: badgeHash);
31+
}

0 commit comments

Comments
 (0)