diff --git a/defender/core/warden/rule.py b/defender/core/warden/rule.py index 4967a1b..e7bc3de 100644 --- a/defender/core/warden/rule.py +++ b/defender/core/warden/rule.py @@ -1178,14 +1178,16 @@ async def delete_last_message_sent_after(params: models.IsTimedelta): @processor(Action.SendMessage) async def send_message(params: models.SendMessage): nonlocal last_sent_message - default_values = 0 + send_embed = False + + for key in params.__fields_set__: + if key not in params._text_only_attrs: + send_embed = True + break for key in params.dict(): - if key == "edit_message_id": - continue attr = getattr(params, key) - if attr is None: - default_values += 1 + if attr is None and key not in params._text_only_attrs: setattr(params, key, discord.Embed.Empty) elif isinstance(attr, str): setattr(params, key, safe_sub(attr)) @@ -1209,13 +1211,12 @@ async def send_message(params: models.SendMessage): f"'{params.id}' is not a valid channel name.") em = None - no_embed = default_values >= 10 # Yuck, maybe I'll think of something better - if no_embed and not params.content: + if send_embed is False and not params.content: raise ExecutionError(f"[Warden] ({self.name}): I have no content and " "no embed to send.") - if no_embed is False: + if send_embed: em = discord.Embed(title=params.title, description=params.description, url=params.url) diff --git a/defender/core/warden/validation.py b/defender/core/warden/validation.py index 72e1c62..730f413 100644 --- a/defender/core/warden/validation.py +++ b/defender/core/warden/validation.py @@ -234,6 +234,10 @@ async def _runtime_check(self, *, cog, author: discord.Member, action_or_cond: U class SendMessage(BaseModel): _short_form = ("id", "content") + # Used internally to determine whether an embed has to be sent + # If any key other than these ones is passed an embed will be sent + _text_only_attrs = ("id", "content", "allow_mass_mentions", "ping_on_reply", + "reply_message_id", "edit_message_id", "add_timestamp") id: str # or context variable content: Optional[str]="" description: Optional[str]=None diff --git a/defender/defender.py b/defender/defender.py index ec1ba9f..e4b81c5 100644 --- a/defender/defender.py +++ b/defender/defender.py @@ -111,7 +111,7 @@ class Defender(Commands, AutoModules, Events, commands.Cog, metaclass=CompositeMetaClass): """Security tools to protect communities""" - __version__ = "1.10" + __version__ = "1.10.1" def __init__(self, bot): self.bot = bot