diff options
-rw-r--r-- | botcore/utils/__init__.py | 3 | ||||
-rw-r--r-- | botcore/utils/commands.py | 21 |
2 files changed, 23 insertions, 1 deletions
diff --git a/botcore/utils/__init__.py b/botcore/utils/__init__.py index dfdd6df5..95e89d20 100644 --- a/botcore/utils/__init__.py +++ b/botcore/utils/__init__.py @@ -1,6 +1,6 @@ """Useful utilities and tools for Discord bot development.""" -from botcore.utils import _monkey_patches, caching, channel, interactions, logging, members, regex, scheduling +from botcore.utils import _monkey_patches, caching, channel, commands, interactions, logging, members, regex, scheduling from botcore.utils._extensions import unqualify @@ -24,6 +24,7 @@ __all__ = [ apply_monkey_patches, caching, channel, + commands, interactions, logging, members, diff --git a/botcore/utils/commands.py b/botcore/utils/commands.py new file mode 100644 index 00000000..2d380bef --- /dev/null +++ b/botcore/utils/commands.py @@ -0,0 +1,21 @@ +from typing import Optional + +from discord import Message +from discord.ext.commands import Context, clean_content + + +async def clean_text_or_reply(ctx: Context, text: Optional[str] = None) -> Optional[str]: + """Returns cleaned version of `text`, if given, else referenced message, if found, else `None`.""" + clean_content_converter = clean_content(fix_channel_mentions=True) + + if text: + return await clean_content_converter.convert(ctx, text) + + if ( + (replied_message := getattr(ctx.message.reference, "resolved", None)) # message has a cached reference + and isinstance(replied_message, Message) # referenced message hasn't been deleted + ): + return await clean_content_converter.convert(ctx, ctx.message.reference.resolved.content) + + # No text provided, and either no message was referenced or we can't access the content + return None |