diff --git a/src/Discord.Net.Modules/ModuleManager.cs b/src/Discord.Net.Modules/ModuleManager.cs index 6700e0e0b..f22f97747 100644 --- a/src/Discord.Net.Modules/ModuleManager.cs +++ b/src/Discord.Net.Modules/ModuleManager.cs @@ -46,7 +46,7 @@ namespace Discord.Modules private readonly DiscordClient _client; private readonly string _name, _id; private readonly FilterType _filterType; - private readonly bool _allowServerWhitelist, _allowChannelWhitelist, _allowPrivate; + private readonly bool _useServerWhitelist, _useChannelWhitelist, _allowAll, _allowPrivate; private readonly ConcurrentDictionary _enabledServers; private readonly ConcurrentDictionary _enabledChannels; private readonly ConcurrentDictionary _indirectServers; @@ -64,15 +64,16 @@ namespace Discord.Modules _name = name; _id = name.ToLowerInvariant(); _filterType = filterType; - _allowServerWhitelist = filterType.HasFlag(FilterType.ServerWhitelist); - _allowChannelWhitelist = filterType.HasFlag(FilterType.ChannelWhitelist); + _allowAll = filterType == FilterType.Unrestricted; + _useServerWhitelist = filterType.HasFlag(FilterType.ServerWhitelist); + _useChannelWhitelist = filterType.HasFlag(FilterType.ChannelWhitelist); _allowPrivate = filterType.HasFlag(FilterType.AllowPrivate); _enabledServers = new ConcurrentDictionary(); _enabledChannels = new ConcurrentDictionary(); _indirectServers = new ConcurrentDictionary(); - if (_allowServerWhitelist) //Server-only events + if (_useServerWhitelist) //Server-only events { client.LeftServer += (s, e) => { if (LeftServer != null && HasIndirectServer(e.Server)) DisableServer(e.Server); LeftServer(s, e); }; client.ServerUpdated += (s, e) => { if (ServerUpdated != null && HasIndirectServer(e.Server)) ServerUpdated(s, e); }; @@ -120,7 +121,7 @@ namespace Discord.Modules public bool EnableServer(Server server) { if (server == null) throw new ArgumentNullException(nameof(server)); - if (!_allowServerWhitelist) throw new InvalidOperationException("This module is not configured to use a server whitelist."); + if (!_useServerWhitelist) throw new InvalidOperationException("This module is not configured to use a server whitelist."); lock (this) { @@ -136,7 +137,7 @@ namespace Discord.Modules public bool DisableServer(Server server) { if (server == null) throw new ArgumentNullException(nameof(server)); - if (!_allowServerWhitelist) throw new InvalidOperationException("This module is not configured to use a server whitelist."); + if (!_useServerWhitelist) throw new InvalidOperationException("This module is not configured to use a server whitelist."); lock (this) { @@ -151,7 +152,7 @@ namespace Discord.Modules } public void DisableAllServers() { - if (!_allowServerWhitelist) throw new InvalidOperationException("This module is not configured to use a server whitelist."); + if (!_useServerWhitelist) throw new InvalidOperationException("This module is not configured to use a server whitelist."); lock (this) { @@ -168,7 +169,7 @@ namespace Discord.Modules public bool EnableChannel(Channel channel) { if (channel == null) throw new ArgumentNullException(nameof(channel)); - if (!_allowChannelWhitelist) throw new InvalidOperationException("This module is not configured to use a channel whitelist."); + if (!_useChannelWhitelist) throw new InvalidOperationException("This module is not configured to use a channel whitelist."); lock (this) { @@ -192,7 +193,7 @@ namespace Discord.Modules public bool DisableChannel(Channel channel) { if (channel == null) throw new ArgumentNullException(nameof(channel)); - if (!_allowChannelWhitelist) throw new InvalidOperationException("This module is not configured to use a channel whitelist."); + if (!_useChannelWhitelist) throw new InvalidOperationException("This module is not configured to use a channel whitelist."); lock (this) { @@ -219,7 +220,7 @@ namespace Discord.Modules } public void DisableAllChannels() { - if (!_allowChannelWhitelist) throw new InvalidOperationException("This module is not configured to use a channel whitelist."); + if (!_useChannelWhitelist) throw new InvalidOperationException("This module is not configured to use a channel whitelist."); lock (this) { @@ -236,23 +237,26 @@ namespace Discord.Modules public void DisableAll() { - if (_allowServerWhitelist) + if (_useServerWhitelist) DisableAllServers(); - if (_allowChannelWhitelist) + if (_useChannelWhitelist) DisableAllChannels(); } - internal bool HasServer(Server server) => - _allowServerWhitelist && _enabledServers.ContainsKey(server.Id); - internal bool HasIndirectServer(Server server) => - (_allowServerWhitelist && _enabledServers.ContainsKey(server.Id)) || - (_allowChannelWhitelist && _indirectServers.ContainsKey(server.Id)); + internal bool HasServer(Server server) => + _allowAll || + _useServerWhitelist && _enabledServers.ContainsKey(server.Id); + internal bool HasIndirectServer(Server server) => + _allowAll || + (_useServerWhitelist && _enabledServers.ContainsKey(server.Id)) || + (_useChannelWhitelist && _indirectServers.ContainsKey(server.Id)); internal bool HasChannel(Channel channel) { - if (channel.IsPrivate) return _allowPrivate; + if (_allowAll) return true; + if (channel.IsPrivate) return _allowPrivate; - if (_allowChannelWhitelist && _enabledChannels.ContainsKey(channel.Id)) return true; - if (_allowServerWhitelist) + if (_useChannelWhitelist && _enabledChannels.ContainsKey(channel.Id)) return true; + if (_useServerWhitelist) { var server = channel.Server; if (server == null) return false;