Apply unrestricted module filter to events
This commit is contained in:
@@ -46,7 +46,7 @@ namespace Discord.Modules
|
|||||||
private readonly DiscordClient _client;
|
private readonly DiscordClient _client;
|
||||||
private readonly string _name, _id;
|
private readonly string _name, _id;
|
||||||
private readonly FilterType _filterType;
|
private readonly FilterType _filterType;
|
||||||
private readonly bool _allowServerWhitelist, _allowChannelWhitelist, _allowPrivate;
|
private readonly bool _useServerWhitelist, _useChannelWhitelist, _allowAll, _allowPrivate;
|
||||||
private readonly ConcurrentDictionary<string, Server> _enabledServers;
|
private readonly ConcurrentDictionary<string, Server> _enabledServers;
|
||||||
private readonly ConcurrentDictionary<string, Channel> _enabledChannels;
|
private readonly ConcurrentDictionary<string, Channel> _enabledChannels;
|
||||||
private readonly ConcurrentDictionary<string, int> _indirectServers;
|
private readonly ConcurrentDictionary<string, int> _indirectServers;
|
||||||
@@ -64,15 +64,16 @@ namespace Discord.Modules
|
|||||||
_name = name;
|
_name = name;
|
||||||
_id = name.ToLowerInvariant();
|
_id = name.ToLowerInvariant();
|
||||||
_filterType = filterType;
|
_filterType = filterType;
|
||||||
_allowServerWhitelist = filterType.HasFlag(FilterType.ServerWhitelist);
|
_allowAll = filterType == FilterType.Unrestricted;
|
||||||
_allowChannelWhitelist = filterType.HasFlag(FilterType.ChannelWhitelist);
|
_useServerWhitelist = filterType.HasFlag(FilterType.ServerWhitelist);
|
||||||
|
_useChannelWhitelist = filterType.HasFlag(FilterType.ChannelWhitelist);
|
||||||
_allowPrivate = filterType.HasFlag(FilterType.AllowPrivate);
|
_allowPrivate = filterType.HasFlag(FilterType.AllowPrivate);
|
||||||
|
|
||||||
_enabledServers = new ConcurrentDictionary<string, Server>();
|
_enabledServers = new ConcurrentDictionary<string, Server>();
|
||||||
_enabledChannels = new ConcurrentDictionary<string, Channel>();
|
_enabledChannels = new ConcurrentDictionary<string, Channel>();
|
||||||
_indirectServers = new ConcurrentDictionary<string, int>();
|
_indirectServers = new ConcurrentDictionary<string, int>();
|
||||||
|
|
||||||
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.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); };
|
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)
|
public bool EnableServer(Server server)
|
||||||
{
|
{
|
||||||
if (server == null) throw new ArgumentNullException(nameof(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)
|
lock (this)
|
||||||
{
|
{
|
||||||
@@ -136,7 +137,7 @@ namespace Discord.Modules
|
|||||||
public bool DisableServer(Server server)
|
public bool DisableServer(Server server)
|
||||||
{
|
{
|
||||||
if (server == null) throw new ArgumentNullException(nameof(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)
|
lock (this)
|
||||||
{
|
{
|
||||||
@@ -151,7 +152,7 @@ namespace Discord.Modules
|
|||||||
}
|
}
|
||||||
public void DisableAllServers()
|
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)
|
lock (this)
|
||||||
{
|
{
|
||||||
@@ -168,7 +169,7 @@ namespace Discord.Modules
|
|||||||
public bool EnableChannel(Channel channel)
|
public bool EnableChannel(Channel channel)
|
||||||
{
|
{
|
||||||
if (channel == null) throw new ArgumentNullException(nameof(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)
|
lock (this)
|
||||||
{
|
{
|
||||||
@@ -192,7 +193,7 @@ namespace Discord.Modules
|
|||||||
public bool DisableChannel(Channel channel)
|
public bool DisableChannel(Channel channel)
|
||||||
{
|
{
|
||||||
if (channel == null) throw new ArgumentNullException(nameof(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)
|
lock (this)
|
||||||
{
|
{
|
||||||
@@ -219,7 +220,7 @@ namespace Discord.Modules
|
|||||||
}
|
}
|
||||||
public void DisableAllChannels()
|
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)
|
lock (this)
|
||||||
{
|
{
|
||||||
@@ -236,23 +237,26 @@ namespace Discord.Modules
|
|||||||
|
|
||||||
public void DisableAll()
|
public void DisableAll()
|
||||||
{
|
{
|
||||||
if (_allowServerWhitelist)
|
if (_useServerWhitelist)
|
||||||
DisableAllServers();
|
DisableAllServers();
|
||||||
if (_allowChannelWhitelist)
|
if (_useChannelWhitelist)
|
||||||
DisableAllChannels();
|
DisableAllChannels();
|
||||||
}
|
}
|
||||||
|
|
||||||
internal bool HasServer(Server server) =>
|
internal bool HasServer(Server server) =>
|
||||||
_allowServerWhitelist && _enabledServers.ContainsKey(server.Id);
|
_allowAll ||
|
||||||
internal bool HasIndirectServer(Server server) =>
|
_useServerWhitelist && _enabledServers.ContainsKey(server.Id);
|
||||||
(_allowServerWhitelist && _enabledServers.ContainsKey(server.Id)) ||
|
internal bool HasIndirectServer(Server server) =>
|
||||||
(_allowChannelWhitelist && _indirectServers.ContainsKey(server.Id));
|
_allowAll ||
|
||||||
|
(_useServerWhitelist && _enabledServers.ContainsKey(server.Id)) ||
|
||||||
|
(_useChannelWhitelist && _indirectServers.ContainsKey(server.Id));
|
||||||
internal bool HasChannel(Channel channel)
|
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 (_useChannelWhitelist && _enabledChannels.ContainsKey(channel.Id)) return true;
|
||||||
if (_allowServerWhitelist)
|
if (_useServerWhitelist)
|
||||||
{
|
{
|
||||||
var server = channel.Server;
|
var server = channel.Server;
|
||||||
if (server == null) return false;
|
if (server == null) return false;
|
||||||
|
|||||||
Reference in New Issue
Block a user