Icons are too small. Also, the PyDis logo needs to be visually centered, so it needs a margin-left of around 2px. Can we have them more like this?

We also will need to change the date for the final timeline item, which now says "?? September"
1 messages ยท Page 56 of 1
Icons are too small. Also, the PyDis logo needs to be visually centered, so it needs a margin-left of around 2px. Can we have them more like this?

We also will need to change the date for the final timeline item, which now says "?? September"
One more thought - are we adding the timeline somewhere so that it is possible to browse to it without the URL?
Icons changed @lemonsaurus.
As of now, we aren't linking to it from anywhere. Maybe we should add a notice to the frontpage or something?
Build 20201012.8 succeeded
GitHub
00:02:22
Site
Something like this
<img width="1680" alt="Screenshot 2020-10-12 at 09 57 31" src="https://user-images.githubusercontent.com/20439493/95726859-5ad9e800-0c71-11eb-802c-07c78a598a67.png">
The okhandbutflipped emoji is not identical to the default ok_hand emoji.
When viewed side-by-side it is clear that the flipped emoji is a little blurry, as well as being thicker and generally different enough that a few users complained about it.

Unless there's any design decision from the original designer to consider, I could fix this.
Twemoji updated the hand and we didn't which is why the design is different. Go for it @gustavwilliam.
Perfect; that's what I had expected.
I'd also like to see a frontpage direct link that can direct to it in a lovely graphic manner.
On finishing my review, I notice you've mentioned something about this here, however I'm not a super fan of the plain-ness and the temporary feeling it gives off.
font-size: 0.9em;
0.8 feels a touch too small, feeling like I'm straining to read it when viewing both on 1080p and 1440p displays.
It also wasn't suitable to simply use zoom, as the size disparity between the timeline card title/content makes it look comical on zooming, along with it then needing to be adjusted between other pages and this timeline, as the general body text in the rest of the site doesn't need to be zoomed.
Build 20201012.9 succeeded
GitHub
00:02:34
Site
Could the whole frontpage banner be a clickable link? I think that would be nice. It could grow a little bit on hover or change colour. Currently it looks like only the underlined here links. I agree that it comes with a sense of temporariness ~ are we planning to have this banner up permanently, or is it just to promote the 100k event?
I don't really want to remove the Welcome to Python Discord from our front page, I think it's a valuable component and I almost want it to be there permanently.
That said, I do think having some sort of temporary notice for 100K would be great. I also think we need to put the timeline somewhere else so that it has a more permanent home - not sure precisely where this would be. I suppose our only real options are on the dropdown or in the resources. Both are a bit weird to me.
Introduces a faster TypeScript compiler and removes the unnecessary complexities brought along by CRA.
This leads to a faster build and a more optimised production image. There should be no user facing changes.
d8d4a2b Fix the SVG scaling with new SVG loader - jb3
03599c4 Update test script in package.json - jb3
d13057a Update build preferences to put assets in corre... - jb3
Removes the @sentry/tracing package and the integration.
Our Sentry plan does not support this and it's not a very useful feature for applications of this size anyway.
Adjusting centering and rotation origin of pydis logo to fix logo not being 100% centered on the canvas.
Overall canvas size decreased to 400x400 to fit under Discord's 8MB file size limit.

Build 20201012.2 succeeded
GitHub
00:02:48
Seasonal Bot
Connected!
This PR increases the chunking configuration of webpack by splitting up the code into smaller chunks.
On top of this it improves the design of the loader so that users have a better experience while waiting for chunk loads.
Postgres backup completed!
Build 20201013.1 succeeded
GitHub
00:01:05
Seasonal Bot
For future reference, branch names should also be a bit descriptive. I personally would have named this fix/tagp/trivia-fuzzy-check fix for to indicate its a small fix, not a feature, tagp are my initials, and a small descriptive last part.
For future reference, branch names should also be a bit descriptive. I personally would have named this
fix/tagp/trivia-fuzzy-checkfix for to indicate its a small fix, not a feature, tagp are my initials, and a small descriptive last part.
ty i will take care from nxt time :)
Instead of hotfixing the issue at the end, can we instead fix it at it's roots. In this case, make self.winners a set to begin with. and change the add methods / reset methods. That way we don't have to iterate over it at the end
Build 20201013.2 succeeded
GitHub
00:03:25
Seasonal Bot
Connected!
This is a little commit, but the prefix was hardcoded in main.py. This PR should fix it.
Thank you for contributing to Python Discord!
Please check out the following documents:
Build 20201013.1 succeeded
GitHub
00:03:06
Bot
Thanks for the contribution, this is great. It's useful for dev bots.
Connected!
Build 20201013.2 succeeded
GitHub
00:04:58
Bot
The help command for eval contains newlines that they should not be there. That's because there are \ns after some words in docstring. And I'm not sure how to fix that.

Build 20201013.3 succeeded
GitHub
00:01:08
Seasonal Bot
We've now had the Verification task kicking dormant unverified users from the guild for some time, and @lemonsaurus has raised the issue of having no easy way to determine whether a specific user was previously kicked by the system, and how many times.
In order to amend this issue, we decided to post a note infraction to site on-kick. This will give mods the ability to see that a specific user was kicked in their infraction history:
 to the end of each new line in its docstring
to fix that.
On Tue, Oct 13, 2020 at 5:10 AM Murad Bashirov notifications@github.com
wrote:
The help command for eval contains newlines that they should not be
there. That's because there are \ns after some words in docstring
https://github.com/python-discord/bot/blob/master/bot/exts/utils/snekbox.py#L281-L285.
And I'm not sure how to fix that.[image: image]
<https://user-images.githubusercontent.co...
@Den4200 sure I would like to implement this feature :)
Implemented the timeit command proposed in issue #1025
This command is very similar to calling python -m , It maintains all of the previous features of the eval command with the addition of timing the code using timeit.

Thank you for contributing to Python Discord!
Please check out the following documents:
Build 20201014.1 failed
GitHub
00:00:57
Bot
Build 20201014.2 failed
GitHub
00:00:54
Bot
Build 20201014.3 failed
GitHub
00:01:06
Bot
Build 20201014.4 failed
GitHub
00:00:52
Bot
Build 20201014.5 succeeded
GitHub
00:02:47
Bot
Solved issue from #1232
Thank you for contributing to Python Discord!
Please check out the following documents:
Build 20201014.6 succeeded
GitHub
00:02:37
Bot
Postgres backup completed!

!reddit daily [subreddit=r/Python], but it doesn't work. It works when we input !reddit daily subreddit_name.
 -> None:
