mirror of
https://github.com/Cog-Creators/Red-DiscordBot.git
synced 2025-11-21 18:27:59 -05:00
[Mod] Move ignored guilds and channels to core (#3472)
* Move ignored guilds and channels to core Add caching for ignored guilds and channels Add caching for whitelist and blacklist Fix #3220 Add consume-rest for whitelist and blacklist commands to add multiple users or roles in one command * Add ability to ignore channel categories * black * moveignorechannels should be owner only and cleanup changes * add changelog entries * address Feedback
This commit is contained in:
@@ -38,7 +38,7 @@ from .dev_commands import Dev
|
||||
from .events import init_events
|
||||
from .global_checks import init_global_checks
|
||||
|
||||
from .settings_caches import PrefixManager
|
||||
from .settings_caches import PrefixManager, IgnoreManager, WhitelistBlacklistManager
|
||||
|
||||
from .rpc import RPCMixin
|
||||
from .utils import common_filters
|
||||
@@ -118,13 +118,14 @@ class RedBase(
|
||||
admin_role=[],
|
||||
mod_role=[],
|
||||
embeds=None,
|
||||
ignored=False,
|
||||
use_bot_color=False,
|
||||
fuzzy=False,
|
||||
disabled_commands=[],
|
||||
autoimmune_ids=[],
|
||||
)
|
||||
|
||||
self._config.register_channel(embeds=None)
|
||||
self._config.register_channel(embeds=None, ignored=False)
|
||||
self._config.register_user(embeds=None)
|
||||
|
||||
self._config.init_custom(CUSTOM_GROUPS, 2)
|
||||
@@ -133,6 +134,8 @@ class RedBase(
|
||||
self._config.init_custom(SHARED_API_TOKENS, 2)
|
||||
self._config.register_custom(SHARED_API_TOKENS)
|
||||
self._prefix_cache = PrefixManager(self._config, cli_flags)
|
||||
self._ignored_cache = IgnoreManager(self._config)
|
||||
self._whiteblacklist_cache = WhitelistBlacklistManager(self._config)
|
||||
|
||||
async def prefix_manager(bot, message) -> List[str]:
|
||||
prefixes = await self._prefix_cache.get_prefixes(message.guild)
|
||||
@@ -350,13 +353,13 @@ class RedBase(
|
||||
if await self.is_owner(who):
|
||||
return True
|
||||
|
||||
global_whitelist = await self._config.whitelist()
|
||||
global_whitelist = await self._whiteblacklist_cache.get_whitelist()
|
||||
if global_whitelist:
|
||||
if who.id not in global_whitelist:
|
||||
return False
|
||||
else:
|
||||
# blacklist is only used when whitelist doesn't exist.
|
||||
global_blacklist = await self._config.blacklist()
|
||||
global_blacklist = await self._whiteblacklist_cache.get_blacklist()
|
||||
if who.id in global_blacklist:
|
||||
return False
|
||||
|
||||
@@ -375,17 +378,44 @@ class RedBase(
|
||||
# there is a silent failure potential, and role blacklist/whitelists will break.
|
||||
ids = {i for i in (who.id, *(getattr(who, "_roles", []))) if i != guild.id}
|
||||
|
||||
guild_whitelist = await self._config.guild(guild).whitelist()
|
||||
guild_whitelist = await self._whiteblacklist_cache.get_whitelist(guild)
|
||||
if guild_whitelist:
|
||||
if ids.isdisjoint(guild_whitelist):
|
||||
return False
|
||||
else:
|
||||
guild_blacklist = await self._config.guild(guild).blacklist()
|
||||
guild_blacklist = await self._whiteblacklist_cache.get_blacklist(guild)
|
||||
if not ids.isdisjoint(guild_blacklist):
|
||||
return False
|
||||
|
||||
return True
|
||||
|
||||
async def ignored_channel_or_guild(self, ctx: commands.Context) -> bool:
|
||||
"""
|
||||
This checks if the bot is meant to be ignoring commands in a channel or guild,
|
||||
as considered by Red's whitelist and blacklist.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
ctx : Context of where the command is being run.
|
||||
|
||||
Returns
|
||||
-------
|
||||
bool
|
||||
`True` if commands are allowed in the channel, `False` otherwise
|
||||
"""
|
||||
perms = ctx.channel.permissions_for(ctx.author)
|
||||
surpass_ignore = (
|
||||
isinstance(ctx.channel, discord.abc.PrivateChannel)
|
||||
or perms.manage_guild
|
||||
or await ctx.bot.is_owner(ctx.author)
|
||||
or await ctx.bot.is_admin(ctx.author)
|
||||
)
|
||||
if surpass_ignore:
|
||||
return True
|
||||
guild_ignored = await self._ignored_cache.get_ignored_guild(ctx.guild)
|
||||
chann_ignored = await self._ignored_cache.get_ignored_channel(ctx.channel)
|
||||
return not (guild_ignored or chann_ignored and not perms.manage_channels)
|
||||
|
||||
async def get_valid_prefixes(self, guild: Optional[discord.Guild] = None) -> List[str]:
|
||||
"""
|
||||
This gets the valid prefixes for a guild.
|
||||
|
||||
Reference in New Issue
Block a user