Beispiel #1
0
        public override void Bind(DefaultGatewayDispatcher value)
        {
            base.Bind(value);

            // Gets or adds the map of events for the given dispatcher instance.
            _events = _eventsByDispatcher.GetOrAdd(Dispatcher, dispatcher =>
            {
                var dictionary = new Dictionary <Type, AsynchronousEvent>(_eventsProperties.Length);
                for (var i = 0; i < _eventsProperties.Length; i++)
                {
                    var property = _eventsProperties[i];
                    dictionary.Add(property.PropertyType.GenericTypeArguments[0], (AsynchronousEvent)property.GetValue(dispatcher));
                }

                return(dictionary);
            });

            // Some dispatches won't map to events (e.g. READY) or will map to multiple ones (e.g. GUILD_CREATE maps to GuildAvailable and JoinedGuild).
            if (typeof(TEventArgs) == typeof(EventArgs))
            {
                return;
            }

            if (!_events.TryGetValue(typeof(TEventArgs), out var @event))
            {
                throw new ArgumentException($"No {nameof(DefaultGatewayDispatcher)} event found matching the type of {nameof(TEventArgs)}.");
            }

            Event = (AsynchronousEvent <TEventArgs>)@event;
        }
Beispiel #2
0
        public override void Bind(DefaultGatewayDispatcher value)
        {
            base.Bind(value);

            foreach (var id in Client.Shards.Keys)
            {
                InitialReadys.Add(id, new Tcs());
            }
        }
        public override void Bind(DefaultGatewayDispatcher value)
        {
            _guildMemberRemoveHandler = value[GatewayDispatchNames.GuildMemberRemove] as GuildMemberRemoveHandler;
            if (_guildMemberRemoveHandler != null)
            {
                _lastMemberIds = new();
            }

            base.Bind(value);
        }
Beispiel #4
0
        public override void Bind(DefaultGatewayDispatcher value)
        {
            _readyHandler = value["READY"] as ReadyHandler;

            base.Bind(value);
        }