means that the subreddit argument is should by instance of str; however, it should be instance of Subreddit and the default value of it should be 'r/Python'. The Subreddit is a converter, and forces a string to begin with "r/" and checks if it's a valid subreddit.
@spitfire-hash Sorry, I was just messing around with the forked repo, and then (since I recently learned about git and GitHub) I did a mistake and then hastily I googled to do something about t and reverted it. Yes, the rest of the commits are useless, but I have no idea how to remove them.
I'd recommend hard resetting to b0da6c01d995207a9dad6963a22ef0d217dc65bf locally, and then force pushing to this branch.
git reset --hard b0da6c01d995207a9dad6963a22ef0d217dc65bfgit push --force origin masterPlease try not to do this again in the future, not just on our repositories, but anyone else's!
@RohanJnr @quanta-kt #284 is related to this PR and by solving this, leaderboards will be saved and will be not reset every new deployment. When you are able to solve this issue too, then this should be great.
@RohanJnr @quanta-kt #284 is related to this PR and by solving this, leaderboards will be saved and will be not reset every new deployment. When you are able to solve this issue too, then this should be great.
Sure, I will push relevant changes in a bit.
I do not think it's ambiguous. It means that if no arguments passed(only !reddit daily) it will send top posts from "r/Python".
Build 20201014.1 succeeded
GitHub
00:01:15
Seasonal Bot
Code looks good, but haven't tested locally.
[ ] Various approaches to implementing ADTs (dataclass/NamedTuple, Union)
[ ] Enums
@Den4200 I am really sorry for the inconvenience, but can you please tell me if this PR can be merged or not(only the newline issue) or I have to open another PR, just for that since it has so many commits.
How about having the command name as emojicount instead of emoji_count.
After looking at commands via the help command, none of them actually use an underscore(as a replacement for space) and just join the words.
I think we should do the same here, what do you think?
The code looks good and tested!
Build 20201014.10 succeeded
GitHub
00:02:45
Bot
@adhikariprajitraj Do as I said, and those extra commits will magically vanish.
closes #796
this command take package name as input and return data from pypi api.
package command will return this if package is found
package command will return this if package is not found
Thank you for contributing to Python Discord!
Please check out the following documents:
async def send_spook_msg(
cls, author: discord.Member, channel: discord.TextChannel, candies: Union[str, int]
) -> None:
I think this looks better.
Better formatting
MEDALS=(
'\N{FIRST PLACE MEDAL}',
'\N{SECOND PLACE MEDAL}',
'\N{THIRD PLACE MEDAL}',
'\N{SPORTS MEDAL}',
'\N{SPORTS MEDAL}',
),
return '\n'.join(
f"{EMOJIS['MEDALS'][index]} <@{record[0]}>: {record[1]}"
for index, record in enumerate(top_five)
) if top_five else 'No Candies'
Build 20201014.11 succeeded
GitHub
00:03:00
Bot
Build 20201014.2 succeeded
GitHub
00:01:05
Seasonal Bot
I believe a comment explaining why this approach for counting was used would be beneficial
I think categories would be more fitting as a module level constant
Build 20201014.3 succeeded
GitHub
00:00:59
Seasonal Bot
@Anubhav1603 read what I said in #500. It isn't just 418.
The .http_cat command is supposed to send the picture associated with the status code the user enters. To check if the user has entered a valid status code, it checks if it is in the HTTPStatus enum. The problem with this, is that three of the status codes, 103 EARLY_HINTS, 418 IM_A_TEAPOT and 425 TOO_EARLY, are new to python version 3.9, though they are in http.cat. We should fix it so that these codes can be used.
I think after #901 get merged this should cache responses and clear it every day to make repeating requests faster, but clearing to keep things up to date.
Constants should be uppercase.
Move this URL to constant.
Set color inside constructor.
As @Numerlor said, we can just wait for Python 3.9, there isn't really any urge for it right now.
@Akarys42 when will that be?
@ChrisGallardo i still think my proposed idea can solve this
We will update to 3.9 when the libraries we are using will be ready and at least one patch of CPython will have been released. Be patient. ๐
actually i am trying to make embed field dynamic thats y i have done that bcz some package have some field and some isnt
bcz it contains the final data which has to sent ๐
I think result, embed is enough. You can see that this data is passed to embed builder and that this embed is sent.
Build 20201014.4 succeeded
GitHub
00:01:01
Seasonal Bot
New release of Bulma have been here some weeks: 0.9.1. Changelog: https://github.com/jgthms/bulma/releases/tag/0.9.1
The items method returns an ItemsView object which can't be asynchronously iterated over
Thank you for contributing to Python Discord!
Please check out the following documents:
@Den4200 Thank you. :)
Build 20201014.12 succeeded
GitHub
00:02:58
Bot
Hey, thanks for the PR! Although, if we do add line continuations inside the docstrings, I feel like we should do that for all of our commands. Would you be interested by doing that?
Can you assign this to me?
Done! As always, if you have any question, feel free to ask in #dev-contrib!
The syntax is ambiguous because it has a mix of syntaxes. [...] means the argument is optional and is used often in command help/man pages, while subreddit=r/Python is Python syntax for a default named argument, which could also be interpreted to mean "you have to include subreddit= in the command".
I think it would be clearer to have the command look like !reddit daily [subreddit] and add a notice that says "If no subreddit is specified, r/Python is the default" or something similar.
Can't add it as a suggestion but I think this would also be nice to add, would like to hear other opinions; not sure how other editors handle it, but at least pycharm views it as code in the docstring with full inspections which is helpful
>>> class SomeCog(Cog):
... # To initialize a valid RedisCache, just add it as a class attribute
... # here. Do not add it to the __init__ method or anywhere else, it MUST
... # be a class attribute. Do not pass any param...
Okay, thank you! I'll work on it in 2 days.
This might clash with https://github.com/python-discord/bot/pull/1204/files so you might want to check that out
Why? I don't foresee it being used anywhere else, considering the helper functions are more convenient. It's not being used internally besides in this one function, so making it a "private" constant is also unjustified.
Could this be handled in the help command instead, so that we could avoid changing every docstring?
1bbb8a5 Utils: clarify why has_lines counts by splittin... - MarkKoz
Build 20201014.13 succeeded
GitHub
00:02:41
Bot
I didn't think this would be a useful feature, but if staff needs it then it's fine.
Build 20201014.14 failed
GitHub
00:01:01
Bot
I guess I'm used to static things being constants for readability, but it makes sense to keep it local if it's only going to get used here; not a huge deal so if you think this is more readable I believe the PR is ready then.
Unfortunately, annotations for callbacks tend to get quite ugly, as is the case here. I think it's for the best to alias it.
This function has far too much redundancy with send_eval. You should strip both down so they do they bare minimum unique operations and rely on a third function to execute code they share in common.
Removing the spaces before the comments just makes them less readable.
Can you rebase so that there aren't six commits of you trying to fix CI errors? This is a good example of why the contribution guidelines say that you should lint and test locally.
Currently, the riddle waits until the end of the riddle to display the correct answers. I think this should operate like the quiz command, as soon as someone gets the answer right, the riddle ends.
Some people get confused when they got the answer correct and the bot says nothing. This would help clear out confusion and also minimize the wait needed to...
You have a point, but I think that's situational. In this case, the only reason it's a variable is because it'd be too long/ugly to inline it. Furthermore, each category is already a constant on its own.
Can I implement this fix?
b1f2b40 Move code block formatting detection to a separ... - MarkKoz
652bc5a Code block: add helper function to check for he... - MarkKoz
8af7162 Code block: add helper function to check channe... - MarkKoz
3b967c5 Code block: add helper function to check if msg... - MarkKoz
76eff08 Code block: add helper function to check for ch... - MarkKoz
Can I implement this fix?
Sure!
Staff have to decide.
Nevermind then.
Build 20201014.15 succeeded
GitHub
00:04:33
Bot
Connected!
Build 20201014.5 succeeded
GitHub
00:02:05
Seasonal Bot
@Akarys42 Sure, I will do it today.
Build 20201015.1 succeeded
GitHub
00:04:16
Bot
Connected!
Description
numbers was turned into a set twice, so I removed the second conversion
pipenv lock?pipenv run lint)?Thank you for contributing to Python Discord!
Please check out the following documents:
Build 20201015.1 succeeded
GitHub
00:00:58
Seasonal Bot
Build 20201015.2 failed
GitHub
00:00:48
Bot
Build 20201015.3 failed
GitHub
00:00:54
Bot
When the bot pins a message, a 'notification' like Python pinned a message to this channel. See all the pins..
In reference to this (review comment), this message was kept to 'advertise the feature', now that most people this exists now, I think it's necessary to remove that message. The main reason for me is that sometimes (or most of the times?) people send something like 'hello' to claim the channel, and t...
@Akarys42 I did everything I could (rechecked twice). Can you please review and comment on my commit?
Your pre-commit checks are failing

