From 7dd40ce0e52ede1cc9ef8195c46d9190768b2482 Mon Sep 17 00:00:00 2001 From: Benjamin Mintz Date: Tue, 2 Jul 2019 10:03:13 +0000 Subject: [PATCH] make the support command dynamically create invites to reduce raids --- cogs/meta.py | 26 +++++++++++++++++++++----- config.example.py | 7 +++++-- 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/cogs/meta.py b/cogs/meta.py index b338ef8..99e7d85 100644 --- a/cogs/meta.py +++ b/cogs/meta.py @@ -7,6 +7,10 @@ import discord from discord.ext import commands class Meta(commands.Cog): + # TODO does this need to be configurable? + INVITE_DURATION_SECONDS = 60 * 60 * 3 + MAX_INVITE_USES = 5 + def __init__(self, bot): self.bot = bot @@ -28,17 +32,29 @@ class Meta(commands.Cog): @commands.command() async def support(self, context): """Directs you to the support server.""" + ch = self.bot.get_channel(self.bot.config['support_server_invite_channel']) + if ch is None: + await context.send('This command is temporarily unavailable. Try again later?') + return + + invite = await ch.create_invite(max_age=self.INVITE_DURATION_SECONDS, max_uses=self.MAX_INVITE_USES) + try: - await context.author.send(self.bot.config['support_server_invite']) - with contextlib.suppress(discord.HTTPException): - await context.message.add_reaction('📬') # TODO make this emoji configurable too + await context.author.send(f'Official support server invite: {invite}') except discord.Forbidden: with contextlib.suppress(discord.HTTPException): await context.message.add_reaction(utils.SUCCESS_EMOJIS[True]) - await context.send('Unable to send invite in DMs. Please allow DMs from server members.') + with contextlib.suppress(discord.HTTPException): + await context.send('Unable to send invite in DMs. Please allow DMs from server members.') + else: + try: + await context.message.add_reaction('📬') + except discord.HTTPException: + with contextlib.suppress(discord.HTTPException): + await context.send('📬') def setup(bot): bot.add_cog(Meta(bot)) - if not bot.config.get('support_server_invite'): + if not bot.config.get('support_server_invite_channel'): bot.remove_command('support') diff --git a/config.example.py b/config.example.py index a1c2907..475901b 100644 --- a/config.example.py +++ b/config.example.py @@ -4,7 +4,10 @@ 'NOTE: Most commands will be unavailable until both you and the bot have the ' '"Manage Emojis" permission.', - 'support_server_invite': 'https://discord.gg/some-invite', + # a channel ID to invite people to when they request help with the bot + # the bot must have Create Instant Invite permissions for this channel + # if set to None, the support command will be disabled + 'support_server_invite_channel': None, 'cogs': ( 'cogs.emote', @@ -27,7 +30,7 @@ 'user_agent': 'EmoteManagerBot (https://github.com/bmintz/emote-manager-bot)', # emotes that the bot may use to respond to you - # If not provided, the bot will use ('❌', '✅') instead. + # If not provided, the bot will use '❌', '✅' instead. # # You can obtain these ones from the discordbots.org server under the name "tickNo" and "tickYes" # but I uploaded them to my test server