#dev-log

1 messages ยท Page 54 of 1

regal archBOT
ebon magnetBOT
#

Build 20201001.8 succeeded

Requested by

GitHub

Duration

00:01:05

Build pipeline

Seasonal Bot

ebon magnetBOT
#

Build 20201001.4 succeeded

Requested by

GitHub

Duration

00:02:49

Build pipeline

Bot

regal archBOT
#
[python-discord/bot] branch deleted: bug/backend/1181/wait\-for\-deletion\-404
north knotBOT
ebon magnetBOT
#

Build 20201001.5 succeeded

Requested by

GitHub

Duration

00:04:27

Build pipeline

Bot

oak estuaryBOT
regal archBOT
ebon magnetBOT
#

Build 20201001.9 succeeded

Requested by

GitHub

Duration

00:01:03

Build pipeline

Seasonal Bot

regal archBOT
#

Using apply_infraction from InfractionScheduler rather than doing it manually allows us to handle HTTP errors while reducing code duplication.

Specifically, discord.Forbidden is handled when the bot tries to superstar someone they do not have permissions to.

This should address #905. There's only one instance of it unhandled on Sentry (which this PR fixes), and other potential places with discord.Forbidden is also handled in their respective cogs. Therefore, there is no need t...

ebon magnetBOT
#

Build 20201001.8 succeeded

Requested by

GitHub

Duration

00:02:51

Build pipeline

Bot

#

Build 20201001.7 succeeded

Requested by

GitHub

Duration

00:03:00

Build pipeline

Bot

ebon magnetBOT
#

Build 20201001.9 failed

Requested by

GitHub

Duration

00:00:56

Build pipeline

Bot

regal archBOT
ebon magnetBOT
#

Build 20201001.10 succeeded

Requested by

GitHub

Duration

00:00:58

Build pipeline

Seasonal Bot

ebon magnetBOT
#

Build 20201001.11 succeeded

Requested by

GitHub

Duration

00:00:57

Build pipeline

Seasonal Bot

ebon magnetBOT
#

Build 20201001.12 succeeded

Requested by

GitHub

Duration

00:00:54

Build pipeline

Seasonal Bot

regal archBOT
north knotBOT
ebon magnetBOT
#

Build 20201001.13 succeeded

Requested by

GitHub

Duration

00:03:10

Build pipeline

Seasonal Bot

night lilyBOT
#
SeasonalBot

Connected!

regal archBOT
ebon magnetBOT
#

Build 20201001.10 succeeded

Requested by

GitHub

Duration

00:02:47

Build pipeline

Bot

regal archBOT
#

This seems a bit over engineered imo.

        valid_zodiac_name = ", ".join(self.zodiac_fact).replace("Leo, ", "Leo,\n")

Quick and dirty, given Leo is always written this way, and contains a space. So if it somehow ends up at the end it breaks.

So a better solution might just be to go by index

