aboutsummaryrefslogtreecommitdiffstats
path: root/bot/bot.py (unfollow)
Commit message (Collapse)AuthorLines
2020-12-01Ensure status countdown waits for bot start-upGravatar Sebastiaan Zeeff-0/+4
Trying to change the rich presence status of the bot too early in the bot's start-up sequence will cause the task to fail. To make it wait, I've added a `bot.wait_until_guild_available` point before the main loop of the task starts. This seems to solve the issue reliably, despite the `guild_available` event not being directly related to when the bot's connection with the API is ready to accept presence updates. However, the `ready` event is know to fire too early, according to the discord.py community.
2020-12-01Let status update task sleep until the AoC startsGravatar Sebastiaan Zeeff-31/+60
I've refactored the rich presence countdown task by making it hibernate until 2 hours before the next Advent of Code starts if the task starts up before the event has started. This ensures that the task will run when the event starts and allows it to countdown to the first challenge. After the event for the configured Advent of Code year has finished, the task will terminate. This also means that the task will terminate immediately in the year following the currently configured Advent of Code; it will only start hibernating again once we configure the bot for the next event. No unnecessary, year-long hibernation.
2020-12-01Add function that allows tasks to sleep until AoCGravatar Sebastiaan Zeeff-0/+22
Our Advent of Code background tasks were written in such a way that they relied on the extension being loaded in December and only in December. However, since the deseasonification, the extension is loaded prior to December, with some commands being locked to that month with a check instead. This meant that our background tasks immediately cancelled themselves, as they observed themselves to be running outside of the boundaries of the event. As there was no mechanism for starting them back up again, these tasks would only start running again after redeployment of Sir Lancebot. To solve this issue, I've added a helper function that allows tasks to wait until a x hours before the event starts. This allows them to wake up in time to prepare for the release of the first puzzle.
2020-12-01Fix daily stats by converting day, star to strGravatar Sebastiaan Zeeff-2/+3
The daily stats function contained a bug that prevented it from working correctly. The reason was that I was looking for `int` keys where the actual keys were strings. I now make sure to create a `str` from the `int` I get back from `range`.
2020-12-01Add support for ignoring scores from specific daysGravatar Sebastiaan Zeeff-3/+17
I've added support for ignoring scores from specific days. A list of days to ignore can be provided using the environment variable `AOC_IGNORED_DAYS` as a comma-separated list. This example would ignore day 1 and day 23: AOC_IGNORED_DAYS=1,23 I've also added a helper function to sort the leaderboard not only on the achieved score, but also on the number of stars an individual has completed.
2020-11-30Clarify text of DM with Advent of Code join codeGravatar Sebastiaan Zeeff-5/+7
2020-11-30Add note about refresh time to info embedGravatar Sebastiaan Zeeff-0/+2
2020-11-30Enable AOC commands before DecemberGravatar Sebastiaan Zeeff-1/+11
Note: This won't start the countdown functions yet, they still rely on the cog being loaded in december.
2020-11-30Update CODEOWNERS for Den4200.Gravatar Den4200-6/+3
2020-11-30Set character encoding for logging to utf-8Gravatar Sebastiaan Zeeff-2/+3
2020-11-30Move helper functions to the ._helpers moduleGravatar Sebastiaan Zeeff-35/+42
I've moved the helper functions to the _helpers.py module and clarified the docstring of the `is_in_advent` helper function.
2020-11-30Remove constants replaced by AOC_LEADERBOARDSGravatar Sebastiaan Zeeff-3/+0
There were still two constants left over that were no longer used after the rewrite. I've removed them.
2020-11-30Update information for the .aoc about embedGravatar Sebastiaan Zeeff-4/+4
I've updated the information for the about embed: - Added information on the scoring of private leaderboards - Changed the text of "join our private leaderboard", as we no longer have to introduce private leaderboards there. - I've also streamlined the section on Auth providers.
2020-11-30Add global leaderboard command backGravatar Sebastiaan Zeeff-0/+16
I accidentally removed the global leaderboard command. I've added it back!
2020-11-30Fix docstrings and add a few explanatory commentsGravatar Sebastiaan Zeeff-5/+8
2020-11-30Set correct channel ID as default for AoC channelGravatar Sebastiaan Zeeff-1/+1
2020-11-30Remove now redundant advent_of_code_staff constantGravatar Sebastiaan Zeeff-2/+1
We're no longer going to use a two-channel setup for this event, as we don't want to split the event community into two, staff and non-staff.
2020-11-30Remove redundant _error_embed_helper functionGravatar Sebastiaan Zeeff-7/+3
This helper function was only being used in one spot and did not factor out any logic. I've removed the helper function to just create the embed where it's needed.
2020-11-30Rewrite Advent of Code leaderboard logicGravatar Sebastiaan Zeeff-0/+680
I've rewritten the Advent of Code leaderboard logic. Unfortunately, nearly all of the changes made are interrelated, meaning that they've ended up in the same commit. To add a bit of structure to the extension, I've chosen for a subpackage structure instead of a single file structure. The biggest changes: - Whether or not you get a join code for the staff leaderboard will now be determined by looking for the Helpers-role. - The Python Discord Leaderboard now includes all boards, including the staff leaderboard. This is one event. - Redis is now used to set a cache expiry period. This means that our code does not have to check for cache staleness; Redis will do that for us. - The period "fetching" task has been removed. We now fetch solely when the data is needed to prevent putting unnecessary stress on the Advent of Code website. - The option to display the Global Leaderboard within Discord has been removed. Rather, we now link to the website. This simplified the code for now, although we could add it back later. - An additional command, `.aoc refresh`, has been added to allow Admins and the Events Lead to force the cache to be invalidated. This should be done sparingly to not overburden the AoC website. - I've also made sure that the daily notification task actually pings the notification role by setting the `allowed_mentions` kwarg.
2020-11-30Remove adventofcode.py in favour of subpackageGravatar Sebastiaan Zeeff-983/+0
As the Advent of Code file was getting massive, I've removed the old single-file based extension as I'm going to replace it with a partially rewritten subpackage-based extension.
2020-11-30Add constants parsing for multiple leaderboardsGravatar Sebastiaan Zeeff-9/+38
I've added a unified approach to setting data for multiple leaderboards using environmental variables. Instead of setting separate variables for the three pieces of data we have, hoping that the position of each board matches up in the three fields, I now set one environmental variable, AOC_LEADERBOARDS, that holds delimited data. The data is in the format: board_id1,session1,join_code1::board_id2,session2,join_code2[::...] The staff leaderboards should be included as usual in this environmental variable. Another environment variable, AOC_STAFF_LEADERBOARD_ID, can be used to designate which leaderboard should be used as the staff board. I've also made some other constants configurable in this commit and added the role ID of the Events Lead role to allow the Events Lead to force a reload of the leaderboard cache.
2020-11-27Add myself to CODEOWNERS of CI filesGravatar Sebastiaan Zeeff-1/+1
2020-11-27Add @Akarys42 to the codeownersGravatar Matteo Bertucci-0/+8