Have u installed pre-commit?
No, I haven't installed pre-commit. Do I need to install it in my computer?
Just run pipenv run precommit
@adhikariprajitraj have you looked at the contributing guides? It tells you that you need pipenv (pip install pipenv) and when setting up your development environment you use pipenv run precommit to install the hook, or you can run it manually using pipenv run lint, or just flake8 (the check that failed for this PR) using pipenv run flake8
you can refer [here](https://pythondiscord.com/pages/contributing/installing-project-dependenc...
Why is this is a class method? We are not changing any of the cls attrs.
This can be a static method instead.
I installed it, ran it but do I have to hard reset everything and work on it again? It would be better if I can just hard reset the ./bot/exts/utils/bot.py @Akarys42 and @a
Also, this git and this huge project are taking a toll on a beginner.
You don't have to reset it, just commit your new changes and push
Postgres backup completed!
@hedythedev After installing pre-commit I can no longer push changes to bot.py, I guess I have to give up.
The reason that you can't commit, I think is because the pre-commit checks for flake8 is failing, you will be able to commit and push once you've fixed the checks
Build 20201015.4 failed
GitHub
00:01:02
Bot
@hedythedev I messed up again. I am really sorry for the trouble, but is there a way I can revert/reset the changes which were not supposed to be made according to precommit. All I did was just string formatting and I didn't even touch anything other.
I'd recommend hard resetting to b0da6c0 locally, and then force pushing to this branch.
git reset --hard b0da6c01d995207a9dad6963a22ef0d217dc65bfgit push --force origin masterPlease try not to do this again in the future, not just on our repositories, but anyone else's!
you can use this again to reset the commits, but replace that sha (b0da6c0) with the sha of the last comm...
Build 20201015.5 failed
GitHub
00:00:57
Bot
This may also pollute infraction stats a little bit. Do you think that's ok @jb3? We can probably just filter them out by the reason field, but it adds some complexity.
Build 20201015.2 succeeded
GitHub
00:00:56
Seasonal Bot
Hello @adhikariprajitraj.
It seems like your git history is quite messed up. Maybe you ran an auto formatter on the whole code at some point?
Also, it seems like you're working on your master branch, you should always work in another branch to avoid situations like that.
I'm closing this PR for now, feel free to delete your fork, fork again, and send a new PR, and I'll happily review it. If you have any question about the code or git itself, feel free to ask us in #dev-contrib!
I'm okay with that, this feature is here for quite a while now.
I'd like to hear what others think about that first tough.
async def pride_leader(self, ctx: commands.Context, *, pride_leader_name: Optional[str]) -> None:
Build 20201015.3 succeeded
GitHub
00:01:06
Seasonal Bot
To me, this sounds reasonable. However, we should keep an eye on if people start writing their questions as the first message less or if people just donโt know that the feature exists. If that happens, we could simply add it back in.
This check should be inside the previous else block as that is where you are validating the given name.
example:
@commands.command(name="prideleader", aliases=['pl'])
async def pride_leader(self, ctx: commands.Context, *, pride_leader_name: Optional[str]) -> None:
"""Provides info about pride leader by taking name as input or randomly without input."""
if pride_leader_name is None:
name_list = [name for name in self.pride]
le...
Likewise here-
valid_name = "\n".join(valid_name)
You can simply call join on the dict keys.
valid_name = ", ".join(self.pride.keys())
I think it would be nice to make the embed title link the the PyPI page:

Do you think that would be possible?
Why is this variable named a? And what is the purpose of this code? It looks like it just re-packages the info into another dict. Maybe you could just return a["info"]? I think it's difficult to justify this especially given that you're renaming some of the keys, which just creates indirection elsewhere in the code. It would make more sense if you re-packaged this into e.g. a namedtuple, so that other code can access the values as attributes and have more of a guarantee that they will exist.
The try block should only contain code that you're expecting to raise. The else clause is semantically more appropriate for "code that should run if no exception is thrown". Alternatively, the except clause can return and then you can end the try-except block.
In this case, I think the following would make the most sense:
try:
info = get_info(...)
except error:
embed = error_embed()
else:
embed = success_embed(info)
send embed
At the moment, eval automatically truncates output that is greater than 10 lines, or has more than 1000 characters.
The eval formatter cuts off the output past 1000 characters with a "message is too long" message, and past 10 lines with a "too many lines" message. However, it also at the moment is set (with MAX_PASTE_LEN) to not upload results that have more than 1000 characters.
elif len(output) >= 1000:
truncated = True
output = f"{output[:...
@kwzrd Maybe instead of having a general text note we could just simplify the reason to verification kick. I'm not sure we need to know the threshold, since I don't think we'll be changing it, and that would wildly simplify filtering.
We had a chat about this internally, and we're not comfortable with linking an asset hosted on medium.com partly because it's medium, and partly because of potential licensing issues. I imagine you have chosen to not link the PyPI asset directly because it's an SVG? I'm not sure what the best solution would be, but currently we'd rather have no logo than linking to medium.com.
We can perhaps make the .hackstats command only show valid repos instead of total contributions.
Many ppl use the discord bot to keep track of their repos and they will be in the delusion that some of their PRs were qualified, when they might have been invalid as the HacktoberFest team is closing submissions from certain large public repos, due to lack of quality.
308e6a6 Verification: simplify kick not reason - kwzrd
@jb3 Yes, I agree, let's simplify it: 308e6a6.
Build 20201015.7 succeeded
GitHub
00:02:42
Bot
Maybe we can put a message in the availabe/dormat embed saying that the first message in this channel is pinned so others can jump back to the original question and discussions.
And in the case of when the user deletes their message after claiming the channel, maybe the bot can say something like This channel is claimed by @ user it will be moved to dormat after xyz minutes, it doesn't look like the bot moved the channel to occupied for no reason whatsoever.
We decided to add the logo as an emoji on PyDis, feel free to use the CDN link: https://cdn.discordapp.com/emojis/766274397257334814.png
Build 20201015.4 succeeded
GitHub
00:03:04
Seasonal Bot
Connected!
Build 20201015.5 succeeded
GitHub
00:03:12
Seasonal Bot
Connected!
I have removed these lines in #496
I assume I can make a note about this in my PR saying "Closes #493" ?
Build 20201015.6 failed
GitHub
00:00:54
Seasonal Bot
Build 20201015.6 failed
GitHub
00:00:57
Seasonal Bot
There's whitespace on this line causing the build to fail!
Build 20201015.7 succeeded
GitHub
00:03:08
Seasonal Bot
Connected!
Build 20201015.8 succeeded
GitHub
00:03:13
Seasonal Bot
Connected!
Build 20201015.9 succeeded
GitHub
00:03:10
Seasonal Bot
Connected!
@jb3 What is the current character limit and what is the current maximum content length? Even 10,000 characters is at worst 0.04 MB assuming UTF-8. Can we determine a sane limit based on the frequency of the uploads, available disk space, and how frequently pastes are cleared?
@MarkKoz Current character limit is 50,000 characters. Pastes are cleared 3 months after last viewing.
I'm confident we have enough storage to do whatever, and we can deal with things retroactively if it becomes an issue, we have alerts set up for these situations. We can safely raise this cap, 10,000 characters is absolutely fine in my eyes.
Build 20201015.8 succeeded
GitHub
00:04:49
Bot
Connected!
Build 20201016.1 succeeded
GitHub
00:01:04
Seasonal Bot
This mostly works, but sometimes there is a 400 error because the embed has a field with an empty value:
discord.errors.HTTPException: 400 Bad Request (error code: 50035): Invalid Form Body
In embed.fields.0.value: This field is required
I'm also concerned about the terms of service for the TMDB API, which states
You shall use the TMDb logo to identify your use of the TMDb APIs.
You shall place the following notice prominently on your application: "This product us...
Build 20201016.2 succeeded
GitHub
00:00:57
Seasonal Bot
Todo:
Build 20201016.3 succeeded
GitHub
00:00:52
Seasonal Bot
Postgres backup completed!
Build 20201016.4 succeeded
GitHub
00:01:09
Seasonal Bot
Build 20201016.5 succeeded
GitHub
00:01:15
Seasonal Bot
As you may have heard, we're hosting a Python Core Developer Sprint for the CPython devs in our community starting next week. During this event, we will host a Q&A stream on our YouTube.
For this stream, we'd like a sort of title card. For example, for the summer code jam, we used this one:

Format should be 1920x1080, transparent background, and should work with th...
It's worth noting that we do not comply with the terms of service in the other places where TMDB is used. We may want to open issues to correct that.
Build 20201016.6 succeeded
GitHub
00:00:56
Seasonal Bot
I imagined the logo being put as the avatar icon URL, but it's actually to hard to make out the logo when it's that small

I agree that other uses of the API should be adjusted to comply with the ToS.
TMDB API ToS states under section 3 (attribution):
You shall use the TMDb logo to identify your use of the TMDb APIs.
You shall place the following notice prominently on your application: "This product uses the TMDb API but is not endorsed or certified by TMDb."
Any use of the TMDb logo in your application shall be less prominent than the logo or mark that primarily describes the application and your use...
Closes #505
pipenv lock?pipenv run lint)?Build 20201016.7 succeeded
GitHub
00:00:59
Seasonal Bot
Is logging the whole payload useful here? The only information that really changes is the user id
Build 20201016.8 succeeded
GitHub
00:03:18
Seasonal Bot
Connected!
It's often helpful to see the id of the infraction when applying it in a mod channel. This allows for example other mods to edit it without having to pull up the entire infraction history of the user.
With this PR it will look like that:

