#dev-log

1 messages ยท Page 5 of 1

regal archBOT
odd spireBOT
oak estuaryBOT
odd spireBOT
regal archBOT
#

One thing I wanted to be sure to resolve is whether or not the yellow downloads button on https://www.python.org/downloads/ really does download the best version the suits the computer, since I said it did in the "Recommended Installed" tutorial:

Go to python.org/downloads and click the big yellow "Download Python 3.x.x" button near the top of the page. That should start the download of the latest Windows Python installer that best suits yo...

odd spireBOT
regal archBOT
regal archBOT
#

Description

Install multiple python versions within the container, and add an option in the API to select between them.

Rationale

Currently, the bot supports evaluation of both 3.10 and 3.11 code, something I think should be kept and expanded in the future (to include major/important python versions). This is achieved by using the latest 3.10 image published here. This is fine for now, but it makes it harder to provide feature parity and avoid issues when users switch between m...

regal archBOT
regal archBOT
#

Relevant Issues

<!-- Link the issue by typing: "Closes #" (Closes #0 to close issue 0 for example). -->

Closes #1142

Description

This change adjusts the regex pattern used in detecting spooky to include fun variants such as spoopy and spookier. The k is replaceable with a p, the y can be interchanged with i allowing ier and iest endings. (yer and yest are also valid). The number of os remains at two (2) or more.

Did you:

  • [x] Join...
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
odd spireBOT
night lilyBOT
#
Sir Lancebot

Connected!

odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
regal archBOT
odd spireBOT
regal archBOT
#
[python-discord/bot-core] branch deleted: d\.py\-2\.1
#
[python-discord/bot-core] New branch created: handle\-thread\-close\-on\-interactin
#
[python-discord/bot-core] branch deleted: handle\-thread\-close\-on\-interactin
regal archBOT
regal archBOT
regal archBOT
odd spireBOT
odd spireBOT
regal archBOT
#

Relevant Issues

<!-- Link the issue by typing: "Closes #" (Closes #0 to close issue 0 for example). -->
Closes #1145

Description

After a user invokes the ".topic" command and reacts with the reroll emoji, the embed will now show the previous few conversation prompts. It cannot display more than 256 characters because of the limit on embed title character length, which is usually around 5 prompts.

Did you:

odd spireBOT
regal archBOT
odd spireBOT
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
regal archBOT
#

Closes #114, #103

Implementation of a Memory-based file system and sending binary files from snekbox to requester.

Sending of files to snekbox from API is not within scope.

Current plan

File system

  • [x] 1. Implement a unique tempdir generator backed by dev/shm
  • [ ] 2. Change runtime config to mount an unique tempdir to each snekbox execution
  • [ ] 3. Make this the working directory for the python file
  • [ ] 4. Use a written python file for better compatibility ...
regal archBOT
regal archBOT
thin oysterBOT
#
Sir Robin

Connected!

regal archBOT
#
[python-discord/bot] New branch created: swfarnsworth\-tags
odd spireBOT
regal archBOT
#

I think #794 now has all the content of your PR combined there, isn't it ? Should we just keep one PR then ?

I'm for that. I think #794 is ready to be merged into here (or however that works exactly) if wookie signs off on it.

The "TODO: Add more screenshots" is done, and #794 has articles that could be linked from most of the proposed !install, !windows-path, etc. tags (to supplement, not replace the tags).

regal archBOT
odd spireBOT
regal archBOT
#

The target audience for this tag are those who are so unfamiliar with programming that they do not know what a return statement is or does, and who may not be proficient in English. The expected use case is to resolve confusion when beginners print the result of the function's computation instead of returning it.

While there might be beginners who expect variables defined in the function to be written to the global scope (especially if there is already a variable with the same name), I thi...

regal archBOT
regal archBOT
regal archBOT
regal archBOT
regal archBOT
regal archBOT
#
[python-discord/bot] New branch created: snekbox\-files
odd spireBOT
regal archBOT
regal archBOT
regal archBOT
#

#19 needs to be merged first.

I'd like to use a Forum Channel for per-day spoiler-friendly discussions. It's a better user experience than alternatives.

The Basics

Ideally, what I would like is:

  • Per-day thread is created at midnight or shortly before, locked to everyone (except Events Lead (& Admins))
  • Bot posts a link to the current puzzle, possible pulling a short description as the first message/an embed (see Revival of Code for inspiration)
  • There should be a command to u...
regal archBOT
regal archBOT
regal archBOT
regal archBOT
regal archBOT
regal archBOT
regal archBOT
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
odd spireBOT
odd spireBOT
oak estuaryBOT
odd spireBOT
regal archBOT
regal archBOT
regal archBOT
odd spireBOT
odd spireBOT
regal archBOT
#

This feels pretty fragile, changing behaviour just based on whether there is a letter c in the arguments and having to hardcode support in for timeit isn't great.

Maybe we should make the input API parameter optional, and then only add main.py if that was passed, otherwise just use the args given (which could contain code). This would be pretty simple behaviour and also flexible. Not sure how we deal with breaking changes for snekbox though.

#

My understanding (from skimming over the barely existant documentation and confusing cpp parser source, is that this mounts a regular folder (in this case backed by tmpfs on the docker side) onto nsjail as a tmpfs, so it isn't actually a tmpfs created on the nsjail side, but a fake one? This might be completely wrong, I'm not sure.

However the space here is usable to the full limit of our memfs allocation, and not the memory limit of the instance, so that would suggest it's not using nsj...

#

Yeah I agree this isn't ideal, I was just trying to make this work without breaking changes mostly.

The timeit situation mainly stems from the fact that it requires string input

{
	"input": "[i for i in range(100)]",
	"args": ["-m", "timeit"]
}
->
python3 -m timeit "i for i in range(100)"

whereas something like unittest would requires a module/file

python3 -m unittest main.py

So, not sure how we can really decide on snekbox side, maybe this should be so...

regal archBOT
regal archBOT
#

My understanding (from skimming over the barely existant documentation and confusing cpp parser source), is that this mounts a regular folder (in this case backed by tmpfs on the docker side) onto nsjail as a tmpfs, so it isn't actually a tmpfs created on the nsjail side, but a fake one? This might be completely wrong, I'm not sure.

I did some testing and I think my guess was correct and it just creates a new tmpfs ignoring the source. To demonstrate this you can modify the code to this:...

regal archBOT
regal archBOT
odd spireBOT
regal archBOT
regal archBOT
regal archBOT
#

I've made a quick research on how this could be done in Postgres, and I've found quite a good example.

Implementation would only depend on how resilient & precise we want it to be (in terms of consistency & persistence)
Using Redis leverages the fact that we don't need to set up this model & endpoints in our site project if we'd go with having a queue in our DB, but also the fact that it's simpler to implement but would die wheneve...

#
[python-discord/site] New branch created: fix\-manage\-py\-no\-args
odd spireBOT
regal archBOT
#

What if we allow creating 1 thread per user via a command ? That way we can have more control over how many threads a user can open, and it can be scoped in terms of allowed channels ?

The limit would still be one thread / user / topical channel, and we can use the redis cache to store how many threads this user has open in a particular channel to determine whether we should allow it or not.

However, we run the risk of having our Redis DB die, which will allow users to create another t...

regal archBOT
odd spireBOT
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
#
[python-discord/site] branch deleted: fix\-manage\-py\-no\-args
odd spireBOT
regal archBOT
regal archBOT
odd spireBOT
regal archBOT
regal archBOT
regal archBOT
regal archBOT
#
- The only difference used here is `group = app_commands.Group(name="uwu", description="...")` and `group.command`. `app_commands.Group` is used to initiate a group while `group.command` registers a command under a group. For example, the ping command can be run using **/ping** but this is not the case for group commands. They are registered with the format of `group_name command_name`. So here, the **command** command of the **uwu** group would be run using **/uwu command**. N...
#
The latest and up-to-date usable discord.py version can be installed using `pip install -U discord.py`. If you get an error such as: `'git' is not recognized...`, it means that you don't have git installed on your platform. In that case, you will need to do so by going through the required steps for [installing git](https://git-scm.com/downloads) and make sure to enable the `add to path` option while in the installation wizard. After installing git you can run `pip install -U d...
odd spireBOT
regal archBOT
#

ecc249f Add metricity query for messages in past n days - wookie184
4ce5937 Add API endpoint for activity data - wookie184
fca7893 Add tests for metricity activity endpoint - wookie184
798c499 Change the endpoint to be a POST not a GET - wookie184
09b69ba Include users with no messages in response, and... - wookie184

#
[python-discord/site] branch deleted: messages\-in\-past\-n\-days\-endpoint
odd spireBOT
odd spireBOT
regal archBOT
regal archBOT
odd spireBOT
odd spireBOT
night lilyBOT
#
Sir Lancebot

Connected!

#
Sir Lancebot

Connected!

odd spireBOT
regal archBOT
#
    await interaction.response.defer(ephemeral=True)

We don't want to use thinking because if we don't use a followup the thinking state will never go away.

thinking (bool) โ€“ Indicates whether the deferred type should be [InteractionResponseType.deferred_channel_message](https://discordpy.readthedocs.io/en/stable/interactions/api.html?highlight=interactionresponse#discord.InteractionResponseType.deferred_channe...

regal archBOT
#
[python-discord/site] branch deleted: keeping\-tokens\-safe
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
#
[python-discord/site] New branch created: Robin5605\-patch\-1
odd spireBOT
odd spireBOT
regal archBOT
#

[Link to internal discussion](#organisation message). We were discussing how certain responses from the bot could be simplified. Especially the responses that are sent when the bot detected unformatted or improperly formatted code, as these happen quite a bit and can be disruptive to chat when there's such a large embed containing a lot of information to take in at once.

Please leave your thoughts on if and how we should cond...

odd spireBOT
regal archBOT
regal archBOT
regal archBOT
regal archBOT
#
[python-discord/sir-lancebot] New branch created: latex\-url
#

Relevant Issues

<!-- Link the issue by typing: "Closes #" (Closes #0 to close issue 0 for example). -->
Skipping issue, approved by me.

Description

This PR makes the latex URL configurable via an environment variable, in an on-going dev-ops experiment. We may host the API renderer internally.

Did you:

  • [x] Join the Python Discord Community?
  • [x] Read all the comments in this template?
  • [x] Ensure there is an issue open, or...
odd spireBOT
regal archBOT
#

A message link to where an infraction was issued could provide better context regarding an infraction. This feature has been suggested multiple times in #mod-meta and #mod-tools.
If the infraction was issued in a modmail category, the infraction log field for this feature will instead display "Infraction invoked in ModMail channel" or something similar. In future, the modmail log link for the thead can be displayed.

This feature will also require PR to the site repo since a new fiel...

night lilyBOT
#
Sir Lancebot

Connected!

odd spireBOT
odd spireBOT
regal archBOT
regal archBOT
regal archBOT
#

I am in favor of making a new record type or infraction type for storing alt accounts, and not piggybacking off the note infraction as we have been doing.

I'm envisioning this scenario:
User A and User B are the same person, we link them in the database as relationship 1. A week later a new User C comes along and we determine that they are the same person, so we add them to that same relationship so that now all 3 users are tied to the same relationship.

Now whenever we run the user ...

regal archBOT
night lilyBOT
#
Sir Lancebot

Connected!

odd spireBOT
regal archBOT
#

I agree with mina.

Automating the adding of a note to corresponding alts may remove some of the potential error (like not bothering to add a note in the other direction), it still requires extra work to investigate anything to do with alts.

Making this a formal relationship, this info can be displayed automatically and provide extra details "for free".

For example, if I do !u <some user> it would be nice if there were additional pages for each alt. Having a way of adding a reason i...

regal archBOT
odd spireBOT
odd spireBOT
regal archBOT
regal archBOT
regal archBOT
#

I have mixed feelings towards having a timeout. I'm leaning towards keeping it simple and not having a timeout. It should be possible to prevent long parsing times by just limiting the amount of files, for which we already have a setting.

Furthermore, it seems unintuitive that the process may have an OK exit code with some stdout available, but it's getting overwritten by an error, and the HTTP response is still 200. This is also a concern I had with the previous code that was erroring out...

regal archBOT
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
regal archBOT
regal archBOT
odd spireBOT
regal archBOT
#

Honestly after attempting an implementation, this seems to just increase complexity and error-prone code (like the fact that our specification will be an 'either-or-but-at-least-one' requirement of args and input. The initial inclusion of input was already largely redundant as it is directly appended to args, so args can achieve all of the previous usages of input but without the ambiguous parsing and dynamic default of "-c" that we do on our end.

In the future, if we support ...

regal archBOT
#
[python-discord/bot] New branch created: swfarnsworth\-automated\-markdown\-messages
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
odd spireBOT
night lilyBOT
#
Sir Lancebot

Connected!

odd spireBOT
regal archBOT
regal archBOT
regal archBOT
odd spireBOT
regal archBOT
regal archBOT
regal archBOT
regal archBOT
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
#
[python-discord/snekbox] New branch created: add\-dep
#
[python-discord/site] New branch created: vivek/add\-jump\-url\-field
#
[python-discord/bot] New branch created: vivek/infra\-log\-add\-jump\-url
odd spireBOT
regal archBOT
regal archBOT
#

Our current setup is that users must run !subscribe in bot-commands in order to bring up a view of all self-assignable roles.

We should create a permanent view in #roles with a single button which will essentially run the command (with an ephemeral message).

This is more in line with how it works in other communities, with a better UI than running a command, and arguably better discoverability.

The current !subscribe command should remain as-is for the time being.

regal archBOT
odd spireBOT
odd spireBOT
regal archBOT
#

Note that sqlite3 and SQLite is two different pieces of software:

  • sqlite3 is the standard library extension module in CPython
  • SQLite is the underlying C library used by the sqlite3 extension module

The link points to the Python documentation for the standard library extension module sqlite3, not to the SQLite documentation. The SQLite docs can be found here: https://www.sqlite.org/docs.html

regal archBOT
regal archBOT
regal archBOT
#
[python-discord/bot] branch deleted: help\-channel\-rewrite
#

7bb24dc Update constants for new forum channel help system - ChrisLovering
d7d352a Remove unused caches - ChrisLovering
451a2d8 Update help channel system to use forum channels - ChrisLovering
a2b3c06 Use help channel util from help channels cog - ChrisLovering
a152396 Use helper util to determine if snekbox is bein... - ChrisLovering

odd spireBOT
oak estuaryBOT
odd spireBOT
regal archBOT
#
[python-discord/bot] New branch created: help\-system\-timeout
odd spireBOT
odd spireBOT
oak estuaryBOT
odd spireBOT
regal archBOT
#

A couple of changes are required to modlog.py for forum post deletions to be logged properly.

First of all, thread deletion doesn't seem to be getting logged at all. This may simply be a matter of using on_raw_thread_delete rather than on_thread_delete.

Second, for moderation purposes, it would be useful to log the content of the post itself. The ID of the initial mes...

odd spireBOT
regal archBOT
#
[python-discord/bot] New branch created: bump\-bot\-core
odd spireBOT
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
#

Can't this be simplified into the following to remove these nested try except blocks ?

try:
	await bot.instance.wait_for('reaction_add', check=check, timeout=timeout)
except asyncio.TimeoutError:
	try:
		await message.clear_reactions()
	except discord.HTTPException as e:
		if not isinstance(message.channel, discord.Thread):
			# Threads might not be accessible by the time we try to remove the reaction.
			raise e

try:
	await message.delete()
except discord.NotFoun...
#

This was part of the first commit, and it's for sentry. Basically in the case of a warning log, sentry doesn't get a traceback and only has the warning message to go off. Considering how much of the message itself is made up of the thread name, this leads to sentry failing to recognize and group these warnings as one thing. I'm not sure if this will fix it since the thread IDs are different as well of course, but I thought i'd try. Also having the thread name in the warning means the sentry i...

regal archBOT
odd spireBOT
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
#

ed815a1 Simplify Help Thread Warning Log - HassanAbouelela
fcf7e1c Handle Discord API Not Being Ready - HassanAbouelela
4779d42 Don't Remove Cooldown Role From Non-Existing Users - HassanAbouelela
81a6878 Catch Failure In Pining Help Starter Message - HassanAbouelela
555ed4e Check If Thread Is Closed In wait_for_deletion - HassanAbouelela

#
[python-discord/bot] branch deleted: help\-forum\-fixes
oak estuaryBOT
odd spireBOT
regal archBOT
odd spireBOT
odd spireBOT
regal archBOT
#
[python-discord/bot] branch deleted: bump\-bot\-core
oak estuaryBOT
odd spireBOT
regal archBOT
#
[python-discord/bot] New branch created: auto\-archive\-help\-posts
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
#

This change doesn't seem related to the issue, so might be worth splitting to another PR, since there's some more logic you'll need here.

get_or_fetch_channel will raise an error if the channel isn't found, rather than returning None that you are assuming here.

In your nomination_vote_threads list comp if the thread is non, you're adding '', which will result in odd output since, it will still add the comma separator.

#

A couple of points to discuss when I publish this PR:

1. Upon creating an issue and when a member is not found, should we delete the nomination ?

2. We need to update our contribution guide to detail the new config that needs to be added in case someone wants to use/test the feature, right ?

The issue template/content/title is still to be discussed

  1. Not in this PR, that can be discussed in a separate issue.
  2. Yea, that can be another PR to site after ...
regal archBOT
odd spireBOT
regal archBOT
#

Sentry Issue: BOT-3AR

AttributeError: 'TalentPool' object has no attribute 'cache'
  File "discord/ext/commands/core.py", line 229, in wrapped
    ret = await coro(*args, **kwargs)
  File "bot/exts/info/information.py", line 227, in server_info
    embed.add_field(name="Moderation:", value=self.get_extended_server_info(ctx))
  File "bot/exts/info/information.py", line 83, in get_extended_serv...
#

5da9d6a Get, and store, the help forum channel object o... - ChrisLovering
dc99ba4 Consistantly refer to help posts as posts, not ... - ChrisLovering
7d33a85 Don't load the help channel cog if disabled - ChrisLovering
707ace7 Auto archive help forum posts after inactivity - ChrisLovering
8a9a279 Listen for thread starter on_message rather tha... - ChrisLovering

#
[python-discord/bot] branch deleted: auto\-archive\-help\-posts
oak estuaryBOT
odd spireBOT
regal archBOT
#

Closes #2332

As stated by Zig, subscribing to our public roles is currently not super visible since it revolves around executing the !subscribe command that usually goes by unnoticed.

To make this easier, more visible & to align with other communities have, we decided to add a persistent view in the #roles channel that allows people to subscribing to all roles by a click of a button.

odd spireBOT
regal archBOT
regal archBOT
regal archBOT
#
regal archBOT
#
[python-discord/bot] New branch created: don't\-close\-already\-closed\-posts
odd spireBOT
odd spireBOT
regal archBOT
#

This is a continuation of #2323

Soon enough, we will be tracking nominations that have been sitting for more than 2 weeks.

When tracking these nominations, we can run into the case where a particular member is no longer part of our server, which leads to asking the question: what needs to happen then ?

I think that closing the nomination & archiving the thread (if it exists) would do the job, as there's no need to keep it open.

We could potentially track if there's an open issue f...

odd spireBOT
regal archBOT
regal archBOT
night lilyBOT
#
Sir Lancebot

Connected!

odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
odd spireBOT
oak estuaryBOT
odd spireBOT
regal archBOT
#

@mbaruh What do you think of redirection users to the bot-commands channel when they click on that button in the #roles channel ?

The problem is, since we want them to be ephemeral messages, the bot won't be able to edit them whenever a user clicks on a particular role, which makes it non feasible.

I worked around this by giving the 2nd view a timeout, and it gets deleted upon timeout, and it works just fine.
The only thing that worries me is that people would spam this, which causes ...

#
[python-discord/bot] New branch created: dont\-use\-removed\-talentpool\-cache
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
#
[python-discord/bot] branch deleted: don't\-close\-already\-closed\-posts
odd spireBOT
regal archBOT
#

Tags can have aliases, and they clutter the tags list. A person going over the possible tags will see several entries of the same tag, and might be unable to open the tag if trying to invoke its aliases one after another because of tag cooldown, leading to confusion.

Only the main tag name should be used, and we should have a better way to see a tag's aliases if we want them for anything beyond fuzzy matching (for example by showing all names in the same list entry).

odd spireBOT
oak estuaryBOT
odd spireBOT
regal archBOT
regal archBOT
odd spireBOT
odd spireBOT
regal archBOT
#
[python-discord/bot] branch deleted: swfarnsworth\-tags
odd spireBOT
oak estuaryBOT
odd spireBOT
regal archBOT
regal archBOT
regal archBOT
odd spireBOT
oak estuaryBOT
odd spireBOT
regal archBOT
#
[python-discord/infra] New branch created: add\-kubespray\-submodule
odd spireBOT
regal archBOT
#
[python-discord/infra] branch deleted: add\-kubespray\-submodule
regal archBOT
regal archBOT
regal archBOT
regal archBOT
odd spireBOT
regal archBOT
regal archBOT
regal archBOT
regal archBOT
odd spireBOT
regal archBOT
#
[python-discord/bot] branch deleted: record\-help\-channel\-claims
oak estuaryBOT
odd spireBOT
regal archBOT
#
[python-discord/infra] New branch created: nuke\-old\-cluster
regal archBOT
#
[python-discord/sir-robin] New branch created: aoc\-straight\-migration
#

This is a migration of the Advent of Code cog, mostly as-is, from Sir Lancebot to Sir Robin. This is as close to a straight migration as I could manage. Any changes or improvements we want will be made in subsequent PRs once this is merged in.

How do I review this?

I've split this up into 4 commits, grouped by collections of files/changes:

  • Porting over the necessary utils/ files
  • Updating the constants.py file
  • A quick port of the invoke help command thingy
  • Migration of ...
regal archBOT
#
[python-discord/sir-lancebot] New branch created: remove\-aoc\-cog
regal archBOT
#

Advent of Code will be handled by our Events Bot, Sir Robin going forward.

https://github.com/python-discord/sir-robin/pull/66 is the PR to handle the porting it over.

Currently, this Advent of Code cog in Sir Lancebot will fail as soon as env vars are updated for the current year. Our current code using Redis Caches is incompatible with a dep bump in async-rediscache. Any join code or leaderboard invocation will fail due to inability to pull or check what's in the cache.

This PR w...

odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
#
[python-discord/bot] branch deleted: dont\-use\-removed\-talentpool\-cache
#

e2cd734 Typehint bot.get_cog calls in information cog - ChrisLovering
7900bce Fetch active nominations from the API for !serv... - ChrisLovering
2853089 Merge branch 'main' into dont-use-removed-talen... - wookie184
ffcb229 Merge pull request #2344 from python-discord/do... - wookie184

odd spireBOT
oak estuaryBOT
odd spireBOT
odd spireBOT
regal archBOT
#
[python-discord/bot] New branch created: return\-jif\-rename
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
regal archBOT
regal archBOT
#
[python-discord/bot] branch deleted: return\-jif\-rename
oak estuaryBOT
odd spireBOT
regal archBOT
regal archBOT
regal archBOT
#
[python-discord/sir-robin] branch deleted: aoc\-straight\-migration
thin oysterBOT
#
Sir Robin

Connected!

regal archBOT
#
[python-discord/sir-lancebot] branch deleted: remove\-aoc\-cog
night lilyBOT
#
Sir Lancebot

Connected!

odd spireBOT
regal archBOT
#
[python-discord/bot] New branch created: maybe\-fix\-help\-stats\-bug
odd spireBOT
regal archBOT
odd spireBOT
thin oysterBOT
#
Sir Robin

Connected!

#
Sir Robin

Connected!

regal archBOT
regal archBOT
odd spireBOT
regal archBOT
regal archBOT
#
[python-discord/sir-robin] New branch created: fix\-daystar\-command
#
[python-discord/sir-robin] New branch created: bump\-all\-deps
regal archBOT
regal archBOT
odd spireBOT
regal archBOT
thin oysterBOT
#
Sir Robin

Connected!

regal archBOT
#
[python-discord/sir-robin] branch deleted: fix\-daystar\-command
thin oysterBOT
#
Sir Robin

Connected!