Пример #1
0
		internal ModuleManager(DiscordClient client, IModule instance, string name, ModuleFilter filterType)
		{
            Client = client;
            Instance = instance;
            Name = name;
            FilterType = filterType;

            Id = name.ToLowerInvariant();
            _lock = new AsyncLock();

			_allowAll = filterType == ModuleFilter.None;
			_useServerWhitelist = filterType.HasFlag(ModuleFilter.ServerWhitelist);
			_useChannelWhitelist = filterType.HasFlag(ModuleFilter.ChannelWhitelist);
			_allowPrivate = filterType.HasFlag(ModuleFilter.AlwaysAllowPrivate);

            _enabledServers = new ConcurrentDictionary<ulong, Server>();
			_enabledChannels = new ConcurrentDictionary<ulong, Channel>();
			_indirectServers = new ConcurrentDictionary<ulong, int>();

			if (_allowAll || _useServerWhitelist) //Server-only events
			{
				client.ChannelCreated += (s, e) => { if (e.Server != null && HasServer(e.Server)) ChannelCreated(s, e); };
				client.UserVoiceStateUpdated += (s, e) => { if (HasServer(e.Server)) UserVoiceStateUpdated(s, e); };
			}

			client.ChannelDestroyed += (s, e) => { if (HasChannel(e.Channel)) ChannelDestroyed(s, e); };
			client.ChannelUpdated += (s, e) => { if (HasChannel(e.Channel)) ChannelUpdated(s, e); };

			client.MessageReceived += (s, e) => { if (HasChannel(e.Channel)) MessageReceived(s, e); };
			client.MessageSent += (s, e) => { if (HasChannel(e.Channel)) MessageSent(s, e); };
			client.MessageDeleted += (s, e) => { if (HasChannel(e.Channel)) MessageDeleted(s, e); };
			client.MessageUpdated += (s, e) => { if (HasChannel(e.Channel)) MessageUpdated(s, e); };
			client.MessageAcknowledged += (s, e) => { if (HasChannel(e.Channel)) MessageReadRemotely(s, e); };

			client.RoleCreated += (s, e) => { if (HasIndirectServer(e.Server)) RoleCreated(s, e); };
			client.RoleUpdated += (s, e) => { if (HasIndirectServer(e.Server)) RoleUpdated(s, e); };
			client.RoleDeleted += (s, e) => { if (HasIndirectServer(e.Server)) RoleDeleted(s, e); };

			client.LeftServer += (s, e) => { if (HasIndirectServer(e.Server)) { DisableServer(e.Server); LeftServer(s, e); } };
			client.ServerUpdated += (s, e) => { if (HasIndirectServer(e.Server)) ServerUpdated(s, e); };
			client.ServerUnavailable += (s, e) => { if (HasIndirectServer(e.Server)) ServerUnavailable(s, e); };
			client.ServerAvailable += (s, e) => { if (HasIndirectServer(e.Server)) ServerAvailable(s, e); };

			client.UserJoined += (s, e) => { if (HasIndirectServer(e.Server)) UserJoined(s, e); };
			client.UserLeft += (s, e) => { if (HasIndirectServer(e.Server)) UserLeft(s, e); };
			client.UserUpdated += (s, e) => { if (HasIndirectServer(e.Server)) UserUpdated(s, e); };
			client.UserIsTypingUpdated += (s, e) => { if (HasChannel(e.Channel)) UserIsTypingUpdated(s, e); };
			//TODO: We aren't getting events from UserPresence if AllowPrivate is enabled, but the server we know that user through isn't on the whitelist
			client.UserPresenceUpdated += (s, e) => { if (HasIndirectServer(e.Server)) UserPresenceUpdated(s, e); };
			client.UserBanned += (s, e) => { if (HasIndirectServer(e.Server)) UserBanned(s, e); };
			client.UserUnbanned += (s, e) => { if (HasIndirectServer(e.Server)) UserUnbanned(s, e); };
		}