Build 20201016.1 succeeded
GitHub
00:02:42
Bot
Any reason for the removal of the newline here?
We shouldn't need the error handling code below if we raise for status here and let it propagate to the user
The stat code should be left untouched, but currently message sending is handled over 3 methods: in this one, in get_pep_embed and in validate_pep_number. From the two checking coros it's not immediately apparent that they will send message from their names and the sending doesn't need to be handled inside of them, as all their paths where the messages are sent are already being checked in here.
Could just log the member id if you think it's too noisy. I wanted to log that the request was made and figured I'd also log the payload given that trace logs are usually off in production anyway, but you're right that it's perhaps redundant.
I don't think it's too noisy (unless your terminal line wraps or something like that), but logging the whole payload does push out the user id a bit further, which I think is the thing you'd usually be looking at. Since it's a Member object we could for example log f"Posting kick note for user {member} ({member.id})" to expand on the id
It comes with the slight risk that someone changes the payload but forgets to update the log, causing it to lie. But you're right that it obfuscates the important information. I'll adjust it.
54fb163 Verification: avoid logging whole kick note pay... - kwzrd
Build 20201016.2 succeeded
GitHub
00:02:52
Bot
7b40cb6 Verification: implement kick note post helper - kwzrd
ba7429a Verification: add notes to kicked users - kwzrd
5f4552f Verification: simplify kick note reason - kwzrd
54fb163 Verification: avoid logging whole kick note pay... - kwzrd
5df2fa2 PR #1233 Verification: add note to kicked members - kwzrd
Build 20201016.3 succeeded
GitHub
00:04:52
Bot
Connected!
A permanent infraction will have its "Remaining" attribute displayed as "Expired" due to the following lines of code:
Remaining is "None" not because it has expired, but because there is no defined time remaining for an infraction that is not scheduled to expire. Previously, there was a suggestion in issue #668:
For fun, we could put (โ) next to perm...
I filed #1241 before noticing this, but that's something this should cover.
Works well in testing now, awesomesauce.
Postgres backup completed!
Let's handle the frontpage stuff in a different PR. I think maybe this is ready to merge now?
Build 20201017.1 succeeded
GitHub
00:00:55
Seasonal Bot
I'd also like to see a frontpage direct link that can direct to it in a lovely graphic manner.
On finishing my review, I notice you've mentioned something about this here, however I'm not a super fan of the plain-ness and the temporary feeling it gives off.
Build 20201017.1 succeeded
Leon Sandรธy
00:04:19
Site
To make sure we're not interrupting the Core Devs when they're having their Core Dev Sprint, I've added the Sprinters role to our constants and added them to our filter whitelist. To make this easier, I've now made it so all filter features that use a role whitelist use the same role whitelist constant. That makes maintenance a bit easier.
In the process, I've also added a few line breaks in config-default.yml to kaizen it up: Now all groups have two line breaks between them.
Build 20201017.1 succeeded
GitHub
00:03:07
Bot
Thanks, looks good to me. Having the sprinters on the whitelist will definitely be convenient for file sharing and command (or chat) cooldowns.
Works great, thanks for the fix. There is a good opportunity to test against r/test's top weekly posts:

