Skip to content

Commit

Permalink
Merge pull request #449 from nyxx-discord/next
Browse files Browse the repository at this point in the history
Release 5.0.0
  • Loading branch information
l7ssha authored Mar 5, 2023
2 parents 02fe467 + c485d64 commit 930daf4
Show file tree
Hide file tree
Showing 75 changed files with 1,713 additions and 625 deletions.
26 changes: 26 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,12 @@
## 5.0.0
__04.03.2023__

- feature: Add named arguments anywhere we can (#396)
- feature: Make CDN urls more reliable (#373)
- feature: Dispatch raw events (#447)
- feature: Implement missing thread features (#429)
- feature: Add avatar decorations to cdn endpoints (#410)

## 4.5.0
__18.02.2023__

Expand All @@ -18,6 +27,11 @@ __18.02.2023__
- documentation: Fix comments and nullability in examples (#416)
- documentation: Add message intent to readme (#428)

## 5.0.0-dev.2
__26.01.2023__

- sync with dev branch (up to 4.5.0-dev.0)

## 4.5.0-dev.0
__26.01.2023__

Expand Down Expand Up @@ -58,6 +72,13 @@ __19.11.2022__
- bug: Emit bot start to plugins only when ready
- bug: fix builder not building when editing a guild member (#405)

## 5.0.0-dev.1
__15.11.2022__

- feature: Add named arguments anywhere we can (#396)

This version also includes fixes from 4.2.1

## 4.3.0-dev.1
__15.11.2022__

Expand Down Expand Up @@ -122,6 +143,11 @@ __25.09.2022__
- feature: feature: auto moderation (#353)
- bug: Fixup shard disconnect event

## 5.0.0-dev.0
__20.09.2022__

- refactor: Make CDN urls more reliable (#373)

## 4.1.0-dev.4
__15.09.2022__

Expand Down
3 changes: 1 addition & 2 deletions analysis_options.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,5 @@ linter:
analyzer:
exclude: [build/**]
language:
strict-casts: true
strict-raw-types: true
strong-mode:
implicit-casts: false
2 changes: 1 addition & 1 deletion example/embeds.dart
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ void main() async {
})
..addAuthor((author) {
author.name = e.message.author.username;
author.iconUrl = e.message.author.avatarURL();
author.iconUrl = e.message.author.avatarUrl();
})
..addFooter((footer) {
footer.text = "Footer example, good";
Expand Down
14 changes: 11 additions & 3 deletions example/private_emoji.dart
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,21 @@ void main() {

e.message.guild?.getFromCache()?.shard;
// Send "Pong!" to channel where message was received
e.message.channel.sendMessage(MessageBuilder.content(IBaseGuildEmoji.fromId(Snowflake(502563517774299156)).formatForMessage()));
e.message.channel.sendMessage(MessageBuilder.content(IBaseGuildEmoji.fromId(Snowflake(502563517774299156), bot).formatForMessage()));
}

print(await (await e.message.guild?.getOrDownload())! .getBans().toList());
print(await (await e.message.guild?.getOrDownload())!.getBans().toList());

if (e.message.content == "!create-thread") {
bot.httpEndpoints.startForumThread(Snowflake(961916452967944223), ForumThreadBuilder('test', MessageBuilder.content('this is test content <@${e.message.author.id}>')));
bot.httpEndpoints.startForumThread(
Snowflake(961916452967944223),
ForumThreadBuilder(
'test',
message: MessageBuilder.content(
'this is test content <@${e.message.author.id}>',
),
),
);
}
});
}
17 changes: 9 additions & 8 deletions lib/nyxx.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ library nyxx;

export 'src/client_options.dart' show CacheOptions, ClientOptions, GatewayIntents;
export 'src/nyxx.dart' show INyxx, INyxxRest, INyxxWebsocket, NyxxFactory;
export 'src/typedefs.dart' show RawApiMap, RawApiList;
export 'src/typedefs.dart' show RawApiMap, RawApiList, RawApiListOfMaps;
export 'src/core/allowed_mentions.dart' show AllowedMentions;
export 'src/core/discord_color.dart' show DiscordColor;
export 'src/core/snowflake.dart' show Snowflake;
Expand Down Expand Up @@ -140,29 +140,30 @@ export 'src/events/presence_update_event.dart' show IPresenceUpdateEvent;
export 'src/events/ratelimit_event.dart' show IRatelimitEvent;
export 'src/events/raw_event.dart' show IRawEvent;
export 'src/events/ready_event.dart' show IReadyEvent;
export 'src/events/thread_create_event.dart' show IThreadCreateEvent;
export 'src/events/thread_create_event.dart' show IThreadCreateEvent, IThreadUpdateEvent;
export 'src/events/thread_deleted_event.dart' show IThreadDeletedEvent;
export 'src/events/thread_members_update_event.dart' show IThreadMembersUpdateEvent;
export 'src/events/thread_list_sync_event.dart' show IThreadListSyncEvent;
export 'src/events/thread_members_update_event.dart' show IThreadMembersUpdateEvent, IThreadMemberUpdateEvent;
export 'src/events/typing_event.dart' show ITypingEvent;
export 'src/events/user_update_event.dart' show IUserUpdateEvent;
export 'src/events/voice_server_update_event.dart' show IVoiceServerUpdateEvent;
export 'src/events/voice_state_update_event.dart' show IVoiceStateUpdateEvent;
export 'src/internal/constants.dart' show Constants, OPCodes, Encoding;
export 'src/internal/constants.dart' show Constants, OPCodes, Encoding, CdnConstants;
export 'src/internal/event_controller.dart' show IWebsocketEventController, IRestEventController;
export 'src/internal/http_endpoints.dart' show IHttpEndpoints;
export 'src/internal/cdn_http_endpoints.dart' show ICdnHttpEndpoints;
export 'src/internal/cache/cache.dart' show SnowflakeCache, ICache, InMemoryCache;
export 'src/internal/cache/cache_policy.dart'
show CachePolicyPredicate, CachePolicyLocation, CachePolicy, ChannelCachePolicy, MemberCachePolicy, MessageCachePolicy;
export 'src/internal/cache/cacheable.dart' show Cacheable;
export 'src/internal/exceptions/embed_builder_argument_exception.dart' show EmbedBuilderArgumentException;
export 'src/internal/exceptions/http_client_exception.dart' show HttpClientException;
export 'src/internal/exceptions/invalid_shard_exception.dart' show InvalidShardException;
export 'src/internal/exceptions/invalid_snowflake_exception.dart' show InvalidSnowflakeException;
export 'src/internal/exceptions/missing_token_error.dart' show MissingTokenError;
export 'src/internal/exceptions/unrecoverable_nyxx_error.dart' show UnrecoverableNyxxError;
export 'src/internal/http/http_route_param.dart' show HttpRouteParam;
export 'src/internal/http/http_route_part.dart' show HttpRoutePart;
export 'src/internal/http/http_route.dart' show IHttpRoute;
export 'src/internal/http/http_route_param.dart' show HttpRouteParam, CdnHttpRouteParam;
export 'src/internal/http/http_route_part.dart' show HttpRoutePart, CdnHttpRoutePart;
export 'src/internal/http/http_route.dart' show IHttpRoute, ICdnHttpRoute;
export 'src/internal/http/http_response.dart' show IHttpResponse, IHttpResponseError, IHttpResponseSuccess;
export 'src/internal/interfaces/convertable.dart' show Convertable;
export 'src/internal/interfaces/disposable.dart' show Disposable;
Expand Down
5 changes: 0 additions & 5 deletions lib/src/client_options.dart
Original file line number Diff line number Diff line change
Expand Up @@ -55,10 +55,6 @@ class ClientOptions {
/// Allows to receive compressed payloads from gateway
bool compressedGatewayPayloads;

/// Enables dispatching of guild subscription events (presence and typing events)
@Deprecated('No longer has any effect, use intents instead.')
bool guildSubscriptions;

/// Initial bot presence
PresenceBuilder? initialPresence;

Expand Down Expand Up @@ -100,7 +96,6 @@ class ClientOptions {
this.messageCacheSize = 100,
this.largeThreshold = 50,
this.compressedGatewayPayloads = true,
this.guildSubscriptions = true,
this.initialPresence,
this.shutdownHook,
this.shutdownShardHook,
Expand Down
37 changes: 25 additions & 12 deletions lib/src/core/application/app_team.dart
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
import 'package:nyxx/src/core/snowflake.dart';
import 'package:nyxx/src/core/snowflake_entity.dart';
import 'package:nyxx/src/core/application/app_team_member.dart';
import 'package:nyxx/src/internal/constants.dart';
import 'package:nyxx/src/nyxx.dart';
import 'package:nyxx/src/typedefs.dart';

/// Object of team that manages given app
abstract class IAppTeam implements SnowflakeEntity {
/// Reference to [INyxx].
INyxx get client;

/// Hash of team icon
String? get iconHash;

Expand All @@ -18,8 +21,11 @@ abstract class IAppTeam implements SnowflakeEntity {
/// Returns instance of [IAppTeamMember] of team owner
IAppTeamMember get ownerMember;

/// Returns url to team icon
String? get teamIconUrl;
/// The team's name.
String get name;

/// Returns URL to team icon with given [format] and [size].
String? iconUrl({String format = 'webp', int? size});
}

/// Object of team that manages given app
Expand All @@ -40,21 +46,28 @@ class AppTeam extends SnowflakeEntity implements IAppTeam {
@override
IAppTeamMember get ownerMember => members.firstWhere((element) => element.user.id == ownerId);

/// Returns url to team icon
@override
String? get teamIconUrl {
if (iconHash != null) {
return "https://cdn.${Constants.cdnHost}/team-icons/${id.toString()}/$iconHash.png";
}
final INyxx client;

return null;
}
@override
late final String name;

/// Creates an instance of [AppTeam]
AppTeam(RawApiMap raw) : super(Snowflake(raw["id"])) {
AppTeam(RawApiMap raw, this.client) : super(Snowflake(raw["id"])) {
iconHash = raw["icon"] as String?;
ownerId = Snowflake(raw["owner_user_id"]);
name = raw['name'] as String;

members = [for (final rawMember in raw["members"] as RawApiList) AppTeamMember(rawMember as RawApiMap, client)];
}

/// Returns url to team icon
@override
String? iconUrl({String format = 'webp', int? size}) {
if (iconHash == null) {
return null;
}

members = [for (final rawMember in raw["members"]) AppTeamMember(rawMember as RawApiMap)];
return client.cdnHttpEndpoints.teamIcon(id, iconHash!, format: format, size: size);
}
}
11 changes: 9 additions & 2 deletions lib/src/core/application/app_team_member.dart
Original file line number Diff line number Diff line change
@@ -1,8 +1,12 @@
import 'package:nyxx/src/core/application/app_team_user.dart';
import 'package:nyxx/src/nyxx.dart';
import 'package:nyxx/src/typedefs.dart';

/// Represent membership of user in app team
abstract class IAppTeamMember {
/// Reference to [INyxx].
INyxx get client;

/// Basic information of user
IAppTeamUser get user;

Expand All @@ -20,9 +24,12 @@ class AppTeamMember implements IAppTeamMember {
@override
late final int membershipState;

@override
final INyxx client;

/// Creates and instance of [AppTeamMember]
AppTeamMember(RawApiMap raw) {
user = AppTeamUser(raw["user"] as RawApiMap);
AppTeamMember(RawApiMap raw, this.client) {
user = AppTeamUser(raw["user"] as RawApiMap, client);
membershipState = raw["membership_state"] as int;
}
}
23 changes: 22 additions & 1 deletion lib/src/core/application/app_team_user.dart
Original file line number Diff line number Diff line change
@@ -1,8 +1,12 @@
import 'package:nyxx/src/core/snowflake.dart';
import 'package:nyxx/src/core/snowflake_entity.dart';
import 'package:nyxx/src/nyxx.dart';
import 'package:nyxx/src/typedefs.dart';

abstract class IAppTeamUser implements SnowflakeEntity {
/// Reference to [INyxx].
INyxx get client;

/// The user's username.
String get username;

Expand All @@ -11,6 +15,11 @@ abstract class IAppTeamUser implements SnowflakeEntity {

/// The user's avatar hash.
String? get avatar;

/// The user's avatar, represented as URL.
/// In case if user does not have avatar, default discord avatar will be returned; [format], [size] and [animated] will no longer affectng this URL.
/// If [animated] is set as `true`, if available, the url will be a gif, otherwise the [format] or fallback to "webp".
String avatarUrl({String format = 'webp', int? size});
}

/// Represent user in member context
Expand All @@ -27,10 +36,22 @@ class AppTeamUser extends SnowflakeEntity implements IAppTeamUser {
@override
late final String? avatar;

@override
final INyxx client;

/// Creates an instance of [AppTeamUser]
AppTeamUser(RawApiMap raw) : super(Snowflake(raw["id"])) {
AppTeamUser(RawApiMap raw, this.client) : super(Snowflake(raw["id"])) {
username = raw["username"] as String;
discriminator = raw["discriminator"] as String;
avatar = raw["avatar"] as String?;
}

@override
String avatarUrl({String format = 'webp', int? size, bool animated = false}) {
if (avatar == null) {
return client.cdnHttpEndpoints.defaultAvatar(int.tryParse(discriminator) ?? 0);
}

return client.cdnHttpEndpoints.avatar(id, avatar!, format: format, size: size, animated: animated);
}
}
Loading

0 comments on commit 930daf4

Please sign in to comment.