#dev-log

1 messages ยท Page 94 of 1

regal archBOT
odd spireBOT
odd spireBOT
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
#
[python-discord/infra] branch deleted: 22\-nginx
#
[python-discord/infra] New branch created: add\-host\-alloc\-file
#
[python-discord/infra] branch deleted: add\-host\-alloc\-file
#

In contrast to the host allocation guide, I believe this should reside on the PostgreSQL host directly instead.

The reason is relatively straightforward: security, and also reliability.

We can simply create user on the database that matches the user on the host and it will be able to connect via unix socket without us having to mess around with passwords, pg_hba.conf and other files.

regal archBOT
#
[python-discord/infra] New branch created: 23\-prometheus
#

Sentry Issue: SITE-22

UniqueViolation: duplicate key value violates unique constraint "unique_active_infraction_per_type_per_user"
DETAIL:  Key (user_id, type)=(938288196100423800, ban) already exists.

  File "django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)

IntegrityError: duplicate key value violates unique constraint "unique_active_infraction...
regal archBOT
#
[python-discord/site] New branch created: integrityerror\-duplicate\-infraction\-race\-condition
#

DRF's UniqueTogetherValidator validates uniqueness by querying the
database before running the actual insert. This is not, has not, and
will never be valid, unless you happen to run a single worker, on a
single thread, and your single worker running on a single thread is the
only client for the database, in which case it may be valid. For any
other cases, it's invalid, and it has never been valid. PostgreSQL spits
out an IntegrityError for us if we have a duplicate entry, and
Postg...

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

Thank you Johannes, this is great. I notice the FilterListSerializer also uses the UniqueTogetherValidator, due to your PR description I assume this should be changed (in a separate PR) too?

Yes, although over there it's less critical as it's not edited as often as infractions, is it?

Yea, it's definitely not as critical. It's quite rare for two requests to add the same item to the filter list would be sent close enough together to trigger this race condition.

odd spireBOT
regal archBOT
#
[python-discord/sir-lancebot] branch deleted: add\-run\-bot\-step\-during\-lint
night lilyBOT
#
Sir Lancebot

Connected!

odd spireBOT
regal archBOT
#

I disagree. If the logs had too many characters and couldn't be uploaded to pastebin, then the core dev team don't need to be told by raising a warning and a sentry issue.

If it fails for another reason, then sure. At the moment however there is no way to tell.

I think we should lower this to an info at least. Maybe in a subsequent PR we could try to truncate logs before uploading to the paste service, this would mean an error being raised would be something that the core dev team would...

regal archBOT
regal archBOT
regal archBOT
#
[python-discord/bot] branch deleted: fix\-bot\-1751
odd spireBOT
oak estuaryBOT
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
#
[python-discord/bot] branch deleted: chris/fix/help\-channel\-errors
oak estuaryBOT
odd spireBOT
regal archBOT
regal archBOT
#
[python-discord/site] New branch created: update\-gitignore
#
[python-discord/site] branch deleted: update\-gitignore
#
[python-discord/site] New branch created: update\-gitignore
odd spireBOT
regal archBOT
#
[python-discord/site] New branch created: update/name\-profile\-policy
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
#
[python-discord/site] branch deleted: update/name\-profile\-policy
odd spireBOT
regal archBOT
regal archBOT
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
regal archBOT
#
jb3
[python-discord/king-arthur] New branch created: jb3/emacs\-prefix
odd spireBOT
regal archBOT
#
jb3
[python-discord/king-arthur] branch deleted: jb3/emacs\-prefix
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
odd spireBOT
odd spireBOT
regal archBOT
#
[python-discord/bot-core] New branch created: bump\-deps
regal archBOT
regal archBOT
#
[python-discord/site] branch deleted: update\-gitignore
odd spireBOT
regal archBOT
#
[python-discord/sir-lancebot] New branch created: new\-banner\-image
odd spireBOT
night lilyBOT
#
Sir Lancebot

