#dev-log
1 messages · Page 53 of 1
Build 20200921.12 succeeded
GitHub
00:04:49
Bot
Connected!
The website and bot are on the same machine. It is probably still worthwhile to ping the website, as it does goes through CloudFlare. I'll be taking this issue if yall don't mind.
Build 20200921.13 succeeded
GitHub
00:03:22
Bot
Thanks for taking on the task of migrating this cog over from bot!
I think this should go under the Client named tuple, especially since we don't need bot_avatar.
You can just use str(bot.user.avatar_url) instead, and remove this constant.
This bot does not have a modlog, so there's no reason to include it here.
UNLOAD_BLACKLIST = {f"{exts.__name__}.utils.extensions"}
Build 20200921.1 succeeded
GitHub
00:02:36
Site
Build 20200921.29 succeeded
GitHub
00:00:55
Seasonal Bot
Build 20200921.30 succeeded
GitHub
00:01:03
Seasonal Bot
The roles count feels a bit out of place under the member counts, maybe the description "header" would be more fitting for it?
Are the features necessary for the (user) embed? The information they expose feels unnecessary to know in almost all cases and they clutter it quite a bit
Build 20200921.31 succeeded
GitHub
00:00:58
Seasonal Bot
Just a few more minor things.
This isn't the correct repository.
github_bot_repo = "https://github.com/python-discord/seasonalbot"
81711d7 Created file for moderation utils tests + added... - ks129
1549690 (Moderation Utils Tests): Added imports, modifi... - ks129
fa6a0ae (Moderation Utils Tests): Created tests for ha... - ks129 [98f7a37](https://github.com/python-discord/bot/commit/98f7a3777152b32bfda24f9d5add938479827c85) (Moderation Utils Tests): Created tests for no... - ks129
4a746fc (Moderation Utils Tests): Created tests for `no... - ks129
8c39b74 Remove with_role decorator in favour of has_any... - MarkKoz
24657d4 Implement the without_role decorator by negatin... - MarkKoz
b0a2ebb Use has_any_role's predicate directly - MarkKoz
8e161a3 Implement role checks using has_any_role - MarkKoz
f7d436d Rename role checks and decorators - MarkKoz
Build 20200921.14 succeeded
GitHub
00:03:01
Bot
Build 20200921.15 succeeded
GitHub
00:03:59
Bot
Connected!
Build 20200921.16 succeeded
GitHub
00:05:08
Bot
Connected!
Build 20200921.17 succeeded
GitHub
00:04:58
Bot
Connected!
Excellent commits and code! I really enjoyed reviewing this one. Everything looks good to me.
Writing tag will be good for this bcz tag main purpose is for info only
Closes #697
This cog contains latency checks between the Python discord site, Discord WebSocket protocol latency, and the difference from ctx.message.created_at and an immediate datetime.datetime.utcnow() after the command is called.
Latency in milliseconds are rounded to 3 decimal places.
The only package use...
Build 20200922.1 succeeded
GitHub
00:03:29
Bot
81711d7 Created file for moderation utils tests + added... - ks129
1549690 (Moderation Utils Tests): Added imports, modifi... - ks129
fa6a0ae (Moderation Utils Tests): Created tests for ha... - ks129 [98f7a37](https://github.com/python-discord/bot/commit/98f7a3777152b32bfda24f9d5add938479827c85) (Moderation Utils Tests): Created tests for no... - ks129
4a746fc (Moderation Utils Tests): Created tests for `no... - ks129
Build 20200922.2 succeeded
GitHub
00:02:47
Bot
409f0b5 Determine eligible duckpond emojis dynamically - SebastiaanZ
3fea325 Ignore non-staff messages for our duckpond - SebastiaanZ
9410194 Add channel blacklist for duckpond - SebastiaanZ
d68d6d2 Fix relay race condition in duckpond using a lock - SebastiaanZ
0c5c472 Remove unit tests for duck pond - SebastiaanZ
Build 20200922.3 succeeded
GitHub
00:04:33
Bot
Connected!
After having a thought about this proposal, I came up with the following possible implementation (some details pending).
Schema

Each action taken related to an infraction will be given a new entry in infraction_activity with a relevant action type, such as:
creation, pardon, expiry_edit, reason_edit, voiding, unvoiding
As we don't store expiry values in activities,...
Again with the f-string.
discord_ping = f"{self.bot.latency * 1000:.{ROUND_LATENCY}f} ms"
Just a few small things.
It's probably better to use the format specifier.
bot_ping = f"{bot_ping:.{ROUND_LATENCY}f} ms"
Similarly here with the f-string.
site_ping = f"{delay:.{ROUND_LATENCY}f} ms"
b8747d6 Comment updated from "microseconds" to "seconds" - Xithrius
912bfe0 Replacing the round function with a format spec... - Xithrius
7ce1c29 Replacing the round function with a format spec... - Xithrius
Regarding active, we do need a partial unique index on that column together with the user to ensure they only have one active infraction of that type. Granted, this could be implemented at the API-level, but I think it's more efficient to rely on a constraint failure than to pre-emptively query to ensure there isn't an active infraction already. Also, doing stuff at the db-level is nice when possible, even if we don't necessarily interact with the DB outside of DRF (select queries for stats...
0fee151 Replacing the round function with a format spec... - Xithrius
Build 20200922.7 succeeded
GitHub
00:02:48
Bot
Postgres backup completed!
Description
When using the .snake video command, no response is given by the bot. This is the error message received from a local test bot:
09/21/20 23:40:12 - bot.exts.evergreen.snakes._snakes_cog ERROR: Unhandled tag command error: Command raised an exception: TypeError: Invalid variable type: value should be str or int, got None of type (Invalid variable type: value should be str or int, got None of type )
This is most likely the result of an API change or similar, resulting...
What are codespaces?
In their latest Satellite, GitHub announced the launch of Codespaces, an online development environment running VSC, fully integrated with GitHub. As the time of writing this, the feature is in public beta. You can read more about it here.
What needs to be done?
I’ve tried this recently to review a PR, it was pretty great, although some manual setup was still required, like installing pipenv, syncing it and installi...
What are codespaces?
In their latest Satellite, GitHub announced the launch of Codespaces, an online development environment running VSC, fully integrated with GitHub. As the time of writing this, the feature is in public beta. You can read more about it here.
What needs to be done?
I’ve tried this recently to review a PR, it was pretty great, although some manual setup was still required, like installing pipenv, syncing it and installi...
What are codespaces?
In their latest Satellite, GitHub announced the launch of Codespaces, an online development environment running VSC, fully integrated with GitHub. As the time of writing this, the feature is in public beta. You can read more about it here.
What needs to be done?
I’ve tried this recently, it was pretty great, although some manual setup was still required, like installing pipenv, syncing it and installing `docker-comp...
Build 20200922.1 succeeded
GitHub
00:01:04
Seasonal Bot
82a7c5d added period in line 43 to solve D415 - Anubhav1603
7c60922 added value error exception - Anubhav1603
d6b33d6 corrected import order and added annotation for... - Anubhav1603
5a6ed99 changed search_description to s_desc cuz its fa... - Anubhav1603
c908cea changed final to titles_no_underscore - Anubhav1603
Build 20200922.2 succeeded
GitHub
00:02:33
Seasonal Bot
Connected!
Solid, but there's one thing missing
A ping command isn't exactly something that is of any use in any other channel than bot commands, we probably should restrict it to only that channel
when u try to mention channel bot dont reply
-
[x] Web
-
[x] Desktop
-
[x] Android App
-
[x] iOS App
-
[x] I'd like to implement the bug fix
-
[ ] Anyone can implement the bug fix
"Closes #452 "
i catched the unhandled contentError exception
- [x] Join the Python Discord Community?
- [x] If dependencies have been added or updated, run
pipenv lock? - [x] Lint your code (
pipenv run lint)? - [x] Set the PR to allow edits from contributors?
Build 20200922.3 succeeded
GitHub
00:00:58
Seasonal Bot
Thank you the quick fix! One small thing, the return typehint of search_wikipedia should be Optional[List[str]]
Description
An .emojicount command can be used to display the categorical emoji count in the server through an embed.
Reasoning
Due to recent changes as to how emojis in the server in the server are categorized with prefixes, implementing such a command would be fairly trivial.
Proposed Implementation
An .emojicount command can be invoked with zero or more categories. For every category requested, each line in the embed would consist of the following format:
Build 20200922.4 succeeded
GitHub
00:01:03
Seasonal Bot
5f1053d add duckybear emoji - decorator-factory
Thank you for contributing to Python Discord!
Please check out the following documents:
- Join the Discord server! - If you have not already, join the Discord server and introduce yourself in our #dev-contrib channel.
- Python Discord Code of Conduct Code of conduct for our community
- Python Discord Contributor Wiki - A set of resources about setting up our services
It's in PNG, so if we will decide on some important changes I'll try to find time to reproduce it in SVG.
I’m willing to give this a go
81711d7 Created file for moderation utils tests + added... - ks129
1549690 (Moderation Utils Tests): Added imports, modifi... - ks129
fa6a0ae (Moderation Utils Tests): Created tests for ha... - ks129 [98f7a37](https://github.com/python-discord/bot/commit/98f7a3777152b32bfda24f9d5add938479827c85) (Moderation Utils Tests): Created tests for no... - ks129
4a746fc (Moderation Utils Tests): Created tests for `no... - ks129
Build 20200922.8 succeeded
GitHub
00:02:51
Bot
here are some rough benchmarks of the API changes coming in this PR
Creating 1000 users(bulk).
0.39 seconds
Creating 10000 users(bulk).
3.14 seconds
Updating 1000 users all in 1 SQL query.
0.74 seconds
Updating 10000 users all in 1 SQL query.
14.67 seconds
Updating 10000 users by updating 1000 users in 1 SQL query.
7.12 seconds
Updating 10000 users by updating 2000 users in 1 SQL query.
6.78 seconds
Looks like 2000 users in 1 SQL query is the sweet spot.
fc05849 Use async-rediscache package for our redis caches - SebastiaanZ
de4a8d9 Remove vestigial RedisCache class definition - SebastiaanZ
9bb3a48 Use global namespace bot for our RedisSession - SebastiaanZ
1b2c115 Merge branch 'master' into sebastiaan/features/... - SebastiaanZ
6fc9ed3 Merge pull request #1163 from python-discord/se... - SebastiaanZ
This has been partially implemented. The "New test for making sure it returns early if in a blacklisted channel." was ignored; instead, I removed all tests.
"Closes #414 "
I have added two subcommand for partnerzodiac date and zodiac
zodiac
error
date
- [x] Join the [Python Discord Community](https://disco...
Build 20200922.9 succeeded
GitHub
00:05:40
Bot
Connected!
Build 20200922.5 succeeded
GitHub
00:01:08
Seasonal Bot
Works like a charm. Thanks for the fix!
I tested the commands and all seem to be working.
There are a few changes to the design that I suggest.
I suggest the following method for getting the zodiac sign as per month and date.
Have a DICT to store the starting and ending datetime objects of a zodiac sign
example:
zodiacs = { "Aquarius":(datetime(2020, 1, 20), datetime(2020, 2, 18)) }
You can create a new datetime() object with the month and date passed by the user.
Then, you can check if that datetime() object is in between the starting and ending dates as specified in the dict.
lets call the datetime() object created with t...
the function annotation says the return Type is None, so we have to refactor our code to match that
await ctx.send(f"{zodiac_sign.capitalize()} zodiac sign does not exist.")
return
Instead of creating a new variable, you can re-initialize the variable zodiac to its capitalized value.
"Closes #432 "
uninstalled old dpy and installed new d.py with voice as extra
- [x] Join the Python Discord Community?
- [x] If dependencies have been added or updated, run
pipenv lock? - [x] Lint your code (
pipenv run lint)? - [x] Set the PR to allow edits from contributors?
Build 20200922.6 succeeded
GitHub
00:01:02
Seasonal Bot
I think i should skip the year because year can change but date and month will remain same always
Currently if I want to get information about the zodiac sign Libra, I will have to do .partnerzodiac zodiac libra. I feel that just .zodiac libra will be a better choice instead and have partnerzodiac as a subcommand.
The structure I am proposing is:
Group Zodiac
- provides information about zodiac sign by taking zodiac sign name as input.
- provides information about zodiac sign by taking month and date as input.
SubCommand partnerzodiac
- provides a coun...
The year can be anything as that wouldn't matter I believe
this method can be a staticmethod
Why is there a log statement after the return statement? anything after the return statement will not be executed, you should move the log above the return.
there is already a file IO operation within the Class ValentineZodiac so it will be better to have both of them either inside the class as instance variables or outside the class as global variables.
I would say have it inside the class, and load the JSON with another method, say load_zodiac_facts
This is for consistency.
The roles count <-- snip --> description "header" would be more fitting for it?
That's a good idea, and it would make some code a tad bit clearer.
Are the features necessary for the (user) embed?
By features I assume you mean the server features in the embed description. I agree, it gets quite long in the actual server.
@python-discord/core-developers I'll be removing the features section from the embed outside of a moderation channel if no one has an objection to it.
Build 20200922.10 failed
GitHub
00:02:19
Bot
Build 20200922.7 failed
GitHub
00:01:01
Seasonal Bot
Build 20200922.8 succeeded
GitHub
00:01:01
Seasonal Bot
Build 20200922.10 succeeded
GitHub
00:01:04
Seasonal Bot
Build 20200922.11 failed
GitHub
00:02:23
Bot
Build 20200922.11 succeeded
GitHub
00:01:05
Seasonal Bot
6d9b68a Whitelisted the bot_commands channel and all st... - Xithrius
Staff roles and the bot command channel have been whitelisted.
Build 20200922.12 succeeded
GitHub
00:00:47
Seasonal Bot
675eb2f Updated dependencies to match with master and i... - Xithrius
Created app for resources. Made index of it (where is all types of resources) looks exactly same than wiki version of it. Fixes #387 .
Resolved merge conflicts in Pipfile.lock
34b86c4 handled exceptiom of ContentTypeError at search... - Anubhav1603
3ec4721 changed List[str]->Optional[List[str]] - Anubhav1603
a9916fd Changed WikipediaCog-> Wikipedia - Anubhav1603
fe899c1 Changed Wikipedia to WikipediaSearch - Anubhav1603
cf0c7c2 Merge branch 'master' into bug_wiki - MrHemlock
Build 20200922.12 succeeded
GitHub
00:03:36
Bot
Build 20200922.13 succeeded
GitHub
00:05:01
Seasonal Bot
90c3c3b Updated dependencies to include aioping. - Xithrius
9853de0 Created the Latency cog to measure ping in mill... - Xithrius
65f8fb3 Added period to docstring. - Xithrius
427a2dc Description renamed to avoid verbosity. - Xithrius
b8747d6 Comment updated from "microseconds" to "seconds" - Xithrius
Connected!
Build 20200922.13 succeeded
GitHub
00:05:01
Bot
Connected!
Build 20200922.14 succeeded
GitHub
00:02:57
Bot
Looks good, just a couple of style points. While we're in the syncers file, would it be worth changing the namedtuples to NamedTuples?
Personal opinion here so I'd like to hear other opinions, but I don't like the send in a ternary too much; with something like this or message initialized before the check to None being clearer to me
if ctx:
message = await ctx.send(f"📊 Synchronising {self.name}s.")
else:
message = None
The comment doesn't add much here, I think we should just remove it.
Build 20200922.15 failed
GitHub
00:02:21
Bot
Build 20200922.16 failed
GitHub
00:02:43
Bot
73c21c6 Sync: refactor conditional for sending message
- MarkKoz
The suggestion is just as clear, if not clearer, so I don't think this needs much discussion.
I recall it was requested by @lemonsaurus 🤷
would it be worth changing the namedtuples to NamedTuples?
I don't think so. It's internal and the individual attributes aren't really used directly besides the ID. _Diff would have to be generic if done properly, which significantly complicates things.
Don't think there's anything ugly about it with since it is a properly documented method with a clear name https://docs.python.org/3.8/library/collections.html#collections.somenamedtuple._asdict
Code looks good so far, still need to look through the tests.
Do manual per channel overwrites for the roles happen at all to be worth accounting for in the command and not resetting them to None? Although still fairly unlikely, the behaviour will also trigger on cache loss which means an admin will need to do it manually instead
MSG_SILENCE_SUCCESS = f"{Emojis.check_mark} silenced current channel for {{duration}} minute(s)."
Any reason for the parentheses here? Can also leave out the tz since it only gets converted to the timestamp
Same here with the timezones, not strictly necessary
See the commit message
datetime.timestamp()assumes naïvedatetimes are in local time, so
getting POSIX timestamps in UTC isn't easy for naïve ones. Technically,
the timestamp's timezone doesn't matter if all code is on the same page
and parsing it with the same timezone. Keeping it in the local timezone
would be okay then, but I feel safer locking it to UTC explicitly.
Any reason for the parentheses here?
No, they can be removed.
569f2aa Silence: use f-string for message - MarkKoz
Do manual per channel overwrites for the roles happen at all to be worth accounting for in the command and not resetting them to None?
I'm not sure, but I accounted for it for the sake of thoroughness. My thinking is that if it is set manually, the intention may be more permanent than what silence/unsilence does. Therefore, I didn't want to give a false impression by allowing !unsilence to undo such case.
I'm not sure I understand the implications of the different computation methods here, but the timestamp is inherently timezone agnostic and generated on the same machine so they should be fine no? In any case it's not a lot of additional code so I'm not against it, but don't entirely understand the reason for it
That's incorrect. A timestamp is not timezone agnostic. For naïve datetimes, the timestamp will be relative to the system's timezone. I did point out that it's okay since it's on the same machine, but I preferred the explicitness.
81711d7 Created file for moderation utils tests + added... - ks129
1549690 (Moderation Utils Tests): Added imports, modifi... - ks129
fa6a0ae (Moderation Utils Tests): Created tests for ha... - ks129 [98f7a37](https://github.com/python-discord/bot/commit/98f7a3777152b32bfda24f9d5add938479827c85) (Moderation Utils Tests): Created tests for no... - ks129
4a746fc (Moderation Utils Tests): Created tests for `no... - ks129
Build 20200922.17 succeeded
GitHub
00:02:45
Bot
I believe filtering posts and only sending the NSFW error message when no posts pass the filter would be a better option here, currently if the first fetched post happens to be NSFW while none of the others are, the user will get no output.
Build 20200922.18 succeeded
GitHub
00:02:59
Bot
I'd actually welcome the simplification if a majority thinks it's unnecessary.
Build 20200922.19 succeeded
GitHub
00:04:22
Bot
Connected!
81711d7 Created file for moderation utils tests + added... - ks129
1549690 (Moderation Utils Tests): Added imports, modifi... - ks129
fa6a0ae (Moderation Utils Tests): Created tests for ha... - ks129 [98f7a37](https://github.com/python-discord/bot/commit/98f7a3777152b32bfda24f9d5add938479827c85) (Moderation Utils Tests): Created tests for no... - ks129
4a746fc (Moderation Utils Tests): Created tests for `no... - ks129
Build 20200922.20 succeeded
GitHub
00:02:31
Bot
Build 20200922.21 succeeded
GitHub
00:04:23
Bot
Connected!
Build 20200923.1 succeeded
GitHub
00:04:28
Bot
Connected!
Is there a reason we need voice features from discord.py? I can't think of any cogs that use it off the top of my head. If it's truly not needed, we shouldn't install it.
Now that we don't need git anymore, make sure to also remove its installation from the Dockerfile.
In Issue 432 reason is mentioned ,we require this for spooky sound command 😁
Build 20200923.2 succeeded
GitHub
00:04:14
Bot
Connected!
Build 20200923.3 failed
GitHub
00:02:27
Bot
Build 20200923.4 succeeded
GitHub
00:02:59
Bot
I did not even know that this is a thing, but it sounds like a reasonable addition.
Using the constant improves readability for me as well. I think the main thing that looks "weird", is the combination of an escaped slash with an f-string placeholder. It looks like there's much more going on than just creating a string with a backslash and a grave accent.
Maybe turning into a raw f-string would help, although I have no strong opinion on that:
# with constant
valid_ticks = fr"\{parsing.BACKTICK}" * 3
# without constant
valid_ticks = fr"\`" * 3
Postgres backup completed!
This is what is probably causing the sentry issue SITE-6
Maybe we should also add a count for the missing roles: core devs, event team, python community and partners ?
Build 20200923.1 succeeded
GitHub
00:01:02
Seasonal Bot
Motivation
Currently, the only way to amend an infraction reason is to search and copy the original reason before invoking
!infr edit (last|infr_id) {old_reason} (Edit|Context): {amended_reason}
An infr subcommand that abstracts this action would allow for a nicer interface, at least in my opinion, especially for amending infractions that were needed to be handed out quickly.
Proposed Implementation
A subcommand that's similar in form to infraction_edit to be called...
I think a better approach will be to check if any 1 of the posts does not pass the filter, then send nothing.
This is because, if we query for NSFW subreddit posts from the bot, then we don't want to send any posts, even tho is post is not entirely NSFW, we want to block the subreddit.
SITE-6 is not caused by this as far as I know. It is caused when you
manually visit the OAuth2 callback URL without the information from Discord.
This tag will come in handy, thanks!
Build 20200923.5 succeeded
GitHub
00:02:54
Bot
Well, yes, but from what I could gather on the Internet, the page is still supposed to be visited without any issue.
Since the traceback message is Reverse for 'account_email' not found. and this view is supposed to be managed by AllAuth, I think this is causing it.
Build 20200923.6 succeeded
Joseph Banks
00:04:24
Bot
Connected!
With Dozzle now being functional, I think it becomes even more important to carefully consider logging levels. I'd like to propose two tiny changes for the cogs that I've worked on.
Verification
Every 30 minutes, the verification member update task produces the following:

The 3rd and 5th lines are entirely redundant, and are dropped to TRACE level in bcca56c. The 1st l...
Build 20200923.7 succeeded
GitHub
00:02:53
Bot
Build 20200923.2 succeeded
GitHub
00:00:58
Seasonal Bot
Build 20200923.8 succeeded
GitHub
00:04:29
Bot
Connected!
This issue is required for the development of the issue on the bot repo:
The system will require two new tables: User Events and Scheduled Events
User Events
Fields
- Name (primary key)
- Owner (user ID)
- Subscriptions (many-to-many field of users)
Operations
- Add a new event record
- Add a user to the subs field
- Query subs by name.
- Remove a user from the subs field
- Remove an event
Scheduled Events
Fields
- Event name (foreign key)
*...
I present a design for a full system for managing user events. It will hopefully allow us to accommodate and invite more users to organize their own events, and to properly make use of the new User Events voice channel.
This issue should be implemented alongside the related issue in the site repository site/issues/396
Current State
With the recent changes in the voice channels, we repurposed the Games channel to a `User Events...
I agree with Numerlor. Can't really remember talking about this with you, but I forget a lot of stuff like this so maybe. Maybe it's because of the leading underscore? It is a bit ugly but I also think it's crystal clear.
9a90d6b Sync: remove _asdict comment - MarkKoz
Build 20200923.9 succeeded
GitHub
00:02:52
Bot
Style should be like this
func(
"hello"
"world"
)
Style should be like this
if (
first
and second
and third
):
Alternatively, you may assign some or all of the condition to a variable
is_valid = (
first
and second
and third
)
if is_valid: ...
is_almost_valid = first and second
if is_almost_valid and third: ...
I'd rather have all this processing done within format_log_message, but unfortunately this function needs to know when to ping everyone. I think a cleaner way is to create a separate function to generate the additional log message for the user. The two log messages will be combined here, which will allow you to determine ping_everyone by checking if the returned log message is an empty string.
Build 20200923.10 succeeded
GitHub
00:04:38
Bot
Connected!
modify code to work on all platforms,
fix grammatical errors
Relevant Issues
Closes #422
Description
I added spaces between the letters at the top of the board,
I changed "Here's there board" to "Here's their board"
Reasoning
The spaces ensured that the top characters on the board looked as expected on ios devices
The grammar fix aids better understanding of the bot's message
Screenshots
iphone 8 demo of change to the board

There's one thing, though: regular users should have more stringent restrictions. I don't think regular users should be able to specify multiple roles at once (as this will generate a ...
I got your point ,ty for explanation 🙂
When moving it to bot/utils, the following error is generated:
Extension 'bot.exts.evergreen.branding' raised an error: NameError: name '__path__' is not defined
I think it would be fine to keep it in __init__.py. The code is minimal.
@kosayoda Review parts is now applied, but I didn't added this newline for compact mode, because this will make emojis sooo small in normal mode what makes this hardly readable.
Build 20200924.8 failed
GitHub
00:00:54
Seasonal Bot
It seems like help is actually sent in embeds, where markdown is supported. This is how it looks with \:
<img width="464" alt="Screenshot 2020-09-24 at 19 18 40" src="https://user-images.githubusercontent.com/65498475/94177991-c44caf00-fe9a-11ea-8734-13dfec504a5f.png">
Without \:
<img width="453" alt="Screenshot 2020-09-24 at 19 18 27" src="https://user-images.githubusercontent.com/65498475/94177974-bd25a100-fe9a-11ea-9c08-db0458e5cd8f.png">
Build 20200924.9 succeeded
GitHub
00:00:59
Seasonal Bot
I've gone and refactored this part into another method like you suggested--it still needs to return a log message and whether to do the everyone ping, but it is cleaner that way and has made the tests less complex.
That's definitely a better way to do it. Not sure why I didn't catch that >.>
Okay, fixing this would be out of scope for this PR.
I guess we can say thanks discord™, we should keep them then.
Build 20200924.10 succeeded
GitHub
00:00:57
Seasonal Bot
29a74e0 Add checks.py file - gustavwilliam
b867225 Add extensions.py file - gustavwilliam
da13946 Update constants.py to include URLs - gustavwilliam
15b05ab Add utils module in bot/exts/ - gustavwilliam
318200d Add status emojis in constants.py - gustavwilliam
Build 20200924.11 succeeded
GitHub
00:03:56
Seasonal Bot
Connected!
The command works but here are few changes that will make the code look cleaner :D
instead of creating the datetime objects on each call, you can create them and store them in self.zodiac_fact when you are loading the JSON.
you can do this after you load zodiac fact after line 41
from datetime import date
zodiac_fact = load(json_data) # after this line
for values in zodiac_fact.values():
values["start_at"] = date.fromisoformat(values["start_at"])
values["end_at"] = date.fromisoformat(values["end_at"])
this will store all the date objects on...
you can use the calendar module to simplify this part.
try:
month = list(calendar.month_abbr).index(month[:3])
except ValueError:
await ctx.send("Sorry, but you have given wrong month name.")
return
The MONTH_NAME variable can be removed.
Format the portion of the log message that includes details about the detected user ID.
This is confusing because it's describing the tuple and the message in on sentence, but doesn't distinguish the two. Also, there's an extra space on the start of the second line.
Summaries should never be more than one line long. Also, don't put leading space on subsequent lines in docstrings.
This can be on one line unless you really prefer otherwise.
This can fit on one line, unless you think it is more readable when broken up.
This tag is different from the existing tags we have. All of our other tags are either directly related to the community (e.g. off-topic and modmail) or touch upon Python concepts. The way this tag is worded feels a bit out of scope for our tag system.
If we want to have a tag that is specifically meant to be used when people ask for programming servers in other languages, I'd focus the tag on that instead of presenting it as a more disconnected "looking to join more servers? look here...
Hello and thank you for the pull request.
flake8should be and is a development package, and therefore is not needed under[packages]in the Pipfile.
Should I revert all the changes made to Pipfile and Pipfile.lock? Or just remove flake8 from Pipfile, thanks
Ah, so that's how that works. I've cleaned that up where I've been using it.
I prefer the second, and since it seems alright I'll go with it
I'm going to reword how these messages flow, there's no reason for them to be similar (which is why they are separate). Something more like existing commands, I think
Build 20200924.1 succeeded
GitHub
00:02:57
Bot
Use case/rationale
Sometimes, users don't remember which help channel is theirs. Other times, they simply wanna look back at the old help channel threads and review what was said.
Proposed solution
DM users when opening a help channels. The following info would be included:
- Help channel name
- Preview of first message sent
- "Jump to message" link
(1) Would allow them to quickly look up the channel name or remind themselves what channel was claimed, without necessarily going the...
This would have a lot in common with the current SeasonalBot bookmark command:

One last request and it should be good to go. Already tested it all.
return bool(cls.extract_user_id(b64_content))
Maybe this function is just redundant at this point?
What recourse will someone have if they do not want to receive these messages? A significant number of people have expressed that they have trouble remembering the channel names (more so those giving help than those receiving it), but would they all be willing to accept DMs as a solution?
Personally, I'd write down the name if I had trouble remembering; I don't think it's too much to ask of others to do the same. Furthermore, there's the search feature in Discord. I find it hard to belie...
I got a few ideas, I'll see what I can come up with
def load_comp_json() -> tuple:
the return type is a tuple here
I also suggest using Tuple[dict, dict] can also be used for brevity. Make sure to import Tuple from typing though.
Postgres backup completed!
Should I revert all the changes made to Pipfile and Pipfile.lock? Or just remove flake8 from Pipfile, thanks
Yes, it would be better if you can revert those and sync your pipenv environment usingpipenv sync --dev. 🙂
You're returning a tuple of zodiacs and zodiac_fact, both of which are dictionaries.
Don't forget to change these as well.
with explanation_file.open(encoding="utf8") as json_data:
zodiac_fact = load(json_data)
with compatibility_file.open(encoding="utf8") as json_data:
zodiacs = load(json_data)
Why not name these explanation_file and compatibility_file respectively? p1 and p seems too abstract and inconsistent.
explanation_file = Path("bot/resources/valentines/zodiac_explanation.json")
compatibility_file = Path("bot/resources/valentines/zodiac_compatibility.json")
More of a stylistic choice but you can dedent this by a block.
Build 20200925.2 failed
GitHub
00:02:09
Bot
Related to issues:
https://github.com/python-discord/bot/issues/1127
https://github.com/python-discord/bot/issues/1125
In Modmail threads, notes are listed as necessary, but when issuing an infraction the total number of infractions isn't shown.
Build 20200925.12 failed
GitHub
00:00:50
Seasonal Bot
Build 20200925.11 failed
GitHub
00:00:48
Seasonal Bot
Build 20200925.13 succeeded
GitHub
00:00:54
Seasonal Bot
actually this i am getting when i did that
i have fixed this issue sorry for bothering u
Build 20200925.3 succeeded
GitHub
00:02:50
Bot
You are able to get flag SVG URL from restcountries

I think val should have better name.
This need better name than URL. Constant name should explain it, but URL can be any URL.
Looks good so far, just needs to address a few things @RohanJnr pointed out.
201efc9 Add feature to token_remover: log detected user... - bast0006
83e1762 Make token_remover check basic HMAC validity (n... - bast0006
1ec17d0 Merge branch 'master' into feature-bast-user-to... - bast0006
1b38ad4 Implement review-suggested changes - bast0006
b62db24 Add BOT vs USER token detection, properly handl... - bast0006
Build 20200925.4 succeeded
GitHub
00:04:44
Bot
Connected!
currently the link when you use the !pep command is located in the description, but with the discord.Embed.url parameter, the title is now able to become a link (as shown in second image)


That sounds good to me. Can't think of a reason for not doing it.
Build 20200925.5 failed
GitHub
00:02:51
Bot
Build 20200925.14 succeeded
GitHub
00:00:55
Seasonal Bot

When responding to faulty !source commands, the backticks aren't escaped and a formatting issue occurs.
This might lead to being able to ping roles/users, should Discord ever decide to change the embed ping behavior.
This PR adds support for embed-suppressed link syntax to the .bm command. Without this PR, running the command:
.bm Test
fails with an unhelpful error message:
While this particular error doesn't display what exactly went wrong, doing the following makes it clearer:
The discord.Message converter is not handling the <> and [] wrapping syntax.
I've implemented a BetterMessageConverter in bot.utils.converters that unwraps [], <>, and [<>] from the argument before att...
Thank you for contributing to Python Discord!
Please check out the following documents:
- Join the Discord server! - If you have not already, join the Discord server and introduce yourself in our #dev-contrib channel.
- Python Discord Contributor Wiki - A set of resources about setting up our services
- Python Discord Code of Conduct - Code of conduct for our commu...
Build 20200925.15 failed
GitHub
00:00:49
Seasonal Bot
And I need to figure out how to get pre-commit working. I'll get back to this in a few hours to fix the flake8 issue that my local config didn't catch.
@ks129 The last time I worked on this, the directory structure for seasonalbot/ was different. So the fork I have has the older structure. What should I do in this case? Close this PR, make a new fork and make the changes there?
Thanks in advance!
P.S. I'm still a beginner at Git.
I made the changes you mentioned, but I'm having a lot of issues with getting it to run. I'm using an Anaconda env and despite installing arrow, I keep getting a ModuleNotFoundError when I do pipenv run start. It used to work completely fine the last time I'd made a commit.
However, I was on Ubuntu 19.04 back then. Current is 20.04. Also, haven't used Ubuntu for the better part of 5 months now on my dual-booted laptop. Any suggestions as to what could be wrong?
Build 20200925.16 succeeded
GitHub
00:00:56
Seasonal Bot
Build 20200926.1 succeeded
GitHub
00:03:05
Bot
Build 20200926.2 failed
GitHub
00:02:45
Bot
Postgres backup completed!
What is the need of this? I don't think users will generally use backticks.
here also, I don't think we need this.
Just a few more changes and we are good to go xD
use values() instead of items()
for zodiac_data in zodiac_fact.values():
zodiac_data['start_at'] = datetime.fromisoformat(zodiac_data['start_at'])
zodiac_data['end_at'] = datetime.fromisoformat(zodiac_data['end_at'])
Actually if user search for ` the embed looks weired that y I have included this
Actually I am taking date as param in command so if I use date directly it messes up the code
Build 20200926.2 succeeded
GitHub
00:00:50
Seasonal Bot
Build 20200926.1 succeeded
GitHub
00:00:56
Seasonal Bot
Build 20200926.3 failed
GitHub
00:00:58
Bot
Build 20200926.4 failed
GitHub
00:02:43
Bot
Build 20200926.5 succeeded
GitHub
00:03:06
Bot
Now conflicts is fixed and 1 of missing coverage part is fixed. Second should be fixed, but I don't understand why this don't count. (Sorry about force-push, but I had to use it to restore some changes)
Build 20200926.3 succeeded
GitHub
00:01:01
Seasonal Bot
Build 20200926.4 succeeded
GitHub
00:00:59
Seasonal Bot
This part of the code is being repeated. It's better to make a function for it.
repeated at line 56
you can add a break statement after this line to stop the loop as we have already found the sign,
Conflicts is now solved for this PR.
Build 20200926.6 failed
GitHub
00:00:41
Bot
Build 20200926.7 succeeded
GitHub
00:02:32
Bot
Build 20200926.5 succeeded
GitHub
00:00:58
Seasonal Bot
Build 20200926.8 failed
GitHub
00:00:49
Bot
Build 20200926.9 succeeded
GitHub
00:02:54
Bot
@Numerlor I made class for cache and now get_pep_embed isn's so big function, but I think this is not enough big feature for it's own cog.
a lot of un-necessary variables here.
you can replace with this
embed.description = f"**{zodiac}** is not a valid zodiac sign, here is the list of valid zodiac signs.\n"
for i, zod_name in enumerate(self.zodiac_fact.keys(), start=1):
embed.description += f"`{i}` {zod_name}\n"
zodiac_sign_verify doesn't really express what it actually does, maybe this could be renamed to zodiac_build_embed?
def zodiac_build_embed(self, zodiac: str) -> discord.Embed:
Looks good, just needs the type annotation adjusted & conflict resolution.
What's the reason for this diff?
When I come across situations like this, I realized it's usually a little bit easier to reason about the formatting when you include the stem in the extension f-string like so:
footer = f"{footer} | Reason: {reason}"
This is not even part of the review though, what you have is entirely fine.
aeaa3dd Add basics of the codespace config - Akarys42
Description
Currently, SeasonalBot uses the default help command, and it's kinda ugly. I propose to create a better help command, like Python bot does.
Reasoning
It will be more visually appealing and it will be easier to explore commands.
Proposed Implementation
Override the original help command and create a paginator.
Would you like to implement this yourself?
- [ ] I'd like to implement this feature myself
- [x] Anyone can implement this feature
lol
The sync docstring hasn't been updated, we can probably just keep the summary:
Otherwise looks good.
Well, to clarify what actually happened: I thought the global help template was the same as if you used .space command, for example.
f81920a Sync: update sync() docstring - MarkKoz
Build 20200926.10 succeeded
GitHub
00:02:44
Bot
Build 20200926.11 succeeded
GitHub
00:04:29
Bot
Connected!
Sentry Issue: BOT-85
If a user leaves the guild after sending a message, Message.author will return a discord.User. This is problematic for functions that need to get roles or some other discord.Member-only attributes.
Unfortunately, has_any_role from discord.py doesn't take this into account either. I have not tested, but I believe it may be susceptible to the same error. However, i...
Here's a preview of the new dice:
They're meant to express the edge cases of reacting to jokes. Sometimes, a joke doesn't even deserve one dot and sometimes, it deserves more than six. These two dice should be able to express the mentioned feelings as well.
Sentry Issue: BOT-8Z
As can be seen below, Discord returns a 400 with a specific code rather than a 403 forbidden. Currently, verification attempts to catch this by suppressing a 403 rather than a 400.
HTTPException: 400 Bad Request (error code: 50007): Cannot send messages to this user
(1 additional frame(s) were not displayed)
...
File "bot/cogs/verification.py", line 503, in on_...
Hmm, I guess let's just suppress discord.HTTPException then if you're cool with that.
That feels too broad. You could catch it and only suppress if it has that specific error code.
Seems like a fun idea. I look forward to a lot of my jokes getting the no dots one.
Sentry Issue: BOT-89
DisabledCommand: raw command is disabled
File "bot/cogs/help.py", line 105, in command_callback
await super().command_callback(ctx, command=command)
File "discord/ext/commands/help.py", line 858, in command_callback
return await self.send_group_help(cmd)
File "bot/cogs/help.py", line 243, in send_group_help
embed = await self.command_formatting(...
Sentry Issue: BOT-86
The message may be deleted before wait_for_deletion has a chance to add a reaction.
NotFound: 404 Not Found (error code: 10008): Unknown Message
File "bot/utils/messages.py", line 38, in wait_for_deletion
await message.add_reaction(emoji)
File "discord/message.py", line 953, in add_reaction
await self._state.http.add_reaction(self.channel.id, self....
Sentry Issue: BOT-8E
Not sure how a null character even got in there. Does it mean \0?
ResponseCodeError: Status: 400 Response: {'deletedmessage_set': [{'content': ['Null characters are not allowed.']}]}
(1 additional frame(s) were not displayed)
...
File "bot/cogs/moderation/modlog.py", line 577, in on_message_delete
botlog_url = await self.upload_log(messages=[message], ac...
a880ac4 Added a menacing ducky devil. - Xithrius
This branch adds one menacing ducky devil (:menacing_ducky_devil:):

Yes, this is a JoJo reference.
Thank you for contributing to Python Discord!
Please check out the following documents:
- Join the Discord server! - If you have not already, join the Discord server and introduce yourself in our #dev-contrib channel.
- Python Discord Code of Conduct Code of conduct for our community
- Python Discord Contributor Wiki - A set of resources about setting up our services
Sentry Issue: BOT-8T
Possibly a cache issue. I believe that a channel object isn't really needed. There's likely a direct way to get the message via a method in bot.http. After all, the actual endpoint only needs a channel ID and a message ID.
AttributeError: 'NoneType' object has no attribute 'fetch_message'
File "discord/client.py", line 312, in _run_event
await coro(*args, ...
Sentry Issue: BOT-84
I suppose it just needs to create another copy for iteration. Is there a more elegant solution?
RuntimeError: dictionary changed size during iteration
File "bot/cogs/watchchannels/watchchannel.py", line 183, in consume_messages
for user_channel_queues in self.consumption_queue.values():
The message queue consume task has failed with:
Sentry Issue: BOT-7R
Since stats aren't critical, the bot shouldn't fatally crash if statsd is down. In this case, it was down due to a temporary outage.
gaierror: [Errno -2] Name or service not known
(1 additional frame(s) were not displayed)
...
File "runpy.py", line 87, in _run_code
exec(code, run_globals)
File "__main__.py", line 28, in
bot = Bot(
File "bot/bot...
How should this be handled? Only use the cache for accepted image formats?
Try to use the cache. If it fails with a 415, then try again without a cache. We can't check for accepted formats since it's based on whether the file itself is valid rather than on its extension. For example, this error was triggered by someone uploading an empty text file with an "mp3" extension. In any case, I imagine it'd be hard to maintain an exhaustive list of supported formats.
Build 20200926.6 succeeded
GitHub
00:00:57
Seasonal Bot
I think everything is set now @Akarys42 @kosayoda
Please add in a selfmute command that mutes the user on the server for a specific amount of time that they choose.
The command would work as, well Joe already knows how it works, he just wants me to make an issue, but it's like !selfmute .
Joe doesn't just want you to make an issue. You should describe why you
think this should be a command, and how it should work from a technical
perspective as well. Otherwise people won't be able to decide whether we
should have this feature or how to implement it.
Build 20200927.1 succeeded
GitHub
00:04:20
Site
@jb3 You already implemented it, you know how it works! But I have indeed updated the issue to include that information!
This isn't justified to me. My proposed alternatives:
- Temporarily leave the server
- Have more self control to not visit the server or write in there
+1 to Mark’s comments here.
There are many tools which can prevent this. For example, Apple has a screentime tool which allows users to lock app access. This feels out of scope for our bot.

Doesn't look very good as an emoji. Will be making modifications until I find something good.
Acutally, you're right. I'll just create something.
Better emojis could not be found.
Build 20200927.1 failed
GitHub
00:00:58
Bot
Build 20200927.2 failed
GitHub
00:02:26
Bot
Build 20200927.3 succeeded
GitHub
00:03:36
Bot
Postgres backup completed!
In this Pipfile, discord.py isn't updated to the latest version.
Although the version doesn't have any major updates, it does contain bugfixes that have a change at breaking things within the bot.

I will be testing functions and commands within this bot to see if anything doesn't work.
2834b4e Updated discord.py version dependency. - Xithrius
It's 1.4.1 in the lock file, so changing it in the Pipfile isn't really necessary. ~=1.4.0 is basically 1.4.x. It could technically downgrade back to 1.4.0 when re-locking, since the version specifier would allow that. However, I don't see why that would happen besides an edge case where a 1.4.1 has newer dependencies, but some other package's version specifiers for some of those dependencies doesn't encompass 1.4.1's newer versions.
I now understand why the Pipfile is not updated to 1.4.1. Thank you for telling me why this is the case.
Have a great day/night!
When command is disabled and command.can_run is called, discord.py raise DisabledCommand error. Individual command help use this to check should this add You cannot run this command. to help embed. Now this first check is command disabled and only when it isn't, this run can_run check to avoid error. Closes #1180
Build 20200927.4 succeeded
GitHub
00:02:51
Bot
You can't ping people or roles in embeds
I am aware of this. Not particularly relevant regardless.
Build 20200927.2 succeeded
GitHub
00:00:57
Seasonal Bot
Build 20200927.1 succeeded
GitHub
00:00:59
Seasonal Bot
Build 20200927.3 succeeded
GitHub
00:00:59
Seasonal Bot
Build 20200927.4 succeeded
GitHub
00:00:58
Seasonal Bot
Build 20200927.5 succeeded
GitHub
00:00:58
Seasonal Bot
A few suggestions:
- Have a new channel called
user eventswhich lists all the scheduled events. - Whenever an event is scheduled, using the
!userevent schedule <event name> <start datetime> [duration=3h]command, the bot sends a message inuser eventschannel with details such as - event name, event host, start datetime and duration. - We could use reactions for subscription on the event message which will be sent in the
user eventschannel.- 1 reaction to toggle subscriptio...
This issue is to outline the changes that I'm working on regarding our infraction commands and the internal changes to how we'll be able to request and manipulate infraction data, hopefully in an update that will be more friendly for future maintenance and adjustments.
Infractions will have a proper Infraction class, with data we receive from the site API being converted into instances representing individual infractions. All standard actions we'd do to view, format and edit infraction dat...
Build 20200927.6 succeeded
GitHub
00:00:59
Seasonal Bot
This is my first review here so not sure if I was too picky, most of these things are minor and could probably be ignored, but I thought I would point them out anyway.
You don't have to change this, but personally for something like this I would just put import json and use json.load(json_data) as it is more explicit and has a more obvious meaning than just load(json_data), meaning anyone reading the code doesn't have to look back at the imports to find out where load is from.
The square brackets here aren't necessary as str.join also accepts a generator. Also, you could add a space into {zod_name}"for iso it looks like this {zod_name}" for i, just a tiny bit neater.
error_comp = "\n".join(
[f"`{i}` {zod_name}" for i, zod_name in enumerate(self.zodiac_fact.keys(), start=1)]
)
This is a bit petty, but Invalid zodiac name provided would probably be better English. zodiac doesn't need to be capitalized, and Invalid would be more correct than Wrong in this scenario.
actually year dont matter ,we only need month and date and this year is leap year thats y i have hardcoded the year
7e0358d Add MANIFEST.in to exclude all "tests" subpackages - SebastiaanZ
c847446 Use find_packages to include all subpackages - SebastiaanZ
732e639 Bump version to 0.1.4 - SebastiaanZ
Build 20200927.7 succeeded
GitHub
00:00:49
Seasonal Bot
Heya
When trying to run the example in the readme get this error:
Traceback (most recent call last):
File "C:\Users\Inveracity\git\_own_projects\redis-async-test\trying-async-redis.py", line 1, in
import async_rediscache
File "C:\Users\Inveracity\AppData\Local\Programs\Python\Python38\lib\site-packages\async_rediscache\__init__.py", line 4, in
from .types import *
ModuleNotFoundError: No module named 'async_rediscache.types'
it looks like the types fold...
oh nevermind, looks like you might have fixed it already
Hello! This should be fixed in the 0.1.4 release that was released a few seconds ago.
Thank you for contributing to Python Discord!
Please check out the following documents:
- Join the Discord server! - If you have not already, join the Discord server and introduce yourself in our #dev-contrib channel.
- Python Discord Code of Conduct Code of conduct for our community
- Python Discord Contributor Wiki - A set of resources about setting up our services
Build 20200927.5 succeeded
Leon Sandøy
00:05:24
Bot
Connected!
Looks good to me. I'm planning on writing a bit more documentation before the v1.0.0 release, which will mention the session kwargs that get passed to the actual pool constructor. This is pretty vital for now, though.
Previous changes look great, thanks. Final few small things I've just noticed after trying it out, after this it should be good to go as far as I'm concerned :+1:
I think that as this is now a sub command it could just be called partner, as .zodiac partnerzodiac is quite a long command and there is no reason to repeat the zodiac, just being able to do .zodiac partner would be nicer imo.
It would be nicer if we could just have the parameter called date instead of query_date as it looks more consistent in the help command. I assume it was done like this as we are already doing from datetime import date, a solution would be to import datetime and use datetime.date explicitly instead so you can use date here.
I just realised I made a typo in my previous review and you had already removed the square brackets so I basically accidentally told you to put them back in. Completely my fault, sorry for the confusion, but it would be best without them if you wouldn't mind changing it back.
error_comp = "\n".join(
f"`{i}` {zod_name}" for i, zod_name in enumerate(self.zodiac_fact.keys(), start=1)
)
Currently, our site only uses the main site database in our postgres. For the Voice Gate project, we will need to be able to retrieve data from another database in the same postgres server - the metricity database.
Django happily supports multiple databases, so let's take the steps necessary to enable access to this database for the site.
What you need to do
- Add the database to settings.py
- Figure out how this will a...
Relevant model with the fields that would be present. We will only use a couple of these properties and will most likely use direct SQL instead of tightly integrating with the ORM.
The pg docker image has no support for multiple database configs, we'd need to either make use of a startup task/script/sql, or use an alternate image that does support it.
Note: https://github.com/python-discord/site/issues/397 must be resolved before this issue can be started.
For our Voice Gate project, we need an API that can retrieve certain information stored in the metricity database. Specifically, we need verified_date and total_messages for a specified user, but to make our endpoint more future-proof, we can probably just return all the rows in that table for the specified user.
This will initially be used to improve the !user command,...
The pg docker image has no support for multiple database configs, we'd need to either make use of a startup task/script/sql, or use an alternate image that does support it.
What? That doesn't sound right. I'm not talking about multiple instances of the postgres, just databases inside the postgres. Surely it must support this super basic postgres feature?
No, the postgres docker image only has support for a single database.
What in the world. That's extremely surprising. I guess we need to find an image that isn't some gimped, half-measure version of postgres then. Why are we using an image that doesn't support basic functionality?
They also do support it, if you put an SQL with the additional CREATE DATABASE blocks in /docker-entrypoint-initdb.d, which is why I mentioned it, it's something that would have to be actually actioned.
Creating Docker images based on official ones is common practice, we do it for Hastebin to inject our own configuration.
Okay. So it supports it just fine, it just has to be approached in a particular way.
If we always know when the attachment we are fetching is deleted then I think then just letting the user specify use_cached would be fine. I'm guessing the code for the attachments log is currently the only place where we try and relay deleted attachments, but I'm not 100% sure.
If you think trying to work it out from the file type would be the best solution here then that is fine too, but I'm not too sure how that would be done so somebody else might have to work on it if that is the ca...
Build 20200927.9 succeeded
GitHub
00:00:45
Seasonal Bot
Build 20200927.8 succeeded
GitHub
00:00:50
Seasonal Bot
For our Voice Gate project, we need a new cog which will interact with the endpoints specified in https://github.com/python-discord/site/issues/398.
This issue cannot be solved until https://github.com/python-discord/site/issues/398 is ready.
Tasks
- A command for verifying, which checks the API from https://github.com/python-discord/site/issues/398 to see if a user qualifies and then grants the appropriate role if it does.
- If the user does not qualify, temporarily display an err...
Fixes #1179.
Context
When sending DMs to Discord users, it is necessary to consider that they may not be accepting them. The canonical way to respond to such situations is to either suppress discord.Forbidden (403) or to catch & handle it in some way.
However, we've come to learn 2 things:
- A
403response may potentially indicate something worse than just disabled DMs (@jb3) - It's possible to receive a
400status instead of a403when DMing a user with closed DMs (#11...
To aid our moderators in moderating the voice channels, we'll add two new parameters to the !user command:
- Total messages sent on the server
- Time verified, which shows when the user verified that they accepted our rules.
This data will be made available through a new site API, which is specified here: https://github.com/python-discord/site/issues/398
You cannot work on this issue until this site issue has been solved!
Build 20200927.6 succeeded
GitHub
00:02:48
Bot
For the Voice Gate project, we require a new infraction type called !voiceban.
This should work exactly like !tempban in that it will take a user and a duration using the exact same mechanisms. Do not reinvent any of these mechanisms, just use the existing converters.
Specifications
- The effect of the command will be to temporarily remove the speaking role for the specified duration.
- The command should have the alias
!vban. - This command should not work on a staff member...
Build 20200927.7 succeeded
GitHub
00:04:28
Bot
Connected!
I tried the features that use PIL and all seems to work fine, so let's get this merged.
Build 20200927.10 succeeded
GitHub
00:02:55
Seasonal Bot
Connected!
27b666b Incidents: reduce timeout log to info level - kwzrd
Squeezed in a tiny fix for a Sentry issue in 27b666b. After discussion with @MarkKoz, we agreed that semantically it makes sense for the log to be at warning level, but we don't want Sentry to notify us about it as there's nothing we can do to prevent it from happening.
Build 20200927.8 succeeded
GitHub
00:02:49
Bot
Total messages sent on the server
Would this require having to iterate through all message history sent by the user, or is it automatically stored somewhere that I'm not aware of?
If we did decide to do message history such as the example below, wouldn't this count as a bunch of API calls?
messages = await channel.history(limit=None).flatten()
To avoid the possible many message history API calls maybe we should limit how many messages should be iterated through fro...
No, Metricity already tracks this.
This issue will solve these problems.
I can take this issue when the API endpoints are written.
Also, should we allow users to retrieve data on how many messages they've sent, or should we only allow this in staff channels?
Decision here was to keep this to staff channels to prevent users trying to pad their stats and repeatedly running user. Discord provides a search tool for regular users which suffices, this is just a moderation tool.
On 27 Sep 2020, 20:15 +0100, Xithrius notifications@github.com, wrote:
I can take this issue once the API endpoints are written.
Also, should we allow users to retrieve data on how many messages they've sent, or should we only allow this in staff channels?
—
You are re...
Can 🤠 we please 🤠 have a cowboy 🤠 lemoji? 🤠
Thank you for the clarification.
I think you're right about that. Maybe adding a command like !claimed could be a more suitable solution. The name of ot will have to be worked on, but I think the idea of a command like it would be nice. You could either check who claimed a certain help channel or run it without arguments to see what channel you've claimed.
The forms app will be implemented as a separate service for easier development. It was becoming a big thing to tie into the already complex site.
Build 20200928.1 succeeded
GitHub
00:00:56
Seasonal Bot
Disabled commands should get a separate message which is more specific e.g. "This command is disabled"
This seems like it'll be useful elsewhere. Therefore, I think its home should be in utils/messages or whatever it's named. However, the move could be saved for when someone goes through all other cases to which this function could be applied.
I feel like this would be better as a context manager, but a function is okay.
Postgres backup completed!
Build 20200928.2 succeeded
GitHub
00:00:59
Seasonal Bot
Is there a reason this can't be a single json file, or be returned as a dictionary of { zodiac: { explanation, compatibility }} etc?
Is a pink error message part of the specs? Else i'd go with something a bit more red-ish
This doesn't error, like the name implies. I'd rename it to something like generate_invalidname_embed or invalidname_embed etc.
import datetime -> datetime.date or from datetime import date as datetime etc.
Build 20200928.4 succeeded
GitHub
00:01:04
Seasonal Bot
Build 20200928.3 succeeded
GitHub
00:01:10
Seasonal Bot
Build 20200928.5 failed
GitHub
00:00:54
Seasonal Bot
Build 20200928.6 failed
GitHub
00:00:57
Seasonal Bot
Description
Add a command that displays relevant info about emojis, like name, ID, created_at, CDN link...
Reasoning
People could get more information about the server emojis.
Proposed Implementation
Simple: create a new command called emoji_info or something. It will get a second parameter called emoji typehinted with discord.Emoji. Then, proceed to show relevant info about the emote. discord.py itself will raise an error if the emote doesn't exist.
Would ...
I think #454 could be added as a subcommand to this. It would be .emoji count or .emoji list, instead of a separate command.
Yeah, I think that's okay. My proposed name for this subcommand is info.
I'll work on this when #454 is closed.
Right now, if you want to use the role name for the !role(s) commands, you have to type the exact role name, which can be quite frustrating sometimes.
It would be nice to support fuzzy matching, like we do here with the Tags cog.
I think emoji count and emoji list command will automatically cover #454 issue
Build 20200928.1 succeeded
GitHub
00:02:59
Bot
You're right, it would make sense for it to be a context manager. Although it adds an extra level of indentation if you're still catching other errors coming out of it, but that's a weak excuse.
I'd say let's leave it as a func for now and start thinking of how we can design a more generic suppressor that can eventually replace this and be used elsewhere as well. It may be useful to have the error code configurable, e.g.:
with suppress_error_code(Codes.DISABLED_DM):
...
`...
@AtieP no real need to wait. I think it would be equally good — if not better — to work on this one before the other command is even complete.
@Anubhav1603 exactly. That's what I was referring to in my previous comment.
Relevant Issues
Closes #461
Description
I've created a cog (Emojis) that has an emojis group and that has an info command.
Screenshots

Did you:
- [x] Join the Python Discord Community?
- [ ] If dependencies have been added or updated, run
pipenv lock? - [x] Lint your code ...
Build 20200928.7 succeeded
GitHub
00:00:59
Seasonal Bot
You can actually just give it emoji.url as set_thumbnail will internally call str before using it. Which would shorten it enough to one line it
Other than a few comments it looks good to me
# No parameters = same as invoking info subcommand
I don't think this comment adds anything, ctx.invoice(info_command) speaks for itself.
This ends in a SyntaxError.
No, it won't work. emoji.url is discord.Asset and needs to be explicitly casted to str.
Don't know what the [] syntax is used for here, other than you can markdown urls, however that's not done when bookmarking messages.
Else it looks good to me.
Which, as i said, set_thumbnail does internally. https://github.com/Rapptz/discord.py/blob/master/discord/embeds.py#L337
Yeah yeah, I'm sorry. I had problems before when setting title to something other than str before and I thought here it would happen the same.
These changes look good to me. Haven't tasted the format on my devices though.
Hah... Sorry about providing suggestions with invalid syntax
Build 20200928.8 succeeded
GitHub
00:01:00
Seasonal Bot
Not required to change it, but what about using await self.info_command(...) instead invoking?
Looks good. I only have a few comments.
The Created section is too detailed. I got Created: 15 days, 3 hours, 28 minutes and 44 seconds ago during testing, which is way too much detail in almost all scenarios.
I think hours would be a reasonable level of detail to include.
I think just displaying date would be okay, no need x days ago etc.
As we discussed in #dev-contrib, I think having Emote source as a link would be better than including the link in the text "Link". Other possible wordings of this would be:
- Emoji source image
- Image source
Either way, making the entire text (like "Emoji source image") a link would probably be optimal.
@ks129 days ago is the format used in some of our other commands as well. Keeping it consistent would be optimal. If we want to include the exact date, I think adding it in a parentheses after the "days after" could work.
I don't know how to change the Created string though, I am not who created the function.
I think this tag is too long and over-explained. There is no need to point to different sections of the awesome discord communities list and I don't think we need to explain that our community is dedicated to Python. I believe that something short and concise, like our !resources or !projects tags would be more desirable.

}
Setting this to "days" could also be an option, if it feels to verbose.
I'd love to see this explained a bit further. What does it actually do? All info in the docstring is already given by the class name.
What's the output if the precision are hours?
I don't know, suggest something lol
What's the output if the precision are hours?
And the emoji was created in less than an hour?
The lowest detail that it'll include is hours. Like this:
Created: 15 days and 3 hours ago
Instead of:
Created: 15 days, 3 hours, 36 minutes and 38 seconds ago
Ah, okay. I will accept this.
Think about what the commands actually do. Feel free to take inspiration from the other docstrings in the repo.
Build 20200928.10 succeeded
GitHub
00:00:52
Seasonal Bot
Note: This PR should not be merged until the related bot PR is ready to be merged. The bot PR depends on the changes made in this and hence, they should be merged together.
I think it's high time we had an issue on this.
Currently, our index page looks like this:

Which isn't very good, and makes the site pretty difficult to navigate, considering this page is referred to by all breadcrumbs.
The challenge is to make a page which is dynamic according to:
- The pages which exist.
- The pages the user has access to.
And of course to make the p...
Build 20200928.1 succeeded
GitHub
00:02:20
Site
The dewikification project should take care of this. We're moving away from
our current wiki in the near future, so this becomes pretty irrelevant.
On Mon, Sep 28, 2020 at 1:33 PM Boris Muratov notifications@github.com
wrote:
I think it's high time we had an issue on this.
Currently, our index page looks like this:
[image: image]
https://user-images.githubusercontent.com/18114431/94465974-63d6ae00-01c9-11eb-86ea-874a8dcbec64.pngWhich isn't very good, and makes the site pr...
Build 20200928.2 succeeded
GitHub
00:02:48
Bot
Current lemojis are not updated to use the most recent symmetrical + perfectly masked lemoji template currently in the branding repo. This issue would require someone to go to through and update all svgs and pngs to use that new template.
I don't believe it should require an update to the emojis on the server as they are small enough to not notice the slight masking issues and not perfect symmetry. But this update should help when using these assets in other branding projects (i.e. videos...
I can also work on this today if someone wants to assign this to me.
Build 20200929.1 succeeded
GitHub
00:02:57
Bot
I agree if we were to do this now it would become pretty irrelevant.
We should do this near the end of the project
6ab05d3 Set default example.com dev site to pythondisco... - scragly
e2956b8 Set newest-first sorting for message deletion m... - scragly
f590d2b Add message log links, improved formatting to m... - scragly
618610f Order roles by positioning, add filters and sea... - scragly
0021d4a Improve infractions admin list and page, add se... - scragly
Turns out this was originally broken cause can_run will propagate exceptions from check failures. Therefore, simply checking the return value is inadequate. The CommandError must be caught.
There shouldn't be any need for these utils, since we have the arrow installed. Try using that instead.
This was purely a code review, I'll test out this new command soon.
I don't see a reason to have this span over multiple lines.
emoji_information.set_thumbnail(url=emoji.url)
We had a discussion about this in #dev-core before, and came to the conclusion that we should use the invoke method instead. It does some extra things that awaiting the command itself does not do.
Is there any reason to have square brackets around links? As far as I know, there is no reason to do that.
Perhaps a more descriptive name such as MessageLinkConverter?
Perhaps, although "MessageLinkConverter" doesn't really match IMO, since this also handles message ID's, and pairs of ChannelID-MessageID. I couldn't think of a better name. WrappedMessageConverter?
It's similar to <>, in that it suppresses the embed, but unlike <> it remains visible in the message content.
Postgres backup completed!
Build 20200929.1 succeeded
GitHub
00:00:59
Seasonal Bot
Did you miss this one?
source command is erroring out when i searched for get command and thumbnail is also not working
Build 20200929.2 succeeded
GitHub
00:05:03
Bot
Connected!
Build 20200929.2 succeeded
GitHub
00:00:52
Seasonal Bot
Getting there, a few final touches suggestions. Mostly around docstring and logging, but remark or 2 about logic.
Keep it up :)
It doesn't really "give" an embed as much as building an embed for either the facts OR error embed.
What error embed? This should be a bit more descripting, like the fact that it's creating a new embed, and that its an embed to display an error message about invalid zodiac name provided.
This log can probably be moved to inside the if with "Successfully created zodiac information embed" etc. As this log is sort of a false positive if we end up with an invalid name embed.
This is just a suggestion, however probably a cool feature. You can create a date or zodiac converter that throws on invalid date & zodiac, and just converts the input (date or zodiac string) to the zodiac name. That way you don't need the date sub-command and you can implement it for the partnerzodiac command as well.
Build 20200929.3 succeeded
GitHub
00:00:54
Seasonal Bot
Build 20200929.4 succeeded
GitHub
00:01:02
Seasonal Bot
This is just a suggestion, however probably a cool feature. You can create a date or zodiac converter that throws on invalid date & zodiac, and just converts the input (date or zodiac string) to the zodiac name. That way you don't need the date sub-command and you can implement it for the partnerzodiac command as well.
actually i need date and month both ,current date subcommand can take str and int for month but if i merge this with this subcommand into zodiac then user will be forced...
I can work on this and the site issue together if this is a go (considering my suggestion which I mentioned above).
I believe you can remove the else (dedent it to the commands scope), and reassign
zodiacinstead of creatingzodiac_sign_based_on_datehere. (Also removefinal_embed = self.zodiac_build_embed(zodiac)on line 100)The removes duplicate logic, removes an extra variable assignment, and less logic to follow.
in case of value error final_embed will get error out
This is just a suggestion, however probably a cool feature. You can create a date or zodiac converter that throws on invalid date & zodiac, and just converts the input (date or zodiac string) to the zodiac name. That way you don't need the date sub-command and you can implement it for the partnerzodiac command as well.
actually i need date and month both ,current date subcommand can take str and int for month but if i merge this with this subcommand into
zodiacthen user ...
You could just return in the excpetion and send the embed then, but i guess the benefits aren't that great anymore then.
The logs here should also definitely be below INFO level, perhaps TRACE. There's no need to see in production logs that an embed was built.
Does the statuses look good with a big number on all 4? even on mobile?
Looks good to me, if we need the presence? I believe thats up for debate
Not against verbosity, but just making sure it was intended, and not be
channel.overwrites_for(guild.get_role(staff_role)).read_messages
and not channel.overwrites_for(guild.default_role).read_messages
It doesn't seem to suppress the embed for me. I might be doing something wrong?

Hmm that's true. WrappedMessageConverter is probably fine then.
Description
I have an open source Starboard Bot that I think would be very fun to have in the python discord server. I'm probably willing to create a PR to include the code here, but I don't want to go to that work unless you are actually going to implement it.
Reasoning
Starboards are a lot of fun. I know the purpose of this server is python, but I think that any server can still be fun and be on-topic.
Proposed Implementation
Tbh...
Hello!
Thank you for your suggestion, but we're not planning on adding a public starboard to our community at this time. We feel that the potential benefits of a starboard are outweighed by the potential drawbacks in terms of moderation and effort.
I'm honestly not sure what is up with that. I was under the impression it worked on all embeds, but apparently it doesn't. The testing I've done suggests that <> works for everything, but [] only seems to fail when applied to message links.
I can take the check for [] out if desired, it was pretty opportunistic (there's space, so why not support it) although it looks like it's either bugged, or just doesn't work atm.
I am interested in working on this issue along with the bot one.
@RohanJnr This is a pretty good idea.
One issue that I have with it is that technically you'd have to scroll to the last time the event was scheduled to sub / unsub. But this isn't something to consider for right now
Build 20200929.3 failed
GitHub
00:00:25
Bot
Build 20200930.1 succeeded
GitHub
00:01:00
Seasonal Bot
Build 20200930.2 succeeded
GitHub
00:00:56
Seasonal Bot
Looks good to me, and works well. Thanks @bast0006!
67bc58c Make .bm handle embed-suppression syntax for me... - bast0006
5707d6f Add more docstrings and flake8 cleanup - bast0006
3713b1f Rename BetterMessageConverter -> WrappedMessage... - bast0006
661674b Merge branch 'master' into fix-bast-linkwrap-sy... - Den4200
db35ee8 Merge pull request #459 from bast0006/fix-bast-... - Den4200
Build 20200930.3 succeeded
GitHub
00:03:00
Seasonal Bot
Connected!
This happens because of our configured aliases.

!exception and !get will fail because they are not actual commands, groups, or cogs - just aliases. On the other hand, !docs and !tags are both command groups while also being aliases, so those do not have this issue.
Well, this bug still needs fixing. I was just explaining why the error occurs.
Postgres backup completed!
overwrites_for returns a PermissionOverwrite object.
Unlike a regular Permissions, the default value of a permission is equivalent to None and not False. Setting a value to False is explicitly denying that permission, while setting a value to True is explicitly allow...
Thanks for the pull request!
- Regarding NSFW subreddits: Subreddits marked as over 18 will have all the posts marked over 18, so it shouldn't be an issue.
- Rather than telling the user about the subreddit being out of scope, the error message when no posts are found should just be
... couldn't find any SFW posts from that subreddit.... That way it is clearer and easier to handle in the code. - Error handling should be in
get_top_postsrather thanfetch_posts, which would basic...
Don't mutate a list while you're looping over that same list. The loop is currently skipping posts because of it.
Either create a new list like filtered_posts or use a list comprehension to assign the filtered list to posts.
bd717d3 Revert "Codespaces: add project-setup" - Akarys42
Description
This command would send an embed with details about a GitHub user's profile, like their follower and following count, number of public repos, blog link (if any), etc. All of them will be hyperlinks leading to the user's profile, their follower page, their following page, and so on.
Reasoning
With the Hacktoberfest starting in less than a day, everyone's going to be working with Github more than ever during the next couple of weeks. Having a command which gives the user ...
I think it's better to use typing.Tuple for this.
Currently some code style/small changes, but there is one big issue: Type hinting variables that have very clear type is pointless.
This have already [] and this indicates that this is list. I think type hint in this variable is unnecessary.
Looks like you removed log of users updating. I think it's better to restore it.
I like idea, except for the full name and location, I don't think that's up to us to decide if the user wants his/her private information to be on this server.
I mean it's publicly available on their profile anyways, but if needed I can remove those
@Akarys42 Full name and location fields should be shown only when user provided them.
@ks129 sure, but we still shouldn't repost that, they didn't explicitly agreed for us to publish their information.
I like idea, except for the full name and location, I don't think that's up to us to decide if the user wants his/her private information to be on this server.
+1 on this. Just because a user's full name and location is publicly available on GitHub (or any platform for that matter), that doesn't mean that we're allowed to publish their information on the server. Either way, I think this is a fairly neat addition.
This sounds like a great idea. As Akarys and Pure have already mentioned though, we should not include name and location, out of privacy reasons.
Instead of providing this, it would be nice to have some stats about the things that matter for Hacktoberfest, like PRs in a certain time frame. If you have any other ideas of things to include, I’d love to hear about them as well.
Also, I think .gh would be a better name, especially after the release of the GitHub CLI, which uses gh to interact with GitHub.
So since we're not doing full name and location, how does replacing them with gists, starred repos, and maybe even organizations sound? As for the name, .gh looks pretty good to me too!
Build 20200930.4 succeeded
GitHub
00:02:58
Seasonal Bot
Connected!
e188937 Add bold styling for vertical bar separators - PureFunctor
As of October 7th, discord will require bots to use intents.
This PR aims to prepare the bot for that by introducing new version of discord.py (1.5) and intents set up.
Additionally, discord.py has allowed us to disable some events from occurring, thus some events were additionally disabled in this PR.
Due to no need of Presence intent in our bot, server and user commands were updated to reflect those changes.
Build 20200930.1 failed
GitHub
00:03:11
Bot
Closes #1170.
Rudimentary implementation example

Since amend invokes edit I've also written a helper function (get_latest_infraction) to prevent duplication of the routine needed to obtain the latest infraction by a specific actor although I'm still not sure what to make of
if isinstance(infraction_id, str):
old...
Build 20200930.2 succeeded
GitHub
00:02:37
Bot
Relevant Issues
Closes #464
Description
I've created a command which gives you a brief overview of a GitHub user's profile, including details like follower/following count, their organizations, public repos, etc.
Reasoning
Fetching data from the Github API and displaying it on discord using embeds
Screenshots
Did you:
- [x] Join the Python Discord Community?
- [x] If dependencies have been added or updated, run `pi...
Thank you for contributing to Python Discord!
Please check out the following documents:
- Join the Discord server! - If you have not already, join the Discord server and introduce yourself in our #dev-contrib channel.
- Python Discord Contributor Wiki - A set of resources about setting up our services
- Python Discord Code of Conduct - Code of conduct for our commu...
Build 20200930.5 failed
GitHub
00:00:44
Seasonal Bot
047902d Update t-shirt references to t-shirts and trees! - jb3
Description
This PR fixes a set of issues with the Hacktoberfest commands.
- It allows the commands to be used in September and November so that the early start and late finish (Hacktoberfest starts and ends where it is October anywhere in the world) are factored in. This is also relevant because Hacktober now uses September as "Pre-temper" where maintainers should get issues ready.
- Updates the Hacktoberfest command branding to 2020
- References that you can also plant a tree
##...
Build 20200930.6 succeeded
GitHub
00:00:46
Seasonal Bot
Build 20200930.7 succeeded
GitHub
00:00:49
Seasonal Bot
Build 20200930.3 failed
GitHub
00:00:23
Bot
await ctx.send(
f"There are {days} days, {hours} hours and {minutes}"
f" minutes left until the end of Hacktober."
)
Last few aliases are an anomaly since #1124 was merged. The remaining aliases are seldom used. The code isn't exactly clean and it has some maintenance costs.
Resolves #1159
Build 20200930.4 succeeded
GitHub
00:02:45
Bot
60a024c Improve formatting in timeleft - jb3
Addressed in 60a024c818c405822f13046ff93805837bfc591e, formatting on this suggestion seemed a bit off.
Build 20200930.8 succeeded
GitHub
00:00:57
Seasonal Bot
fc0da38 Catch 404 in wait_for_deletion when reacting - MarkKoz
The message may be deleted before the bot gets a chance to react.
Fixes #1181
Build 20200930.5 succeeded
GitHub
00:03:13
Bot
Build 20200930.9 succeeded
Joseph Banks
00:02:56
Seasonal Bot
Connected!
@LakshyaShastri It seems like you did not lint your code, thus the checks failed. Please lint your code and push a fix before we can review it!
998ecc6 Remove null chars before posting deleted messages - MarkKoz
Our API doesn't allow null characters in the content field. It may be present because of a self bot that is able to send such character.
Could consider sending an alert if a null char is detected, as it is most likely a self bot. But that is a bit out of scope for now.
Fixes #1182
Fixes BOT-8E
Build 20200930.6 succeeded
GitHub
00:02:49
Bot
This could be fixed by either making a copy of the dict, or more preferably, by not popping from it when removing the user. However, #999 will still cause issues.
9322e89 Duck pond: ignore reactions in DMs - MarkKoz
Also handle the channel not being found, which may be due to a cache issue or because it got deleted.
Fixes #1183
Fixes BOT-8T
Build 20201001.1 succeeded
GitHub
00:02:40
Bot
This PR adds the Hacktoberfest 2020 branding logo and banner for the Discord server.
- The season directory was renamed from
hacktobertohacktoberfest. - The
halloweenbanner for @python-discord/seasonal-bot'sBrandingManagercog used to be the Hacktoberfest 2019 banner, this was removed so seasonal event changes are not tied to a particular year. We manually update server banner and icon for specific events anyway. - The
hacktoberfestdirectory is now grouped by year.
Sentry Issue: SEASONALBOT-1E
GitHub API request for 'some_user_that_doesn't_exist' failed with message: The listed users cannot be searched either because the users do not exist or you do not have permission to view the users.
Description
The .hackstats command logs an error when a given username does not exist on GitHub. This is not an actual issue, so we want to avoid logging this as an error. To prevent this, we should check the user exists before searching for their PRs.
I've also added authentication to the GitHub API requests in this cog and slightly changed the user agent.
Closes #467.
Build 20201001.1 succeeded
GitHub
00:00:54
Seasonal Bot
This seems to be an unnecessary extra call for every command usage; we already know if it's a user we can't read based on the response we get with the original request, we just need to avoid logging it as an error as it's an intended behaviour.
That's actually really weird, I did lint the code and all checks passed when I ran pre-commit against all files

Build 20201001.2 succeeded
GitHub
00:00:57
Seasonal Bot
Yeah, I actually thought about that right after I submitted the PR. I've unnecessarily added more complexity and an extra request per command invocation. Addressed in deee8cf!
Build 20201001.3 failed
GitHub
00:00:49
Seasonal Bot
Build 20201001.4 succeeded
GitHub
00:01:00
Seasonal Bot
Okay pushed I've pushed the fixes @Den4200, some very friendly people helped me out with it on discord
929e835 Fuzzy match roles for !role command. - kosayoda
Build 20201001.5 succeeded
GitHub
00:01:15
Seasonal Bot
Resolves #1194.
-
The
!rolecommand now fuzzy matches.

-
Duplicates are filtered.
"Closes #433"
this is the same command as pybot but with some link changes ,I have corrected thumbnail problem also
- [x] Join the Python Discord Community?
- [ ] If dependencies have been added or updated, run
pipenv lock? - [x]...
Build 20201001.6 succeeded
GitHub
00:00:52
Seasonal Bot
Build 20201001.2 succeeded
GitHub
00:02:51
Bot
Postgres backup completed!
So since we're not doing full name and location, how does replacing them with gists, starred repos, and maybe even organizations sound? As for the name,
.ghlooks pretty good to me too!
Sure!
Not so much to see here for now, I’ll add more later.
Closes #1169
@Akarys42 I've made a pull request for this issue already
I'm for making all logs a trace, except those in except block. As in we should be informed if something goes wrong, but keep it more or less quiet on info level if everything goes smoothly.
Else i believe you've introduced a new bug in the partnerzodiac command
These should probably be trace as well.
I'd use a codeblock, not a code line.
I was refering to the doc string here, incase you misunderstood that. query_datetime was an ok name, date is slightly misguiding as it's a datetime object
Upper one trace, lower one warning or info
Build 20201001.7 succeeded
GitHub
00:03:16
Seasonal Bot
Connected!