Skip to content

moderation

Moderation Module for Tux Bot.

This module provides the foundation for all moderation-related functionality in the Tux Discord bot, including base classes for moderation cogs and common moderation utilities.

Modules:

  • ban

    Ban moderation command for Tux Bot.

  • cases

    Moderation case management and viewing commands.

  • clearafk

    AFK status clearing commands.

  • jail

    Jail moderation commands.

  • kick

    Kick moderation command for Tux Bot.

  • pollban

    Poll ban moderation command.

  • pollunban

    Poll unban moderation command.

  • purge

    Message purging commands for bulk message deletion.

  • report

    User reporting system for Discord servers.

  • slowmode

    Channel slowmode management commands.

  • snippetban

    Snippet ban moderation command.

  • snippetunban

    Snippet unban moderation command.

  • tempban

    Temporary ban moderation commands with automatic expiration handling.

  • timeout

    Timeout moderation command.

  • unban

    User unbanning commands for Discord moderation.

  • unjail

    User unjailing commands for Discord moderation.

  • untimeout

    Untimeout moderation command.

  • warn

    User warning commands for Discord moderation.

Classes:

  • ModerationCogBase

    Base class for moderation cogs with centralized service management.

Classes

ModerationCogBase

Python
ModerationCogBase(bot: Tux)

Bases: BaseCog

Base class for moderation cogs with centralized service management.

This class provides a foundation for moderation cogs with clean service initialization using a factory pattern. Services are created once during initialization and reused for all operations.

Attributes:

Initialize the moderation cog base with services.

Parameters:

  • bot (Tux) –

    The bot instance

Methods:

Attributes

db property

Get the database coordinator for accessing database controllers.

Returns:

  • DatabaseCoordinator

    Coordinator providing access to all database controllers.

Examples:

Python Console Session
>>> await self.db.guild_config.get_guild_config(guild_id)
>>> await self.db.cases.create_case(...)
Notes

This property provides convenient access to database operations without needing to access self.bot.db directly.

Functions

moderate_user async
Python
moderate_user(
    ctx: Context[Tux],
    case_type: CaseType,
    user: Member | User,
    reason: str,
    silent: bool = False,
    dm_action: str | None = None,
    actions: Sequence[tuple[Any, type[Any]]] | None = None,
    duration: int | None = None,
    **kwargs: Any,
) -> None

Execute moderation action using the service architecture.

Parameters:

  • ctx (Context[Tux]) –

    Command context

  • case_type (CaseType) –

    Type of moderation action

  • user (Member | User) –

    Target user

  • reason (str) –

    Reason for the action

  • silent (bool, default: False ) –

    Whether to suppress DM to user, by default False

  • dm_action (str | None, default: None ) –

    Custom DM action description, by default None

  • actions (Sequence[tuple[Any, type[Any]]] | None, default: None ) –

    Discord API actions to execute, by default None

  • duration (int | None, default: None ) –

    Duration in seconds for temporary actions, by default None

  • **kwargs (Any, default: {} ) –

    Additional case data

_setup_command_usage
Python
_setup_command_usage() -> None

Generate usage strings for all commands in this cog that lack explicit usage.

The generated usage follows the pattern: <qualified_name> <param tokens>

Where: - Required parameters are denoted as <name: Type> - Optional parameters are denoted as [name: Type] - The prefix is intentionally omitted (provided by ctx.prefix)

Examples:

ban <member: Member> [reason: str] config set <key: str> <value: str>

Notes

Respects explicit usage strings if already set on a command. Errors during generation are logged but don't prevent cog loading.

is_jailed async
Python
is_jailed(guild_id: int, user_id: int) -> bool

Check if a user is jailed.

Parameters:

  • guild_id (int) –

    Guild ID to check

  • user_id (int) –

    User ID to check

Returns:

  • bool

    True if user is jailed, False otherwise

_generate_usage
Python
_generate_usage(command: Command[Any, ..., Any]) -> str

Generate a usage string with support for flags and positional parameters.

This method inspects the command's callback signature to detect: - FlagConverter parameters (e.g., --flag value) - Positional parameters (e.g., <required> or [optional])

Parameters:

  • command (Command) –

    The command to generate usage for.

Returns:

  • str

    Generated usage string, or qualified command name as fallback.

Notes

Delegates to shared usage generator for consistency across all cogs. Falls back gracefully to command name if generation fails.

is_pollbanned async
Python
is_pollbanned(guild_id: int, user_id: int) -> bool

Check if a user is poll banned.

Parameters:

  • guild_id (int) –

    Guild ID to check

  • user_id (int) –

    User ID to check

Returns:

  • bool

    True if user is poll banned, False otherwise

is_snippetbanned async
Python
is_snippetbanned(guild_id: int, user_id: int) -> bool

Check if a user is snippet banned.

Parameters:

  • guild_id (int) –

    Guild ID to check

  • user_id (int) –

    User ID to check

Returns:

  • bool

    True if user is snippet banned, False otherwise

get_config
Python
get_config(key: str, default: Any = None) -> Any

Get a configuration value from CONFIG with support for nested keys.

Parameters:

  • key (str) –

    The configuration key to retrieve. Supports dot notation for nested values (e.g., "BOT_INFO.BOT_NAME").

  • default (Any, default: None ) –

    Default value to return if key is not found, by default None.

Returns:

  • Any

    The configuration value or default if not found.

Examples:

Python Console Session
>>> self.get_config("BOT_INFO.BOT_NAME")
'Tux'
>>> self.get_config("MISSING_KEY", "fallback")
'fallback'
Notes

Errors during retrieval are logged but don't raise exceptions. Returns the default value on any error.

__repr__
Python
__repr__() -> str

Return a string representation of the cog instance.

Returns:

  • str

    String representation in format <CogName bot=BotUser>.

unload_if_missing_config
Python
unload_if_missing_config(condition: bool, config_name: str) -> bool

Check if required configuration is missing and log warning.

This allows cogs to detect missing configuration at load time and return early from init to prevent partial initialization.

Parameters:

  • condition (bool) –

    True if config is missing (should unload), False otherwise.

  • config_name (str) –

    Name of the missing configuration for logging purposes.

Returns:

  • bool

    True if config is missing (caller should return early), False if config is present.

Examples:

Python Console Session
>>> def __init__(self, bot: Tux):
...     super().__init__(bot)
...     if self.unload_if_missing_config(not CONFIG.GITHUB_TOKEN, "GITHUB_TOKEN"):
...         return  # Exit early, cog will be partially loaded but won't register commands
...     self.github_client = GitHubClient()
Notes

When this returns True, the cog's init should return early to avoid initializing services that depend on the missing config. The cog will be loaded but commands won't be registered properly, preventing runtime errors.

For complete cog unloading, the bot owner should remove the cog from the modules directory or use the reload system to unload it programmatically.

_unload_self async
Python
_unload_self(extension_name: str) -> None

Perform the actual cog unload operation.

Parameters:

  • extension_name (str) –

    Full extension name to unload.

Notes

This is called as a background task by unload_if_missing_config(). Errors during unload are logged but don't raise exceptions.