added whitelist and more
This commit is contained in:
@@ -311,6 +311,126 @@ class Admin(commands.Cog):
|
||||
|
||||
await ctx.send(embed=embed)
|
||||
|
||||
@commands.group(name="whitelist", invoke_without_command=True)
|
||||
@commands.guild_only()
|
||||
async def whitelist_cmd(self, ctx: commands.Context) -> None:
|
||||
"""Manage the moderation whitelist."""
|
||||
config = await self.bot.guild_config.get_config(ctx.guild.id)
|
||||
whitelisted_ids = config.whitelisted_user_ids if config else []
|
||||
|
||||
if not whitelisted_ids:
|
||||
await ctx.send("No users are whitelisted.")
|
||||
return
|
||||
|
||||
embed = discord.Embed(
|
||||
title="Whitelisted Users",
|
||||
description="These users bypass all moderation checks:",
|
||||
color=discord.Color.blue(),
|
||||
)
|
||||
|
||||
users_text = []
|
||||
for user_id in whitelisted_ids[:25]: # Limit to 25 to avoid embed limits
|
||||
user = ctx.guild.get_member(user_id)
|
||||
if user:
|
||||
users_text.append(f"• {user.mention} (`{user_id}`)")
|
||||
else:
|
||||
users_text.append(f"• Unknown User (`{user_id}`)")
|
||||
|
||||
embed.add_field(
|
||||
name=f"Total: {len(whitelisted_ids)} users",
|
||||
value="\n".join(users_text) if users_text else "None",
|
||||
inline=False,
|
||||
)
|
||||
|
||||
if len(whitelisted_ids) > 25:
|
||||
embed.set_footer(text=f"Showing 25 of {len(whitelisted_ids)} users")
|
||||
|
||||
await ctx.send(embed=embed)
|
||||
|
||||
@whitelist_cmd.command(name="add")
|
||||
@commands.guild_only()
|
||||
async def whitelist_add(self, ctx: commands.Context, user: discord.Member) -> None:
|
||||
"""Add a user to the whitelist.
|
||||
|
||||
Whitelisted users bypass ALL moderation checks (automod and AI moderation).
|
||||
"""
|
||||
config = await self.bot.guild_config.get_config(ctx.guild.id)
|
||||
whitelisted_ids = list(config.whitelisted_user_ids) if config else []
|
||||
|
||||
if user.id in whitelisted_ids:
|
||||
await ctx.send(f"{user.mention} is already whitelisted.")
|
||||
return
|
||||
|
||||
whitelisted_ids.append(user.id)
|
||||
await self.bot.guild_config.update_settings(
|
||||
ctx.guild.id, whitelisted_user_ids=whitelisted_ids
|
||||
)
|
||||
|
||||
embed = discord.Embed(
|
||||
title="✅ User Whitelisted",
|
||||
description=f"{user.mention} has been added to the whitelist.",
|
||||
color=discord.Color.green(),
|
||||
)
|
||||
embed.add_field(
|
||||
name="What this means",
|
||||
value="This user will bypass all automod and AI moderation checks.",
|
||||
inline=False,
|
||||
)
|
||||
await ctx.send(embed=embed)
|
||||
|
||||
@whitelist_cmd.command(name="remove")
|
||||
@commands.guild_only()
|
||||
async def whitelist_remove(self, ctx: commands.Context, user: discord.Member) -> None:
|
||||
"""Remove a user from the whitelist."""
|
||||
config = await self.bot.guild_config.get_config(ctx.guild.id)
|
||||
whitelisted_ids = list(config.whitelisted_user_ids) if config else []
|
||||
|
||||
if user.id not in whitelisted_ids:
|
||||
await ctx.send(f"{user.mention} is not whitelisted.")
|
||||
return
|
||||
|
||||
whitelisted_ids.remove(user.id)
|
||||
await self.bot.guild_config.update_settings(
|
||||
ctx.guild.id, whitelisted_user_ids=whitelisted_ids
|
||||
)
|
||||
|
||||
embed = discord.Embed(
|
||||
title="🚫 User Removed from Whitelist",
|
||||
description=f"{user.mention} has been removed from the whitelist.",
|
||||
color=discord.Color.orange(),
|
||||
)
|
||||
embed.add_field(
|
||||
name="What this means",
|
||||
value="This user will now be subject to normal moderation checks.",
|
||||
inline=False,
|
||||
)
|
||||
await ctx.send(embed=embed)
|
||||
|
||||
@whitelist_cmd.command(name="clear")
|
||||
@commands.guild_only()
|
||||
async def whitelist_clear(self, ctx: commands.Context) -> None:
|
||||
"""Clear the entire whitelist."""
|
||||
config = await self.bot.guild_config.get_config(ctx.guild.id)
|
||||
count = len(config.whitelisted_user_ids) if config else 0
|
||||
|
||||
if count == 0:
|
||||
await ctx.send("The whitelist is already empty.")
|
||||
return
|
||||
|
||||
await self.bot.guild_config.update_settings(ctx.guild.id, whitelisted_user_ids=[])
|
||||
|
||||
embed = discord.Embed(
|
||||
title="🧹 Whitelist Cleared",
|
||||
description=f"Removed {count} user(s) from the whitelist.",
|
||||
color=discord.Color.red(),
|
||||
)
|
||||
embed.add_field(
|
||||
name="What this means",
|
||||
value="All users will now be subject to normal moderation checks.",
|
||||
inline=False,
|
||||
)
|
||||
await ctx.send(embed=embed)
|
||||
|
||||
@commands.command(name="sync")
|
||||
@commands.is_owner()
|
||||
async def sync_commands(self, ctx: commands.Context) -> None:
|
||||
|
||||
@@ -287,6 +287,11 @@ class AIModeration(commands.Cog):
|
||||
logger.debug(f"AI moderation disabled for guild {message.guild.id}")
|
||||
return
|
||||
|
||||
# Check if user is whitelisted
|
||||
if message.author.id in config.whitelisted_user_ids:
|
||||
logger.debug(f"Skipping whitelisted user {message.author}")
|
||||
return
|
||||
|
||||
# Skip users with manage_messages permission (disabled for testing)
|
||||
# if isinstance(message.author, discord.Member):
|
||||
# if message.author.guild_permissions.manage_messages:
|
||||
|
||||
@@ -283,6 +283,10 @@ class Automod(commands.Cog):
|
||||
if not config or not config.automod_enabled:
|
||||
return
|
||||
|
||||
# Check if user is whitelisted
|
||||
if message.author.id in config.whitelisted_user_ids:
|
||||
return
|
||||
|
||||
result: AutomodResult | None = None
|
||||
|
||||
# Check banned words
|
||||
|
||||
@@ -102,6 +102,11 @@ class GuildSettings(Base, TimestampMixin):
|
||||
# Notification settings
|
||||
send_in_channel_warnings: Mapped[bool] = mapped_column(Boolean, default=False, nullable=False)
|
||||
|
||||
# Whitelist settings
|
||||
whitelisted_user_ids: Mapped[list[int]] = mapped_column(
|
||||
JSONB().with_variant(JSON(), "sqlite"), default=list, nullable=False
|
||||
)
|
||||
|
||||
# Verification settings
|
||||
verification_enabled: Mapped[bool] = mapped_column(Boolean, default=False, nullable=False)
|
||||
verification_type: Mapped[str] = mapped_column(
|
||||
|
||||
Reference in New Issue
Block a user