From a87143cbf535d2f3685e45bbecc01afeade2d3a0 Mon Sep 17 00:00:00 2001 From: Slushs Date: Mon, 7 Jun 2021 14:06:45 -0400 Subject: nothing to see here --- bot/exts/help_channels/_cog.py | 60 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/bot/exts/help_channels/_cog.py b/bot/exts/help_channels/_cog.py index 5c410a0a1..0395418a3 100644 --- a/bot/exts/help_channels/_cog.py +++ b/bot/exts/help_channels/_cog.py @@ -469,6 +469,8 @@ class HelpChannels(commands.Cog): else: await _message.update_message_caches(message) + await self.notify_session_participants(message) + @commands.Cog.listener() async def on_message_delete(self, msg: discord.Message) -> None: """ @@ -535,3 +537,61 @@ class HelpChannels(commands.Cog): ) self.dynamic_message = new_dynamic_message["id"] await _caches.dynamic_message.set("message_id", self.dynamic_message) + + async def notify_session_participants(self, message: discord.Message) -> None: + if await _caches.claimants.get(message.channel.id) == message.author.id: + return # Ignore messages sent by claimants + + if not await _caches.help_dm.get(message.author.id): + return # Ignore message if user is opted out of help dms + + await self.notify_session_participants(message) + + session_participants = _caches.session_participants.get(message.channel.id) + + @commands.group(name="helpdm") + async def help_dm_group(self, ctx: commands.Context) -> None: + if ctx.invoked_subcommand is None: + await ctx.send_help(ctx.command) + + @help_dm_group.command(name="on") + async def on_command(self, ctx: commands.Context) -> None: + if await _caches.help_dm.get(ctx.author.id): + await ctx.send(f"{constants.Emojis.cross_mark}{ctx.author.mention} Help DMs are already ON!") + + log.trace(f"{ctx.author.id} Attempted to turn Help DMs on but they are already ON") + return + + await _caches.help_dm.set(ctx.author.id, True) + + await ctx.send(f"{constants.Emojis.ok_hand} {ctx.author.mention} Help DMs ON!") + + log.trace(f"{ctx.author.id} Help DMs OFF") + + @help_dm_group.command(name="off") + async def off_command(self, ctx: commands.Context) -> None: + if not await _caches.help_dm.get(ctx.author.id): + await ctx.send(f"{constants.Emojis.cross_mark} {ctx.author.mention} Help DMs are already OFF!") + + log.trace(f"{ctx.author.id} Attempted to turn Help DMs on but they are already OFF") + return + + await _caches.help_dm.set(ctx.author.id, False) + + await ctx.send(f"{constants.Emojis.ok_hand} {ctx.author.mention} Help DMs OFF!") + + log.trace(f"{ctx.author.id} Help DMs OFF") + + @help_dm_group.command() + async def embed_test(self, ctx): + user = self.bot.get_user(ctx.author.id) + + embed = discord.Embed( + title="Currently Helping", + description=f"You're currently helping in <#{ctx.channel.id}>", + color=discord.Colour.green(), + timestamp=ctx.message.created_at + ) + embed.add_field(name="Conversation", value=f"[Jump to message]({ctx.message.jump_url})") + await user.send(embed=embed) + -- cgit v1.2.3 From f18786813984e1fadffc34e886b36d8094bab526 Mon Sep 17 00:00:00 2001 From: GDWR Date: Mon, 7 Jun 2021 21:12:13 +0100 Subject: Add caches required for help-dm --- bot/exts/help_channels/_caches.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/bot/exts/help_channels/_caches.py b/bot/exts/help_channels/_caches.py index c5e4ee917..8d45c2466 100644 --- a/bot/exts/help_channels/_caches.py +++ b/bot/exts/help_channels/_caches.py @@ -24,3 +24,12 @@ question_messages = RedisCache(namespace="HelpChannels.question_messages") # This cache keeps track of the dynamic message ID for # the continuously updated message in the #How-to-get-help channel. dynamic_message = RedisCache(namespace="HelpChannels.dynamic_message") + +# This cache keeps track of who has help-dms on. +# RedisCache[discord.User.id, bool] +help_dm = RedisCache(namespace="HelpChannels.help_dm") + +# This cache tracks member who are participating and opted in to help channel dms. +# serialise the set as a comma separated string to allow usage with redis +# RedisCache[discord.TextChannel.id, str[set[discord.User.id]]] +session_participants = RedisCache(namespace="HelpChannels.session_participants") -- cgit v1.2.3 From 9dd194a2298244988ad7cf76f6147d65d420c9c7 Mon Sep 17 00:00:00 2001 From: GDWR Date: Mon, 7 Jun 2021 21:14:06 +0100 Subject: Add help dm feature --- bot/exts/help_channels/_cog.py | 39 +++++++++++++++++++++++++++++++++++---- 1 file changed, 35 insertions(+), 4 deletions(-) diff --git a/bot/exts/help_channels/_cog.py b/bot/exts/help_channels/_cog.py index 0395418a3..919115e95 100644 --- a/bot/exts/help_channels/_cog.py +++ b/bot/exts/help_channels/_cog.py @@ -424,6 +424,7 @@ class HelpChannels(commands.Cog): ) -> None: """Actual implementation of `unclaim_channel`. See that for full documentation.""" await _caches.claimants.delete(channel.id) + await _caches.session_participants.delete(channel.id) claimant = self.bot.get_guild(constants.Guild.id).get_member(claimant_id) if claimant is None: @@ -466,10 +467,13 @@ class HelpChannels(commands.Cog): if channel_utils.is_in_category(message.channel, constants.Categories.help_available): if not _channel.is_excluded_channel(message.channel): await self.claim_channel(message) + + elif channel_utils.is_in_category(message.channel, constants.Categories.help_in_use): + await self.notify_session_participants(message) + else: await _message.update_message_caches(message) - await self.notify_session_participants(message) @commands.Cog.listener() async def on_message_delete(self, msg: discord.Message) -> None: @@ -538,16 +542,43 @@ class HelpChannels(commands.Cog): self.dynamic_message = new_dynamic_message["id"] await _caches.dynamic_message.set("message_id", self.dynamic_message) + @staticmethod + def _serialise_session_participants(participants: set[int]) -> str: + """Convert a set to a comma separated string.""" + return ','.join(str(p) for p in participants) + + @staticmethod + def _deserialise_session_participants(s: str) -> set[int]: + """Convert a comma separated string into a set.""" + return set(int(user_id) for user_id in s.split(",") if user_id != "") + + @lock.lock_arg(NAMESPACE, "message", attrgetter("channel.id")) + @lock.lock_arg(NAMESPACE, "message", attrgetter("author.id")) async def notify_session_participants(self, message: discord.Message) -> None: + """ + Check if the message author meets the requirements to be notified. + If they meet the requirements they are notified. + """ if await _caches.claimants.get(message.channel.id) == message.author.id: return # Ignore messages sent by claimants if not await _caches.help_dm.get(message.author.id): return # Ignore message if user is opted out of help dms - await self.notify_session_participants(message) + if message.content == f"{self.bot.command_prefix}close": + return # Ignore messages that are closing the channel - session_participants = _caches.session_participants.get(message.channel.id) + session_participants = self._deserialise_session_participants( + await _caches.session_participants.get(message.channel.id) or "" + ) + + if not message.author.id in session_participants: + session_participants.add(message.author.id) + await message.author.send("Purple") + await _caches.session_participants.set( + message.channel.id, + self._serialise_session_participants(session_participants) + ) @commands.group(name="helpdm") async def help_dm_group(self, ctx: commands.Context) -> None: @@ -582,6 +613,7 @@ class HelpChannels(commands.Cog): log.trace(f"{ctx.author.id} Help DMs OFF") + # TODO: REMOVE BEFORE COMMIT @help_dm_group.command() async def embed_test(self, ctx): user = self.bot.get_user(ctx.author.id) @@ -594,4 +626,3 @@ class HelpChannels(commands.Cog): ) embed.add_field(name="Conversation", value=f"[Jump to message]({ctx.message.jump_url})") await user.send(embed=embed) - -- cgit v1.2.3 From 8dac3ec26caa819f83316169ac6911119e376356 Mon Sep 17 00:00:00 2001 From: Slushs Date: Mon, 7 Jun 2021 16:50:21 -0400 Subject: Add helpdm participating embed --- bot/exts/help_channels/_cog.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/bot/exts/help_channels/_cog.py b/bot/exts/help_channels/_cog.py index 919115e95..32e082949 100644 --- a/bot/exts/help_channels/_cog.py +++ b/bot/exts/help_channels/_cog.py @@ -574,7 +574,18 @@ class HelpChannels(commands.Cog): if not message.author.id in session_participants: session_participants.add(message.author.id) - await message.author.send("Purple") + + user = self.bot.get_user(message.author.id) + + embed = discord.Embed( + title="Currently Helping", + description=f"You're currently helping in <#{message.channel.id}>", + color=discord.Colour.green(), + timestamp=message.created_at + ) + embed.add_field(name="Conversation", value=f"[Jump to message]({message.message.jump_url})") + await user.send(embed=embed) + await _caches.session_participants.set( message.channel.id, self._serialise_session_participants(session_participants) -- cgit v1.2.3 From 2d5247e401bafca25a4f086e77ee7a8fffd2b5d8 Mon Sep 17 00:00:00 2001 From: Slushs Date: Mon, 7 Jun 2021 16:58:54 -0400 Subject: Remove embed test --- bot/exts/help_channels/_cog.py | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/bot/exts/help_channels/_cog.py b/bot/exts/help_channels/_cog.py index 32e082949..dccb39119 100644 --- a/bot/exts/help_channels/_cog.py +++ b/bot/exts/help_channels/_cog.py @@ -623,17 +623,3 @@ class HelpChannels(commands.Cog): await ctx.send(f"{constants.Emojis.ok_hand} {ctx.author.mention} Help DMs OFF!") log.trace(f"{ctx.author.id} Help DMs OFF") - - # TODO: REMOVE BEFORE COMMIT - @help_dm_group.command() - async def embed_test(self, ctx): - user = self.bot.get_user(ctx.author.id) - - embed = discord.Embed( - title="Currently Helping", - description=f"You're currently helping in <#{ctx.channel.id}>", - color=discord.Colour.green(), - timestamp=ctx.message.created_at - ) - embed.add_field(name="Conversation", value=f"[Jump to message]({ctx.message.jump_url})") - await user.send(embed=embed) -- cgit v1.2.3 From f05169e3a145c7d6bacab44b883c6e331ef96694 Mon Sep 17 00:00:00 2001 From: Slushs Date: Mon, 7 Jun 2021 17:15:43 -0400 Subject: Add docstring to commands --- bot/exts/help_channels/_cog.py | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/bot/exts/help_channels/_cog.py b/bot/exts/help_channels/_cog.py index dccb39119..7246a8bfc 100644 --- a/bot/exts/help_channels/_cog.py +++ b/bot/exts/help_channels/_cog.py @@ -417,10 +417,10 @@ class HelpChannels(commands.Cog): return await _unclaim_channel(channel, claimant_id, closed_on) async def _unclaim_channel( - self, - channel: discord.TextChannel, - claimant_id: int, - closed_on: _channel.ClosingReason + self, + channel: discord.TextChannel, + claimant_id: int, + closed_on: _channel.ClosingReason ) -> None: """Actual implementation of `unclaim_channel`. See that for full documentation.""" await _caches.claimants.delete(channel.id) @@ -474,7 +474,6 @@ class HelpChannels(commands.Cog): else: await _message.update_message_caches(message) - @commands.Cog.listener() async def on_message_delete(self, msg: discord.Message) -> None: """ @@ -593,11 +592,17 @@ class HelpChannels(commands.Cog): @commands.group(name="helpdm") async def help_dm_group(self, ctx: commands.Context) -> None: + """ + Users who are participating in the help channel(not the claimant) + will receive a dm showing what help channel they are "Helping in." + This will be ignored if the message content == close. + """ if ctx.invoked_subcommand is None: await ctx.send_help(ctx.command) @help_dm_group.command(name="on") async def on_command(self, ctx: commands.Context) -> None: + """Turns help dms on so the user will receive the participating dm""" if await _caches.help_dm.get(ctx.author.id): await ctx.send(f"{constants.Emojis.cross_mark}{ctx.author.mention} Help DMs are already ON!") @@ -612,6 +617,7 @@ class HelpChannels(commands.Cog): @help_dm_group.command(name="off") async def off_command(self, ctx: commands.Context) -> None: + """Turns help dms off so the user wont receive the participating dm""" if not await _caches.help_dm.get(ctx.author.id): await ctx.send(f"{constants.Emojis.cross_mark} {ctx.author.mention} Help DMs are already OFF!") -- cgit v1.2.3 From 849b0bf5746e505d88b6b75870b9e070e0ef286c Mon Sep 17 00:00:00 2001 From: Slushs Date: Mon, 7 Jun 2021 17:33:22 -0400 Subject: Fix failed linting --- bot/exts/help_channels/_cog.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/bot/exts/help_channels/_cog.py b/bot/exts/help_channels/_cog.py index 7246a8bfc..c92a7ae7e 100644 --- a/bot/exts/help_channels/_cog.py +++ b/bot/exts/help_channels/_cog.py @@ -556,6 +556,7 @@ class HelpChannels(commands.Cog): async def notify_session_participants(self, message: discord.Message) -> None: """ Check if the message author meets the requirements to be notified. + If they meet the requirements they are notified. """ if await _caches.claimants.get(message.channel.id) == message.author.id: @@ -571,7 +572,7 @@ class HelpChannels(commands.Cog): await _caches.session_participants.get(message.channel.id) or "" ) - if not message.author.id in session_participants: + if message.author.id not in session_participants: session_participants.add(message.author.id) user = self.bot.get_user(message.author.id) @@ -593,16 +594,17 @@ class HelpChannels(commands.Cog): @commands.group(name="helpdm") async def help_dm_group(self, ctx: commands.Context) -> None: """ - Users who are participating in the help channel(not the claimant) - will receive a dm showing what help channel they are "Helping in." - This will be ignored if the message content == close. + User will receive a embed when they are "helping" in a help channel. + + If they have helpdms off they will won't receive an embed. + If they have helpdms on they will receive an embed. """ if ctx.invoked_subcommand is None: await ctx.send_help(ctx.command) @help_dm_group.command(name="on") async def on_command(self, ctx: commands.Context) -> None: - """Turns help dms on so the user will receive the participating dm""" + """Turns help dms on so the user will receive the participating dm.""" if await _caches.help_dm.get(ctx.author.id): await ctx.send(f"{constants.Emojis.cross_mark}{ctx.author.mention} Help DMs are already ON!") @@ -617,7 +619,7 @@ class HelpChannels(commands.Cog): @help_dm_group.command(name="off") async def off_command(self, ctx: commands.Context) -> None: - """Turns help dms off so the user wont receive the participating dm""" + """Turns help dms off so the user wont receive the participating dm.""" if not await _caches.help_dm.get(ctx.author.id): await ctx.send(f"{constants.Emojis.cross_mark} {ctx.author.mention} Help DMs are already OFF!") -- cgit v1.2.3 From 016b5427614a892c82c40a95350162164c2bf48c Mon Sep 17 00:00:00 2001 From: Slushs Date: Mon, 7 Jun 2021 18:48:49 -0400 Subject: Remove useless else and if statement --- bot/exts/help_channels/_cog.py | 2 -- bot/exts/help_channels/_message.py | 27 ++++++++++++--------------- 2 files changed, 12 insertions(+), 17 deletions(-) diff --git a/bot/exts/help_channels/_cog.py b/bot/exts/help_channels/_cog.py index c92a7ae7e..d85d46b57 100644 --- a/bot/exts/help_channels/_cog.py +++ b/bot/exts/help_channels/_cog.py @@ -470,8 +470,6 @@ class HelpChannels(commands.Cog): elif channel_utils.is_in_category(message.channel, constants.Categories.help_in_use): await self.notify_session_participants(message) - - else: await _message.update_message_caches(message) @commands.Cog.listener() diff --git a/bot/exts/help_channels/_message.py b/bot/exts/help_channels/_message.py index afd698ffe..4c7c39764 100644 --- a/bot/exts/help_channels/_message.py +++ b/bot/exts/help_channels/_message.py @@ -9,7 +9,6 @@ from arrow import Arrow import bot from bot import constants from bot.exts.help_channels import _caches -from bot.utils.channel import is_in_category log = logging.getLogger(__name__) @@ -47,23 +46,21 @@ async def update_message_caches(message: discord.Message) -> None: """Checks the source of new content in a help channel and updates the appropriate cache.""" channel = message.channel - # Confirm the channel is an in use help channel - if is_in_category(channel, constants.Categories.help_in_use): - log.trace(f"Checking if #{channel} ({channel.id}) has had a reply.") + log.trace(f"Checking if #{channel} ({channel.id}) has had a reply.") - claimant_id = await _caches.claimants.get(channel.id) - if not claimant_id: - # The mapping for this channel doesn't exist, we can't do anything. - return + claimant_id = await _caches.claimants.get(channel.id) + if not claimant_id: + # The mapping for this channel doesn't exist, we can't do anything. + return - # datetime.timestamp() would assume it's local, despite d.py giving a (naïve) UTC time. - timestamp = Arrow.fromdatetime(message.created_at).timestamp() + # datetime.timestamp() would assume it's local, despite d.py giving a (naïve) UTC time. + timestamp = Arrow.fromdatetime(message.created_at).timestamp() - # Overwrite the appropriate last message cache depending on the author of the message - if message.author.id == claimant_id: - await _caches.claimant_last_message_times.set(channel.id, timestamp) - else: - await _caches.non_claimant_last_message_times.set(channel.id, timestamp) + # Overwrite the appropriate last message cache depending on the author of the message + if message.author.id == claimant_id: + await _caches.claimant_last_message_times.set(channel.id, timestamp) + else: + await _caches.non_claimant_last_message_times.set(channel.id, timestamp) async def get_last_message(channel: discord.TextChannel) -> t.Optional[discord.Message]: -- cgit v1.2.3 From 0799f24acab9c60d07d2485400fa7418d161b40c Mon Sep 17 00:00:00 2001 From: Jake <77035482+JakeM0001@users.noreply.github.com> Date: Tue, 8 Jun 2021 14:24:07 -0400 Subject: Change mention format Co-authored-by: ToxicKidz <78174417+ToxicKidz@users.noreply.github.com> --- bot/exts/help_channels/_cog.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bot/exts/help_channels/_cog.py b/bot/exts/help_channels/_cog.py index d85d46b57..595ae18fe 100644 --- a/bot/exts/help_channels/_cog.py +++ b/bot/exts/help_channels/_cog.py @@ -577,7 +577,7 @@ class HelpChannels(commands.Cog): embed = discord.Embed( title="Currently Helping", - description=f"You're currently helping in <#{message.channel.id}>", + description=f"You're currently helping in {message.channel.mention}", color=discord.Colour.green(), timestamp=message.created_at ) -- cgit v1.2.3 From cc0f9eadb86d354f653d71723af91f75f92d8a36 Mon Sep 17 00:00:00 2001 From: Slushs Date: Tue, 8 Jun 2021 15:04:38 -0400 Subject: Make toggle command one command instead of 2 --- bot/exts/help_channels/_cog.py | 52 ++++++++++++++++++++++-------------------- 1 file changed, 27 insertions(+), 25 deletions(-) diff --git a/bot/exts/help_channels/_cog.py b/bot/exts/help_channels/_cog.py index 595ae18fe..f78d4e306 100644 --- a/bot/exts/help_channels/_cog.py +++ b/bot/exts/help_channels/_cog.py @@ -12,6 +12,7 @@ from discord.ext import commands from bot import constants from bot.bot import Bot +from bot.converters import allowed_strings from bot.exts.help_channels import _caches, _channel, _message, _name, _stats from bot.utils import channel as channel_utils, lock, scheduling @@ -577,7 +578,7 @@ class HelpChannels(commands.Cog): embed = discord.Embed( title="Currently Helping", - description=f"You're currently helping in {message.channel.mention}", + description=f"You're currently helping in <#{message.channel.id}>", color=discord.Colour.green(), timestamp=message.created_at ) @@ -589,42 +590,43 @@ class HelpChannels(commands.Cog): self._serialise_session_participants(session_participants) ) - @commands.group(name="helpdm") - async def help_dm_group(self, ctx: commands.Context) -> None: + @commands.command(name="helpdm") + async def helpdm_command( + self, + ctx: commands.Context, + state: allowed_strings("on", "off") = None # noqa: F821 + ) -> None: """ - User will receive a embed when they are "helping" in a help channel. + Allows user to toggle "Helping" dms. - If they have helpdms off they will won't receive an embed. - If they have helpdms on they will receive an embed. + If this is set to off the user will not receive a dm for channel that they are participating in. + If this is set to on the user will receive a dm for the channel they are participating in. """ - if ctx.invoked_subcommand is None: - await ctx.send_help(ctx.command) + state_bool = state.lower() == "on" - @help_dm_group.command(name="on") - async def on_command(self, ctx: commands.Context) -> None: - """Turns help dms on so the user will receive the participating dm.""" - if await _caches.help_dm.get(ctx.author.id): - await ctx.send(f"{constants.Emojis.cross_mark}{ctx.author.mention} Help DMs are already ON!") + requested_state_bool = state.lower() == "on" + if requested_state_bool == await _caches.help_dm.get(ctx.author.id, False): + if await _caches.help_dm.get(ctx.author.id): + await ctx.send(f"{constants.Emojis.cross_mark}{ctx.author.mention} Help DMs are already ON!") - log.trace(f"{ctx.author.id} Attempted to turn Help DMs on but they are already ON") - return + log.trace(f"{ctx.author.id} Attempted to turn Help DMs on but they are already ON") + return - await _caches.help_dm.set(ctx.author.id, True) + if not await _caches.help_dm.get(ctx.author.id): + await ctx.send(f"{constants.Emojis.cross_mark}{ctx.author.mention} Help DMs are already OFF!") - await ctx.send(f"{constants.Emojis.ok_hand} {ctx.author.mention} Help DMs ON!") + log.trace(f"{ctx.author.id} Attempted to turn Help DMs on but they are already OFF") + return - log.trace(f"{ctx.author.id} Help DMs OFF") + if state_bool: + await _caches.help_dm.set(ctx.author.id, True) - @help_dm_group.command(name="off") - async def off_command(self, ctx: commands.Context) -> None: - """Turns help dms off so the user wont receive the participating dm.""" - if not await _caches.help_dm.get(ctx.author.id): - await ctx.send(f"{constants.Emojis.cross_mark} {ctx.author.mention} Help DMs are already OFF!") + await ctx.send(f"{constants.Emojis.ok_hand} {ctx.author.mention} Help DMs ON!") - log.trace(f"{ctx.author.id} Attempted to turn Help DMs on but they are already OFF") + log.trace(f"{ctx.author.id} Help DMs ON") return - await _caches.help_dm.set(ctx.author.id, False) + await _caches.help_dm.delete(ctx.author.id) await ctx.send(f"{constants.Emojis.ok_hand} {ctx.author.mention} Help DMs OFF!") -- cgit v1.2.3 From fd9ec20c97c899f352e1d6eaafabb4fe6ccb2b3f Mon Sep 17 00:00:00 2001 From: Slushs Date: Tue, 8 Jun 2021 15:10:59 -0400 Subject: Cleanup indentation and participant dm --- bot/exts/help_channels/_cog.py | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/bot/exts/help_channels/_cog.py b/bot/exts/help_channels/_cog.py index f78d4e306..71dfc2c78 100644 --- a/bot/exts/help_channels/_cog.py +++ b/bot/exts/help_channels/_cog.py @@ -418,10 +418,10 @@ class HelpChannels(commands.Cog): return await _unclaim_channel(channel, claimant_id, closed_on) async def _unclaim_channel( - self, - channel: discord.TextChannel, - claimant_id: int, - closed_on: _channel.ClosingReason + self, + channel: discord.TextChannel, + claimant_id: int, + closed_on: _channel.ClosingReason ) -> None: """Actual implementation of `unclaim_channel`. See that for full documentation.""" await _caches.claimants.delete(channel.id) @@ -574,16 +574,14 @@ class HelpChannels(commands.Cog): if message.author.id not in session_participants: session_participants.add(message.author.id) - user = self.bot.get_user(message.author.id) - embed = discord.Embed( title="Currently Helping", description=f"You're currently helping in <#{message.channel.id}>", color=discord.Colour.green(), timestamp=message.created_at ) - embed.add_field(name="Conversation", value=f"[Jump to message]({message.message.jump_url})") - await user.send(embed=embed) + embed.add_field(name="Conversation", value=f"[Jump to message]({message.jump_url})") + await message.author.send(embed=embed) await _caches.session_participants.set( message.channel.id, -- cgit v1.2.3 From 0dfaf215206de4e3e392b74805eafce028172fbd Mon Sep 17 00:00:00 2001 From: Slushs Date: Tue, 8 Jun 2021 16:19:11 -0400 Subject: Make helpdm command more concise --- bot/exts/help_channels/_cog.py | 37 ++++++++++--------------------------- 1 file changed, 10 insertions(+), 27 deletions(-) diff --git a/bot/exts/help_channels/_cog.py b/bot/exts/help_channels/_cog.py index 71dfc2c78..27cf10796 100644 --- a/bot/exts/help_channels/_cog.py +++ b/bot/exts/help_channels/_cog.py @@ -592,40 +592,23 @@ class HelpChannels(commands.Cog): async def helpdm_command( self, ctx: commands.Context, - state: allowed_strings("on", "off") = None # noqa: F821 + state: allowed_strings("on", "off") # noqa: F821 ) -> None: """ Allows user to toggle "Helping" dms. - If this is set to off the user will not receive a dm for channel that they are participating in. If this is set to on the user will receive a dm for the channel they are participating in. - """ - state_bool = state.lower() == "on" + If this is set to off the user will not receive a dm for channel that they are participating in. + """ requested_state_bool = state.lower() == "on" - if requested_state_bool == await _caches.help_dm.get(ctx.author.id, False): - if await _caches.help_dm.get(ctx.author.id): - await ctx.send(f"{constants.Emojis.cross_mark}{ctx.author.mention} Help DMs are already ON!") - - log.trace(f"{ctx.author.id} Attempted to turn Help DMs on but they are already ON") - return - - if not await _caches.help_dm.get(ctx.author.id): - await ctx.send(f"{constants.Emojis.cross_mark}{ctx.author.mention} Help DMs are already OFF!") - - log.trace(f"{ctx.author.id} Attempted to turn Help DMs on but they are already OFF") - return - - if state_bool: - await _caches.help_dm.set(ctx.author.id, True) - await ctx.send(f"{constants.Emojis.ok_hand} {ctx.author.mention} Help DMs ON!") - - log.trace(f"{ctx.author.id} Help DMs ON") + if requested_state_bool == await _caches.help_dm.get(ctx.author.id, False): + await ctx.send(f"{constants.Emojis.cross_mark} {ctx.author.mention} Help DMs are already {state.upper()}") return - await _caches.help_dm.delete(ctx.author.id) - - await ctx.send(f"{constants.Emojis.ok_hand} {ctx.author.mention} Help DMs OFF!") - - log.trace(f"{ctx.author.id} Help DMs OFF") + if requested_state_bool: + await _caches.help_dm.set(ctx.author.id, True) + else: + await _caches.help_dm.delete(ctx.author.id) + await ctx.send(f"{constants.Emojis.ok_hand} {ctx.author.mention} Help DMs {state.upper()}!") -- cgit v1.2.3 From f9d57b423d8baefab9514b67bbe96c98172efe0f Mon Sep 17 00:00:00 2001 From: Slushs Date: Tue, 8 Jun 2021 16:21:20 -0400 Subject: Fix reverted change --- bot/exts/help_channels/_cog.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bot/exts/help_channels/_cog.py b/bot/exts/help_channels/_cog.py index 27cf10796..8ceff624b 100644 --- a/bot/exts/help_channels/_cog.py +++ b/bot/exts/help_channels/_cog.py @@ -576,7 +576,7 @@ class HelpChannels(commands.Cog): embed = discord.Embed( title="Currently Helping", - description=f"You're currently helping in <#{message.channel.id}>", + description=f"You're currently helping in {message.channel.mention}", color=discord.Colour.green(), timestamp=message.created_at ) -- cgit v1.2.3 From 6b98aaf27b5e858f4ed4b632944b664d8e67b132 Mon Sep 17 00:00:00 2001 From: Slushs Date: Tue, 8 Jun 2021 20:21:33 -0400 Subject: Change discord.py colour to constants colour --- bot/exts/help_channels/_cog.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bot/exts/help_channels/_cog.py b/bot/exts/help_channels/_cog.py index 8ceff624b..99e530b66 100644 --- a/bot/exts/help_channels/_cog.py +++ b/bot/exts/help_channels/_cog.py @@ -577,7 +577,7 @@ class HelpChannels(commands.Cog): embed = discord.Embed( title="Currently Helping", description=f"You're currently helping in {message.channel.mention}", - color=discord.Colour.green(), + color=constants.Colours.soft_green, timestamp=message.created_at ) embed.add_field(name="Conversation", value=f"[Jump to message]({message.jump_url})") -- cgit v1.2.3 From 6d801a6500692302351af0e1af9d1519444bfc19 Mon Sep 17 00:00:00 2001 From: Slushs Date: Thu, 10 Jun 2021 10:21:40 -0400 Subject: Edit ignore close messages if statement --- bot/exts/help_channels/_cog.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bot/exts/help_channels/_cog.py b/bot/exts/help_channels/_cog.py index 99e530b66..dff5198a9 100644 --- a/bot/exts/help_channels/_cog.py +++ b/bot/exts/help_channels/_cog.py @@ -564,7 +564,7 @@ class HelpChannels(commands.Cog): if not await _caches.help_dm.get(message.author.id): return # Ignore message if user is opted out of help dms - if message.content == f"{self.bot.command_prefix}close": + if (await self.bot.get_context(message)).command == self.close_command: return # Ignore messages that are closing the channel session_participants = self._deserialise_session_participants( -- cgit v1.2.3 From c26a03a90a7d7d92fc07a1074965371d007428d8 Mon Sep 17 00:00:00 2001 From: Richard Si <63936253+ichard26@users.noreply.github.com> Date: Fri, 11 Jun 2021 18:03:16 -0400 Subject: Add black-formatter to reminders overrides Adds the black-formatter channel to the remind command overrides to allow usage of the command in the channel. This isn't the cleanest patch, ideally the whole OSS category would be whitelisted but the filter currently doesn't support categories. Co-authored-by: Hassan Abouelela --- bot/constants.py | 2 ++ config-default.yml | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/bot/constants.py b/bot/constants.py index ab55da482..3d960f22b 100644 --- a/bot/constants.py +++ b/bot/constants.py @@ -433,6 +433,8 @@ class Channels(metaclass=YAMLGetter): off_topic_1: int off_topic_2: int + black_formatter: int + bot_commands: int discord_py: int esoteric: int diff --git a/config-default.yml b/config-default.yml index 55388247c..48fd7c47e 100644 --- a/config-default.yml +++ b/config-default.yml @@ -176,6 +176,9 @@ guild: user_log: 528976905546760203 voice_log: 640292421988646961 + # Open Source Projects + black_formatter: &BLACK_FORMATTER 846434317021741086 + # Off-topic off_topic_0: 291284109232308226 off_topic_1: 463035241142026251 @@ -244,6 +247,7 @@ guild: reminder_whitelist: - *BOT_CMD - *DEV_CONTRIB + - *BLACK_FORMATTER roles: announcements: 463658397560995840 -- cgit v1.2.3 From 0b726398d2135ab414374412fa85f791569e3640 Mon Sep 17 00:00:00 2001 From: Numerlor <25886452+Numerlor@users.noreply.github.com> Date: Sat, 12 Jun 2021 16:07:24 +0200 Subject: Add an optional loop kwarg to scheduling.create_task Before this change, the create_task util couldn't be used to schedule tasks from the init of cogs, as it relied on asyncio.create_task that uses the currently running loop to create the task. The loop kwarg allows the caller to pass the loop itself if there's no running loop yet. --- bot/utils/scheduling.py | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/bot/utils/scheduling.py b/bot/utils/scheduling.py index 2dc485f24..b99874508 100644 --- a/bot/utils/scheduling.py +++ b/bot/utils/scheduling.py @@ -161,9 +161,21 @@ class Scheduler: self._log.error(f"Error in task #{task_id} {id(done_task)}!", exc_info=exception) -def create_task(coro: t.Awaitable, *suppressed_exceptions: t.Type[Exception], **kwargs) -> asyncio.Task: - """Wrapper for `asyncio.create_task` which logs exceptions raised in the task.""" - task = asyncio.create_task(coro, **kwargs) +def create_task( + coro: t.Awaitable, + *suppressed_exceptions: t.Type[Exception], + event_loop: asyncio.AbstractEventLoop = None, + **kwargs +) -> asyncio.Task: + """ + Wrapper for creating asyncio `Task`s which logs exceptions raised in the task. + + If the loop kwarg is provided, the task is created from that event loop, otherwise the running loop is used. + """ + if event_loop is not None: + task = event_loop.create_task(coro, **kwargs) + else: + task = asyncio.create_task(coro, **kwargs) task.add_done_callback(partial(_log_task_exception, suppressed_exceptions=suppressed_exceptions)) return task -- cgit v1.2.3 From 6e775d01174dc359929b93951fa8d6e7067563e3 Mon Sep 17 00:00:00 2001 From: Numerlor <25886452+Numerlor@users.noreply.github.com> Date: Sat, 12 Jun 2021 18:49:20 +0200 Subject: Add Optional typehint to parameter The indentation was also dedented one level and a trailing comma added to be consistent over the project Co-authored-by: ToxicKidz --- bot/utils/scheduling.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/bot/utils/scheduling.py b/bot/utils/scheduling.py index b99874508..d3704b7d1 100644 --- a/bot/utils/scheduling.py +++ b/bot/utils/scheduling.py @@ -162,10 +162,10 @@ class Scheduler: def create_task( - coro: t.Awaitable, - *suppressed_exceptions: t.Type[Exception], - event_loop: asyncio.AbstractEventLoop = None, - **kwargs + coro: t.Awaitable, + *suppressed_exceptions: t.Type[Exception], + event_loop: t.Optional[asyncio.AbstractEventLoop] = None, + **kwargs, ) -> asyncio.Task: """ Wrapper for creating asyncio `Task`s which logs exceptions raised in the task. -- cgit v1.2.3 From c2122316e5a34a2b9776e5e965a9434e748ab601 Mon Sep 17 00:00:00 2001 From: Numerlor <25886452+Numerlor@users.noreply.github.com> Date: Sat, 12 Jun 2021 19:01:32 +0200 Subject: Move the suppressed_exceptions argument to an optional kwarg Forcing it to be passed as a kwarg makes it clearer what the exceptions are for from the caller's side. --- bot/utils/messages.py | 2 +- bot/utils/scheduling.py | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/bot/utils/messages.py b/bot/utils/messages.py index b6f6c1f66..d4a921161 100644 --- a/bot/utils/messages.py +++ b/bot/utils/messages.py @@ -54,7 +54,7 @@ def reaction_check( log.trace(f"Removing reaction {reaction} by {user} on {reaction.message.id}: disallowed user.") scheduling.create_task( reaction.message.remove_reaction(reaction.emoji, user), - HTTPException, # Suppress the HTTPException if adding the reaction fails + suppressed_exceptions=(HTTPException,), name=f"remove_reaction-{reaction}-{reaction.message.id}-{user}" ) return False diff --git a/bot/utils/scheduling.py b/bot/utils/scheduling.py index d3704b7d1..bb83b5c0d 100644 --- a/bot/utils/scheduling.py +++ b/bot/utils/scheduling.py @@ -163,7 +163,8 @@ class Scheduler: def create_task( coro: t.Awaitable, - *suppressed_exceptions: t.Type[Exception], + *, + suppressed_exceptions: tuple[t.Type[Exception]] = (), event_loop: t.Optional[asyncio.AbstractEventLoop] = None, **kwargs, ) -> asyncio.Task: -- cgit v1.2.3 From 63682ce11a9fca7903ac78ca50adfc7f99fb220a Mon Sep 17 00:00:00 2001 From: Slushs Date: Sat, 12 Jun 2021 13:06:47 -0400 Subject: Add bool converter to allow a variety of inputs --- bot/exts/help_channels/_cog.py | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/bot/exts/help_channels/_cog.py b/bot/exts/help_channels/_cog.py index dff5198a9..9352689ab 100644 --- a/bot/exts/help_channels/_cog.py +++ b/bot/exts/help_channels/_cog.py @@ -12,7 +12,6 @@ from discord.ext import commands from bot import constants from bot.bot import Bot -from bot.converters import allowed_strings from bot.exts.help_channels import _caches, _channel, _message, _name, _stats from bot.utils import channel as channel_utils, lock, scheduling @@ -418,10 +417,10 @@ class HelpChannels(commands.Cog): return await _unclaim_channel(channel, claimant_id, closed_on) async def _unclaim_channel( - self, - channel: discord.TextChannel, - claimant_id: int, - closed_on: _channel.ClosingReason + self, + channel: discord.TextChannel, + claimant_id: int, + closed_on: _channel.ClosingReason ) -> None: """Actual implementation of `unclaim_channel`. See that for full documentation.""" await _caches.claimants.delete(channel.id) @@ -592,7 +591,7 @@ class HelpChannels(commands.Cog): async def helpdm_command( self, ctx: commands.Context, - state: allowed_strings("on", "off") # noqa: F821 + state_bool: bool ) -> None: """ Allows user to toggle "Helping" dms. @@ -601,14 +600,14 @@ class HelpChannels(commands.Cog): If this is set to off the user will not receive a dm for channel that they are participating in. """ - requested_state_bool = state.lower() == "on" + state_str = "ON" if state_bool else "OFF" - if requested_state_bool == await _caches.help_dm.get(ctx.author.id, False): - await ctx.send(f"{constants.Emojis.cross_mark} {ctx.author.mention} Help DMs are already {state.upper()}") + if state_bool == await _caches.help_dm.get(ctx.author.id, False): + await ctx.send(f"{constants.Emojis.cross_mark} {ctx.author.mention} Help DMs are already {state_str}") return - if requested_state_bool: + if state_bool: await _caches.help_dm.set(ctx.author.id, True) else: await _caches.help_dm.delete(ctx.author.id) - await ctx.send(f"{constants.Emojis.ok_hand} {ctx.author.mention} Help DMs {state.upper()}!") + await ctx.send(f"{constants.Emojis.ok_hand} {ctx.author.mention} Help DMs {state_str}!") -- cgit v1.2.3 From 4b73cc28d4d2048580e5b90dd8044c46a1e04979 Mon Sep 17 00:00:00 2001 From: Slushs Date: Sat, 12 Jun 2021 13:38:27 -0400 Subject: Add bool converter to allow a variety of inputs --- bot/exts/help_channels/_cog.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/bot/exts/help_channels/_cog.py b/bot/exts/help_channels/_cog.py index 9352689ab..b8296fa76 100644 --- a/bot/exts/help_channels/_cog.py +++ b/bot/exts/help_channels/_cog.py @@ -417,10 +417,10 @@ class HelpChannels(commands.Cog): return await _unclaim_channel(channel, claimant_id, closed_on) async def _unclaim_channel( - self, - channel: discord.TextChannel, - claimant_id: int, - closed_on: _channel.ClosingReason + self, + channel: discord.TextChannel, + claimant_id: int, + closed_on: _channel.ClosingReason ) -> None: """Actual implementation of `unclaim_channel`. See that for full documentation.""" await _caches.claimants.delete(channel.id) -- cgit v1.2.3 From a2ecf1c3e78a8c0c6803c8e85ee5691b5847bfa2 Mon Sep 17 00:00:00 2001 From: Jake <77035482+JakeM0001@users.noreply.github.com> Date: Sat, 12 Jun 2021 16:11:35 -0400 Subject: Edit indentation Co-authored-by: ToxicKidz <78174417+ToxicKidz@users.noreply.github.com> --- bot/exts/help_channels/_cog.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bot/exts/help_channels/_cog.py b/bot/exts/help_channels/_cog.py index b8296fa76..7fb72d7ef 100644 --- a/bot/exts/help_channels/_cog.py +++ b/bot/exts/help_channels/_cog.py @@ -589,9 +589,9 @@ class HelpChannels(commands.Cog): @commands.command(name="helpdm") async def helpdm_command( - self, - ctx: commands.Context, - state_bool: bool + self, + ctx: commands.Context, + state_bool: bool ) -> None: """ Allows user to toggle "Helping" dms. -- cgit v1.2.3