", ".join(names[ :len(self.zodiac_fact) // 2]) + ",\n" + ", ".join(names[len(self.zodiac_fact) // 2: ])
#
[python-discord/bot] branch deleted: bug/fun/1183/pond\-ignore\-dm
ebon magnetBOT
#

Build 20201001.15 succeeded

Requested by

GitHub

Duration

00:00:52

Build pipeline

Seasonal Bot

north knotBOT
ebon magnetBOT
#

Build 20201001.11 succeeded

Requested by

GitHub

Duration

00:04:46

Build pipeline

Bot

#

Build 20201001.14 succeeded

Requested by

GitHub

Duration

00:01:48

Build pipeline

Seasonal Bot

regal archBOT
oak estuaryBOT
regal archBOT
ebon magnetBOT
#

Build 20201001.12 succeeded

Requested by

GitHub

Duration

00:02:47

Build pipeline

Bot

regal archBOT
north knotBOT
ebon magnetBOT
#

Build 20201001.13 succeeded

Requested by

GitHub

Duration

00:04:39

Build pipeline

Bot

oak estuaryBOT
regal archBOT
ebon magnetBOT
#

Build 20201001.16 succeeded

Requested by

GitHub

Duration

00:00:58

Build pipeline

Seasonal Bot

regal archBOT
regal archBOT
regal archBOT
#

I've needed this before. If the VC gets into a heated argument very few people are going to pay attention to #voice-chat, and I've historically had to ping several of the users and wait for them to respond to that. While I could manually go about server muting them, it would make more sense to have something to do that automatically.

I think there should also be consideration for drawing a users attention. The !shh command immediately draws attention because all conversation stops and it'...

north knotBOT
regal archBOT
ebon magnetBOT
#

Build 20201001.1 succeeded

Requested by

Joseph Banks

Duration

00:04:34

Build pipeline

Site

oak estuaryBOT
regal archBOT
ebon magnetBOT
#

Build 20201001.14 failed

Requested by

GitHub

Duration

00:00:52

Build pipeline

Bot

#

Build 20201001.15 succeeded

Requested by

GitHub

Duration

00:02:29

Build pipeline

Bot

regal archBOT
ebon magnetBOT
#

Build 20201001.16 succeeded

Requested by

GitHub

Duration

00:02:47

Build pipeline

Bot

regal archBOT
#
jb3

The reason why this happens is because our index page is actually private. Therefore the wiki system does not expose private pages and hides it.

If you visit a page like https://pythondiscord.com/pages/code-jams/code-jam-7/ then you will see the breadcrumbs are correctly filled in, even when the user is not authenticated.

I'm not sure whether we should consider this a bug, since we hope to have a site index at some point in the future which will resolve this issue when the index becomes...

regal archBOT
#

@Akarys42 Sounds nice
I wonder though if we'd like to take a step further and allow interleaving code blocks and text. This would allow you to do something such as:


!e
This is how you assign:
```py
x = 1
```
And then you can print it:
```py
print(x)
```


By concatenating the code blocks and then running it as usual. This should still be a fairly simple change, and it would include your idea as a private case.
If that's good then I wouldn't mind writing it.

#
        embed.add_field(name="Followers", value=f"[{user_data['followers']}]({user_data['html_url']}?tab=followers)")
        embed.add_field(name="\u200b", value="\u200b")  # zero width space
        embed.add_field(name="Following", value=f"[{user_data['following']}]({user_data['html_url']}?tab=following)")

        embed.add_field(name="Public repos",
                        value=f"[{user_data['public_repos']}]({user_data['html_url']}?tab=repositories)")
        embed...
ebon magnetBOT
#

Build 20201001.17 failed

Requested by

GitHub

Duration

00:00:24

Build pipeline

Bot

regal archBOT
ebon magnetBOT
#

Build 20201001.2 succeeded

Requested by

GitHub

Duration

00:02:14

Build pipeline

Site

regal archBOT
ebon magnetBOT
#

Build 20201001.18 failed

Requested by

GitHub

Duration

00:00:50

Build pipeline

Seasonal Bot

#

Build 20201001.19 failed

Requested by

GitHub

Duration

00:00:52

Build pipeline

Seasonal Bot

regal archBOT
#

Description

Right now, we have at least 2 commands, #464, and .hacktoberstats that take an argument which is a discord username. We should make a function in bot/utils to get a user's GitHub account if it is linked to their discord. So that the user doesn't need to type that extra argument.

Reasoning

It would make using commands like #464 or .hacktoberstats better, because the user would just have to link their GitHub account to their discord, and then when they don't e...

regal archBOT
regal archBOT
north knotBOT
#

Postgres backup completed!

regal archBOT
ebon magnetBOT
#

Build 20201002.1 succeeded

Requested by

GitHub

Duration

00:02:49

Build pipeline

Bot

regal archBOT
ebon magnetBOT
#

Build 20201002.2 failed

Requested by

GitHub

Duration

00:01:42

Build pipeline

Bot

regal archBOT
ebon magnetBOT
#

Build 20201002.3 succeeded

Requested by

GitHub

Duration

00:03:38

Build pipeline

Bot

regal archBOT
ebon magnetBOT
#

Build 20201002.1 failed

Requested by

GitHub

Duration

00:01:04

Build pipeline

Seasonal Bot

#

Build 20201002.2 succeeded

Requested by

GitHub

Duration

00:00:59

Build pipeline

Seasonal Bot

regal archBOT
regal archBOT
#

Instead of calling keys, and converting all to a list twice, create an extra variable for it. I also would suggest agaisnt hardcoded slicing, not because there could be more or less zodiacs, but for good practice. Since the original goal was to slice in the middle, there should be code that illustrates that intent. 7 is a magic number nobody reading this will know at the top of their head is the middle of all zodiacs (or at least close to it)

        names = list(self.zodiac...
regal archBOT
#

Hi, thanks for your contribution, I think it looks great. I've edited the PR description to include screenshots of the change.

However, because the PEP 0 URL is different from the others, it receives individual treatment with the embed being built here:

https://github.com/python-discord/bot/blob/eb851ce8afd1129839bf7128df6952d11af0ba88/bot/exts/utils/utils.py#L249-L260

Invoking !pep 0 therefore still produces this:

![image](https://user-images...

ebon magnetBOT
#

Build 20201002.4 succeeded

Requested by

GitHub

Duration

00:02:47

Build pipeline

Bot

north knotBOT
ebon magnetBOT
#

Build 20201002.5 succeeded

Requested by

GitHub

Duration

00:04:43

Build pipeline

Bot

oak estuaryBOT
regal archBOT
regal archBOT
regal archBOT
#

"Closes #454 "

command take 1 category name or many or none and it gives embed with emoji count and random emoji, if you give valid category and invalid category together bot will replace the invalid category and shows the output but if u give only invalid category bot will show the error

command invoke with 1 category
category
command invoke with more than 1 category
![category1...

ebon magnetBOT
#

Build 20201002.3 failed

Requested by

GitHub

Duration

00:00:55

Build pipeline

Seasonal Bot

regal archBOT
#

Hey @Anubhav1603, thanks for the PR! You seem to have a failed linting, please make sure to run pipenv run precommit on your local copy.

bot/exts/evergreen/emoji_count.py:42:32: ANN001 Missing type annotation for function argument 'ctx'
bot/exts/evergreen/emoji_count.py:55:26: ANN001 Missing type annotation for function argument 'ctx'
bot/exts/evergreen/emoji_count.py:65:24: ANN001 Missing type annotation for function argument 'ctx'
ebon magnetBOT
#

Build 20201002.4 succeeded

Requested by

GitHub

Duration

00:01:01

Build pipeline

Seasonal Bot

regal archBOT
ebon magnetBOT
#

Build 20201002.7 succeeded

Requested by

GitHub

Duration

00:02:32

Build pipeline

Bot

regal archBOT
ebon magnetBOT
#

Build 20201002.5 succeeded

Requested by

GitHub

Duration

00:00:52

Build pipeline

Seasonal Bot

ebon magnetBOT
#

Build 20201002.6 succeeded

Requested by

GitHub

Duration

00:00:55

Build pipeline

Seasonal Bot

#

Build 20201002.7 succeeded

Requested by

GitHub

Duration

00:01:00

Build pipeline

Seasonal Bot

#

Build 20201002.8 succeeded

Requested by

GitHub

Duration

00:01:00

Build pipeline

Seasonal Bot

ebon magnetBOT
#

Build 20201002.9 succeeded

Requested by

GitHub

Duration

00:01:00

Build pipeline

Seasonal Bot

regal archBOT
ebon magnetBOT
#

Build 20201002.10 succeeded

Requested by

GitHub

Duration

00:00:58

Build pipeline

Seasonal Bot

regal archBOT
ebon magnetBOT
#

Build 20201002.11 failed

Requested by

GitHub

Duration

00:00:56

Build pipeline

Seasonal Bot

regal archBOT
#

It isn't really possible to get discord connections without OAuth2 afaik, and for that we'd need to set up site for that beforehand and quite frankly am not sure if it's worth it as for many people it would be faster to type the command than to go through process of OAuth2

We couldn't just grab their username from the Discord API?

No, the discord API doesnโ€™t give this sort of data without an explicit consent from the user, through a web interface.

#

Because of these your checks are failing

bot/exts/easter/save_the_planet.py:2:1: I100 Import statements are in the wrong order. 'from pathlib import Path' should be before 'from discord.ext import commands' and in a different group.
bot/exts/easter/save_the_planet.py:2:1: I201 Missing newline between import groups. 'from pathlib import Path' is identified as Stdlib and 'from discord.ext import commands' is identified as Third Party.
bot/exts/easter/save_the_planet.py:3:1: I201 Missing...
#

Because of these your checks are failing

bot/exts/easter/save_the_planet.py:2:1: I100 Import statements are in the wrong order. 'from pathlib import Path' should be before 'from discord.ext import commands' and in a different group.
bot/exts/easter/save_the_planet.py:2:1: I201 Missing newline between import groups. 'from pathlib import Path' is identified as Stdlib and 'from discord.ext import commands' is identified as Third Party.
bot/exts/easter/save_the_planet.py:3:1...
#

Because of these your checks are failing

bot/exts/easter/save_the_planet.py:2:1: I100 Import statements are in the wrong order. 'from pathlib import Path' should be before 'from discord.ext import commands' and in a different group.
bot/exts/easter/save_the_planet.py:2:1: I201 Missing newline between import groups. 'from pathlib import Path' is identified as Stdlib and 'from discord.ext import commands' is identified as Third Party.
bot/exts/easter/save_the_planet.py:3:1...
#

This is what it told me:

Commit failed - exit code 1 received, with output: 'Check for merge conflicts................................................Passed
Check Toml...........................................(no files to check)Skipped
Check Yaml...........................................(no files to check)Skipped
Fix End of Files.........................................................Passed
Mixed line ending........................................................Passed
Trim Trai...
regal archBOT
#
[python-discord/bot] New branch created: reminder\-no\-mention
ebon magnetBOT
#

Build 20201002.8 succeeded

Requested by

GitHub

Duration

00:02:47

Build pipeline

Bot

#

Build 20201002.12 failed

Requested by

GitHub

Duration

00:01:00

Build pipeline

Seasonal Bot

ebon magnetBOT
#

Build 20201002.13 succeeded

Requested by

GitHub

Duration

00:00:52

Build pipeline

Seasonal Bot

regal archBOT
ebon magnetBOT
#

Build 20201002.10 failed

Requested by

GitHub

Duration

00:00:47

Build pipeline

Bot

north knotBOT
ebon magnetBOT
#

Build 20201002.9 succeeded

Requested by

GitHub

Duration

00:04:09

Build pipeline

Bot

oak estuaryBOT
regal archBOT
ebon magnetBOT
#

Build 20201002.11 succeeded

Requested by

GitHub

Duration

00:02:44

Build pipeline

Bot

regal archBOT
north knotBOT
ebon magnetBOT
#

Build 20201002.12 succeeded

Requested by

Joseph Banks

Duration

00:04:23

Build pipeline

Bot

oak estuaryBOT
ebon magnetBOT
#

Build 20201002.13 failed

Requested by

GitHub

Duration

00:00:53

Build pipeline

Bot

#

Build 20201002.14 failed

Requested by

GitHub

Duration

00:00:52

Build pipeline

Bot

ebon magnetBOT
#

Build 20201002.15 succeeded

Requested by

GitHub

Duration

00:03:00

Build pipeline

Bot

regal archBOT
regal archBOT
#
[python-discord/bot] branch deleted: reminder\-no\-mention
north knotBOT
ebon magnetBOT
#

Build 20201002.16 succeeded

Requested by

GitHub

Duration

00:04:40

Build pipeline

Bot

oak estuaryBOT
regal archBOT
#

Closes #1137 and #1139
I think this also closes #909

I just changed the default for use_cached to False, and didn't change it to set to True manually anywhere as I couldn't find anywhere that it was needed, antispam was the main one I checked but doesn't seem to try to fetch deleted messages from what I can see. Would be nice if somebody could confirm this

ebon magnetBOT
#

Build 20201002.17 succeeded

Requested by

GitHub

Duration

00:03:39

Build pipeline

Bot

regal archBOT
#

You're correct that antispam sends the attachments before deleting the messages. However, setting use_cached to false decreases the likelihood of successfully sending deleted attachments for all callers of the function. This is because a message can be deleted by the author while the bot is trying to process/handle the message. That being said, I don't know if it's really worth potentially making two requests per attachment via the idea to try the proxy and then the normal if the proxy fails.

regal archBOT
ebon magnetBOT
#

Build 20201002.14 succeeded

Requested by

GitHub

Duration

00:00:59

Build pipeline

Seasonal Bot

regal archBOT
ebon magnetBOT
#

Build 20201002.18 succeeded

Requested by

GitHub

Duration

00:03:05

Build pipeline

Bot

ebon magnetBOT
#

Build 20201002.15 succeeded

Requested by

GitHub

Duration

00:00:52

Build pipeline

Seasonal Bot

regal archBOT
#

f791bc3 fix spelling typos in bot/ python files - hedythedev
2bfa1c2 Merge pull request #1 from python-discord/master - hedythedev
bb423b8 fix line length in bot/exts/info/information.py - hedythedev
90238cc Merge branch 'master' into master - Den4200
685d983 Merge pull request #1207 from hedythedev/master - Den4200

north knotBOT
ebon magnetBOT
#

Build 20201002.19 succeeded

Requested by

GitHub

Duration

00:04:29

Build pipeline

Bot

oak estuaryBOT
ebon magnetBOT
#

Build 20201002.16 succeeded

Requested by

GitHub

Duration

00:00:52

Build pipeline

Seasonal Bot

#

Build 20201002.17 succeeded

Requested by

GitHub

Duration

00:03:40

Build pipeline

Seasonal Bot

regal archBOT
#
jb3
[python-discord/site] New branch created: joseph/reduce\-discord\-scopes
#
jb3

Closes #341

By default, AllAuth requests both identify + email from Discord on an attempted login.

We don't have any use for this email and so we discard it immediately, but there is no reason why we need to request this scope at all.

This PR will change the Discord authenticate screen to only state that it is requesting the basic user details of a user.

ebon magnetBOT
#

Build 20201002.1 succeeded

Requested by

GitHub

Duration

00:02:06

Build pipeline

Site

regal archBOT
ebon magnetBOT
#

Build 20201002.2 succeeded

Requested by

GitHub

Duration

00:02:22

Build pipeline

Site

regal archBOT
regal archBOT
regal archBOT
#
regal archBOT
regal archBOT
regal archBOT
regal archBOT
north knotBOT
#

Postgres backup completed!

regal archBOT
#
[python-discord/site] branch deleted: joseph/reduce\-discord\-scopes
north knotBOT
regal archBOT
ebon magnetBOT
#

Build 20201003.1 succeeded

Requested by

GitHub

Duration

00:04:25

Build pipeline

Site

regal archBOT
ebon magnetBOT
#

Build 20201003.2 succeeded

Requested by

GitHub

Duration

00:00:58

Build pipeline

Seasonal Bot

#

Build 20201003.3 succeeded

Requested by

GitHub

Duration

00:00:58

Build pipeline

Seasonal Bot

regal archBOT
#

This timeline is based on your document, but we've boiled it down to what we think is most important.

Alrighty, fisk wasn't sure if it was.

I think this timeline shouldn't plain HTML, but YAML (entries) + Markdown (information) instead and this should dynamically load timeline items.

Seeing how close the 100k are, we might as well go for the faster solution, and maybe refractor later.

ebon magnetBOT
#

Build 20201003.4 succeeded

Requested by

GitHub

Duration

00:00:49

Build pipeline

Seasonal Bot

regal archBOT
ebon magnetBOT
#

Build 20201003.2 failed

Requested by

GitHub

Duration

00:01:31

Build pipeline

Site

ebon magnetBOT
#

Build 20201003.3 succeeded

Requested by

GitHub

Duration

00:02:08

Build pipeline

Site

regal archBOT
ebon magnetBOT
#

Build 20201003.1 succeeded

Requested by

GitHub

Duration

00:02:41

Build pipeline

Bot

#

Build 20201003.5 succeeded

Requested by

GitHub

Duration

00:00:59

Build pipeline

Seasonal Bot

regal archBOT
ebon magnetBOT
#

Build 20201003.6 succeeded

Requested by

GitHub

Duration

00:01:04

Build pipeline

Seasonal Bot

#

Build 20201003.7 succeeded

Requested by

GitHub

Duration

00:01:08

Build pipeline

Seasonal Bot

regal archBOT
#

After some minor testing, I have discovered that stripping the "speak", "connect", "see", etc permissions for a voice channel does not trigger them to apply until a user leaves and rejoins the voice channel. That is, if you strip someone's permission to speak via editing the channel (like we do currently for text channels) they can continue to speak until they've left the channel. New users are denied the permission on join normally.

This means if we are going to implement this, the bot w...

regal archBOT
regal archBOT
regal archBOT
#
jb3
[python-discord/bot] New branch created: joseph/add\-socket\-stats
ebon magnetBOT
#

Build 20201003.2 succeeded

Requested by

GitHub

Duration

00:02:46

Build pipeline

Bot

ebon magnetBOT
#

Build 20201003.3 succeeded

Requested by

GitHub

Duration

00:02:51

Build pipeline

Bot

regal archBOT
#
jb3
[python-discord/bot] branch deleted: joseph/add\-socket\-stats
north knotBOT
ebon magnetBOT
#

Build 20201003.4 succeeded

Requested by

Joseph Banks

Duration

00:04:17

Build pipeline

Bot

oak estuaryBOT
regal archBOT
ebon magnetBOT
#

Build 20201003.5 succeeded

Requested by

GitHub

Duration

00:02:43

Build pipeline

Bot

regal archBOT
#

With this change, it will now be necessary for developers to enable the members priviledged intent in the dev portal for their bots, otherwise the devbot exits on start-up:

discord.errors.PrivilegedIntentsRequired: Shard ID None is requesting privileged intents that have not been explicitly enabled in the developer portal. It is recommended to go to https://discord.com/developers/applications/ and explicitly enable the privileged intents within your application's page. If this is not ...
regal archBOT
regal archBOT
regal archBOT
#

I don't see sending yet another request to the API just for some stats a nice thing to do.

We can instead make the invite link a config variable and use both approx presence count and approx member count rather than currently having hardcoded invite link, approx presence count and actual server size.

However as we grow bigger, approx member count will be more out of sync with reality I'd assume, however if we need such modularity it sounds like a good trade.

regal archBOT
#

there are some references to tags left in some of the docstrings, there also looks to be some code left that handles them:

        # Handle tag file location differently than others to avoid errors in some cases
        if not first_line_no:
            file_location = Path(filename).relative_to("/bot/")
        else:
            file_location = Path(filename).relative_to(Path.cwd()).as_posix()
regal archBOT
#

I'm so sorry it took this long to get reviews. I tried my best, but I'm not able to approve as confidently as I'd like.

Conceptually, the approach taken makes sense to me. The functionality is exposed via a very nice API, but I found the internals to be fairly complex in some places, and I had trouble "running" the code in my head. My testing indicates that everything is functional and that this indeed resolves #795.

I will leave it to you whether you trust my review or would prefer to ...

#

Oh, this is for create. Well, I'm a bit conflicted. On one hand, I don't like the idea of silently skipping things. On the other hand, it'd allow the syncer to sync as many users as it can rather than completely failing just cause 1 user is duplicated.

Therefore, I now think that if the user is in the DB already, then ignore duplicates. However, if the request data contains the user multiple times, then that's an error. Does that sound like a reasonable compromise?

#

With locks being a WeakValueDictionary, after lock goes out of scope here, the instance will be removed from the dict and garbage collected, correct?

Not quite. It will get garbage collected once there are no more decorators holding references to the lock instance. The dictionary itself doesn't count as something holding a reference.

The local lock shadows the outer function name. I think that the function could have a more descriptive name. It's only intended to be used from within...

north knotBOT
ebon magnetBOT
#

Build 20201003.8 succeeded

Requested by

GitHub

Duration

00:02:46

Build pipeline

Seasonal Bot

night lilyBOT
#
SeasonalBot

Connected!

ebon magnetBOT
#

Build 20201003.10 succeeded

Requested by

GitHub

Duration

00:01:00

Build pipeline

Seasonal Bot

regal archBOT
#

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

ebon magnetBOT
#

Build 20201003.6 failed

Requested by

GitHub

Duration

00:02:30

Build pipeline

Bot

regal archBOT
ebon magnetBOT
#

Build 20201003.7 succeeded

Requested by

GitHub

Duration

00:02:46

Build pipeline

Bot

regal archBOT
#
[python-discord/bot] branch deleted: bug/util/795/reminders\-dupe\-delete
north knotBOT
ebon magnetBOT
#

Build 20201003.8 succeeded

Requested by

GitHub

Duration

00:04:17

Build pipeline

Bot

oak estuaryBOT
regal archBOT
#

You're correct that antispam sends the attachments before deleting the messages. However, setting use_cached to false decreases the likelihood of successfully sending deleted attachments for all callers of the function. This is because a message can be deleted by the author while the bot is trying to process/handle the message. That being said, I don't know if it's really worth potentially making two requests per attachment via the idea to try the proxy and then the normal if the proxy fa...

ebon magnetBOT
#

Build 20201003.9 succeeded

Requested by

GitHub

Duration

00:02:48

Build pipeline

Bot

regal archBOT
regal archBOT
regal archBOT
regal archBOT
regal archBOT
regal archBOT
regal archBOT
ebon magnetBOT
#

Build 20201004.1 succeeded

Requested by

GitHub

Duration

00:00:53

Build pipeline

Seasonal Bot

regal archBOT
#
[python-discord/bot] New branch created: Den4200/fix/rules
#

Description

This PR has a few improvements for the !rules command. Instead of using the splat operator (*), we are now using the Greedy converter to allow members to add extra text after the rule indices. I've also removed duplicate rule indices by using sets, and then sorting them afterwards.

Screenshots

Text after rule indices:
image

Before duplication removal (note ...

ebon magnetBOT
#

Build 20201004.1 succeeded

Requested by

GitHub

Duration

00:02:46

Build pipeline

Bot

regal archBOT
regal archBOT
regal archBOT
north knotBOT
#

Postgres backup completed!

regal archBOT
ebon magnetBOT
#

Build 20201004.2 succeeded

Requested by

GitHub

Duration

00:02:44

Build pipeline

Bot

ebon magnetBOT
#

Build 20201004.2 succeeded

Requested by

GitHub

Duration

00:01:01

Build pipeline

Seasonal Bot

ebon magnetBOT
#

Build 20201004.3 succeeded

Requested by

GitHub

Duration

00:00:56

Build pipeline

Seasonal Bot

regal archBOT
#

right, so if the number of duplicates is more than 1, then send an error message and also stop the creation process?
How about we ignore the duplicates and instead send a warning message, notifying the client that duplicates were found and skipped?
note: The only client we have now is the python bot, and I don't think there will be a problem with multiple duplicates.

ebon magnetBOT
#

Build 20201004.4 succeeded

Requested by

GitHub

Duration

00:00:57

Build pipeline

Seasonal Bot

regal archBOT
north knotBOT
ebon magnetBOT
#

Build 20201004.5 succeeded

Requested by

GitHub

Duration

00:02:44

Build pipeline

Seasonal Bot

night lilyBOT
#
SeasonalBot

Connected!

regal archBOT
#

Description

This error traceback is printed every time I click on a reaction after running the help cmd

Ignoring exception in on_reaction_add
Traceback (most recent call last):
  File "/home/hedy/.local/share/virtualenvs/seasonalbot-S5lMGbTO/lib/python3.8/site-packages/discord/client.py", line 312, in _run_event
    await coro(*args, **kwargs)
  File "/mnt/c/Users/hedyh/codeproj/seasonalbot/bot/utils/decorators.py", line 79, in guarded_listener
    return await listener(*ar...
ebon magnetBOT
#

Build 20201004.6 succeeded

Requested by

GitHub

Duration

00:00:58

Build pipeline

Seasonal Bot

regal archBOT
north knotBOT
ebon magnetBOT
#

Build 20201004.7 succeeded

Requested by

GitHub

Duration

00:02:59

Build pipeline

Seasonal Bot

night lilyBOT
#
SeasonalBot

Connected!

regal archBOT
#

Okay, this is a great start, and there's some pretty good code in here, but we need to figure out a few things.

@python-discord/core-developers, I want you guys to chime in on this with your opinions:

  • The last time we discussed this system, I remember people raising concerns about the name "Guides". Should it be called Guides, or something more generic? If we should call it something else, what do we call it? Maybe something like Content?

  • @ks129 How GitHub-Flavored Markdown compati...

regal archBOT
#

This all looks ok to me. I've tested the bot's core functionality and everything seems to work on 1.5.0. The intents seem to be setup correctly and I cannot think of anything that we missed ~ if we did, then it shouldn't be anything critical.

Regarding the documentation, I have added a short section to the bot contrib guidelines. It may make more sense to have it on the [bot account setup page](https://pythondiscord....

#
[python-discord/bot] branch deleted: discordpy\-15
north knotBOT
ebon magnetBOT
#

Build 20201004.3 succeeded

Requested by

GitHub

Duration

00:05:15

Build pipeline

Bot

oak estuaryBOT
regal archBOT
#
[python-discord/seasonalbot] New branch created: discordpy\-15
#

After https://github.com/python-discord/bot/pull/1196, we should make sure SeasonalBot is also ready for the upcoming gateway intents changes. This is a draft PR to action the dependency upgrade.

Amongst @python-discord/core-developers we need to decide whether we will require the priviledged members intent as we do for the Python bot. If we do not use it, the (default) member converter will not work, and it will therefore not be possible to convert user IDs into Member objects, e.g.:

ebon magnetBOT
#

Build 20201004.8 succeeded

Requested by

GitHub

Duration

00:00:49

Build pipeline

Seasonal Bot

regal archBOT
regal archBOT
regal archBOT
#

Seems like this doesn't work. Have you tested it with users who have submitted invalid PRs? I tried this out with a user who had opened 4 PRs marked as invalid on the cpython repo.

Expected result

This is the result using the current version of the command. Since the PRs are marked as invalid, they aren't counted.

Actual result

SeasonalBot tells me that the person has contributed with 4 PRs.

Steps to reproduce

  1. Run bot with the PR version
  2. Send `.hackstats itz...
ebon magnetBOT
#

Build 20201004.9 succeeded

Requested by

GitHub

Duration

00:00:55

Build pipeline

Seasonal Bot

regal archBOT
ebon magnetBOT
#

Build 20201004.4 succeeded

Requested by

GitHub

Duration

00:02:33

Build pipeline

Bot

regal archBOT
#

Current system

At the moment, the colors and names of the labels on the repo seem a bit messy. This is the full list:

New system

I'm proposing a new system, which will look a lot like the one used in the Python Bot. All labels should preferably use the color coding from that repo as well, in order to keep things consistent.

Here are the proposed prefixes:

  • a: โ€”ย area
  • p: โ€” priority
  • s: โ€” status
  • t: โ€” type
  • m: โ€” meta

Specific labels

Area:

  • ...
#

Closes #1104

If the message contains both plaintext and code blocks, the text will be ignored.
If several code blocks are present, they are concatenated.

Implementation rationale

  1. The issue with inline code is that it's used often inside an explanation to mark certain keywords.
    For example:

You can use the join function to concatenate a collection of strings:

strings = ('abc', 'xyz', 'asdf')
print(' '.join(strings))

If we allow text to be added around...

ebon magnetBOT
#

Build 20201004.5 succeeded

Requested by

GitHub

Duration

00:02:50

Build pipeline

Bot

regal archBOT
#

Overall, I agree with the proposal. A few niggles to mention or make note of.

Type:

t: bug โ€” Something isn't working
t: feature โ€” New feature or request
t: question โ€” Request for clarification or further information

These terms are very dev-centric, while this repo is primarily asset-related. Due to this, I'd suggest using more suitable terms that effectively stay in line with your intentions, but feel more applicable to the situations we'd encounter here:

  • prop...
ebon magnetBOT
#

Build 20201004.6 succeeded

Requested by

GitHub

Duration

00:02:42

Build pipeline

Bot

#

Build 20201004.7 succeeded

Requested by

GitHub

Duration

00:02:36

Build pipeline

Bot

regal archBOT
#

I see no value in turning area into a. single letters are not good descriptors.

the labels we have here are the organization-level labels that we designed together with several core devs and I do not see the use in rolling a completely different convention here.

However, I do agree that we should change the labels to make sense in the context of branding. So my counter-proposal is for you to come up with labels that follow the established conventions but change the meta info to be relev...

ebon magnetBOT
#

Build 20201004.1 succeeded

Requested by

GitHub

Duration

00:02:15

Build pipeline

Site

regal archBOT
#

Look alright to me. I think the variable naming in the method could be overall improved, it's a little bit all over the place (perhaps better to use either index or pick in both genexps, full_rules could be fetched_rules and rules could be picks or picked_rules) but that's minor.

I'm also triggered by the way this string is formatted. :rage:
https://github.com/python-discord/bot/blob/ff7c34aee21493efbc78a9b6521dd9c0f48d4a72/bot/exts/info/site.py#L116-L118

#

@lemonsaurus Just like @scragly said, this seems to be the convention only in bot repos (both SeasonalBot and Bot). I would have nothing against using the full names โ€” like type, status and area โ€” instead. However, I don't think we should skip that meta-part of the tag describing the category. To me, saying status: stale makes much more sense than simply stale.

#
[python-discord/site] New branch created: remove\_django\_wiki
#

Note: Remember to target dewikification with this PR

After some discussion in #dev-core, we've decided we're going to continue to disentangle and simplify the site, and that the dewikification project provides a good opportunity to do this. Let's remove everything related to OAuth and notifications from the stack, too.

The primary purpose these served was to allow us to use a members pydis role to determine what they could access. This is a fundamentally good idea, but without th...

#

Here are the labels that I propose we have on this repo.

Specific labels

  • area: lemoji โ€” Related to lemojis
  • area: emotes โ€” Related to all emotes, except for lemojis
  • area: events โ€” Related to events, like Code Jams or Hacktoberfest
  • area: pydis โ€” Related to the standard branding of PyDis
  • (area: documentation โ€”ย Documenting workflows and conventions)
  • good first issue
  • help wanted
  • invalid

All default labels from...

  • status
  • type
    Possibly r...
#

Description

Let the .8bitify not just work on avatars, but if the user uploads an image, 8bitify that instead.

Reasoning

It would let users 8bitify more than just their avatar.

Proposed Implementation

I think the ideal way to do this is to first check if the user passed any extra arguments to .8bitify, and if so, skip the getting the avatar and instead use the image URL they passed.

Additional Details

Maybe also fix #431 while I'm at it.

Would you ...

#

9b63db3 Replace map with a more pythonic list compreh... - Den4200
bfcd468 Remove duplicates from given rule indices and s... - Den4200
6cc110c Use Greedy converter instead of the splat ope... - Den4200
dcad46f Use url argument instead of setting it outside. - Den4200
2553a1d Sort rules before determining invalid indices. - Den4200

#
[python-discord/bot] branch deleted: Den4200/fix/rules
north knotBOT
ebon magnetBOT
#

Build 20201004.8 succeeded

Requested by

GitHub

Duration

00:04:22

Build pipeline

Bot

oak estuaryBOT
regal archBOT
regal archBOT
#
[python-discord/site] branch deleted: remove\_django\_wiki
regal archBOT
#
[python-discord/site] New branch created: remove\_oauth
ebon magnetBOT
#

Build 20201004.10 succeeded

Requested by

GitHub

Duration

00:01:04

Build pipeline

Seasonal Bot

regal archBOT
regal archBOT
#
[python-discord/seasonalbot] New branch created: space\-out\-dice
#

Description

The .roll command now has a single space between the outputted dice, when more than 1 roll is specified. The code behind the command is also a lot more refined.

Reasoning

Previously, when given a number greater than 1, the .roll command sent the dice without space between them. This resulted in it looking quite strange.

Screenshots

Current:

Proposed:

Did you:

ebon magnetBOT
#

Build 20201004.11 succeeded

Requested by

GitHub

Duration

00:00:54

Build pipeline

Seasonal Bot

regal archBOT
#

I don't like this. You've turned 6 lines into 3, and introduced more complexity. I don't mind your code, but I prefered when it was 6 lines - it had better readability.

Our code style is to not have a newline after docstrings for functions and coroutines, by the way. I'm not sure why the linter let this through, I guess it's not set up with the same flake8-docstrings rules as we have on bot.

regal archBOT
ebon magnetBOT
#

Build 20201004.12 succeeded

Requested by

GitHub

Duration

00:00:57

Build pipeline

Seasonal Bot

regal archBOT
regal archBOT
#

Yeah you're right, this isn't much better. Let's use a helper function. Maybe something like this?

def _get_random_die() -> str:  # _ prefix since it's an internal helper.
    """Generate a random die emoji."""
    die_name = f"dice_{random.randint(1, 7)}"  # 1, 7, not 6. it's not inclusive.
    return getattr(Emojis, die_name)  # No point in the third arg, this isn't gonna fail.

# We only support num_roll between 1 and 6.
if 1 <= num_rolls <= 6:
    dice = " ".join(get_rand...
regal archBOT
#

I wish to design a new lemoji that has an expression of being angry and sad at the same time. This would be useful because many times people are very angry about something, but they are also sad about that very thing (You can't honestly say you have never experienced that feeling). Currently, I expect it would be a merge of :lemon_enraged:, :lemon_grumpy:, and :lemon_pensive:.

ebon magnetBOT
#

Build 20201004.13 succeeded

Requested by

GitHub

Duration

00:00:52

Build pipeline

Seasonal Bot

regal archBOT
ebon magnetBOT
#

Build 20201005.1 succeeded

Requested by

GitHub

Duration

00:00:58

Build pipeline

Seasonal Bot

#

Build 20201005.2 succeeded

Requested by

GitHub

Duration

00:00:55

Build pipeline

Seasonal Bot

regal archBOT
regal archBOT
ebon magnetBOT
#

Build 20201005.1 succeeded

Requested by

GitHub

Duration

00:02:13

Build pipeline

Site

regal archBOT
#

I think we should use our RandomCycle utility to make sure these don't repeat in a row.

https://github.com/python-discord/seasonalbot/blob/18500db908281431a1265e5da0948034ee695cbf/bot/utils/randomization.py#L6-L23

We would then open and read the embed data like so:

        with Path("bot/resources/easter/save_the_planet.json").open('r', encoding='utf8') as f:
            EMBED_DATA = RandomCycle(json.load(f))

And then this line would look like so:

      ...
ebon magnetBOT
#

Build 20201005.3 succeeded

Requested by

GitHub

Duration

00:00:51

Build pipeline

Seasonal Bot

regal archBOT
north knotBOT
ebon magnetBOT
#

Build 20201005.4 succeeded

Requested by

GitHub

Duration

00:02:54

Build pipeline

Seasonal Bot

night lilyBOT
#
SeasonalBot

Connected!

regal archBOT
regal archBOT
#

I've been playing around with alternatives for NamedTuple for the Channels class. I think it would be best to leave it as a named tuple, as its attributes are used all over the codebase as ints. It could be changed to an IntEnum, whose attributes subclass int, but some errors arise from that since the attributes don't behave exactly like ints do. Changing it to an IntEnum would require calling int on most/all of its uses, which is undesirable. Changing it to a regular Enum would...

regal archBOT
#

Relevant Issues

Closes #393

Description

At startup, before the bot sends the "Connected!" message in the dev_log channel, a list of the available channels is obtained, and the channels defined in constants.py is checked against it. For every constant which refers to a channel which does not exist, an error message is logged which includes the channel name, and its ID.

Reasoning

As mentioned on #393, changing the kind of class that Channels is would probably be more ...

ebon magnetBOT
#

Build 20201005.6 succeeded

Requested by

GitHub

Duration

00:00:57

Build pipeline

Seasonal Bot

north knotBOT
#

Postgres backup completed!

regal archBOT
#

I considered at first amending FORMATTED_CODE_REGEX, but that would over-complicate it and could create bugs with the original function of the command.

I don't see what's overcomplicated. You can just delete the previous matching code and regex and use yours. It looks like it will for just fine for one match too. You may not get all the extra info for logging easily, but that isn't really important and can be discarded in my opinion.

#

Few other remarks I don't like, which aren't part of the PR so i can't comment on

  • Change the a variable name a, that's not descriptive at all
for a in ctx.guild.emojis: 

I'm pretty sure all other commands return None, and should have a descriptive function name.
"ec" is not a good functon name, we use name, and aliases for what the command it self should be called

async def ec(self, ctx: commands.Context, *, emoji: str = None) -> Optional[str]:
  • why are ...
regal archBOT
ebon magnetBOT
#

Build 20201005.7 succeeded

Requested by

GitHub

Duration

00:01:02

Build pipeline

Seasonal Bot

ebon magnetBOT
#

Build 20201005.8 succeeded

Requested by

GitHub

Duration

00:00:59

Build pipeline

Seasonal Bot

#

Build 20201005.9 failed

Requested by

GitHub

Duration

00:00:53

Build pipeline

Seasonal Bot

regal archBOT
#

This will spam the logs based on how many emojis exist..
Just do the log first, then logic as to what you want to ignore instead of not ignore.

log.trace(f"Emoji Category {'' if category_query else 'not '}provided by the user")
for emoji in ctx.guild.emojis:
    emoji_category = emoji.name.split("_")[0]

    if category_query is not None and emoji_category not in category_query:
        continue

    emoji_dict[emoji_category].append(emoji)

renamed emoji_category to ca...

regal archBOT
ebon magnetBOT
#

Build 20201005.10 succeeded

Requested by

GitHub

Duration

00:00:58

Build pipeline

Seasonal Bot

regal archBOT
ebon magnetBOT
#

Build 20201005.11 succeeded

Requested by

GitHub

Duration

00:01:02

Build pipeline

Seasonal Bot

ebon magnetBOT
#

Build 20201005.12 succeeded

Requested by

GitHub

Duration

00:00:58

Build pipeline

Seasonal Bot

regal archBOT
#

We don't have too much time until the 7th so I propose that for now we keep use the privileged Guild Members intent. It doesn't make things worse in any way (we're disabling other intents, so we'll already see less traffic). In the future we may want to disable it but there should probably be more conversation w.r.t. that (CC: @scragly).

I mostly copied the setup from bot (see description for PR link), but I've disabled typing events everywhere (this only disables the event, bot can stil...

ebon magnetBOT
#

Build 20201005.13 succeeded

Requested by

GitHub

Duration

00:00:56

Build pipeline

Seasonal Bot

regal archBOT
ebon magnetBOT
#

Build 20201005.14 succeeded

Requested by

GitHub

Duration

00:01:07

Build pipeline

Seasonal Bot

regal archBOT
ebon magnetBOT
#

Build 20201005.2 failed

Requested by

GitHub

Duration

00:02:08

Build pipeline

Site

regal archBOT
#

Relevant Issues

Closes #224

Description

The existing code for prideavatar was split into 2 functions: one which processes the options, and one which transforms the provided image and responds with the embed. The command functions (prideavatar and prideavatar image) string together those functions with error handling, and fetch the image bytes.

Did you:

ebon magnetBOT
#

Build 20201005.15 succeeded

Requested by

GitHub

Duration

00:00:58

Build pipeline

Seasonal Bot

regal archBOT
regal archBOT
#
jb3
[python-discord/forms-frontend] New branch created: branding/update\-favicons
#
jb3
[python-discord/forms-frontend] branch deleted: branding/update\-favicons
ebon magnetBOT
#

Build 20201005.16 succeeded

Requested by

GitHub

Duration

00:01:07

Build pipeline

Seasonal Bot

regal archBOT
#
[python-discord/bot] New branch created: fix/tagp/graceful\-stasd\-connect
#

Per issue #1185 the bot might go down if the statsd client fails to connect during instantiation. This can be caused by an outage on their part, or network issues.
If this happens getaddrinfo will raise a socket.gaierror.
This PR catched the error, sets self.stats to None for the time being, and handles that elsewhere.
In addition, fallback logic was added to attempt to reconnect, in the off-chance it's a temporary outage

#

Thank you for contributing to Python Discord!

Please check out the following documents:

ebon magnetBOT
#

Build 20201005.1 succeeded

Requested by

GitHub

Duration

00:02:53

Build pipeline

Bot

regal archBOT
#

You're right. However, I think there's still room to reduce redundancy. The original regex has a block named capture group that'd let you ignore inline blocks by checking if the block group is non-empty. You could also check if the delim is three back ticks. So I think you can easily narrow this down to only 1 regex by modifying the original.

If there are more than 2 matches with a block, then join them. otherwise, pick the first match.

ebon magnetBOT
#

Build 20201005.17 succeeded

Requested by

GitHub

Duration

00:00:52

Build pipeline

Seasonal Bot

regal archBOT
#
jb3
[python-discord/forms-frontend] New branch created: react/add\-list\-key
#

It's not about whether there are 1 or 2 or 3 duplicates. I'm suggesting it should depend on whether they are in the request or in the DB. Example: a request's data has two users with the ID 1. This should be an error. Another example: a requests data has one user with ID 1 and the DB has a user with ID 1. This should be skipped.

I don't know if this is worth the added complexity. I thought it'd make the API more robust. But it's also an option to just document that "duplicates will be skip...

ebon magnetBOT
#

Build 20201005.18 succeeded

Requested by

GitHub

Duration

00:00:51

Build pipeline

Seasonal Bot

ebon magnetBOT
#

Build 20201005.3 succeeded

Requested by

GitHub

Duration

00:02:42

Build pipeline

Bot

regal archBOT
#

Per issue #1185 the bot might go down if the statsd client fails to connect during instantiation. This can be caused by an outage on their part, or network issues.
If this happens getaddrinfo will raise a socket.gaierror.
This PR catched the error, sets self.stats to None for the time being, and handles that elsewhere.
In addition, fallback logic was added to attempt to reconnect, in the off-chance it's a temporary outage

ebon magnetBOT
#

Build 20201005.4 succeeded

Requested by

GitHub

Duration

00:02:41

Build pipeline

Bot

regal archBOT
ebon magnetBOT
#

Build 20201005.19 succeeded

Requested by

GitHub

Duration

00:00:51

Build pipeline

Seasonal Bot

regal archBOT
regal archBOT
regal archBOT
#

This is how it would look like:

FORMATTED_CODE_REGEX = re.compile(
    r"(?P<delim>(?P<block>```)|``?)"        # code delimiter: 1-3 backticks; (?P=block) only matches if it's a block
    r"(?(block)(?:(?P<lang>[a-z]+)\n)?)"    # if we're in a block, match optional language (only letters plus newline)
    r"(?:[ \t]*\n)*"                        # any blank (empty or tabs/spaces only) lines before the code
    r"(?P<code>.*?)"                        # extract all code inside the ...
ebon magnetBOT
#

Build 20201005.6 succeeded

Requested by

GitHub

Duration

00:02:20

Build pipeline

Bot

#

Build 20201005.21 succeeded

Requested by

GitHub

Duration

00:00:41

Build pipeline

Seasonal Bot

regal archBOT
#
jb3
[python-discord/bot] New branch created: joseph/verification
ebon magnetBOT
#

Build 20201005.7 failed

Requested by

GitHub

Duration

00:00:50

Build pipeline

Bot

regal archBOT
ebon magnetBOT
#

Build 20201005.8 succeeded

Requested by

GitHub

Duration

00:02:51

Build pipeline

Bot

regal archBOT
#
jb3
[python-discord/forms-frontend] branch deleted: react/add\-list\-key
ebon magnetBOT
#

Build 20201005.9 succeeded

Requested by

GitHub

Duration

00:02:46

Build pipeline

Bot

regal archBOT
#

This should be member.id

2020-10-05 16:42:18 | bot | ERROR | Unhandled exception in on_member_join.
Traceback (most recent call last):
  File "/home/mark/repos/python/bot-pydis/.venv/lib/python3.8/site-packages/discord/client.py", line 333, in _run_event
    await coro(*args, **kwargs)
  File "/home/mark/repos/python/bot-pydis/bot/exts/moderation/verification.py", line 546, in on_member_join
    await self.member_gating_cache.set(raw_member.id, True)
AttributeError: 'dict' obj...
ebon magnetBOT
#

Build 20201005.10 succeeded

Requested by

GitHub

Duration

00:02:37

Build pipeline

Bot

regal archBOT
ebon magnetBOT
#

Build 20201005.11 succeeded

Requested by

GitHub

Duration

00:02:18

Build pipeline

Bot

regal archBOT
#
jb3
[python-discord/bot] branch deleted: joseph/verification
ebon magnetBOT
#

Build 20201005.12 succeeded

Requested by

Joseph Banks

Duration

00:06:02

Build pipeline

Bot

north knotBOT
oak estuaryBOT
regal archBOT
regal archBOT
#

Should it be called Guides, or something more generic? If we should call it something else, what do we call it? Maybe something like Content?

"Guides" feels like it is a bit restrictive on what kind of content can be in there. "Content" sounds too generic, but it's decent. How about "articles"?

I'm not sure if we need contributors and last modified dates on the guides.

No, I don't think it's strictly necessary. However, it has some benefits. Knowing the authors means you can go ...

regal archBOT
north knotBOT
ebon magnetBOT
#

Build 20201006.1 succeeded

Requested by

GitHub

Duration

00:03:04

Build pipeline

Seasonal Bot

night lilyBOT
#
SeasonalBot

Connected!

regal archBOT
#

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