run ¶
Code execution cog for running code snippets in various programming languages.
This module provides functionality to execute code using external services like Godbolt and Wandbox, with support for multiple programming languages and proper error handling through custom exceptions.
Classes:
-
CodeDispatch–Abstract base class for code execution services.
-
GodboltService–Code execution service using Godbolt compiler explorer.
-
WandboxService–Code execution service using Wandbox online compiler.
-
Run–Cog for executing code in various programming languages.
Functions:
-
setup–Set up the Run cog.
Classes¶
CodeDispatch ¶
Bases: ABC
Abstract base class for code execution services.
Initialize the code dispatch service.
Parameters:
Methods:
-
run–Execute code using the appropriate compiler.
Functions¶
run async ¶
Execute code using the appropriate compiler.
Parameters:
-
language(str) –The programming language identifier.
-
code(str) –The source code to execute.
-
options(str | None, default:None) –Additional compiler options. Defaults to None.
Returns:
-
str | None–The execution output or None if execution failed.
_execute abstractmethod async ¶
GodboltService ¶
Bases: CodeDispatch
Code execution service using Godbolt compiler explorer.
Initialize the code dispatch service.
Parameters:
Methods:
-
run–Execute code using the appropriate compiler.
Functions¶
run async ¶
Execute code using the appropriate compiler.
Parameters:
-
language(str) –The programming language identifier.
-
code(str) –The source code to execute.
-
options(str | None, default:None) –Additional compiler options. Defaults to None.
Returns:
-
str | None–The execution output or None if execution failed.
_execute async ¶
Execute code using Godbolt service.
Parameters:
-
compiler(str) –The Godbolt compiler identifier.
-
code(str) –The source code to compile and execute.
-
options(str | None) –Additional compiler options. C++ options are automatically enhanced.
Returns:
-
str | None–The execution output with header lines removed, or None if execution failed.
WandboxService ¶
Bases: CodeDispatch
Code execution service using Wandbox online compiler.
Initialize the code dispatch service.
Parameters:
Methods:
-
run–Execute code using the appropriate compiler.
Functions¶
run async ¶
Execute code using the appropriate compiler.
Parameters:
-
language(str) –The programming language identifier.
-
code(str) –The source code to execute.
-
options(str | None, default:None) –Additional compiler options. Defaults to None.
Returns:
-
str | None–The execution output or None if execution failed.
_execute async ¶
Execute code using Wandbox service.
Parameters:
-
compiler(str) –The Wandbox compiler identifier.
-
code(str) –The source code to compile and execute.
-
options(str | None) –Additional compiler options.
Returns:
-
str | None–Combined compiler errors and program output, or None if execution failed.
Notes
Nim compiler errors are filtered out due to excessive verbosity.
Run ¶
Run(bot: Tux)
Bases: BaseCog
Cog for executing code in various programming languages.
Supports multiple programming languages through Godbolt and Wandbox services. Provides code execution with proper error handling and user-friendly output.
Initialize the Run cog.
Parameters:
-
bot(Tux) –The bot instance to attach this cog to.
Methods:
-
get_config–Get a configuration value from CONFIG with support for nested keys.
-
__repr__–Return a string representation of the cog instance.
-
unload_if_missing_config–Check if required configuration is missing and log warning.
-
run–Execute code in various programming languages.
-
languages–Display all supported programming languages to use with the
runcommand.
Attributes:
-
db(DatabaseCoordinator) –Get the database coordinator for accessing database controllers.
Attributes¶
db property ¶
db: DatabaseCoordinator
Get the database coordinator for accessing database controllers.
Returns:
-
DatabaseCoordinator–Coordinator providing access to all database controllers.
Examples:
>>> 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¶
_setup_command_usage ¶
_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.
_generate_usage ¶
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.
get_config ¶
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:
>>> 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__ ¶
__repr__() -> str
Return a string representation of the cog instance.
Returns:
-
str–String representation in format
<CogName bot=BotUser>.
unload_if_missing_config ¶
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:
>>> 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 ¶
_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.
_parse_code_block ¶
_determine_service ¶
_create_result_embed async ¶
_extract_code_from_message async ¶
Extract code from the command or referenced message.
Parameters:
-
ctx(Context[Tux]) –The command context.
-
code(str | None) –Code provided directly in the command.
Returns:
-
str | None–The extracted code or None if not found.
Notes
If no code is provided directly, attempts to extract code from a replied-to message containing triple backticks.
run async ¶
Execute code in various programming languages.
Code should be enclosed in triple backticks with language specification. You can also reply to a message containing code to execute it.
Parameters:
-
ctx(Context[Tux]) –The command context.
-
code(str | None, default:None) –The code to execute, or None to use referenced message. Defaults to None.
Raises:
-
TuxMissingCodeError–When no code is provided and no replied message contains code.
-
TuxInvalidCodeFormatError–When the code format is invalid or missing language specification.
-
TuxUnsupportedLanguageError–When the specified language is not supported.
-
TuxCompilationError–When code compilation or execution fails.