From 564a96b68d4c483315280c0da50e22ae8fcf44ba Mon Sep 17 00:00:00 2001 From: brandons209 Date: Mon, 23 Sep 2019 02:35:10 -0400 Subject: [PATCH] added seperate channels for leave and ban events --- cogs_to_port.txt | 1 + welcome/welcome.py | 70 ++++++++++++++++++++++++++++++++++++++++------ 2 files changed, 62 insertions(+), 9 deletions(-) diff --git a/cogs_to_port.txt b/cogs_to_port.txt index 421da82..f52a41b 100644 --- a/cogs_to_port.txt +++ b/cogs_to_port.txt @@ -51,3 +51,4 @@ turn cah pupper pingtime +quotetools diff --git a/welcome/welcome.py b/welcome/welcome.py index 01145c2..c102019 100644 --- a/welcome/welcome.py +++ b/welcome/welcome.py @@ -33,6 +33,8 @@ class Welcome(getattr(commands, "Cog", object)): guild_defaults = { 'enabled': False, 'channel': None, + 'leave_channel': None, + 'ban_channel': None, 'date': None, 'join': { 'enabled': True, @@ -83,7 +85,9 @@ class Welcome(getattr(commands, "Cog", object)): guild = ctx.guild c = await self.config.guild(guild).all() - channel = await self.__get_channel(ctx.guild) + channel = await self.__get_channel(ctx.guild, "join") + leave_channel = await self.__get_channel(ctx.guild, "leave") + ban_channel = await self.__get_channel(ctx.guild, "ban") j = c['join'] jw = j['whisper'] @@ -96,7 +100,9 @@ class Welcome(getattr(commands, "Cog", object)): emb.add_field(name="General", value=( "**Enabled:** {}\n" "**Channel:** #{}\n" - ).format(c['enabled'], channel)) + "**Leave Channel:** #{}\n" + "**Ban/Unban Channel:** #{}\n" + ).format(c['enabled'], channel, leave_channel, ban_channel)) emb.add_field(name="Join", value=( "**Enabled:** {}\n" "**Delete previous:** {}\n" @@ -194,6 +200,44 @@ class Welcome(getattr(commands, "Cog", object)): "").format(channel) ) + @welcomeset.command(name='leave-channel') + async def welcomeset_leave_channel(self, ctx: commands.Context, channel: discord.TextChannel): + """Sets the channel to be used for leave_channel event notices.""" + + if not self.__can_speak_in(channel): + await ctx.send( + ("I do not have permission to send messages in {0.mention}. Check your permission settings and try again." + "").format(channel) + ) + return + + guild = ctx.guild + await self.config.guild(guild).leave_channel.set(channel.id) + + await ctx.send( + ("I will now send leave event notices to {0.mention}." + "").format(channel) + ) + + @welcomeset.command(name='channel') + async def welcomeset_channel(self, ctx: commands.Context, channel: discord.TextChannel): + """Sets the channel to be used for event notices.""" + + if not self.__can_speak_in(channel): + await ctx.send( + ("I do not have permission to send messages in {0.mention}. Check your permission settings and try again." + "").format(channel) + ) + return + + guild = ctx.guild + await self.config.guild(guild).ban_channel.set(channel.id) + + await ctx.send( + ("I will now send ban/unban event notices to {0.mention}." + "").format(channel) + ) + @welcomeset.group(name='join') async def welcomeset_join(self, ctx: commands.Context): """Change settings for join notices.""" @@ -237,7 +281,7 @@ class Welcome(getattr(commands, "Cog", object)): guild = ctx.guild whisper_type = choice.value - channel = await self.__get_channel(ctx.guild) + channel = await self.__get_channel(ctx.guild, "join") await self.config.guild(guild).join.whisper.state.set(whisper_type) @@ -673,7 +717,7 @@ class Welcome(getattr(commands, "Cog", object)): if settings['delete'] and settings['last'] is not None: # we need to delete the previous message - await self.__delete_message(guild, settings['last']) + await self.__delete_message(guild, settings['last'], event) # regardless of success, remove reference to that message await guild_settings.get_attr(event).last.set(None) @@ -682,7 +726,7 @@ class Welcome(getattr(commands, "Cog", object)): # store it for (possible) deletion later await guild_settings.get_attr(event).last.set(new_message and new_message.id) - async def __get_channel(self, guild: discord.Guild) -> discord.TextChannel: + async def __get_channel(self, guild: discord.Guild, event: str) -> discord.TextChannel: """Gets the best text channel to use for event notices. Order of priority: @@ -693,7 +737,15 @@ class Welcome(getattr(commands, "Cog", object)): channel = None - channel_id = await self.config.guild(guild).channel() + if event == 'join': + channel_id = await self.config.guild(guild).channel() + elif event == 'leave': + channel_id = await self.config.guild(guild).leave_channel() + elif event == 'ban' or event == 'unban': + channel_id = await self.config.guild(guild).ban_channel() + else: + raise TypeError("Wrong event type in __get_channel.") + if channel_id is not None: channel = guild.get_channel(channel_id) @@ -733,11 +785,11 @@ class Welcome(getattr(commands, "Cog", object)): else: return int(msg.content) - async def __delete_message(self, guild: discord.Guild, message_id: int): + async def __delete_message(self, guild: discord.Guild, message_id: int, event: str): """Attempts to delete the message with the given ID.""" try: - await (await (await self.__get_channel(guild)).fetch_message(message_id)).delete() + await (await (await self.__get_channel(guild, event)).fetch_message(message_id)).delete() except discord.NotFound: log.warning( ("Failed to delete message (ID {}): not found" @@ -765,7 +817,7 @@ class Welcome(getattr(commands, "Cog", object)): if count and count != 1: plural = 's' - channel = await self.__get_channel(guild) + channel = await self.__get_channel(guild, event) try: return await channel.send(