Connected!

odd spireBOT
regal archBOT
regal archBOT
regal archBOT
regal archBOT
regal archBOT
#
[python-discord/infra] branch deleted: 23\-prometheus
regal archBOT
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
#
[python-discord/site] branch deleted: content/update\-help\-channel\-timing
#

4bf2087 Content: update help channel claiming system - Akarys42
c1593a6 Fix markdown error linking to recommended editors - minalike
0dc2e2a Update wording in topical and general help chan... - minalike
5403f81 Add Frequently Asked Questions header - minalike
75cde82 Update channel dormancy timings - minalike

odd spireBOT
regal archBOT
#
[python-discord/site] branch deleted: integrityerror\-duplicate\-infraction\-race\-condition
odd spireBOT
regal archBOT
regal archBOT
#
[python-discord/site] New branch created: refine\-constraint\-check
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
regal archBOT
regal archBOT
regal archBOT
regal archBOT
oak estuaryBOT
regal archBOT
#

Relevant Issues

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

Close #990

Description

I have truncated the output using the shorten_output method, limit the output to be 99980* character.
(*) the reason why is it 99980 is there should be 20 charater in the end stating that the output was truncated, they are \n[output truncated]

Did you:

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

Summary

The random insertion of empty unicode characters was a very simple (in a good way) implementation of obfuscation but had a few downsides. Most importantly was that it broke syntax highlighting in Discord, this can be very useful to properly understand the code sent. Another downside was that some outright reported that it didn't work, most likely because their operating system didn't copy the unicode characters.

This is on hold until #5 (and potentially #8) has been completed...

#
[python-discord/bot-core] New branch created: disnake\-migration
#

Group is a subclass of Command, we can just use diamond-order-inheritance:

class _Group(commands.Group, _Command):
    """
    A `disnake.ext.commands.Group` subclass which also supports root aliases.

    A `root_aliases` keyword argument is added, which is a sequence of alias names that will act as
    top-level groups rather than being aliases of the command's group. It's stored as an attribute
    also named `root_aliases`.
    """
regal archBOT
regal archBOT
regal archBOT
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
#

Yeah, we were playing around with the concept of keeping the finally for the metric only. But this would cause metrics to be sent, even if the message wasn't successfully sent to the helpers.

Should now be corrected.
commit

