Add raw gateway event dispatcher for slash commands; Fix commander dependencies

This commit is contained in:
Szymon Uglis 2020-12-19 11:58:00 +01:00 committed by Szymon Uglis
parent e0eb4c1d79
commit 206aaeb454
No known key found for this signature in database
GPG key ID: 112376C5BEE91FE2
6 changed files with 37 additions and 1 deletions

View file

@ -12,3 +12,13 @@ environment:
dependencies:
nyxx: "^1.1.0-dev.1"
logging: "^1.0.0-nullsafety.0"
dependency_overrides:
http:
git:
url: git://github.com/dart-lang/http.git
http_parser:
git:
url: git://github.com/dart-lang/http_parser.git
nyxx:
path: "../nyxx"

View file

@ -56,6 +56,8 @@ part "src/internal/interfaces/Mentionable.dart";
// EVENTS
part "src/events/RawEvent.dart";
part "src/events/MemberChunkEvent.dart";
part "src/events/DisconnectEvent.dart";

View file

@ -63,6 +63,9 @@ class ClientOptions {
/// It could be either when shards disconnects or when bots process shuts down (look [shutdownHook].
ShutdownShardHook? shutdownShardHook;
/// Allows to enable receiving raw gateway event
bool dispatchRawShardEvent;
/// Makes a new `ClientOptions` object.
ClientOptions(
{this.allowedMentions,
@ -76,7 +79,8 @@ class ClientOptions {
this.guildSubscriptions = true,
this.initialPresence,
this.shutdownHook,
this.shutdownShardHook });
this.shutdownShardHook,
this.dispatchRawShardEvent = false });
}
/// When identifying to the gateway, you can specify an intents parameter which

View file

@ -0,0 +1,12 @@
part of nyxx;
/// Raw gateway event
class RawEvent {
/// Shard where event was received
final Shard shard;
/// Raw event data as deserialized json
final Map<String, dynamic> rawData;
RawEvent._new(this.shard, this.rawData);
}

View file

@ -205,6 +205,10 @@ class Shard implements Disposable {
}
Future<void> _dispatch(Map<String, dynamic> rawPayload) async {
if (this.manager._ws._client._options.dispatchRawShardEvent) {
this.manager._onRawEvent.add(RawEvent._new(this, rawPayload));
}
switch (rawPayload["op"] as int) {
case OPCodes.heartbeatAck:
this._heartbeatAckReceived = true;

View file

@ -18,9 +18,13 @@ class ShardManager implements Disposable {
/// Emitted when shard receives member chunk.
late final Stream<MemberChunkEvent> onMemberChunk = this._onMemberChunk.stream;
/// Raw gateway payloads. You have set `dispatchRawShardEvent` in [ClientOptions] to true otherwise stream won't receive any events.
late final Stream<RawEvent> rawEvent = this._onRawEvent.stream;
final StreamController<Shard> _onConnect = StreamController.broadcast();
final StreamController<Shard> _onDisconnect = StreamController.broadcast();
final StreamController<MemberChunkEvent> _onMemberChunk = StreamController.broadcast();
final StreamController<RawEvent> _onRawEvent = StreamController.broadcast();
final Logger _logger = Logger("Shard Manager");