From 23af034e656a82d0d6fe6268a5c41d010cbfaf4c Mon Sep 17 00:00:00 2001 From: Derek Date: Sun, 6 Jan 2019 19:08:34 -0500 Subject: Add free command --- bot/__main__.py | 1 + bot/cogs/free.py | 90 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 91 insertions(+) create mode 100644 bot/cogs/free.py diff --git a/bot/__main__.py b/bot/__main__.py index 3c40a3243..581fa5c8e 100644 --- a/bot/__main__.py +++ b/bot/__main__.py @@ -75,6 +75,7 @@ bot.load_extension("bot.cogs.tags") bot.load_extension("bot.cogs.token_remover") bot.load_extension("bot.cogs.utils") bot.load_extension("bot.cogs.wolfram") +bot.load_extension("bot.cogs.free") if has_rmq: bot.load_extension("bot.cogs.rmq") diff --git a/bot/cogs/free.py b/bot/cogs/free.py new file mode 100644 index 000000000..e50058106 --- /dev/null +++ b/bot/cogs/free.py @@ -0,0 +1,90 @@ +import logging +from datetime import datetime + +from discord import Colour, Embed, Member, utils +from discord.ext.commands import BucketType, Context, command, cooldown + + +log = logging.getLogger(__name__) + + +class Free: + """Tries to figure out which help channels are free.""" + + PYTHON_HELP_ID = 356013061213126657 + TIME_INACTIVE = 300 + + @command(name="free", aliases=('f',)) + @cooldown(1, 60.0, BucketType.channel) + async def free(self, ctx: Context, user: Member = None, seek: int = 2): + """ + Lists free help channels by likeliness of availability. + :param user: accepts user mention, ID, etc. + :param seek: How far back to check the last active message. + + seek is used only when this command is invoked in a help channel. + + When seek is 2, we are avoiding considering the last active message + in a channel to be the one that invoked this command. + + When seek is 3 or more, a user has been mentioned on the assumption + that they asked if the channel is free or they asked their question + in an active channel, and we want the message before that happened. + """ + free_channels = [] + python_help = utils.get(ctx.guild.categories, id=self.PYTHON_HELP_ID) + + if user is not None and seek == 2: + seek = 3 + elif seek > 10: + seek = 3 + + for channel in python_help.channels: + if channel.id == ctx.channel.id: + messages = await channel.history(limit=seek).flatten() + msg = messages[seek-1] + else: + messages = await channel.history(limit=1).flatten() + msg = messages[0] + + inactive = (datetime.utcnow() - msg.created_at).seconds + if inactive > self.TIME_INACTIVE: + free_channels.append((inactive, channel.id)) + + embed = Embed() + embed.colour = Colour.gold() + embed.title = "**Looking for a free help channel?**" + + if user is not None: + embed.description = f"**Hey <@{user.id}>!**\n\n" + else: + embed.description = "" + + if free_channels: + embed.description += "**The following channel{0} look{1} free:**\n\n**".format( + 's' if len(free_channels) > 1 else '', + '' if len(free_channels) > 1 else 's') + + for i, channel in enumerate(sorted(free_channels, reverse=True), 1): + inactive, ID = channel + minutes, seconds = divmod(inactive, 60) + if minutes > 60: + hours, minutes = divmod(minutes, 60) + embed.description += f'{i}. <#{ID}> inactive for {hours}h{minutes}m{seconds}s\n\n' + else: + embed.description += f'{i}. <#{ID}> inactive for {minutes}m{seconds}s\n\n' + + embed.description += ("**\nThese channels aren't guaranteed to be free, " + "so use your best judgement and check for yourself.") + else: + embed.description = ("**Doesn't look like any channels are available to me. " + "You're welcome to check for yourself to be sure. " + "If all channels are truly busy, please be patient " + "as one will likely be available soon.**") + + return await ctx.send(embed=embed) + + +def setup(bot): + bot.add_cog(Free()) + log.info("Cog loaded: Free") -- cgit v1.2.3 From ebad04f068598ddce567c2f855172206d0bb4e21 Mon Sep 17 00:00:00 2001 From: Derek Date: Sun, 6 Jan 2019 19:16:15 -0500 Subject: Change single quotes to double quotes for the sake of consistency --- bot/cogs/free.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bot/cogs/free.py b/bot/cogs/free.py index e50058106..73946dec1 100644 --- a/bot/cogs/free.py +++ b/bot/cogs/free.py @@ -70,9 +70,9 @@ class Free: minutes, seconds = divmod(inactive, 60) if minutes > 60: hours, minutes = divmod(minutes, 60) - embed.description += f'{i}. <#{ID}> inactive for {hours}h{minutes}m{seconds}s\n\n' + embed.description += f"{i}. <#{ID}> inactive for {hours}h{minutes}m{seconds}s\n\n" else: - embed.description += f'{i}. <#{ID}> inactive for {minutes}m{seconds}s\n\n' + embed.description += f"{i}. <#{ID}> inactive for {minutes}m{seconds}s\n\n" embed.description += ("**\nThese channels aren't guaranteed to be free, " "so use your best judgement and check for yourself.") -- cgit v1.2.3 From f0f37e657c6ec3c28fcfbdcd1dfbfb7e8d0729f1 Mon Sep 17 00:00:00 2001 From: Derek Date: Sun, 6 Jan 2019 19:48:58 -0500 Subject: Update constraint on seek so it can't be less than 1 --- bot/cogs/free.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bot/cogs/free.py b/bot/cogs/free.py index 73946dec1..697e15f4b 100644 --- a/bot/cogs/free.py +++ b/bot/cogs/free.py @@ -36,7 +36,7 @@ class Free: if user is not None and seek == 2: seek = 3 - elif seek > 10: + elif not 0 < seek < 10: seek = 3 for channel in python_help.channels: -- cgit v1.2.3 From 4a78dabeec56a07c4e48ce40bb6fdf09b32110b3 Mon Sep 17 00:00:00 2001 From: Derek Date: Mon, 7 Jan 2019 03:28:45 -0500 Subject: Remove unnecessary return statement --- bot/cogs/free.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bot/cogs/free.py b/bot/cogs/free.py index 697e15f4b..00e5fb8bb 100644 --- a/bot/cogs/free.py +++ b/bot/cogs/free.py @@ -82,7 +82,7 @@ class Free: "If all channels are truly busy, please be patient " "as one will likely be available soon.**") - return await ctx.send(embed=embed) + await ctx.send(embed=embed) def setup(bot): -- cgit v1.2.3 From 72150b77659dd130ff80e3797179e75943f5c4a2 Mon Sep 17 00:00:00 2001 From: Derek Date: Mon, 7 Jan 2019 20:02:35 -0500 Subject: Add category constant --- bot/cogs/free.py | 4 +++- bot/constants.py | 7 +++++++ config-default.yml | 3 +++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/bot/cogs/free.py b/bot/cogs/free.py index 00e5fb8bb..4566ade5f 100644 --- a/bot/cogs/free.py +++ b/bot/cogs/free.py @@ -4,6 +4,8 @@ from datetime import datetime from discord import Colour, Embed, Member, utils from discord.ext.commands import BucketType, Context, command, cooldown +from bot.constants import Categories + log = logging.getLogger(__name__) @@ -11,7 +13,7 @@ log = logging.getLogger(__name__) class Free: """Tries to figure out which help channels are free.""" - PYTHON_HELP_ID = 356013061213126657 + PYTHON_HELP_ID = Categories.python_help TIME_INACTIVE = 300 @command(name="free", aliases=('f',)) diff --git a/bot/constants.py b/bot/constants.py index bbe6c1604..aae9b05e5 100644 --- a/bot/constants.py +++ b/bot/constants.py @@ -315,6 +315,13 @@ class CleanMessages(metaclass=YAMLGetter): message_limit: int +class Categories(metaclass=YAMLGetter): + section = "guild" + subsection = "categories" + + python_help: int + + class Channels(metaclass=YAMLGetter): section = "guild" subsection = "channels" diff --git a/config-default.yml b/config-default.yml index ad87e44ac..7e2a22cc9 100644 --- a/config-default.yml +++ b/config-default.yml @@ -85,6 +85,9 @@ style: guild: id: 267624335836053506 + categories: + python_help: 356013061213126657 + channels: admins: &ADMINS 365960823622991872 announcements: 354619224620138496 -- cgit v1.2.3 From 5e794a0a7ab732ff2ac2ba37473ecd87413603d4 Mon Sep 17 00:00:00 2001 From: Derek Date: Mon, 7 Jan 2019 20:12:16 -0500 Subject: Update method for mentioning users and channels to be more idiomatic --- bot/cogs/free.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/bot/cogs/free.py b/bot/cogs/free.py index 4566ade5f..71ee18032 100644 --- a/bot/cogs/free.py +++ b/bot/cogs/free.py @@ -51,14 +51,14 @@ class Free: inactive = (datetime.utcnow() - msg.created_at).seconds if inactive > self.TIME_INACTIVE: - free_channels.append((inactive, channel.id)) + free_channels.append((inactive, channel)) embed = Embed() embed.colour = Colour.gold() embed.title = "**Looking for a free help channel?**" if user is not None: - embed.description = f"**Hey <@{user.id}>!**\n\n" + embed.description = f"**Hey {user.mention}!**\n\n" else: embed.description = "" @@ -67,14 +67,13 @@ class Free: 's' if len(free_channels) > 1 else '', '' if len(free_channels) > 1 else 's') - for i, channel in enumerate(sorted(free_channels, reverse=True), 1): - inactive, ID = channel + for i, (inactive, channel) in enumerate(sorted(free_channels, reverse=True), 1): minutes, seconds = divmod(inactive, 60) if minutes > 60: hours, minutes = divmod(minutes, 60) - embed.description += f"{i}. <#{ID}> inactive for {hours}h{minutes}m{seconds}s\n\n" + embed.description += f"{i}. {channel.mention} inactive for {hours}h{minutes}m{seconds}s\n\n" else: - embed.description += f"{i}. <#{ID}> inactive for {minutes}m{seconds}s\n\n" + embed.description += f"{i}. {channel.mention} inactive for {minutes}m{seconds}s\n\n" embed.description += ("**\nThese channels aren't guaranteed to be free, " "so use your best judgement and check for yourself.") -- cgit v1.2.3 From ffbfd4b3467af2becb62f7b7639678136c1b4c1a Mon Sep 17 00:00:00 2001 From: Derek Date: Mon, 7 Jan 2019 20:15:07 -0500 Subject: Fix off by one --- bot/cogs/free.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bot/cogs/free.py b/bot/cogs/free.py index 71ee18032..90caad7ae 100644 --- a/bot/cogs/free.py +++ b/bot/cogs/free.py @@ -69,7 +69,7 @@ class Free: for i, (inactive, channel) in enumerate(sorted(free_channels, reverse=True), 1): minutes, seconds = divmod(inactive, 60) - if minutes > 60: + if minutes > 59: hours, minutes = divmod(minutes, 60) embed.description += f"{i}. {channel.mention} inactive for {hours}h{minutes}m{seconds}s\n\n" else: -- cgit v1.2.3 From 3b3f8794cca30b152a7747e3ae7e061328a38ba6 Mon Sep 17 00:00:00 2001 From: Derek Date: Mon, 7 Jan 2019 20:30:30 -0500 Subject: Update method of obtaining last message to be simpler --- bot/cogs/free.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/bot/cogs/free.py b/bot/cogs/free.py index 90caad7ae..cd04275e2 100644 --- a/bot/cogs/free.py +++ b/bot/cogs/free.py @@ -46,8 +46,7 @@ class Free: messages = await channel.history(limit=seek).flatten() msg = messages[seek-1] else: - messages = await channel.history(limit=1).flatten() - msg = messages[0] + msg = await channel.history(limit=1).next() inactive = (datetime.utcnow() - msg.created_at).seconds if inactive > self.TIME_INACTIVE: -- cgit v1.2.3 From 01a069c26fa2f45e2ad20ab9fc4c612a503b4d73 Mon Sep 17 00:00:00 2001 From: Derek Date: Tue, 8 Jan 2019 16:45:22 -0500 Subject: Add linter exception --- bot/cogs/free.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bot/cogs/free.py b/bot/cogs/free.py index cd04275e2..076415ded 100644 --- a/bot/cogs/free.py +++ b/bot/cogs/free.py @@ -46,7 +46,7 @@ class Free: messages = await channel.history(limit=seek).flatten() msg = messages[seek-1] else: - msg = await channel.history(limit=1).next() + msg = await channel.history(limit=1).next() # noqa (False positive) inactive = (datetime.utcnow() - msg.created_at).seconds if inactive > self.TIME_INACTIVE: -- cgit v1.2.3 From 3a209226e76b2ef1e542cd5a35e2571b3a1cc418 Mon Sep 17 00:00:00 2001 From: Derek Date: Wed, 9 Jan 2019 01:45:01 -0500 Subject: Add activity timeout constant --- bot/cogs/free.py | 13 ++++++------- bot/constants.py | 6 ++++++ config-default.yml | 6 ++++++ 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/bot/cogs/free.py b/bot/cogs/free.py index 076415ded..7447fd941 100644 --- a/bot/cogs/free.py +++ b/bot/cogs/free.py @@ -4,18 +4,17 @@ from datetime import datetime from discord import Colour, Embed, Member, utils from discord.ext.commands import BucketType, Context, command, cooldown -from bot.constants import Categories +from bot.constants import Categories, Free log = logging.getLogger(__name__) +PYTHON_HELP_ID = Categories.python_help +TIMEOUT = Free.activity_timeout + class Free: """Tries to figure out which help channels are free.""" - - PYTHON_HELP_ID = Categories.python_help - TIME_INACTIVE = 300 - @command(name="free", aliases=('f',)) @cooldown(1, 60.0, BucketType.channel) async def free(self, ctx: Context, user: Member = None, seek: int = 2): @@ -34,7 +33,7 @@ class Free: in an active channel, and we want the message before that happened. """ free_channels = [] - python_help = utils.get(ctx.guild.categories, id=self.PYTHON_HELP_ID) + python_help = utils.get(ctx.guild.categories, id=PYTHON_HELP_ID) if user is not None and seek == 2: seek = 3 @@ -49,7 +48,7 @@ class Free: msg = await channel.history(limit=1).next() # noqa (False positive) inactive = (datetime.utcnow() - msg.created_at).seconds - if inactive > self.TIME_INACTIVE: + if inactive > TIMEOUT: free_channels.append((inactive, channel)) embed = Embed() diff --git a/bot/constants.py b/bot/constants.py index aae9b05e5..689590c0c 100644 --- a/bot/constants.py +++ b/bot/constants.py @@ -471,6 +471,12 @@ class BigBrother(metaclass=YAMLGetter): header_message_limit: int +class Free(metaclass=YAMLGetter): + section = 'free' + + activity_timeout: int + + # Debug mode DEBUG_MODE = True if 'local' in os.environ.get("SITE_URL", "local") else False diff --git a/config-default.yml b/config-default.yml index 1b4e6f412..504d40ed7 100644 --- a/config-default.yml +++ b/config-default.yml @@ -337,5 +337,11 @@ big_brother: header_message_limit: 15 +free: + # Seconds to elapse for a channel + # to be considered inactive. + activity_timeout: 300 + + config: required_keys: ['bot.token'] -- cgit v1.2.3 From 2340509a482d2ed3fce2e3ede456ac49b2a97c43 Mon Sep 17 00:00:00 2001 From: Derek Date: Wed, 9 Jan 2019 17:55:40 -0500 Subject: Add exemption from cooldown for helpers --- bot/cogs/free.py | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/bot/cogs/free.py b/bot/cogs/free.py index 7447fd941..6b06eaa4c 100644 --- a/bot/cogs/free.py +++ b/bot/cogs/free.py @@ -2,9 +2,10 @@ import logging from datetime import datetime from discord import Colour, Embed, Member, utils +from discord.ext import commands from discord.ext.commands import BucketType, Context, command, cooldown -from bot.constants import Categories, Free +from bot.constants import Categories, Free, Roles log = logging.getLogger(__name__) @@ -83,6 +84,26 @@ class Free: await ctx.send(embed=embed) + @free.error + async def free_error(self, ctx: Context, error): + """ + Runs if any error is raised during invocation + of !free command. Any error aside from + CommandOnCooldown is ignored. + + If error raised is CommandOnCooldown, and the + user who invoked has the helper role, reset + the cooldown and reinvoke the command. + """ + helpers = ctx.guild.get_role(Roles.helpers) + + if isinstance(error, commands.CommandOnCooldown): + if helpers in ctx.author.roles: + # reset cooldown so second invocation + # doesn't bring us back here. + ctx.command.reset_cooldown(ctx) + await ctx.invoke(ctx.command) + def setup(bot): bot.add_cog(Free()) -- cgit v1.2.3 From 0f85110040e70376838b380579cac2ccad007914 Mon Sep 17 00:00:00 2001 From: Derek Date: Wed, 9 Jan 2019 18:10:03 -0500 Subject: Put channel category id constant back in class --- bot/cogs/free.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/bot/cogs/free.py b/bot/cogs/free.py index 6b06eaa4c..a66a37f1b 100644 --- a/bot/cogs/free.py +++ b/bot/cogs/free.py @@ -10,12 +10,14 @@ from bot.constants import Categories, Free, Roles log = logging.getLogger(__name__) -PYTHON_HELP_ID = Categories.python_help TIMEOUT = Free.activity_timeout class Free: """Tries to figure out which help channels are free.""" + + PYTHON_HELP_ID = Categories.python_help + @command(name="free", aliases=('f',)) @cooldown(1, 60.0, BucketType.channel) async def free(self, ctx: Context, user: Member = None, seek: int = 2): @@ -34,7 +36,7 @@ class Free: in an active channel, and we want the message before that happened. """ free_channels = [] - python_help = utils.get(ctx.guild.categories, id=PYTHON_HELP_ID) + python_help = utils.get(ctx.guild.categories, id=self.PYTHON_HELP_ID) if user is not None and seek == 2: seek = 3 -- cgit v1.2.3 From ee0a38a5671597d200c4927d9e900481727cecf1 Mon Sep 17 00:00:00 2001 From: Derek Date: Wed, 9 Jan 2019 18:11:39 -0500 Subject: Change awkward wording --- bot/cogs/free.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bot/cogs/free.py b/bot/cogs/free.py index a66a37f1b..e9c0386fd 100644 --- a/bot/cogs/free.py +++ b/bot/cogs/free.py @@ -79,7 +79,7 @@ class Free: embed.description += ("**\nThese channels aren't guaranteed to be free, " "so use your best judgement and check for yourself.") else: - embed.description = ("**Doesn't look like any channels are available to me. " + embed.description = ("**Doesn't look like any channels are available right now. " "You're welcome to check for yourself to be sure. " "If all channels are truly busy, please be patient " "as one will likely be available soon.**") -- cgit v1.2.3 From 61c7b27b3453120771764fbdd8b43fbc504a8882 Mon Sep 17 00:00:00 2001 From: Derek Date: Wed, 9 Jan 2019 18:13:19 -0500 Subject: Change embed color to blurple --- bot/cogs/free.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bot/cogs/free.py b/bot/cogs/free.py index e9c0386fd..4b5f3b3bb 100644 --- a/bot/cogs/free.py +++ b/bot/cogs/free.py @@ -55,7 +55,7 @@ class Free: free_channels.append((inactive, channel)) embed = Embed() - embed.colour = Colour.gold() + embed.colour = Colour.blurple() embed.title = "**Looking for a free help channel?**" if user is not None: -- cgit v1.2.3 From 5868516da942e6df4f5caa1fa24b5af13e1f3555 Mon Sep 17 00:00:00 2001 From: Derek Date: Wed, 9 Jan 2019 18:19:14 -0500 Subject: Change line to fit prevailing style --- bot/cogs/free.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/bot/cogs/free.py b/bot/cogs/free.py index 4b5f3b3bb..6f0e86330 100644 --- a/bot/cogs/free.py +++ b/bot/cogs/free.py @@ -66,7 +66,8 @@ class Free: if free_channels: embed.description += "**The following channel{0} look{1} free:**\n\n**".format( 's' if len(free_channels) > 1 else '', - '' if len(free_channels) > 1 else 's') + '' if len(free_channels) > 1 else 's' + ) for i, (inactive, channel) in enumerate(sorted(free_channels, reverse=True), 1): minutes, seconds = divmod(inactive, 60) -- cgit v1.2.3 From 4313a9c5ed6b052d46f00350b10a8c3d62136c48 Mon Sep 17 00:00:00 2001 From: Derek Date: Wed, 9 Jan 2019 18:36:57 -0500 Subject: Add all the block comments! --- bot/cogs/free.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/bot/cogs/free.py b/bot/cogs/free.py index 6f0e86330..0880cdd25 100644 --- a/bot/cogs/free.py +++ b/bot/cogs/free.py @@ -43,10 +43,15 @@ class Free: elif not 0 < seek < 10: seek = 3 + # Iterate through all the help channels + # to check latest activity for channel in python_help.channels: + # Seek further back in the help channel + # the command was invoked in if channel.id == ctx.channel.id: messages = await channel.history(limit=seek).flatten() msg = messages[seek-1] + # Otherwise get last message else: msg = await channel.history(limit=1).next() # noqa (False positive) @@ -63,12 +68,17 @@ class Free: else: embed.description = "" + # Display all potentially inactive channels + # in descending order of inactivity if free_channels: embed.description += "**The following channel{0} look{1} free:**\n\n**".format( 's' if len(free_channels) > 1 else '', '' if len(free_channels) > 1 else 's' ) + # Sort channels in descending order by seconds + # Get position in list, inactivity, and channel object + # For each channel, add to embed.description for i, (inactive, channel) in enumerate(sorted(free_channels, reverse=True), 1): minutes, seconds = divmod(inactive, 60) if minutes > 59: -- cgit v1.2.3 From 40d9ba8a08f6ba6586aea331f8574e2aa3dd03b9 Mon Sep 17 00:00:00 2001 From: Derek Date: Wed, 9 Jan 2019 18:38:41 -0500 Subject: Change activity timeout to 10 minutes --- config-default.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config-default.yml b/config-default.yml index 504d40ed7..7b0468643 100644 --- a/config-default.yml +++ b/config-default.yml @@ -340,7 +340,7 @@ big_brother: free: # Seconds to elapse for a channel # to be considered inactive. - activity_timeout: 300 + activity_timeout: 600 config: -- cgit v1.2.3 From 86440dd8ad355d157a0ebf8250d7abe7d56c5982 Mon Sep 17 00:00:00 2001 From: Derek Date: Thu, 10 Jan 2019 17:21:43 -0500 Subject: Update error handler to log errors instead of ignore them --- bot/cogs/free.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/bot/cogs/free.py b/bot/cogs/free.py index 0880cdd25..b8e9f65d0 100644 --- a/bot/cogs/free.py +++ b/bot/cogs/free.py @@ -115,7 +115,10 @@ class Free: # reset cooldown so second invocation # doesn't bring us back here. ctx.command.reset_cooldown(ctx) - await ctx.invoke(ctx.command) + # return to avoid needlessly logging the error + return await ctx.invoke(ctx.command) + + log.error(error) # Don't ignore other errors def setup(bot): -- cgit v1.2.3 From d46fed40b335060f7d1652cff6eb58912b824e0b Mon Sep 17 00:00:00 2001 From: Derek Date: Thu, 10 Jan 2019 17:27:57 -0500 Subject: Add 2nd space to inline comment to obey allmighty linter --- bot/cogs/free.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bot/cogs/free.py b/bot/cogs/free.py index b8e9f65d0..acd1dc108 100644 --- a/bot/cogs/free.py +++ b/bot/cogs/free.py @@ -118,7 +118,7 @@ class Free: # return to avoid needlessly logging the error return await ctx.invoke(ctx.command) - log.error(error) # Don't ignore other errors + log.error(error) # Don't ignore other errors def setup(bot): -- cgit v1.2.3 From c55fa67e21a6a10feb0738b3bacd6b0dba1d4de9 Mon Sep 17 00:00:00 2001 From: Derek Date: Thu, 10 Jan 2019 17:58:19 -0500 Subject: Add cooldown constants to config --- bot/cogs/free.py | 4 +++- bot/constants.py | 2 ++ config-default.yml | 2 ++ 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/bot/cogs/free.py b/bot/cogs/free.py index acd1dc108..8d413a69b 100644 --- a/bot/cogs/free.py +++ b/bot/cogs/free.py @@ -11,6 +11,8 @@ from bot.constants import Categories, Free, Roles log = logging.getLogger(__name__) TIMEOUT = Free.activity_timeout +RATE = Free.cooldown_rate +PER = Free.cooldown_per class Free: @@ -19,7 +21,7 @@ class Free: PYTHON_HELP_ID = Categories.python_help @command(name="free", aliases=('f',)) - @cooldown(1, 60.0, BucketType.channel) + @cooldown(RATE, PER, BucketType.channel) async def free(self, ctx: Context, user: Member = None, seek: int = 2): """ Lists free help channels by likeliness of availability. diff --git a/bot/constants.py b/bot/constants.py index 1bb602eb2..be713cef2 100644 --- a/bot/constants.py +++ b/bot/constants.py @@ -477,6 +477,8 @@ class Free(metaclass=YAMLGetter): section = 'free' activity_timeout: int + cooldown_rate: int + cooldown_per: float # Debug mode diff --git a/config-default.yml b/config-default.yml index 3db7b2025..f462b8199 100644 --- a/config-default.yml +++ b/config-default.yml @@ -343,6 +343,8 @@ free: # Seconds to elapse for a channel # to be considered inactive. activity_timeout: 600 + cooldown_rate: 1 + cooldown_per: 60.0 config: -- cgit v1.2.3 From e1bd2c37693e863738fb5eddcd0f46ae9e484f1f Mon Sep 17 00:00:00 2001 From: Derek Date: Thu, 10 Jan 2019 18:04:06 -0500 Subject: Put extra sentence in docstring clarifying arg usage --- bot/cogs/free.py | 1 + 1 file changed, 1 insertion(+) diff --git a/bot/cogs/free.py b/bot/cogs/free.py index 8d413a69b..0010b4a90 100644 --- a/bot/cogs/free.py +++ b/bot/cogs/free.py @@ -29,6 +29,7 @@ class Free: :param seek: How far back to check the last active message. seek is used only when this command is invoked in a help channel. + You cannot override seek without mentioning a user first. When seek is 2, we are avoiding considering the last active message in a channel to be the one that invoked this command. -- cgit v1.2.3 From d8db79581a84c1d8adf0a297d5390c4c3f519aba Mon Sep 17 00:00:00 2001 From: Derek Date: Thu, 10 Jan 2019 18:09:14 -0500 Subject: Update error handler docstring to be more accurate --- bot/cogs/free.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/bot/cogs/free.py b/bot/cogs/free.py index 0010b4a90..4be804881 100644 --- a/bot/cogs/free.py +++ b/bot/cogs/free.py @@ -103,13 +103,11 @@ class Free: @free.error async def free_error(self, ctx: Context, error): """ - Runs if any error is raised during invocation - of !free command. Any error aside from - CommandOnCooldown is ignored. - If error raised is CommandOnCooldown, and the user who invoked has the helper role, reset the cooldown and reinvoke the command. + + Otherwise log the error. """ helpers = ctx.guild.get_role(Roles.helpers) -- cgit v1.2.3 From c94189cbfae4b1788773af3bb7ec32ba32caeb12 Mon Sep 17 00:00:00 2001 From: Sebastiaan Zeeff <33516116+SebastiaanZ@users.noreply.github.com> Date: Sat, 12 Jan 2019 16:36:04 -0500 Subject: Change ctx.invoke to ctx.reinvoke to conserve passed arguments Co-Authored-By: fiskenslakt --- bot/cogs/free.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bot/cogs/free.py b/bot/cogs/free.py index 4be804881..e310d9cc7 100644 --- a/bot/cogs/free.py +++ b/bot/cogs/free.py @@ -117,7 +117,7 @@ class Free: # doesn't bring us back here. ctx.command.reset_cooldown(ctx) # return to avoid needlessly logging the error - return await ctx.invoke(ctx.command) + return await ctx.reinvoke() log.error(error) # Don't ignore other errors -- cgit v1.2.3 From 240b33719d48716762461ee8eddbeb28ff460a03 Mon Sep 17 00:00:00 2001 From: Sebastiaan Zeeff <33516116+SebastiaanZ@users.noreply.github.com> Date: Sat, 12 Jan 2019 16:46:14 -0500 Subject: Change log.error to log.exception to avoid hiding traceback Co-Authored-By: fiskenslakt --- bot/cogs/free.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bot/cogs/free.py b/bot/cogs/free.py index e310d9cc7..620449f7e 100644 --- a/bot/cogs/free.py +++ b/bot/cogs/free.py @@ -119,7 +119,7 @@ class Free: # return to avoid needlessly logging the error return await ctx.reinvoke() - log.error(error) # Don't ignore other errors + log.exception(error) # Don't ignore other errors def setup(bot): -- cgit v1.2.3