The diff is a little grim, so here are the exact files from the latest commit.
[here](https://github.com/python-discord/bot/blob/6c7444d6f61fe201f97673de435a63d4b4...

odd spireBOT
regal archBOT
#

Ah, when I was testing it was in the negative which seems to have major issues. i.e.

>>> import arrow
>>> past = arrow.utcnow()
>>> range = past - arrow.utcnow()
>>> range.seconds
86391
>>> range.total_seconds()
-8.216756
>>>

For a positive time it seems to work fine?

>>> import arrow
>>> past = arrow.utcnow()
>>> range = arrow.utcnow() - past
>>> range.total_seconds()
72.76027
>>> range.seconds
72

Stuggling to finds docs, probs will have to go sou...

regal archBOT
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
#

This is "done", but I left it as a draft since I need to test it after the big merge.

When merging, I decided that the notify_infraction utility function doesn't need to be separated from the embed sending code. This is because a good bit of code could be removed regarding getting the Member object. However, this means the test for that function no longer works. I tried to fix it, but ultimately realised that it's going to be a headache. The current time has to be patched (which can be m...

regal archBOT
regal archBOT
regal archBOT
#
[python-discord/bot] New branch created: fix/help\-channels\-attribute\-error
odd spireBOT
regal archBOT
regal archBOT
#

Previously, bookmarking embeds would leave the "Bookmark" field blank, but now it takes in the embeds description if the message has an embed within it. (fixed typo lol)

Relevant Issues

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

Description

Did you:

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

Hi, it seems you have ticked the Read all the comments in this template? box, but it seems you didn't read the first comment.

The first comment states

It is mandatory to link to an issue that has been approved by a Core Developer, indicated by an "approved" label.
Issues can be skipped with explicit core dev approval, but you have to link the discussion.

Could you please raise an issue first, where the approach can be discussed before we accept a pull request.

regal archBOT
#
[python-discord/bot] branch deleted: fix/help\-channels\-attribute\-error
oak estuaryBOT
odd spireBOT
regal archBOT
regal archBOT
#
[python-discord/sir-robin] New branch created: initial\_setup
#
[python-discord/site] New branch created: nuke\-admin\-app
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
#
[python-discord/infra] New branch created: add\-country\-database\-for\-geoip
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
#

With the current pre-commit setup, the flake8 dev deps won't run in it.

We either need to use the local repo for it which will use the installed flake8, or remove the flake8 deps from the project and add the plugins as additional_dependencies in the pre-commit hook.

The local repo solution takes a bit more time to run, while additional_dependencies removes the ability to nicely update the deps as it moves to a different location, and will need tighter constraints as it doesn't lock

#

With the current pre-commit setup, the flake8 dev deps won't run in it.

We either need to use the local repo for it which will use the installed flake8, or remove the flake8 deps from the project and add the plugins as additional_dependencies in the pre-commit hook.

The local repo solution takes a bit more time to run, while additional_dependencies removes the ability to nicely update the deps as it moves to a different location, and will need tighter constraints as it doe...

regal archBOT
#

It needs to be changed in the pre-commit hooks. With how it's set up now, pre-commit will create its own venv for the hook from the flake8 repo, which when ran will not interact with the poetry venv that has the plugins in any way.

The bot does this the local repo way, where it forces pre-commit to use the poetry environment instead of its own but being slower is not ideal for something that runs on every commit https://github.com/python-discord/bot/blob/719f94f0e437c92e1dbb7db478e35...

regal archBOT
#

Currently, python manage.py test looks like this:

jc@zulu:~/workspace/pydis-site$ python manage.py test
Creating test database for alias 'default'...
System check identified no issues (0 silenced).
........................./home/jc/.cache/pypoetry/virtualenvs/site-_f36zgtP-py3.9/lib/python3.9/site-packages/whitenoise/base.py:115: UserWarning: No directory at: /home/jc/workspace/pydis-site/staticfiles/
  warnings.warn(u"No directory at: {}".format(root))
...................................
#

We have these tasks in pyproject.toml which more or less just delegate to maange.py commands:

[tool.taskipy.tasks]
start = "python manage.py run --debug"
makemigrations = "python manage.py makemigrations"
django_shell = "python manage.py shell"

In my opinion, this abstraction is problematic, as most people who used Django know what manage.py is and how it works, and recommending usage of wrappers like this creates a feeling that we're using some special functionality here....

#

One thing thatโ€™s not really clear is how our repo is organized. For those new itโ€™s not clear where our API lies and where some of the site content goes or even how it may be structured.

Some questions that I hope could be answered:

  • If I want to add a new site article, where does that go?
  • If I want to add a new resource to the site, where does that go?
  • If I need to add a new API endpoint, where do I need to look for that?
    • joe mentioned DRF, how does that come into...
#

In the apps directory:

This is the folder directory that I think would benefit the most from some guidance or explanation.

Notable things to point out:

  • admin - ??
  • api - I guess this is where our api resides. Probably a good point to mention DRF and dive into some api resources
  • content - This is where site content goes? Probably good to mention that itโ€™s simple markdown, no jinja or django knowledge required
  • events - ??
  • redirect - ?? probably donโ€™t need to div...
#
  • DRF is a thing we use apparently, can we include some basic โ€œgetting startedโ€ stuff with it?
    • Also we technically donโ€™t mention we use DRF anywhere, so it would probably be good to mention that we use it to start
  • How do you actually interface with a new model you create? Thereโ€™s a lot of assumed knowledge here from when I was asking questions.
    • โ€œIt's a matter of adding models and setting up DRF viewsโ€
      • DRF isnโ€™t really part of basic Django knowledge. Maybe pro...
#

poetry run python manage.py run --debug is quite verbose. The alternative is to activate the virtual environment first with poetry shell, which is nicer I suppose, but still not as convenient.

What if we renamed the tasks to be more similar to manage.py's names? Alternatively, maybe just a task for manage.py and then the user can specify arguments? Since Poetry can run Python scripts with tool.poetry.scripts, taskipy isn't needed e.g. poetry run manage run --debug

odd spireBOT
regal archBOT
#

-Werror

Am 23.02.2022 um 22:47 schrieb Mark @.***>:

Ensure that the warnings don't appear again

If warnings don't appear then how will we know of their existence so that they can be addressed rather than ignored?

โ€”
Reply to this email directly, view it on GitHub, or unsubscribe.
Triage notifications on the go with GitHub Mobile for iOS or Android.
You are receiving this because you were assigned.

#

Hmmm yeah, I mostly forgot about the debug flag. I have never used it personally, itโ€™s interesting to see what it does though. On the danger of venturing off-topic a bit, do we have that documented somewhere?

Am 23.02.2022 um 22:46 schrieb Mark @.***>:

poetry run python manage.py run --debug is quite verbose. The alternative is to activate the virtual environment first with poetry shell, which is nicer I suppose, but still not as convenient.

What if we renamed the tasks...

regal archBOT
regal archBOT
#
[python-discord/site] branch deleted: nuke\-admin\-app
odd spireBOT
regal archBOT
regal archBOT
#

aff3e35 โœ๏ธLATEST_MESSSAGE -> LATEST_MESSAGE - GDWR
73fe24f ๐Ÿ”ง Add notify_running_low config values - GDWR
3f1089f ๐Ÿ”ง Add notify_running_low config values - GDWR
d5606a7 ๐Ÿ”ง Add notify_running_low config values - GDWR
e91ab75 โ™ป๏ธRename notify -> notify_none_remaining - GDWR

odd spireBOT
oak estuaryBOT
odd spireBOT
regal archBOT
#
[python-discord/forms-backend] branch deleted: fix\-eval\-exploits
odd spireBOT
regal archBOT
regal archBOT
#

With the .flake8 config file, does this solve the issue? Or is it something that changes in the .pre-commit-config.yaml?

It needs to be changed in the pre-commit hooks. With how it's set up now, pre-commit will create its own venv for the hook from the flake8 repo, which when ran will not interact with the poetry venv that has the plugins in any way.

The bot does this the local repo way, where it forces pre-commit to use the poetry environment instead of its own but being sl...

regal archBOT
#

Sir Lancebot's .epoch command is quite nice with it's support for different timeformats such as "in 3 hours" or "in 1 week". It's support for specific datetimes with TZ offsets is handy as well, when I want to have a reminder arrive at a specific time in my timezone.

I think it would be beneficial to see similar time formats supported in our !remind command (because remembering M vs m is always quite annoying, and I don't think I'll ever remember it correctly on first go).

regal archBOT
#

support for specific datetimes with TZ offsets
@janine9vn

This is already planned as part of #1924 (which is currently stalled by the modpings PR).

support for different timeformats such as "in 3 hours" or "in 1 week".
@janine9vn

I can probably implement this as an extension to #1924 since it's of a similar vein.

I'd like to hear a proposed implementation from whoever wants to take this on before approving it
@ChrisLovering

In terms of implementation, we can proba...

regal archBOT
regal archBOT
regal archBOT
regal archBOT
#
[python-discord/sir-robin] New branch created: fix\-review\-policy
#
[python-discord/sir-robin] branch deleted: fix\-review\-policy
regal archBOT
odd spireBOT
regal archBOT
regal archBOT
regal archBOT
regal archBOT
#

After discussing this a bit in internal mod channels, I've decided I'd like to have a go at implementing this.

From what I can tell, the bot side of this is already implemented, as the payload when getting a clean log link actually passes the channel id of each message (see https://github.com/python-discord/bot/blob/91621bc7ef590118e91bbb2e387db5e14128b530/bot/exts/moderation/modlog.py#L61-L71).

As such, this should just be a case of updating the [DeletedMessage](https://github.com/pyth...

regal archBOT
odd spireBOT
regal archBOT
odd spireBOT
odd spireBOT
regal archBOT
regal archBOT
#
[python-discord/infra] branch deleted: add\-country\-database\-for\-geoip
#
[python-discord/site] New branch created: add\-channel\_id\-to\-clean\-logs
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
regal archBOT
#
[python-discord/site] New branch created: readme\-for\-project\-directory
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
regal archBOT
regal archBOT
#
[python-discord/bot-core] branch deleted: disnake\-migration
#
[python-discord/bot] New branch created: disnake\-migration
#

This migrates the bot to disnake, as per recent discussions.

What this includes:

  • Changes all references from discord.py to disnake, including in tests
  • Bump version of bot-core so discord.py wasn't required as a sub dep
  • Use monkey patches from bot-core
  • Fix the single breaking change I could find
    • The internal bot.http.edit_message function now has a required files kwarg, which is only used in the help channels cog.
    • Set this to None as we never upload files using t...
odd spireBOT
regal archBOT
regal archBOT
regal archBOT
regal archBOT
regal archBOT
#

Currently when a user has a ModMail thread open, and attempts to join the appeals server when they aren't banned, their thread will have two embeds sent: one notifying of the user joining, and one notifying of the user leaving.

The issue with the current implementation, is that the leave embed is sent before the join embed, which can be misleading and confusing.

An example can be found in this thread
![image](https://user-images.gi...

regal archBOT
regal archBOT
#
[python-discord/sir-robin] branch deleted: initial\_setup
regal archBOT
#
[python-discord/sir-robin] New branch created: pr/ghworkflows
regal archBOT
regal archBOT
regal archBOT
#
[python-discord/site] branch deleted: add\-channel\_id\-to\-clean\-logs
odd spireBOT
odd spireBOT
odd spireBOT
regal archBOT
#
[python-discord/sir-robin] New branch created: deploy\-workflow
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
regal archBOT
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
#
regal archBOT
#
[python-discord/sir-robin] New branch created: feat/add\-bot\-core
odd spireBOT
regal archBOT
regal archBOT
#

Unfortunately the Django documentation doesn't have a glossary entry for applications, since it's mostly just a directory structure built on conventions (but created with startapp). I do think some prior Django knowledge is useful, but maybe we should expand on it regardless. How about something like this?

apps contains our Django apps, which contain isolated functionality and are created using the manage.py startapp [linked to the django docs for that command] command.

odd spireBOT
regal archBOT
#

I'm not sure if it's a good idea to use line breaks in Markdown. I prefer to rely on soft wrapping. Otherwise one has to rely on their text editor to fix the wrapping when something gets amended (or tediously do it manually). Maybe it's fair to blame one's editor if it cannot do this easily.

I personally prefer it for a few reasons:

  • It's easier to read it, for one in diffs and for the other when editing it

But I don't mind either way. I can kill o...

odd spireBOT
regal archBOT
#
[python-discord/sir-robin] branch deleted: feat/add\-bot\-core
odd spireBOT
regal archBOT
regal archBOT
#

When someone from moderation team uses !help sm non staff member or user who did not send the command is able to interact with buttons. I think it should be limited to not allow users interaction on mod help embed if they are not the author.
The paginator wont show up when non staff member uses the !help sm command but I think it would make sense that if moderator runs the command in some general channel, the interactions would be limited to author of message.

Link to message: http...

#
[python-discord/site] New branch created: kill\-test\-warnings
odd spireBOT
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
odd spireBOT
odd spireBOT
odd spireBOT
regal archBOT
regal archBOT
#

Problem

We have good articles explaining topics like how to set up our projects and how to review a PR, but for someone just getting into contributing to open source projects it isn't clear what they need to learn, where to find those articles, or what their first steps should be. Our articles are organized in a confusing web of subarticles, which makes it easy to miss something important and makes it very hard to tell when you've covered everything you need.

As an example, currently ...

regal archBOT
regal archBOT
odd spireBOT
regal archBOT
#
[python-discord/sir-robin] branch deleted: deploy\-workflow
odd spireBOT
regal archBOT
#
[python-discord/sir-robin] New branch created: add\_devlog
odd spireBOT
odd spireBOT
regal archBOT
#
[python-discord/sir-robin] New branch created: bump\-status\-embed\-version
odd spireBOT
regal archBOT
regal archBOT
regal archBOT
#
[python-discord/bot-core] branch deleted: feat/site\-api\-wrapper
odd spireBOT
regal archBOT
regal archBOT
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
regal archBOT
regal archBOT
regal archBOT
#

๐Ÿ’ฏ This makes the project far more approachable, love this README. I now have a bit better of an idea of how to navigate this project and where to go to find what I need. No longer this black void that destroys hopes and dreams through sheer intimidation alone.

I think it would be nice here to link to site's contributing guidelines or just the landing Contributing page (https://www.pythondiscord.com/pages/guides/pydis-guides/contributing/).

#
[python-discord/site] branch deleted: readme\-for\-project\-directory
odd spireBOT
regal archBOT
odd spireBOT
regal archBOT
#

This does not fully fix #2022. If I reload the source cog and then reload the tags cog I can still reproduce the error:

AttributeError: 'TagIdentifier' object has no attribute 'qualified_name'

The issue is that even though the utils are in another file, that file also gets reloaded. Applying this diff to the bot will show that when reloading tags, the utils also gets reloaded:

diff --git a/bot/exts/info/tags/_utils.py b/bot/exts/info/tags/_utils.py
index d321dd81..d55...
odd spireBOT
regal archBOT
#
[python-discord/sir-robin] branch deleted: add\_devlog
thin oysterBOT
#
Sir Robin

Connected!

odd spireBOT
regal archBOT
#

Hmm, I thought sure "current timezone" refers to the TIME_ZONE setting, so

~/workspace/pydis-site
$ rg TIME_ZONE
pydis_site/settings.py
176:TIME_ZONE = 'UTC'

but it seems Django differs there:

The default time zone is the time zone defined by the TIME_ZONE setting.

The current time zone is the time zone thatโ€™s used for rendering.

So we don't use anything that would change the _curren...

regal archBOT
regal archBOT
odd spireBOT
regal archBOT
#
[python-discord/sir-robin] branch deleted: bump\-status\-embed\-version
thin oysterBOT
#
Sir Robin

Connected!

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

Description

A dictionary command, that's about it.

Reasoning

As a small command for the added convenience of not having to search the definition of a word in a separate browser tab.

Proposed Implementation

For the dictionary (API) to use, I suggest to either use Wiktionary (a Wikimedia Foundation project, parent of Wikipedia) or the Oxford Dictionary (which is what Google uses)

It should display multiple definitions, and optionally with examples of it ...

regal archBOT
regal archBOT
#
[python-discord/site] branch deleted: kill\-test\-warnings
odd spireBOT
regal archBOT
#
[python-discord/sir-robin] New branch created: feat/code\-jams
regal archBOT
regal archBOT
odd spireBOT
regal archBOT
#

Thanks for addressing my comments Chris. I have looked at the diff of each file and not yet found any odd changes - I could also not find any differences between discord.py and disnake when migrating other than the new text-in-voice feature resulting in some methods returning VoiceChannel which may not include all attributes/methods (send() and edit() would be present I believe). Any issues that may arise from this that come to mind?

Additionally, this pull request is pretty much...

#
[python-discord/bot-core] New branch created: monkey\-patch\-in\-util\-namespace