Пример #2
0
        internal ModuleManager(DiscordClient client, IModule instance, string name, ModuleFilter filterType)
        {
            Client     = client;
            Instance   = instance;
            Name       = name;
            FilterType = filterType;

            Id    = name.ToLowerInvariant();
            _lock = new AsyncLock();

            _allowAll            = filterType == ModuleFilter.None;
            _useServerWhitelist  = filterType.HasFlag(ModuleFilter.ServerWhitelist);
            _useChannelWhitelist = filterType.HasFlag(ModuleFilter.ChannelWhitelist);
            _allowPrivate        = filterType.HasFlag(ModuleFilter.AlwaysAllowPrivate);

            _enabledServers  = new ConcurrentDictionary <ulong, Server>();
            _enabledChannels = new ConcurrentDictionary <ulong, Channel>();
            _indirectServers = new ConcurrentDictionary <ulong, int>();

            if (_allowAll || _useServerWhitelist)             //Server-only events
            {
                client.ChannelCreated += (s, e) => { if (e.Server != null && HasServer(e.Server))
                                                     {
                                                         ChannelCreated(s, e);
                                                     }
                };
                //TODO: This *is* a channel update if the before/after voice channel is whitelisted
                //client.UserVoiceStateUpdated += (s, e) => { if (HasServer(e.Server)) UserVoiceStateUpdated(s, e); };
            }

            client.ChannelDestroyed += (s, e) => { if (HasChannel(e.Channel))
                                                   {
                                                       ChannelDestroyed(s, e);
                                                   }
            };
            client.ChannelUpdated += (s, e) => { if (HasChannel(e.After))
                                                 {
                                                     ChannelUpdated(s, e);
                                                 }
            };

            client.MessageReceived += (s, e) => { if (HasChannel(e.Channel))
                                                  {
                                                      MessageReceived(s, e);
                                                  }
            };
            client.MessageSent += (s, e) => { if (HasChannel(e.Channel))
                                              {
                                                  MessageSent(s, e);
                                              }
            };
            client.MessageDeleted += (s, e) => { if (HasChannel(e.Channel))
                                                 {
                                                     MessageDeleted(s, e);
                                                 }
            };
            client.MessageUpdated += (s, e) => { if (HasChannel(e.Channel))
                                                 {
                                                     MessageUpdated(s, e);
                                                 }
            };
            client.MessageAcknowledged += (s, e) => { if (HasChannel(e.Channel))
                                                      {
                                                          MessageReadRemotely(s, e);
                                                      }
            };

            client.RoleCreated += (s, e) => { if (HasIndirectServer(e.Server))
                                              {
                                                  RoleCreated(s, e);
                                              }
            };
            client.RoleUpdated += (s, e) => { if (HasIndirectServer(e.Server))
                                              {
                                                  RoleUpdated(s, e);
                                              }
            };
            client.RoleDeleted += (s, e) => { if (HasIndirectServer(e.Server))
                                              {
                                                  RoleDeleted(s, e);
                                              }
            };

            client.JoinedServer += (s, e) => { if (_allowAll)
                                               {
                                                   JoinedServer(s, e);
                                               }
            };
            client.LeftServer += (s, e) => { if (HasIndirectServer(e.Server))
                                             {
                                                 LeftServer(s, e);
                                             }
            };
            client.ServerUpdated += (s, e) => { if (HasIndirectServer(e.After))
                                                {
                                                    ServerUpdated(s, e);
                                                }
            };
            client.ServerUnavailable += (s, e) => { if (HasIndirectServer(e.Server))
                                                    {
                                                        ServerUnavailable(s, e);
                                                    }
            };
            client.ServerAvailable += (s, e) => { if (HasIndirectServer(e.Server))
                                                  {
                                                      ServerAvailable(s, e);
                                                  }
            };

            client.UserJoined += (s, e) => { if (HasIndirectServer(e.Server))
                                             {
                                                 UserJoined(s, e);
                                             }
            };
            client.UserLeft += (s, e) => { if (HasIndirectServer(e.Server))
                                           {
                                               UserLeft(s, e);
                                           }
            };
            client.UserUpdated += (s, e) => { if (HasIndirectServer(e.Server))
                                              {
                                                  UserUpdated(s, e);
                                              }
            };
            client.UserIsTyping += (s, e) => { if (HasChannel(e.Channel))
                                               {
                                                   UserIsTyping(s, e);
                                               }
            };
            //TODO: We aren't getting events from UserPresence if AllowPrivate is enabled, but the server we know that user through isn't on the whitelist
            //client.UserPresenceUpdated += (s, e) => { if (HasIndirectServer(e.Server)) UserPresenceUpdated(s, e); };
            client.UserBanned += (s, e) => { if (HasIndirectServer(e.Server))
                                             {
                                                 UserBanned(s, e);
                                             }
            };
            client.UserUnbanned += (s, e) => { if (HasIndirectServer(e.Server))
                                               {
                                                   UserUnbanned(s, e);
                                               }
            };
        }