summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pindelegate/__init__.py5
-rw-r--r--pindelegate/pindelegate.py65
2 files changed, 70 insertions, 0 deletions
diff --git a/pindelegate/__init__.py b/pindelegate/__init__.py
new file mode 100644
index 0000000..dab4b9a
--- /dev/null
+++ b/pindelegate/__init__.py
@@ -0,0 +1,5 @@
+from .pindelegate import PinDelegate
+
+
+async def setup(bot):
+ await bot.add_cog(PinDelegate(bot))
diff --git a/pindelegate/pindelegate.py b/pindelegate/pindelegate.py
new file mode 100644
index 0000000..2b94bf4
--- /dev/null
+++ b/pindelegate/pindelegate.py
@@ -0,0 +1,65 @@
+import discord
+from redbot.core import Config
+from redbot.core import checks
+from redbot.core import commands
+
+
+class PinDelegate(commands.Cog):
+ def __init__(self, bot):
+ self.bot = bot
+ self.config = Config.get_conf(
+ self, identifier="551742410770612234|6772870d-1739-4ada-a2c5-1821b4f3a618"
+ )
+ self.config.register_channel(pin_capable_members={})
+
+ @commands.command()
+ @checks.admin_or_permissions(administrator=True)
+ async def pindelegate(self, ctx, user: discord.Member):
+ async with self.config.channel(
+ ctx.channel
+ ).pin_capable_members() as pin_capable_members:
+ pin_capable_members[user.id] = True
+ await ctx.reply(
+ f"User {user.name} ({user.id}) is now pin-capable in this channel."
+ )
+
+ @commands.command()
+ @checks.admin_or_permissions(administrator=True)
+ async def pinundelegate(self, ctx, user: discord.Member):
+ async with self.config.channel(
+ ctx.channel
+ ).pin_capable_members() as pin_capable_members:
+ try:
+ del pin_capable_members[str(user.id)]
+ except KeyError:
+ await ctx.reply(
+ f"User {user.name} ({user.id}) was already not pin-capable in this channel."
+ )
+ return
+ await ctx.reply(
+ f"User {user.name} ({user.id}) removed from pin-capable users in this channel."
+ )
+
+ async def is_pin_capable(self, channel, member_id):
+ try:
+ await self.config.channel(channel).pin_capable_members.get_raw(
+ str(member_id)
+ )
+ except KeyError:
+ return False
+ return True
+
+ @commands.command()
+ async def pin(self, ctx):
+ if await self.is_pin_capable(ctx.channel, ctx.author.id):
+ await ctx.message.reference.resolved.pin()
+
+ @commands.command()
+ async def unpin(self, ctx):
+ replied_to_message = ctx.message.reference.resolved
+ if await self.is_pin_capable(ctx.channel, ctx.author.id):
+ if replied_to_message.pinned:
+ await replied_to_message.unpin()
+ await ctx.reply("Unpinned message!")
+ else:
+ await ctx.reply("That message was already not pinned.")