diff options
Diffstat (limited to 'bot/exts/evergreen/bookmark.py')
| -rw-r--r-- | bot/exts/evergreen/bookmark.py | 65 | 
1 files changed, 65 insertions, 0 deletions
| diff --git a/bot/exts/evergreen/bookmark.py b/bot/exts/evergreen/bookmark.py new file mode 100644 index 00000000..e703e07b --- /dev/null +++ b/bot/exts/evergreen/bookmark.py @@ -0,0 +1,65 @@ +import logging +import random + +import discord +from discord.ext import commands + +from bot.constants import Colours, ERROR_REPLIES, Emojis, Icons + +log = logging.getLogger(__name__) + + +class Bookmark(commands.Cog): +    """Creates personal bookmarks by relaying a message link to the user's DMs.""" + +    def __init__(self, bot: commands.Bot): +        self.bot = bot + +    @commands.command(name="bookmark", aliases=("bm", "pin")) +    async def bookmark( +        self, +        ctx: commands.Context, +        target_message: discord.Message, +        *, +        title: str = "Bookmark" +    ) -> None: +        """Send the author a link to `target_message` via DMs.""" +        # Prevent users from bookmarking a message in a channel they don't have access to +        permissions = ctx.author.permissions_in(target_message.channel) +        if not permissions.read_messages: +            log.info(f"{ctx.author} tried to bookmark a message in #{target_message.channel} but has no permissions") +            embed = discord.Embed( +                title=random.choice(ERROR_REPLIES), +                color=Colours.soft_red, +                description="You don't have permission to view this channel." +            ) +            await ctx.send(embed=embed) +            return + +        embed = discord.Embed( +            title=title, +            colour=Colours.soft_green, +            description=target_message.content +        ) +        embed.add_field(name="Wanna give it a visit?", value=f"[Visit original message]({target_message.jump_url})") +        embed.set_author(name=target_message.author, icon_url=target_message.author.avatar_url) +        embed.set_thumbnail(url=Icons.bookmark) + +        try: +            await ctx.author.send(embed=embed) +        except discord.Forbidden: +            error_embed = discord.Embed( +                title=random.choice(ERROR_REPLIES), +                description=f"{ctx.author.mention}, please enable your DMs to receive the bookmark", +                colour=Colours.soft_red +            ) +            await ctx.send(embed=error_embed) +        else: +            log.info(f"{ctx.author} bookmarked {target_message.jump_url} with title '{title}'") +            await ctx.message.add_reaction(Emojis.envelope) + + +def setup(bot: commands.Bot) -> None: +    """Load the Bookmark cog.""" +    bot.add_cog(Bookmark(bot)) +    log.info("Bookmark cog loaded") | 
