コード例 #1
0
ファイル: Handler`1.cs プロジェクト: Quahu/Disqord
        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;
        }
コード例 #2
0
ファイル: DiscordClientBase.cs プロジェクト: k-boyle/Disqord
        internal DiscordClientBase(RestDiscordClient restClient, DiscordClientBaseConfiguration configuration)
        {
            if (restClient == null)
            {
                throw new ArgumentNullException(nameof(restClient));
            }

            if (!restClient.HasAuthorization)
            {
                throw new ArgumentException("Clients without authorization are not supported.", nameof(restClient));
            }

            RestClient  = restClient;
            State       = new DiscordClientState(this, configuration.MessageCache.GetValueOrDefault(() => new DefaultMessageCache(100)));
            Logger      = configuration.Logger.GetValueOrDefault() ?? restClient.Logger;
            Serializer  = configuration.Serializer.GetValueOrDefault() ?? restClient.Serializer;
            _extensions = new LockedDictionary <Type, DiscordClientExtension>();

            _ready                 = new AsynchronousEvent <ReadyEventArgs>();
            _channelCreated        = new AsynchronousEvent <ChannelCreatedEventArgs>();
            _channelUpdated        = new AsynchronousEvent <ChannelUpdatedEventArgs>();
            _channelDeleted        = new AsynchronousEvent <ChannelDeletedEventArgs>();
            _channelPinsUpdated    = new AsynchronousEvent <ChannelPinsUpdatedEventArgs>();
            _guildAvailable        = new AsynchronousEvent <GuildAvailableEventArgs>();
            _guildUnavailable      = new AsynchronousEvent <GuildUnavailableEventArgs>();
            _joinedGuild           = new AsynchronousEvent <JoinedGuildEventArgs>();
            _guildUpdated          = new AsynchronousEvent <GuildUpdatedEventArgs>();
            _leftGuild             = new AsynchronousEvent <LeftGuildEventArgs>();
            _roleCreated           = new AsynchronousEvent <RoleCreatedEventArgs>();
            _roleUpdated           = new AsynchronousEvent <RoleUpdatedEventArgs>();
            _roleDeleted           = new AsynchronousEvent <RoleDeletedEventArgs>();
            _inviteCreated         = new AsynchronousEvent <InviteCreatedEventArgs>();
            _inviteDeleted         = new AsynchronousEvent <InviteDeletedEventArgs>();
            _memberBanned          = new AsynchronousEvent <MemberBannedEventArgs>();
            _memberUnbanned        = new AsynchronousEvent <MemberUnbannedEventArgs>();
            _guildEmojisUpdated    = new AsynchronousEvent <GuildEmojisUpdatedEventArgs>();
            _memberJoined          = new AsynchronousEvent <MemberJoinedEventArgs>();
            _memberLeft            = new AsynchronousEvent <MemberLeftEventArgs>();
            _memberUpdated         = new AsynchronousEvent <MemberUpdatedEventArgs>();
            _messageReceived       = new AsynchronousEvent <MessageReceivedEventArgs>();
            _messageDeleted        = new AsynchronousEvent <MessageDeletedEventArgs>();
            _messagesBulkDeleted   = new AsynchronousEvent <MessagesBulkDeletedEventArgs>();
            _messageUpdated        = new AsynchronousEvent <MessageUpdatedEventArgs>();
            _reactionAdded         = new AsynchronousEvent <ReactionAddedEventArgs>();
            _reactionRemoved       = new AsynchronousEvent <ReactionRemovedEventArgs>();
            _reactionsCleared      = new AsynchronousEvent <ReactionsClearedEventArgs>();
            _emojiReactionsCleared = new AsynchronousEvent <EmojiReactionsClearedEventArgs>();
            _presenceUpdated       = new AsynchronousEvent <PresenceUpdatedEventArgs>();
            _typingStarted         = new AsynchronousEvent <TypingStartedEventArgs>();
            _userUpdated           = new AsynchronousEvent <UserUpdatedEventArgs>();
            _voiceStateUpdated     = new AsynchronousEvent <VoiceStateUpdatedEventArgs>();
            _voiceServerUpdated    = new AsynchronousEvent <VoiceServerUpdatedEventArgs>();
            _webhooksUpdated       = new AsynchronousEvent <WebhooksUpdatedEventArgs>();

            if (this is IDiscordSharder sharder)
            {
                sharder._shardReady = new AsynchronousEvent <ShardReadyEventArgs>();
            }
        }
コード例 #3
0
 public void SendAsynchronous(AsynchronousEvent send)
 {
     send?.AddControlFinishWork();
 }