Implement unpin command

This commit is contained in:
roblabla 2019-03-03 14:51:23 +01:00
parent 1fe7e21986
commit 4deb40b67c

View file

@ -1,4 +1,5 @@
import config import config
from discord.ext import commands
from discord.ext.commands import Cog from discord.ext.commands import Cog
from discord.enums import MessageType from discord.enums import MessageType
from discord import Embed from discord import Embed
@ -15,11 +16,14 @@ class Pin(Cog):
def __init__(self, bot): def __init__(self, bot):
self.bot = bot self.bot = bot
def is_pinboard(self, msg):
return msg.author == self.bot.user and len(msg.embeds) > 0 and msg.embeds[0].title == "Pinboard"
async def get_pinboard(self, gh, channel): async def get_pinboard(self, gh, channel):
# Find pinboard pin # Find pinboard pin
pinboard_msg = None pinboard_msg = None
for msg in reversed(await channel.pins()): for msg in reversed(await channel.pins()):
if msg.author == self.bot.user and len(msg.embeds) > 0 and msg.embeds[0].title == "Pinboard": if self.is_pinboard(msg):
# Found pinboard, return content and gist id # Found pinboard, return content and gist id
id = msg.embeds[0].url.split("/")[-1] id = msg.embeds[0].url.split("/")[-1]
data = await gh.getitem(f"/gists/{id}") data = await gh.getitem(f"/gists/{id}")
@ -43,6 +47,26 @@ class Pin(Cog):
await gh.patch(f"/gists/{id}", data={"files": {"pinboard.md": {"content": content}}}) await gh.patch(f"/gists/{id}", data={"files": {"pinboard.md": {"content": content}}})
@commands.command()
@commands.guild_only()
@commands.check(check_if_collaborator)
@commands.check(check_if_pin_channel)
async def unpin(self, ctx, idx: int):
"""Unpins a pinned message."""
if idx <= 50:
# Get message by pin idx
target_msg = (await ctx.message.channel.pins())[idx]
else:
# Get message by ID
target_msg = await ctx.message.channel.get_message(idx)
if self.is_pinboard(target_msg):
await ctx.send("Cannot unpin pinboard!")
else:
await target_msg.unpin()
await target_msg.remove_reaction("📌", self.bot.user)
await ctx.send(f"Unpinned {target_msg.jump_url}")
# TODO: Remove from pinboard?
# Use raw_reaction to allow pinning old messages. # Use raw_reaction to allow pinning old messages.
@Cog.listener() @Cog.listener()
async def on_raw_reaction_add(self, payload): async def on_raw_reaction_add(self, payload):