1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
import logging
import random
import discord
from discord.ext import commands
from bot.constants import Colours, ERROR_REPLIES, Emojis, Icons
from bot.utils.converters import WrappedMessageConverter
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: WrappedMessageConverter,
*,
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))
|