Also works against NSFW-only subs.
57786e9 Restrict nsfw subreddit(s) or similar (subreddi... - RohanJnr
0b836a5 Merge remote-tracking branch 'upstream/master' ... - RohanJnr
f32a665 Filter out reddit posts which are meant for use... - RohanJnr
d8fbeed handling empty list error in get_top_posts() me... - RohanJnr
3554a57 re-add comment. - RohanJnr
Build 20201017.2 succeeded
GitHub
00:04:31
Bot
Connected!
Since this is somewhat critical I decided to merge it even with an unresolved comment from @Numerlor. It only applies to code style and can be addressed separately if necessary. Feel free to continue the conversation.
Build 20201017.3 succeeded
GitHub
00:04:25
Bot
Connected!
Updates:
Build 20201017.2 succeeded
GitHub
00:00:57
Seasonal Bot
Why not, although I'd probably format it more as:
(infr id: {id_}, n infractions total)
b1f2b40 Move code block formatting detection to a separ... - MarkKoz
652bc5a Code block: add helper function to check for he... - MarkKoz
8af7162 Code block: add helper function to check channe... - MarkKoz
3b967c5 Code block: add helper function to check if msg... - MarkKoz
76eff08 Code block: add helper function to check for ch... - MarkKoz
Build 20201017.4 succeeded
GitHub
00:02:50
Bot
Build 20201017.5 succeeded
GitHub
00:04:43
Bot
I think this should still show this message, because newer users may not see it.
@mbaruh what should I do know? wait for merging #1204 and then work on that?
The purpose of this PR is to provide one location in the code which is responsible for checking whether a given channel is a mod channel.
Currently this check is performed in the following locations:
!user - If it's a mod channel, it will also display notes and nominations.Issues begin when the defin...
Build 20201017.6 succeeded
GitHub
00:02:38
Bot
Build 20201017.7 failed
GitHub
00:00:53
Bot
Build 20201017.8 succeeded
GitHub
00:02:49
Bot
You mean setting raise_for_status to True and when this send any error?
Prevailing style for a multi-line expression would be:
return (
a
or b
)
How would you feel about handling each case separately and logging the decision made? For example:
def is_mod_channel(channel: discord.TextChannel) -> bool:
"""True if `channel` is considered a mod channel."""
if channel.id in constants.MODERATION_CHANNELS:
log.trace(f"Channel #{channel} is a configured mod channel")
return True
mod_categories ...
Ah nevermind that, this shouldn't go directly to the user since we don't have the proper handling for it in the error handler.
Though raising for status and logging the exception (as a warning or an exception) would cover all the status errors along with things like connection errors which are currently unhandled
Build 20201017.9 succeeded
GitHub
00:04:42
Bot
Connected!
Ok, I'll fix the expression.
Yeah, I think adding the constant is a good idea, it will indicate why those categories are needed in the config file.
As for logging, I think it largely depends on the level of granularity the core developers want for it. Handling it outside of the function allows you to add relevant context. I'm fine with whatever you think is better.
Mini text-based slots command for users to fool around
Thank you for contributing to Python Discord!
Please check out the following documents:
Build 20201017.10 failed
GitHub
00:00:53
Bot
Hi, thanks for your contribution. We ask that new contributors only work on approved issues, to ensure that we are interested in the feature being developed. The code you have added does not solve any existing issues, imports dependencies that we do not use, and does not align with our contributing guidelines. For these reasons I am going to close this pull request. Please review the linked document and start with opening an...
Thank you for contributing to Python Discord!
Please check out the following documents:
Build 20201017.2 succeeded
GitHub
00:02:22
Site
Is very convenient when writing utility functions that rely on the bot's state, but aren't in cogs and therefore lack the typical way to access the instance. No more passing around of the instance as an arg! I've gone around the code base and removed any now-unnecessary bot arguments. The changes are nicely in separate commits, so they should be easy to follow.
Build 20201017.11 succeeded
GitHub
00:02:48
Bot
I think I prefer SeasonalBot's approach with creating the instance in bot.bot and only importing it into the __main__ to call run. Having to do from bot.bot import bot is a little eh, but I'd probably prefer it to what's happening in the __init__ with this approach.
91d6f52 display inf id actioned in mod channel - mbaruh
30f79ea Merge branch 'master' into mbaruh-inf-id - scragly
28abf84 Merge pull request #1240 from python-discord/mb... - scragly
39ab2d8 Allow !eval in #code-help-voice-2 - Akarys42
9b7af4e Merge branch 'master' into mbaruh-mod-channels - mbaruh
This could be just be and a consequence of this being new, but when going over it I thought of bot as a regular object that held the instance, which made it a bit confusing. I think something like the name bot_instance that's imported using a from import could be clearer.
Now there are two methods of accessing the bot: the global instance, and the argument that gets passed to all cogs. Should this be unified to use the global instance? It'd be more consistent within this codebase, but ...
Build 20201017.12 succeeded
GitHub
00:02:40
Bot
Having to do from bot.bot import bot is a little eh,
In such case, the name could be bot_instance, which would ease confusion.
but I'd probably prefer it to what's happening in the init with this approach.
The redis session and intents code would have to be moved over too. I don't like the idea of substantial code execution upon import, even if that may be a more superficial contention in this case. __main__.py does slightly feel like a better place for this code, but a...
@spitfire-hash #1204 makes some extensive changes to the command, I think it's best if you waited for it to be merged, yes.
Thanks, I think it's better this way. Logging the exact decision helps a lot during testing. The caller can always log more context ~ both before, and after the check ~ if necessary.
The code is functional and I agree that this is an improvement. Please double-check the configured category IDs. I cannot help verify them as I don't see those channels.
It's good to include the phrase "Closes #1175" ([or a variation thereof](https://docs.github.com/en/enterprise/2.16/user/github/managing-y...
Not part of this PR's diff, but I feel like we could make the first predicate simpler. Checking the intersection of ctx.author's role ids and the constants should work, unless I'm missing something.
In such case, the name could be bot_instance, which would ease confusion.
I'd prefer that name a lot.
I don't like the idea of substantial code execution upon import, even if that may be a more superficial contention in this case.
I think it's fine given the context of our project. It's code that has to execute at init time either way, before the bot connects. The difference is just the module in which it happens. However now that I think about it, moving it to bot.bot would ca...
Looking good, some minor fixes. Testing things locally now.
It isn't necessary to automatically add back the role.
I'm tempted to say that some of this is redundant.
@command(aliases=('vban',))
async def voiceban(self, ctx: Context, user: FetchedMember, *, reason: t.Optional[str]) -> None:
Some grammar fixes
title="Voice ban pardoned",
content="You can now verify yourself for voice access again.",
Tempted to say that for clarity we should DM the user with this instead. The message disappearing makes it difficult to read what the conditions are while testing locally, so I can't imagine it being too clear in production.
If we want some feedback in the channel, we could have a "check your DMs" message in the channel.
await ctx.author.send(
Okay, all tested locally and everything works. However, some notes.
One thing I need to mention which I forgot. This might be null. We need to account for that, I'm tempted to say we give away a free pass when this happens and just set it to a time delta 3 days ago. The data will correct itself after a week or so and set the users to have a valid date.
Build 20201018.1 failed
GitHub
00:01:03
Bot
I've decided to do some refactoring with __init__.py and __main__.py before trying out moving the instance variable to bot.py. But then I realised I somewhat strongly prefer the explicitness of assigning the instance to the variable in __main__.py rather than having it be done implicitly upon importing bot.py. This left the following arguments:
e18b590 Set up Sentry when running rather than upon import - MarkKoz
Build 20201018.2 succeeded
GitHub
00:02:38
Bot
Build 20201018.1 succeeded
GitHub
00:00:56
Seasonal Bot
Postgres backup completed!
Build 20201018.3 succeeded
GitHub
00:02:49
Bot
I think it's not necessary, as this already logs response status code and I think connection error will raise error anyway?
@Numerlor Changes is now made.
Build 20201018.8 failed
GitHub
00:02:34
Bot
Build 20201018.9 failed
GitHub
00:02:12
Bot
Build 20201018.10 failed
GitHub
00:02:26
Bot
Build 20201018.11 succeeded
GitHub
00:02:52
Bot
Just some minor copy and stylistic changes.
One thing that isn't great is the formatting of voice ban infractions.
The type field here is visually displeasing, and I would suggest we split at _ and capitalise each word.
Grammar
await ctx.send(f"{ctx.author.mention}, check your DMs.")
More appropriate DM description.
description=f"We were unable to find user data for you. Please try again shortly, if this problem persists please contact the server staff through Modmail.",
This should probably be updated since it is in an embed.
This seems like an arbitrary restriction, there is no reason why we can't voice ban users who have not passed the gate.
Build 20201018.13 failed
GitHub
00:00:49
Bot
Build 20201018.14 failed
GitHub
00:00:51
Bot
Build 20201018.15 failed
GitHub
00:02:37
Bot
Build 20201018.16 succeeded
GitHub
00:02:50
Bot
Some final minor grammar fixes.
We don't need this many aliases.
@command(aliases=('voiceverify',))
@has_no_roles(Roles.voice_verified)
@in_whitelist(channels=(Channels.voice_gate,), redirect=None)
async def voice_verify(self, ctx: Context, *_) -> None:
failed sounds better than not passed.
title="Voice Gate failed",
Let's use bullet points here actually.
description=FAILED_MESSAGE.format(reasons="\n".join(f'โข You {reason}.' for reason in failed_reasons)),
Build 20201018.22 succeeded
GitHub
00:03:09
Bot
Looks good, thanks for your work.
9035611 Create base Voice Gate cog - ks129
7039702 Define Voice Gate channel, role and requirement... - ks129
80409d4 Add voice gate configuration to config-default.yml - ks129
0d05c45 Merge remote-tracking branch 'up/master' into v... - ks129
9c1f66e Add voice ban icons and show appeal footer for ... - ks129
Build 20201018.23 succeeded
GitHub
00:04:56
Bot
Connected!
c49eb65 Send response in verification if DM fails. - scragly
This PR makes two adjustments to the voice gating system:
In-Channel response fallback.
At the moment, the bot will attempt to DM the verification result for a member which is reliant on privacy settings allowing member DMs. This commit should add a suitable fallback of sending the response in the voice-verification channel instead. As the channel will delete all bot messages automatically after 10 seconds, there was no need to add a delete_after argument to the message sent in-channe...
Build 20201018.24 succeeded
GitHub
00:02:56
Bot
Build 20201018.25 succeeded
Joseph Banks
00:04:49
Bot
Connected!
0813c58 Change error msg for roll to use correct prefix - gustavwilliam
The command previously sent ! as the prefix, while . is the correct one. Now imports prefix from bot.constants, so it'll always be up to date.
Previous output:
New output:
pipenv lock?pipenv run lint)?Build 20201018.2 succeeded
GitHub
00:00:59
Seasonal Bot
Build 20201018.3 succeeded
GitHub
00:03:01
Seasonal Bot
Connected!
301a0ce Ensure verified users can see verified message. - scragly
When verified users get their role, they cannot see the voice-verification channel anymore, so I've added a 3 second delay for granting the role in order to ensure there's some time for them to see the response.
I've also moved the DM message to only be sent if the DM message succeeds, and to not mention them in-channel to avoid distracting them from the DM notification unnecessarily, as I'm sure they'll see a near-instant response to their command usage in that channel.
Build 20201018.26 failed
GitHub
00:00:48
Bot
Build 20201018.27 succeeded
GitHub
00:03:11
Bot
Build 20201018.28 succeeded
GitHub
00:02:50
Bot
I checked the categories, the ID's are correct.
Added the "closes" part
I feel like we could make the first predicate simpler
Unless there's a matter of efficiency, I think the current line makes it pretty clear what it does.
0bf48fc Instruct to reconnect to voice channel if conne... - scragly
Build 20201018.29 succeeded
GitHub
00:03:05
Bot
I shall practice more when I have time, sorry for this late response.
Build 20201018.1 failed
Joseph Banks
00:01:29
Site
Build 20201018.2 succeeded
Joseph Banks
00:04:09
Site
Build 20201018.3 succeeded
Joseph Banks
00:04:39
Site
Currently, if two users invoke the silence command at the same time, the value of the second silence will go to the redis cache while the first value will be used in the scheduler, causing some very weird behaviour, apart from the unexpected two silences going through.
We should use a lock on the command for the channel it was invoked in. There shouldn't be any issues from multiple unsilences as far as I can see but also using a lock there doesn't seem like a bad idea
async def _set_silence_overwrites(self, channel: TextChannel) -> bool:
To me, silence_overwrites either sounds like a variable that contains the overwrites for silences or a method that silences overwrites; not sure if adding the set or an another name would be a better choice
I agree, the tool would be used when wanting to compare running times, the output isn't the focus here. For that you have the normal eval. It's also more in line with how standard timing tools work.
async-rediscache does quite a few debug logs per operation, which drown out the bot logs around them without bringing information of much relevance when developing on the bot, pushing the logging level to only show warnings should keep the logs from the module only to what may matter.
Currently the module only does a couple of error logs and one critical log in places where an exception is raised anyway, but this will make sure that warnings still go through in case they are added in the f...
Build 20201018.30 succeeded
GitHub
00:02:50
Bot
Does this call have any use? Didn't want to remove it in case I missed something
I'm not sure this is necessary. It would make sense for a system with mainly experienced users, but we have a constant stream of new users using the system, so there is never really a point at which we don't need to advertise it anymore.
It might be worth it to reduce noise in the help channel, but it doesn't cause much of it, and it would have to be worth potentially hiding this feature from a lot of users.
Good question. I doubt it's useful, but it may actually do something (as in, create a logger instance there in the logging hierarchy instead of a placeholder object). Not sure why it's there, honestly.
Not sure if this is doable without a whitelist of some kind; without keeping some kind of whitelist/blacklist for urls we could keep a list of extensions we don't want through (commonly malicious stuff like rar, exe, etc.) and if the url path ends with one of them, block the message. This shouldn't interfere with paste services since they'll end with extensions that won't be there, but some sites may use the "extension" for something else.
Build 20201019.1 succeeded
Joseph Banks
00:04:50
Bot
Connected!
I quite like the idea. Like Mark said as well, having it only sends DMs of possible would be a nice addition. The only real issue I can see with that is the user not realising that the message was deleted and sending it again. Maybe we could reduce the server message to something simple that mentions the main cause of the deletion and asks the user to check their DMs for more info. If they donโt have DMs enabled, it would simply be like today.
@Numerlor added locks in a03fe44. It's actually a good idea to have a lock on the unsilence too because I foresee race conditions between a silence and unsilence for the same channel.
Postgres backup completed!
This looks good, and is a nice solution. I also really like how thorough the PR description is. Nice work!
You have some good points @mbaruh. Itโs not very annoying to have the โpin messageโ there, while there may be a cost in removing it. I think we should just keep it.
Build 20201019.2 succeeded
GitHub
00:05:18
Bot
Connected!
I think it can be removed. The line was added in ebead84ae0eb62ab64b329dfd7fff61ff5de628d and left in this state after e8ad8bb3cf735e9fef09413b8b118b2eff601797.
b53ac93 Allow requesting API data from internal DNS - scragly
Currently, we're experiencing some issues requesting API data via the public domain, likely caused by some Cloudflare weirdness.
This change puts the internal domain api.site, referenceable through the internal Docker DNS only, in the whitelist of ALLOWED_HOSTS.
This should be merged before making further changes, so we can confirm the internal domain works as expected after a deployment and before we move change the bot to use it.
Build 20201019.1 succeeded
GitHub
00:02:29
Site
4f68996 Change default API URL to internal docker network. - scragly
Currently, we're experiencing some issues requesting API data via the public domain, likely caused by some Cloudflare weirdness.
This change sets the internal domain api.site, referenceable through the internal Docker DNS only, as the default API domain in config.
This should be not merged until https://github.com/python-discord/site/pull/413 and https://github.com/python-discord/salt/pull/21 are both merged and tested manually to resolve correctly.
Build 20201019.3 succeeded
GitHub
00:03:14
Bot
Build 20201019.4 succeeded
GitHub
00:02:56
Bot
Build 20201019.5 succeeded
GitHub
00:03:06
Bot
I like the way you're approaching a few of the issues at hand. Though, there are a few things to fix before it'll be ready.
prev_record = self.candy_records.get(str(user.id), 0)
self.candy_records[str(user.id)] = prev_record + 1
This previously added the candies to the person who sent the message and not to the person who clicked the candy. user.id will get the ID of the person who reacted to the message, while message.author.id will get the ID of the person who sent the message. An easy fix once you spot the issue.
if (prev_record := self.candy_records.get(str(user.id))) is not None:
lost = min(random.randint(1, 3), prev_record)
self.candy_records[str(user.id)] = prev_record - lost
The same thing goes for the skull reactions.
Adding a scenario for when you don't yet have any candies or all of yours are stolen would be nice. Right now, it says that all of your candies were stolen, even if you didn't have any candies to lose.
Postgres backup completed!
something to do with matching against a dict
yep!
Out of interest, is this documented somewhere?
It's a bit of a dig. The documentation for extractOne which is used does only say a tuple containing the match and the score, but it uses [extractWithoutOrder](https://github.com/seatgeek/fuzzywuzzy/blob/2188520502b86375cf2610b5100a56935417671f/fuzzywuzzy/process.py#L...
Requested by some people in meta.
Unsure if this is feasible or will be readable, but I think it's worth experimenting with.
I think this would be nice to have.
There are a few things to consider. Do we want it to be a lemoji or an ordinary emoji? Should it be letters spelling out the word or should it simply symbolize "thanks"?
I'd happily discuss this in #dev-branding and brainstorm a few options!
Ah, I didn't realise that these would only work on the top hash and not its keys where we actually store the data.
You mentioned some kind of rewrite on discord, what would that involve? Currently not having access to things like idletime and key expires limits the usability of the package as a more complex cache (setting on every get is a bit redundant when redis has the functionality in an another type), is this out of scope for now or would the rewrite allow it?
8652ddb Help channels: move to a subpackage - MarkKoz
0f3baf3 Help channels: remove get_clean_channel_name - MarkKoz
5d3d860 Help channels: move name and channel funcs to s... - MarkKoz
bc71013 Help channels: move validation code to init.py - MarkKoz
970c607 Help channels: rename modules to use singular t... - MarkKoz
Build 20201020.1 succeeded
GitHub
00:02:59
Bot
There are some outdated docstrings in the SilenceNotifierTests that were missed in the last PR and still reference FirstHash (add_channel and remove_channel specifically). Seems to look good otherwise
Postgres backup completed!
Build 20201021.1 succeeded
GitHub
00:01:01
Seasonal Bot
Build 20201021.2 failed
GitHub
00:00:00
Seasonal Bot
Build 8674 failed
GitHub
00:00:00
Seasonal Bot
Build 20201021.3 succeeded
Sebastiaan Zeeff
00:03:25
Seasonal Bot
Connected!
hot fix for the hackstats command
it was raising key error:

now it works for users that need checking for acceptance

Build 20201021.4 succeeded
GitHub
00:00:58
Seasonal Bot
Build 20201021.5 succeeded
GitHub
00:03:04
Seasonal Bot
Connected!
Build 20201021.1 succeeded
Joseph Banks
00:04:29
Bot
Connected!
Build 20201021.6 succeeded
GitHub
00:00:59
Seasonal Bot
Build 20201021.7 succeeded
GitHub
00:01:02
Seasonal Bot
This if-statement addresses exactly this.
if prev_record := self.candy_records.get(str(user.id)):
Sorry for responding late on this. Yeah the logic was flawed the way you mentioned. I have addressed those issues. Thanks.
Sure, looks good to me
I'm talking about the specific case where you have 0 candies. This says "... stole all of your candies..." where I think something like "The ghost tried to steal your candies, but you had none to begin with!" would be more fitting.
Build 20201021.8 failed
GitHub
00:00:59
Seasonal Bot
Build 20201021.9 succeeded
GitHub
00:01:02
Seasonal Bot
Build 20201021.1 succeeded
GitHub
00:02:38
Site
b1f2b40 Move code block formatting detection to a separ... - MarkKoz
652bc5a Code block: add helper function to check for he... - MarkKoz
8af7162 Code block: add helper function to check channe... - MarkKoz
3b967c5 Code block: add helper function to check if msg... - MarkKoz
76eff08 Code block: add helper function to check for ch... - MarkKoz
Build 20201021.2 succeeded
GitHub
00:02:28
Bot
Build 20201021.3 succeeded
GitHub
00:04:40
Bot
Connected!
Closes #277
We have added a file called spooknamerate.py which contains relevant code for the game.
Everyday, a random name is generated from a list of first and last names. (The data was downloaded from mockaroo). This name is sent in #seasonalbot-commands and the users need to spookify the name and register it using the command .spooknamerate add the name.
Two hours before the game ends, a poll is sent out, a...
Thank you for contributing to Python Discord!
Please check out the following documents:
Build 20201021.10 failed
GitHub
00:00:56
Seasonal Bot
An idea for the emoji: a gratitude gesture like this: https://www.google.com/search?q=gratitude+gesture,+hand+on+chest&tbm=isch Eyes closed, smiling, hand on chest.
@jb3 update to the harakiri i didn't change the comment, figured that would be worth it to change for documentation purposes.
Thank you for contributing to Python Discord!
Please check out the following documents:
Build 20201021.2 succeeded
GitHub
00:02:18
Site
Actually, I need to reset this anyway, it didn't fix the original problem it was meant to solve :shipit:
I appreciate you reminding me though! :smile:
Build 20201021.3 succeeded
Joseph Banks
00:04:01
Site
200bfd0 Add handling of off-server users to user command - mbaruh
This addresses point 5 in https://github.com/python-discord/bot/issues/654
How it looks like currently:

How it will look like:

I wonder if it stands out enough. A moderator might miss the fact that they're not on the server.
Build 20201021.4 failed
Joseph Banks
00:01:29
Site
Build 20201021.4 succeeded
GitHub
00:02:25
Bot
Just to make sure, this doesn't close the issue. I will be working on point 1 after a future PR from @scragly is merged
Build 20201021.5 succeeded
Joseph Banks
00:04:00
Site
This won't be too effective since the user convert only looks at the cache. Chances are that if the user is not in the guild, they won't be in the cache. Maybe briefly after they get banned or leave, but this won't be the case once the bot restarts. There is a custom FetchedUser converter which addresses that problem.
I used it on a user that was never on the server and it seemed to work without a problem
After checking out and running it locally, I can confirm it does not work:

fe7a13c Use FetchedMember for user annotation - mbaruh
Build 20201022.1 succeeded
Joseph Banks
00:04:07
Site
Build 20201022.1 succeeded
GitHub
00:03:24
Bot
Build 20201022.2 succeeded
Joseph Banks
00:04:30
Site
I propose these changes to the mute command:
Since this is related to #1251 I can deal with it at the same time.
e5355de Add wave-style hero, 100K promo, timeline card. - scragly
This is a draft PR to track the progress of the first stage of the frontpage design update.
The following things are being aimed for:
The following is part of the TODO list for this P...
Build 20201022.3 succeeded
GitHub
00:02:33
Site
Build 20201022.4 succeeded
GitHub
00:02:28
Site
Build 20201022.5 succeeded
GitHub
00:02:20
Site
Build 20201022.6 succeeded
GitHub
00:02:25
Site
Build 20201022.7 succeeded
GitHub
00:02:56
Site
Postgres backup completed!
Can't fully review it at the moment, but most of the things I found now are done multiple places in the code. One comment counts for all the instances.
I'm also not a fan of all the # comments around the code, most of them don't add any value, just noise. For instance
if final: # if it is the final
The code here is self explanatory, and dont need the comment.
While this is a good comment, since I was about to question why you're sleeping there for 1 sec.
`await asyncio.sleep(1) ...
As far as i know these might crash some developers editor, i'd try to find their unicode-code and use that instead.
I'd appreciate splitting it up into 2 strings, instead of using \
return await ctx.send(
f"The word ~~is~~ was **{self.word}**."
" The poll has already started, so you cannot add an entry.")
(Same for others with \ linebreaks)
I'd rather put this at the top with a if self.poll, and fail fast with a return after. That way we removed a whole indenation level of the command logic.
I like this quite a bit. It looks good, the code is great, overall a solid PR.
I have only two pieces of feedback, but they're not showstoppers.
I think we should get rid of the Discord cutout element in the top right now that we have this design. We'd probably be better off just having the More dropdown in the top right and adding the Discord link as a normal navbar item alongside Reddit and so on.
This PR has a slightly lower comment-to-code ratio than would be ideal. Which i...
currently, if a github username is not found, it sends No valid october contributions found for username, which is a bit misleading. Now it sends Github user not found: username.
(For get_october_prs)
This way, get_stats can handle the cases and send user-not-found or no-prs messages accordingl...
Build 20201022.2 succeeded
GitHub
00:01:00
Seasonal Bot
I know that this didn't get approved in #dev-contrib, but when I read timeline, this disturb me more and more.
Now when animation go out of screen, this animates hiding process. This also allows bounce in again.
Video: https://www.dropbox.com/s/oq7v23fs8idwpjv/PyDis Timeline.mov?dl=0
Build 20201022.8 succeeded
GitHub
00:02:19
Site
I'd probably nitpick a little on the weird floaty var and exclamation mark - but I guess this is the prevailing style in this file, so I suppose it's fine.
You know what, this looks pretty good, and it's a harmless improvement that you clearly feel strongly about.
I appreciate you including a video. Approved.
I copy-pasted this part.
Build 20201022.3 succeeded
GitHub
00:03:10
Seasonal Bot
Connected!
Build 20201022.9 succeeded
GitHub
00:04:21
Site
aa06b09 Added voice_chat to eval list - MrHemlock
Build 20201022.2 succeeded
GitHub
00:05:02
Bot
Connected!
6bb0768 Update Python Discord badge to 100k members. - Den4200
Signed-off-by: Daniel Brown
Build 20201022.3 failed
GitHub
00:02:29
Bot
voice_chat: 412357430186344448
I think we should allow eval in the whole VOICE category instead of manually allowing every channel.
I think we should allow eval in the whole
VOICEcategory instead of manually allowing every channel.
Fair point, changing now.
0a02ba8 Update config-default.yml
Build 20201022.4 succeeded
GitHub
00:03:09
Bot
Build 20201022.5 succeeded
GitHub
00:02:56
Bot
Build 20201022.6 succeeded
GitHub
00:02:59
Bot
Build 20201022.7 succeeded
GitHub
00:05:09
Bot
Connected!
I changed that, thanks for the feedback!
I used the discord format (like :jack-o-lantern:)
Build 20201022.4 failed
GitHub
00:01:05
Seasonal Bot
It just puts a pause for one second after sending each message. Shall I remove it?
Connected!
Build 20201022.8 succeeded
GitHub
00:05:01
Bot
Build 20201022.5 failed
GitHub
00:00:48
Seasonal Bot
Build 20201022.9 succeeded
GitHub
00:04:40
Bot
Connected!
Build 20201022.7 failed
GitHub
00:01:02
Seasonal Bot
Build 20201022.8 failed
GitHub
00:00:57
Seasonal Bot
Postgres backup completed!
for some people the PRs listed wasn't the same as the ones on the website, those PRs are the ones from before october 3rd, and passed review period. Now it's listed
Before/after

I think I'd rather have the icons left aligned and close together, but I also wouldn't particularly mind it either way.
Everything is lo...
Thinking about it, I think removing the explicit CTA is not a great idea from a UX perspective. I think that the new navbar item isn't as clear as the old CTA. I think I'd rather have the explicit dark blurple CTA, but this is the opposite of what @lemonsaurus thinks, so I'd like to discuss whether removing that is a good idea.
This is a good start. We'll hook up some stuff for this soon.
Eventually we'll likely use Kubernetes cluster-local DNS which may reuqire some changes, but this is a good for now.
Build 20201023.3 succeeded
GitHub
00:02:19
Site
Build 20201023.6 succeeded
GitHub
00:02:07
Site
Build 20201023.5 succeeded
Joseph Banks
00:04:03
Site
Build 20201023.7 succeeded
Joseph Banks
00:03:55
Site
Build 20201023.8 succeeded
GitHub
00:02:15
Site
Postgres backup completed!