diff --git a/cogs/starboard/events.py b/cogs/starboard/events.py index fb006ad9f2d..20efe089313 100644 --- a/cogs/starboard/events.py +++ b/cogs/starboard/events.py @@ -172,6 +172,9 @@ async def _update_stars( return allowed = starboard.check_roles(member) allowed |= starboard.check_channel(self.bot, channel) + # temp-fix https://github.com/TrustyJAID/Trusty-cogs/issues/269 + allowed = starboard.check_roles(member) and starboard.check_channel(self.bot, channel) + # temp-fix end if not allowed: log.debug("User or channel not in allowlist") return diff --git a/cogs/starboard/menus.py b/cogs/starboard/menus.py index d1beeec57a7..23ee719944b 100644 --- a/cogs/starboard/menus.py +++ b/cogs/starboard/menus.py @@ -46,6 +46,8 @@ async def format_page(self, menu: menus.MenuPages, starboard: StarboardEntry) -> stars_added=starboard.stars_added, selfstar=starboard.selfstar, ) + # temp-fix https://github.com/TrustyJAID/Trusty-cogs/issues/269 + """ if starboard.blacklist: channels = [guild.get_channel(c) for c in starboard.blacklist] roles = [guild.get_role(r) for r in starboard.blacklist] @@ -64,6 +66,28 @@ async def format_page(self, menu: menus.MenuPages, starboard: StarboardEntry) -> msg += _("Allowed Channels: {chans}\n").format(chans=chans) if roles_str: msg += _("Allowed roles: {roles}\n").format(roles=roles_str) + """ + if starboard.blacklist_role_ids: + roles = [guild.get_role(r) for r in starboard.blacklist_role_ids] + if roles: + roles_str = humanize_list([r.mention for r in roles if r is not None]) + msg += _("Blocked roles: {roles}\n").format(roles=roles_str) + if starboard.blacklist_channel_ids: + channels = [guild.get_channel(c) for c in starboard.blacklist_channel_ids] + if channels: + channels_str = humanize_list([c.mention for c in channels if c is not None]) + msg += _("Blocked channels: {channels}\n").format(channels=channels_str) + if starboard.whitelist_role_ids: + roles = [guild.get_role(r) for r in starboard.whitelist_role_ids] + if roles: + roles_str = humanize_list([r.mention for r in roles if r is not None]) + msg += _("Allowed roles: {roles}\n").format(roles=roles_str) + if starboard.whitelist_channel_ids: + channels = [guild.get_channel(c) for c in starboard.whitelist_channel_ids] + if channels: + channels_str = humanize_list([c.mention for c in channels if c is not None]) + msg += _("Allowed channels: {channels}\n").format(channels=channels_str) + # temp-fix end count = 0 embed.description = "" for page in pagify(msg, page_length=1024): diff --git a/cogs/starboard/starboard.py b/cogs/starboard/starboard.py index 85c3c3c9883..044dddf46ac 100644 --- a/cogs/starboard/starboard.py +++ b/cogs/starboard/starboard.py @@ -176,6 +176,10 @@ async def cleanup(self, ctx: commands.Context) -> None: return channels = 0 boards = 0 + # temp-fix https://github.com/TrustyJAID/Trusty-cogs/issues/269 + removed_role_count = 0 + removed_channel_count = 0 + # temp-fix end for name, starboard in self.starboards[guild.id].items(): channel = guild.get_channel(starboard.channel) if channel is None: @@ -196,7 +200,44 @@ async def cleanup(self, ctx: commands.Context) -> None: if channel is None and role is None: self.starboards[guild.id][name].whitelist.remove(c) channels += 1 + # temp-fix https://github.com/TrustyJAID/Trusty-cogs/issues/269 + if starboard.blacklist_role_ids: + for role_id in starboard.blacklist_role_ids: + role = guild.get_role(role_id) + if role is None: + self.starboards[guild.id][name].blacklist_role_ids.remove(role_id) + removed_role_count += 1 + if starboard.whitelist_role_ids: + for role_id in starboard.whitelist_role_ids: + role = guild.get_role(role_id) + if role is None: + self.starboards[guild.id][name].whitelist_role_ids.remove(role_id) + removed_role_count += 1 + if starboard.blacklist_channel_ids: + for channel_id in starboard.blacklist_channel_ids: + channel = guild.get_channel(channel_id) + if channel is None: + self.starboards[guild.id][name].blacklist_channel_ids.remove(channel_id) + removed_channel_count += 1 + if starboard.whitelist_channel_ids: + for channel_id in starboard.whitelist_channel_ids: + channel = guild.get_channel(channel_id) + if channel is None: + self.starboards[guild.id][name].whitelist_channel_ids.remove(channel_id) + removed_channel_count += 1 + # temp-fix end await self._save_starboards(guild) + # temp-fix https://github.com/TrustyJAID/Trusty-cogs/issues/269 + msg = _( + "Removed {channel_count} channels, {role_count} roles, and {boards} boards that no longer exist" + ).format( + channel_count=removed_channel_count, + role_count=removed_role_count, + boards=boards, + ) + await ctx.send(msg) + return + # temp-fix end msg = _( "Removed {channels} channels and roles, and {boards} boards " "that no longer exist" ).format(channels=channels, boards=boards) @@ -388,6 +429,42 @@ async def blacklist_add( ) return starboard = list(self.starboards[guild.id].values())[0] + # temp-fix https://github.com/TrustyJAID/Trusty-cogs/issues/269 + starboard: StarboardEntry + if isinstance(channel_or_role, discord.Role): + role: discord.Role = channel_or_role + if role.id in starboard.blacklist_role_ids: + msg = _("{role} is already blocked for starboard {name}").format( + role=role.name, name=starboard.name + ) + await ctx.send(msg) + else: + self.starboards[ctx.guild.id][starboard.name].blacklist.append(channel_or_role.id) + self.starboards[ctx.guild.id][starboard.name].blacklist_role_ids.append(role.id) + await self._save_starboards(guild) + msg = _("{role} blocked on starboard {name}").format( + role=role.name, name=starboard.name + ) + await ctx.send(msg) + else: + channel: Union[discord.TextChannel, discord.CategoryChannel] = channel_or_role + if channel.id in starboard.blacklist_channel_ids: + msg = _("{channel} is already blocked for starboard {name}").format( + channel=channel.name, name=starboard.name + ) + await ctx.send(msg) + else: + self.starboards[ctx.guild.id][starboard.name].blacklist.append(channel_or_role.id) + self.starboards[ctx.guild.id][starboard.name].blacklist_channel_ids.append( + channel.id + ) + await self._save_starboards(guild) + msg = _("{channel} blocked on starboard {name}").format( + channel=channel.name, name=starboard.name + ) + await ctx.send(msg) + return + # temp-fix end if channel_or_role.id in starboard.blacklist: msg = _("{channel_or_role} is already blocked for starboard {name}").format( channel_or_role=channel_or_role.name, name=starboard.name @@ -429,6 +506,44 @@ async def blacklist_remove( ) return starboard = list(self.starboards[guild.id].values())[0] + # temp-fix https://github.com/TrustyJAID/Trusty-cogs/issues/269 + starboard: StarboardEntry + if isinstance(channel_or_role, discord.Role): + role: discord.Role = channel_or_role + if role.id not in starboard.blacklist_role_ids: + msg = _("{role} is not on the blocklist for starboard {name}").format( + role=role.name, name=starboard.name + ) + await ctx.send(msg) + return + else: + self.starboards[ctx.guild.id][starboard.name].blacklist.remove(channel_or_role.id) + self.starboards[ctx.guild.id][starboard.name].blacklist_role_ids.remove(role.id) + await self._save_starboards(guild) + msg = _("{role} removed from the blocklist on starboard {name}").format( + role=role.name, name=starboard.name + ) + await ctx.send(msg) + else: + channel: Union[discord.TextChannel, discord.CategoryChannel] = channel_or_role + if channel.id not in starboard.blacklist_channel_ids: + msg = _("{channel} is not on the blocklist for starboard {name}").format( + channel=channel.name, name=starboard.name + ) + await ctx.send(msg) + return + else: + self.starboards[ctx.guild.id][starboard.name].blacklist.remove(channel_or_role.id) + self.starboards[ctx.guild.id][starboard.name].blacklist_channel_ids.remove( + channel.id + ) + await self._save_starboards(guild) + msg = _("{channel} removed from the blocklist on starboard {name}").format( + channel=channel.name, name=starboard.name + ) + await ctx.send(msg) + return + # temp-fix end if channel_or_role.id not in starboard.blacklist: msg = _("{channel_or_role} is not on the blocklist for starboard {name}").format( channel_or_role=channel_or_role.name, name=starboard.name @@ -471,6 +586,53 @@ async def whitelist_add( return starboard = list(self.starboards[guild.id].values())[0] + # temp-fix https://github.com/TrustyJAID/Trusty-cogs/issues/269 + starboard: StarboardEntry + if isinstance(channel_or_role, discord.Role): + role: discord.Role = channel_or_role + if role.id in starboard.whitelist_role_ids: + msg = _("{role} is already allowed for starboard {name}").format( + role=role.name, name=starboard.name + ) + await ctx.send(msg) + else: + self.starboards[ctx.guild.id][starboard.name].whitelist.append(channel_or_role.id) + self.starboards[ctx.guild.id][starboard.name].whitelist_role_ids.append(role.id) + await self._save_starboards(guild) + msg = _("{role} allowed on starboard {name}").format( + role=role.name, name=starboard.name + ) + await ctx.send(msg) + else: + channel: Union[discord.TextChannel, discord.CategoryChannel] = channel_or_role + if channel.id in starboard.whitelist_channel_ids: + msg = _("{channel} is already allowed for starboard {name}").format( + channel=channel.name, name=starboard.name + ) + await ctx.send(msg) + else: + self.starboards[ctx.guild.id][starboard.name].whitelist.append(channel_or_role.id) + self.starboards[ctx.guild.id][starboard.name].whitelist_channel_ids.append( + channel.id + ) + await self._save_starboards(guild) + msg = _("{channel} allowed on starboard {name}").format( + channel=channel.name, name=starboard.name + ) + await ctx.send(msg) + if isinstance(channel, discord.TextChannel): + star_channel = ctx.guild.get_channel(starboard.channel) + if channel.is_nsfw() and not star_channel.is_nsfw(): + await ctx.send( + _( + "The channel you have provided is designated " + "as NSFW but your starboard channel is not. " + "They will both need to be set the same " + "in order for this to work properly." + ) + ) + return + # temp-fix end if channel_or_role.id in starboard.whitelist: msg = _("{channel_or_role} is already allowed for starboard {name}").format( channel_or_role=channel_or_role.name, name=starboard.name @@ -523,6 +685,42 @@ async def whitelist_remove( ) return starboard = list(self.starboards[guild.id].values())[0] + # temp-fix https://github.com/TrustyJAID/Trusty-cogs/issues/269 + starboard: StarboardEntry + if isinstance(channel_or_role, discord.Role): + role: discord.Role = channel_or_role + if role.id not in starboard.whitelist_role_ids: + msg = _("{role} is not on the allowlist for starboard {name}").format( + role=role.name, name=starboard.name + ) + await ctx.send(msg) + else: + self.starboards[ctx.guild.id][starboard.name].whitelist.remove(channel_or_role.id) + self.starboards[ctx.guild.id][starboard.name].whitelist_role_ids.remove(role.id) + await self._save_starboards(guild) + msg = _("{role} removed from the allowlist on starboard {name}").format( + role=role.name, name=starboard.name + ) + await ctx.send(msg) + else: + channel: Union[discord.TextChannel, discord.CategoryChannel] = channel_or_role + if channel.id not in starboard.whitelist_channel_ids: + msg = _("{channel} is not on the allowlist for starboard {name}").format( + channel=channel.name, name=starboard.name + ) + await ctx.send(msg) + else: + self.starboards[ctx.guild.id][starboard.name].whitelist.remove(channel_or_role.id) + self.starboards[ctx.guild.id][starboard.name].whitelist_channel_ids.remove( + channel.id + ) + await self._save_starboards(guild) + msg = _("{channel} removed from the allowlist on starboard {name}").format( + channel=channel.name, name=starboard.name + ) + await ctx.send(msg) + return + # temp-fix end if channel_or_role.id not in starboard.whitelist: msg = _("{channel_or_role} is not on the allowlist for starboard {name}").format( channel_or_role=channel_or_role.name, name=starboard.name @@ -794,3 +992,372 @@ async def set_threshold( threshold=threshold, name=starboard.name ) await ctx.send(msg) + + # temp-fix https://github.com/TrustyJAID/Trusty-cogs/issues/269 + @blacklist.group(name="roles", aliases=["role"]) + async def blacklist_roles(self, ctx: commands.Context) -> None: + """Add/Remove roles to/from the blocklist""" + pass + + @blacklist.group(name="channels", aliases=["channel"]) + async def blacklist_channels(self, ctx: commands.Context) -> None: + """Add/Remove channels to/from the blocklist""" + pass + + @whitelist.group(name="roles", aliases=["role"]) + async def whitelist_roles(self, ctx: commands.Context) -> None: + """Add/Remove roles to/from the allowlist""" + pass + + @whitelist.group(name="channels", aliases=["channel"]) + async def whitelist_channels(self, ctx: commands.Context) -> None: + """Add/Remove channels to/from the allowlist""" + pass + + @blacklist_roles.command(name="add") + async def blacklist_roles_add( + self, + ctx: commands.Context, + starboard: Optional[StarboardExists], + role: discord.Role, + ) -> None: + """ + Add a role to the starboard blocklist + + `` is the name of the starboard to adjust + `` is the role you would like to add to the blocklist + """ + guild = ctx.guild + if not starboard: + if guild.id not in self.starboards: + await ctx.send(_("There are no starboards setup on this server!")) + return + if len(self.starboards[guild.id]) > 1: + await ctx.send( + _( + "There's more than one starboard setup in this server. " + "Please provide a name for the starboard you wish to use." + ) + ) + return + starboard = list(self.starboards[guild.id].values())[0] + + starboard: StarboardEntry + if role.id in starboard.blacklist_role_ids: + msg = _("{role} is already blocked for starboard {name}").format( + role=role.name, name=starboard.name + ) + await ctx.send(msg) + else: + self.starboards[ctx.guild.id][starboard.name].blacklist.append(role.id) + self.starboards[ctx.guild.id][starboard.name].blacklist_role_ids.append(role.id) + await self._save_starboards(guild) + msg = _("{role} blocked on starboard {name}").format( + role=role.name, name=starboard.name + ) + await ctx.send(msg) + + @blacklist_channels.command(name="add") + async def blacklist_channels_add( + self, + ctx: commands.Context, + starboard: Optional[StarboardExists], + channel: Union[discord.TextChannel, discord.CategoryChannel], + ) -> None: + """ + Add a channel to the starboard blocklist + + `` is the name of the starboard to adjust + `` is the channel you would like to add to the blocklist + """ + guild = ctx.guild + if not starboard: + if guild.id not in self.starboards: + await ctx.send(_("There are no starboards setup on this server!")) + return + if len(self.starboards[guild.id]) > 1: + await ctx.send( + _( + "There's more than one starboard setup in this server. " + "Please provide a name for the starboard you wish to use." + ) + ) + return + starboard = list(self.starboards[guild.id].values())[0] + + starboard: StarboardEntry + if channel.id in starboard.blacklist_channel_ids: + msg = _("{channel} is already blocked for starboard {name}").format( + channel=channel.name, name=starboard.name + ) + await ctx.send(msg) + else: + self.starboards[ctx.guild.id][starboard.name].blacklist.append(channel.id) + self.starboards[ctx.guild.id][starboard.name].blacklist_channel_ids.append(channel.id) + await self._save_starboards(guild) + msg = _("{channel} blocked on starboard {name}").format( + channel=channel.name, name=starboard.name + ) + await ctx.send(msg) + + @blacklist_roles.command(name="remove") + async def blacklist_roles_remove( + self, + ctx: commands.Context, + starboard: Optional[StarboardExists], + role: discord.Role, + ) -> None: + """ + Remove a role from the starboard blocklist + + `` is the name of the starboard to adjust + `` is the role you would like to remove from the blocklist + """ + guild = ctx.guild + if not starboard: + if guild.id not in self.starboards: + await ctx.send(_("There are no starboards setup on this server!")) + return + if len(self.starboards[guild.id]) > 1: + await ctx.send( + _( + "There's more than one starboard setup in this server. " + "Please provide a name for the starboard you wish to use." + ) + ) + return + starboard = list(self.starboards[guild.id].values())[0] + + starboard: StarboardEntry + if role.id not in starboard.blacklist_role_ids: + msg = _("{role} is not on the blocklist for starboard {name}").format( + role=role.name, name=starboard.name + ) + await ctx.send(msg) + return + else: + self.starboards[ctx.guild.id][starboard.name].blacklist.remove(role.id) + self.starboards[ctx.guild.id][starboard.name].blacklist_role_ids.remove(role.id) + await self._save_starboards(guild) + msg = _("{role} removed from the blocklist on starboard {name}").format( + role=role.name, name=starboard.name + ) + await ctx.send(msg) + + @blacklist_channels.command(name="remove") + async def blacklist_channels_remove( + self, + ctx: commands.Context, + starboard: Optional[StarboardExists], + channel: Union[discord.TextChannel, discord.CategoryChannel], + ) -> None: + """ + Remove a channel from the starboard blocklist + + `` is the name of the starboard to adjust + `` is the channel you would like to remove from the blocklist + """ + guild = ctx.guild + if not starboard: + if guild.id not in self.starboards: + await ctx.send(_("There are no starboards setup on this server!")) + return + if len(self.starboards[guild.id]) > 1: + await ctx.send( + _( + "There's more than one starboard setup in this server. " + "Please provide a name for the starboard you wish to use." + ) + ) + return + starboard = list(self.starboards[guild.id].values())[0] + + starboard: StarboardEntry + if channel.id not in starboard.blacklist_channel_ids: + msg = _("{channel} is not on the blocklist for starboard {name}").format( + channel=channel.name, name=starboard.name + ) + await ctx.send(msg) + return + else: + self.starboards[ctx.guild.id][starboard.name].blacklist.remove(channel.id) + self.starboards[ctx.guild.id][starboard.name].blacklist_channel_ids.remove(channel.id) + await self._save_starboards(guild) + msg = _("{channel} removed from the blocklist on starboard {name}").format( + channel=channel.name, name=starboard.name + ) + await ctx.send(msg) + + @whitelist_roles.command(name="add") + async def whitelist_roles_add( + self, + ctx: commands.Context, + starboard: Optional[StarboardExists], + role: discord.Role, + ) -> None: + """ + Add a role to the starboard allowlist + + `` is the name of the starboard to adjust + `` is the role you would like to add to the allowlist + """ + guild = ctx.guild + if not starboard: + if guild.id not in self.starboards: + await ctx.send(_("There are no starboards setup on this server!")) + return + if len(self.starboards[guild.id]) > 1: + await ctx.send( + _( + "There's more than one starboard setup in this server. " + "Please provide a name for the starboard you wish to use." + ) + ) + return + starboard = list(self.starboards[guild.id].values())[0] + + starboard: StarboardEntry + if role.id in starboard.whitelist_role_ids: + msg = _("{role} is already allowed for starboard {name}").format( + role=role.name, name=starboard.name + ) + await ctx.send(msg) + else: + self.starboards[ctx.guild.id][starboard.name].whitelist.append(role.id) + self.starboards[ctx.guild.id][starboard.name].whitelist_role_ids.append(role.id) + await self._save_starboards(guild) + msg = _("{role} allowed on starboard {name}").format( + role=role.name, name=starboard.name + ) + await ctx.send(msg) + + @whitelist_channels.command(name="add") + async def whitelist_channels_add( + self, + ctx: commands.Context, + starboard: Optional[StarboardExists], + channel: Union[discord.TextChannel, discord.CategoryChannel], + ) -> None: + """ + Add a channel to the starboard allowlist + + `` is the name of the starboard to adjust + `` is the channel you would like to add to the allowlist + """ + guild = ctx.guild + if not starboard: + if guild.id not in self.starboards: + await ctx.send(_("There are no starboards setup on this server!")) + return + if len(self.starboards[guild.id]) > 1: + await ctx.send( + _( + "There's more than one starboard setup in this server. " + "Please provide a name for the starboard you wish to use." + ) + ) + return + starboard = list(self.starboards[guild.id].values())[0] + + starboard: StarboardEntry + if channel.id in starboard.whitelist_channel_ids: + msg = _("{channel} is already allowed for starboard {name}").format( + channel=channel.name, name=starboard.name + ) + await ctx.send(msg) + else: + self.starboards[ctx.guild.id][starboard.name].whitelist.append(channel.id) + self.starboards[ctx.guild.id][starboard.name].whitelist_channel_ids.append(channel.id) + await self._save_starboards(guild) + msg = _("{channel} allowed on starboard {name}").format( + channel=channel.name, name=starboard.name + ) + await ctx.send(msg) + + @whitelist_roles.command(name="remove") + async def whitelist_roles_remove( + self, + ctx: commands.Context, + starboard: Optional[StarboardExists], + role: discord.Role, + ) -> None: + """ + Remove a role from the starboard allowlist + + `` is the name of the starboard to adjust + `` is the role you would like to remove from the allowlist + """ + guild = ctx.guild + if not starboard: + if guild.id not in self.starboards: + await ctx.send(_("There are no starboards setup on this server!")) + return + if len(self.starboards[guild.id]) > 1: + await ctx.send( + _( + "There's more than one starboard setup in this server. " + "Please provide a name for the starboard you wish to use." + ) + ) + return + starboard = list(self.starboards[guild.id].values())[0] + # temp-fix https://github.com/TrustyJAID/Trusty-cogs/issues/269 + starboard: StarboardEntry + if role.id not in starboard.whitelist_role_ids: + msg = _("{role} is not on the allowlist for starboard {name}").format( + role=role.name, name=starboard.name + ) + await ctx.send(msg) + else: + self.starboards[ctx.guild.id][starboard.name].whitelist.remove(role.id) + self.starboards[ctx.guild.id][starboard.name].whitelist_role_ids.remove(role.id) + await self._save_starboards(guild) + msg = _("{role} removed from the allowlist on starboard {name}").format( + role=role.name, name=starboard.name + ) + await ctx.send(msg) + + @whitelist_channels.command(name="remove") + async def whitelist_channels_remove( + self, + ctx: commands.Context, + starboard: Optional[StarboardExists], + channel: discord.Role, + ) -> None: + """ + Remove a channel from the starboard allowlist + + `` is the name of the starboard to adjust + `` is the channel you would like to remove from the allowlist + """ + guild = ctx.guild + if not starboard: + if guild.id not in self.starboards: + await ctx.send(_("There are no starboards setup on this server!")) + return + if len(self.starboards[guild.id]) > 1: + await ctx.send( + _( + "There's more than one starboard setup in this server. " + "Please provide a name for the starboard you wish to use." + ) + ) + return + starboard = list(self.starboards[guild.id].values())[0] + # temp-fix https://github.com/TrustyJAID/Trusty-cogs/issues/269 + starboard: StarboardEntry + if channel.id not in starboard.whitelist_channel_ids: + msg = _("{channel} is not on the allowlist for starboard {name}").format( + channel=channel.name, name=starboard.name + ) + await ctx.send(msg) + else: + self.starboards[ctx.guild.id][starboard.name].whitelist.remove(channel.id) + self.starboards[ctx.guild.id][starboard.name].whitelist_channel_ids.remove(channel.id) + await self._save_starboards(guild) + msg = _("{channel} removed from the allowlist on starboard {name}").format( + channel=channel.name, name=starboard.name + ) + await ctx.send(msg) + + # temp-fix end diff --git a/cogs/starboard/starboard_entry.py b/cogs/starboard/starboard_entry.py index 01f63b233c6..9fdd221c3af 100644 --- a/cogs/starboard/starboard_entry.py +++ b/cogs/starboard/starboard_entry.py @@ -46,6 +46,13 @@ def __init__(self, **kwargs): self.stars_added: int = kwargs.get("stars_added", 0) self.lock: asyncio.Lock = asyncio.Lock() + # temp-fix https://github.com/TrustyJAID/Trusty-cogs/issues/269 + self.blacklist_role_ids: List[int] = kwargs.get("blacklist_role_ids", []) + self.whitelist_role_ids: List[int] = kwargs.get("whitelist_role_ids", []) + self.blacklist_channel_ids: List[int] = kwargs.get("blacklist_channel_ids", []) + self.whitelist_channel_ids: List[int] = kwargs.get("whitelist_channel_ids", []) + # temp-fix end + def __repr__(self) -> str: return ( " bool: # for the starboard count return True user_roles = set([role.id for role in member.roles]) + # temp-fix https://github.com/TrustyJAID/Trusty-cogs/issues/269 + if self.blacklist_role_ids: + for role_id in self.blacklist_role_ids: + if role_id in user_roles: + return False + if self.whitelist_role_ids: + for role_id in self.whitelist_role_ids: + if role_id in user_roles: + return True + return False + return True + # temp-fix end if self.whitelist: for role in self.whitelist: if role in user_roles: @@ -109,6 +128,20 @@ def check_channel(self, bot: Red, channel: discord.TextChannel) -> bool: guild = bot.get_guild(self.guild) if channel.is_nsfw() and not guild.get_channel(self.channel).is_nsfw(): return False + # temp-fix https://github.com/TrustyJAID/Trusty-cogs/issues/269 + if self.blacklist_channel_ids: + if channel.id in self.blacklist_channel_ids: + return False + if channel.category_id and channel.category_id in self.blacklist_channel_ids: + return False + if self.whitelist_channel_ids: + if channel.id in self.whitelist_channel_ids: + return True + if channel.category_id and channel.category_id in self.whitelist_channel_ids: + return True + return False + return True + # temp-fix end if self.whitelist: if channel.id in self.whitelist: return True @@ -133,6 +166,12 @@ async def to_json(self) -> dict: "selfstar": self.selfstar, "blacklist": self.blacklist, "whitelist": self.whitelist, + # temp-fix https://github.com/TrustyJAID/Trusty-cogs/issues/269 + "blacklist_role_ids": self.blacklist_role_ids, + "whitelist_role_ids": self.whitelist_role_ids, + "blacklist_channel_ids": self.blacklist_channel_ids, + "whitelist_channel_ids": self.whitelist_channel_ids, + # temp-fix end "messages": { k: m.to_json() async for k, m in AsyncIter(self.messages.items(), steps=500) }, @@ -176,14 +215,28 @@ async def from_json(cls, data: dict, guild_id: Optional[int]): stars_added += len(message.reactions) blacklist = data.get("blacklist", []) whitelist = data.get("whitelist", []) + # temp-fix https://github.com/TrustyJAID/Trusty-cogs/issues/269 + blacklist_role_ids = data.get("blacklist_role_ids", []) + whitelist_role_ids = data.get("whitelist_role_ids", []) + blacklist_channel_ids = data.get("blacklist_channel_ids", []) + whitelist_channel_ids = data.get("whitelist_channel_ids", []) + # temp-fix end if data.get("blacklist_channel") or data.get("blacklist_role"): log.debug("Converting blacklist") blacklist += data.get("blacklist_channel", []) blacklist += data.get("blacklist_role", []) + # temp-fix https://github.com/TrustyJAID/Trusty-cogs/issues/269 + blacklist_channel_ids += data.get("blacklist_channel", []) + blacklist_role_ids += data.get("blacklist_role", []) + # temp-fix end if data.get("whitelist_channel") or data.get("whitelist_role"): log.debug("Converting whitelist") whitelist += data.get("whitelist_channel", []) whitelist += data.get("whitelist_role", []) + # temp-fix https://github.com/TrustyJAID/Trusty-cogs/issues/269 + whitelist_channel_ids += data.get("whitelist_channel", []) + whitelist_role_ids += data.get("whitelist_role", []) + # temp-fix end return cls( name=data.get("name"), guild=guild, @@ -194,6 +247,12 @@ async def from_json(cls, data: dict, guild_id: Optional[int]): selfstar=data.get("selfstar", False), blacklist=blacklist, whitelist=whitelist, + # temp-fix https://github.com/TrustyJAID/Trusty-cogs/issues/269 + blacklist_role_ids=blacklist_role_ids, + whitelist_role_ids=whitelist_role_ids, + blacklist_channel_ids=blacklist_channel_ids, + whitelist_channel_ids=whitelist_channel_ids, + # temp-fix end messages=messages, threshold=data.get("threshold"), autostar=data.get("autostar", False),