diff options
Diffstat (limited to '')
| -rw-r--r-- | bot/cogs/duck_pond.py | 30 | ||||
| -rw-r--r-- | bot/utils/webhooks.py | 34 | 
2 files changed, 42 insertions, 22 deletions
diff --git a/bot/cogs/duck_pond.py b/bot/cogs/duck_pond.py index 5b6a7fd62..89b4ad0e4 100644 --- a/bot/cogs/duck_pond.py +++ b/bot/cogs/duck_pond.py @@ -1,5 +1,5 @@  import logging -from typing import Optional, Union +from typing import Union  import discord  from discord import Color, Embed, Member, Message, RawReactionActionEvent, User, errors @@ -7,7 +7,8 @@ from discord.ext.commands import Cog  from bot import constants  from bot.bot import Bot -from bot.utils.messages import send_attachments, sub_clyde +from bot.utils.messages import send_attachments +from bot.utils.webhooks import send_webhook  log = logging.getLogger(__name__) @@ -18,6 +19,7 @@ class DuckPond(Cog):      def __init__(self, bot: Bot):          self.bot = bot          self.webhook_id = constants.Webhooks.duck_pond +        self.webhook = None          self.bot.loop.create_task(self.fetch_webhook())      async def fetch_webhook(self) -> None: @@ -47,24 +49,6 @@ class DuckPond(Cog):                          return True          return False -    async def send_webhook( -        self, -        content: Optional[str] = None, -        username: Optional[str] = None, -        avatar_url: Optional[str] = None, -        embed: Optional[Embed] = None, -    ) -> None: -        """Send a webhook to the duck_pond channel.""" -        try: -            await self.webhook.send( -                content=content, -                username=sub_clyde(username), -                avatar_url=avatar_url, -                embed=embed -            ) -        except discord.HTTPException: -            log.exception("Failed to send a message to the Duck Pool webhook") -      async def count_ducks(self, message: Message) -> int:          """          Count the number of ducks in the reactions of a specific message. @@ -97,7 +81,8 @@ class DuckPond(Cog):          clean_content = message.clean_content          if clean_content: -            await self.send_webhook( +            await send_webhook( +                webhook=self.webhook,                  content=message.clean_content,                  username=message.author.display_name,                  avatar_url=message.author.avatar_url @@ -111,7 +96,8 @@ class DuckPond(Cog):                      description=":x: **This message contained an attachment, but it could not be retrieved**",                      color=Color.red()                  ) -                await self.send_webhook( +                await send_webhook( +                    webhook=self.webhook,                      embed=e,                      username=message.author.display_name,                      avatar_url=message.author.avatar_url diff --git a/bot/utils/webhooks.py b/bot/utils/webhooks.py new file mode 100644 index 000000000..37fdfe907 --- /dev/null +++ b/bot/utils/webhooks.py @@ -0,0 +1,34 @@ +import logging +from typing import Optional + +import discord +from discord import Embed + +from bot.utils.messages import sub_clyde + +log = logging.getLogger(__name__) + + +async def send_webhook( +        webhook: discord.Webhook, +        content: Optional[str] = None, +        username: Optional[str] = None, +        avatar_url: Optional[str] = None, +        embed: Optional[Embed] = None, +        wait: Optional[bool] = False +) -> None: +    """ +    Send a message using the provided webhook. + +    This uses sub_clyde() and tries for an HTTPException to ensure it doesn't crash. +    """ +    try: +        await webhook.send( +            content=content, +            username=sub_clyde(username), +            avatar_url=avatar_url, +            embed=embed, +            wait=wait, +        ) +    except discord.HTTPException: +        log.exception("Failed to send a message to the webhook!")  |