diff options
| -rw-r--r-- | botcore/utils/commands.py | 27 | 
1 files changed, 22 insertions, 5 deletions
| diff --git a/botcore/utils/commands.py b/botcore/utils/commands.py index 2d380bef..7afd8137 100644 --- a/botcore/utils/commands.py +++ b/botcore/utils/commands.py @@ -1,11 +1,24 @@  from typing import Optional  from discord import Message -from discord.ext.commands import Context, clean_content +from discord.ext.commands import BadArgument, 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`.""" +async def clean_text_or_reply(ctx: Context, text: Optional[str] = None) -> str: +    """ +    Cleans a text argument or replied message's content. + +    Args: +        ctx: The command's context +        text: The provided text argument of the command (if given) + +    Raises: +        :exc:`discord.ext.commands.BadArgument` +            `text` wasn't provided and there's no reply message / reply message content. + +    Returns: +         The cleaned version of `text`, if given, else replied message. +    """      clean_content_converter = clean_content(fix_channel_mentions=True)      if text: @@ -15,7 +28,11 @@ async def clean_text_or_reply(ctx: Context, text: Optional[str] = None) -> Optio          (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) +        if not (content := ctx.message.reference.resolved.content): +            # The referenced message doesn't have a content (e.g. embed/image), so raise error +            raise BadArgument("The referenced message doesn't have a text content.") + +        return await clean_content_converter.convert(ctx, content)      # No text provided, and either no message was referenced or we can't access the content -    return None +    raise BadArgument("Couldn't find text to clean. Provide a string or reply to a message to use its content.") | 
