aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bot/constants.py6
-rw-r--r--bot/seasons/evergreen/bookmark.py55
2 files changed, 61 insertions, 0 deletions
diff --git a/bot/constants.py b/bot/constants.py
index ce650b80..eca4f67b 100644
--- a/bot/constants.py
+++ b/bot/constants.py
@@ -4,6 +4,7 @@ from typing import NamedTuple
from datetime import datetime
__all__ = (
+ "bookmark_icon_url",
"AdventOfCode", "Channels", "Client", "Colours", "Emojis", "Hacktoberfest", "Roles", "Tokens",
"WHITELISTED_CHANNELS", "STAFF_ROLES", "MODERATION_ROLES",
"POSITIVE_REPLIES", "NEGATIVE_REPLIES", "ERROR_REPLIES",
@@ -11,6 +12,11 @@ __all__ = (
log = logging.getLogger(__name__)
+bookmark_icon_url = (
+ "https://images-ext-2.discordapp.net/external/zl4oDwcmxUILY7sD9ZWE2fU5R7n6QcxEmPYSE5eddbg/"
+ "%3Fv%3D1/https/cdn.discordapp.com/emojis/654080405988966419.png?width=20&height=20"
+)
+
class AdventOfCode:
leaderboard_cache_age_threshold_seconds = 3600
diff --git a/bot/seasons/evergreen/bookmark.py b/bot/seasons/evergreen/bookmark.py
new file mode 100644
index 00000000..9962186f
--- /dev/null
+++ b/bot/seasons/evergreen/bookmark.py
@@ -0,0 +1,55 @@
+import logging
+import random
+
+import discord
+from discord.ext import commands
+
+from bot.constants import Colours, ERROR_REPLIES, Emojis, bookmark_icon_url
+
+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."""
+ log.info(f"{ctx.author} bookmarked {target_message.jump_url} with title '{title}'")
+ embed = discord.Embed(
+ title=title,
+ colour=Colours.soft_green,
+ description=(
+ f"{target_message.content}\n\n"
+ 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=bookmark_icon_url)
+
+ 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:
+ 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")