#dev-contrib
1 messages Β· Page 154 of 1
legacy
Wow that was fast, thank you! π
my pleasure doing business with you π΅οΈ

I had to do a bit of a trick with the cache, but it works
bump, can I submit pr to apply this to Lance?
doesn't seem worthy of an issue, but if no one says yeah I'll make one lol
I don't understand what you want to change and why
the paginator on Lance edits every message twice?
OK I will make an issue lol
the paginator in Lance was taken from bot years ago. the bug was fixed on bot, but not on Lance. this patch fixed it on bot last year. it was not ported to Lance.
I see, you can PR it
Hey @vale ibex did you have to manually cross-off the task in bot#1961 or was it closed automatically with the PR?
I did it π
write workflow for it /s
Just tell joe, he'll find a way to make review bot do it
interesting idea
Yo, whoever want's to be a part of the termination of @brisk belfry feel free to check out bot#1928
heh
wrong
That is a matter of opinion
I was about to say the same thing haha
and that lead to my question, would you want logic suggestions or nitpicks?
Hey @last patio, could you have a short peek at https://github.com/python-discord/bot/pull/1928 please ?
What do you all think of sir-lancebot#948 which migrates the quiz command into threads and also adds a few questions onto the most common categories for the quiz command?
Actually about that last part, I'm not sure if this is just deja vu but was there an issue on adding more questions to the quiz command?
sir-lancebot#815 maybe?
Yep it was that, thank you
so for now it might just have to be migrating to threads since that issue is for Objectivitix i think
Seems fine, we just don't use threads publicly yet
Ahh, alright
seasonalbot#950 π
Never heard of seasonalbot before
It was sir lancebot like 10 months ago
seasonalbot is what lancebot used to be called
say...
@clever wraith does the appeals plugin have a way to allow mods and up into the appeals server without kicking them automatically?
Ah ok
Anyone with the dev-ops role does not get kicked
but what if there's a new mod who needs to be added π
yeah it does, devops and owners are whitelisted by defualt and staff can be given roles to bypass it
No real reason to be on that server
how can staff be given roles to bypass if they get kicked lol
Given the roles here
ah
There is a staff role you can have on the server to not get kicked
But it is a mystery how you assign it
yeah
solution: assign devops here, join, assign staff role there and remove the devops role here
I mean, we would just restart modmail and do it while the bot is restarting lol
lmao
We won't assign devops just for this
It does have some perms, it isn't a vanity role
ah
lol i think we did
With who though
scale got in somehow
Scale got yeeted didn't he
well tbf scale has admin so
what a hacker
not really like scale is getting extra perms
Doesn't matter for scale anyway, he's admin lol
probably won't be possible at some point down the line
when we do
zero trust all the thingsβ’οΈ
You should really do the thing
imagine not trusting your admins /s
Just because it is so technically interesting
don't trust myself tbh
it's not actually perm removal, it's just requiring things like 2fa to use perms
think like sudo
I'm so confused
don't understand lol
escalate temporarily to have perms
bot command + site somewhere
yes I want the juicy implementation details
okay so it effectively would not do anything
huh?
I was thinking about command + DM to the bot
Having a web challenge run on the CF edge could be interesting
and how would perms be granted?
with a role that has admin, below the bots highest role
above all roles
no, it would be below the bots highest role
Web challenge would allow stateless bot which would be sick
ah, right yeah
it is something that i am tying into
snow don
which now means the bot is in control
my cool project name
Ah yes
but snowdon will do more than thta
so some of the current admin user commands would not be accessible to them unless superuser
eg eval
because anyone who had access to the eval command could bypass the whole system
and just yeet themselves an admin role
eval would be something we'd look at yeah, it would probably be a separate bot to python but we'd need to see how we can hook it in
yes I do think of the discord permissions system daily
presumably have snowdon expose an API where python can check if the user has sudo status
My big concern is redundancy in case there are issues with the bot's connection or the api gateway for the bot
would this apply to admins or owners too?
okay I'm basically asking are you gonna make lemon and Sebastiaan have to do the 2fa
mentioned this in mods actually, we'd distribute a doomsday script to mods that can restore their mod perms and the same for admins, requires some form of quorum (e.g. 2 mods or whatever), completely off our infrastructure
from what we've discussed they want that, yep
(With me no longer being an admin but still needing to do things like move channels, role adjustments, and etc. It's essentially zero trust and it's such a pain to get things done tbh)
so what happens to your permanently superuser perms Joe π
what would this script look like? How would it be run? Because if it's relying on connections with the gateway but for whatever reason discord is limiting it for bots how would that work?
they remain as is, ideally they wouldn't but at least it means the vector is greatly reduced
I'm surprised the events lead role doesnt give you more perms
a good question, and one to figure out, running it would probably use something like Shamir secret sharing to decrypt a token and use that to restore perms, not entirely sure of the implementation yet, almost all of this is just ideas in my mind. As for a situation where bots cannot use the REST API, I can't think of one where discord is online and that is the case, so it's one to think about but not one I expect we'd have to deal with
but at some point it would still use a bot token, right? I could easily imagine a scenario where the python bot gets accidentally rate limited or something happens with it.
it wouldn't use python, all of this would be on a separate team on separate bots
btw what's the status of botcore?
since botcore is supposed to dedupe code between bots
think it's in Zig's hands, not sure where we're at with it
wish i could help lol
We merged the first commit a couple days ago
The repo itself is public though, you can see that
I guess I'm just ultra hesitant of the zero-trust thing, cause with my events lead role it has been Not The Most Fun β’οΈ and if there's a hiccup you still have to determine if it's serious enough for the Doomsday script or not. It just sounds like a lot of friction to getting stuff done. Buuut I'm no longer an admin so *shrug*
I'm not sure it's similar to your situation
this isn't removal of permissions, admins will still have all the permissions they need, it's just audited and needs 2FA, I'm not even sure if we'll restrict Administrator
but yeah it's something that still needs a lot of specifying
Zero-trust o_O?
My Dad has done work for a bank, and they need zero-trust for all microservices... and when I say, trust me, it does not sound fun.
but from what you described earlier, you don't have the perms until you request them. So they don't necessarily have the perms off the bat or with the "usual" role
All sockets between the microservices are encrypted, audit logs are done on an encrypted Blockchain, etc.

Because right now, anytime I want to do something with moving channels, or roles, or whatever it's me requesting to either have those perms or it be done. Even if an admin is immediately around to give that to me, it's still a delay and additional friction to getting things done when you're on a roll with getting things done.
yeah, but the request is entirely automated and required a 2FA code, might even use attributes like IP or geo so we only ask for one 2FA/day or whatever
but yeah it's something we've yet to specify fully, UX will be something that we balance out with security
lol were not going to go full ZT
but as much as is feasible
and auditing permission uses feels like something that is fairly alright
Could you just draw a big circle on the map for my geo lmao
An Admin doesn't need to be an admin all the time yeah.
Scale the adventurer
Lol
What's the unlabeled zone between scaleios and not scaleios
What's the government hiding
What do they not want us to know
actually i thought all of the issues for it were internal lol
There aren't any issues written down afaik
lol, yea, there aren't
or was that smartconfig
forms probably
ah, that's your project π€‘
That one does have some issues written down, just not public
yeah
@molten perch what's the command structure for .aoc daystar?
Is it still something like: .aoc daystar 5-2
?
oooh, nice nice!
#changelog message
It's in the changelogs π
And the leaderboard command works like: .aoc lb [name] if it is not found, then it'll send back an error.
Somehow .aoc join ain't working :/
yes it does
it doesn't raise from there, but it logs an error to sentry
oh how does it know to log to sentry?
not all leaderboard failures notify, transient HTTP doesn't, but if it gets a bad response (e.g. bad cookie) then it'll log
bot/exts/events/advent_of_code/_helpers.py lines 261 to 262
log.error("It seems like the fallback cookie has expired!")
raise FetchingLeaderboardFailedError from None```
bot/exts/events/advent_of_code/_helpers.py lines 278 to 279
log.error(f"reached 'unreachable' state while fetching board `β{leaderboard.id}`β.")
raise FetchingLeaderboardFailedError```
aaaaah, okie
but we could make it more visible yea
We should resolve those in sentry so that when they happen again they get shoved in #dev-alerts
lol
no
alerts are sensitive, include user data
a lot
lol
if mod commands fail, they get relayed. if site fails, IPs and browsers get relayed, so on
Somewhere, in the depth of that channel, you can find my IP, browser, location, probably my phone number and mother's maiden name too
I've opened PRs on lance and bot to action #dev-announcements
lmfao
Lol
sir-lancebot#951
bot#1966
They are tiny, would appreciate a review
Are there any more projects that need this
maaaaybe site
nop
maybe edit the announcement to say, we're dumping it?
I'll put out a new announcment
But seeing as like 1 person actually uses it, it really does not matter
For most people, you'll have to do nothing
I could probably ping them individually too
π I reacted to it too
I know, I saw
oh i forgot
Please make sure to ping me with an explanation of what you use it for if you vote B
@gritty windTldr I use file logging for seeing differences between runs, or after a test run and they fail.
are our logs deterministic π
- We don't log tests
- There are definitely better ways to see what tests failed
- What joe just said
- It doesn't really matter to be able to see what changed between runs tbh
even when Iβm a troll Iβm helpful
It's why we keep you around
Lmfao
Once bot#1868 is merged, we should probably update/remove .aoc subscribe
given how close december is, probably keep it but direct to the new command
can also remove role management perms from lance then too
neat
that's the whole reasoning behind your devops daddy role
Lmao
Yep, we'll definitely need to implement parallel testing on the API in the future π€
We might have to introduce some changes on the database creation.
(Create databases for each worker, I guess?)
xdist my beloved
maybe pg virtualenv can do that
We could use pg venv, or look at a way to make it so that it's threadsafe
Okay, let's just discuss it before doing anything. π
How's it different from creating a database and tearing it down at the end of the test? We could use worker ids, and maybe it's easier while using docker?
See: https://github.com/pytest-dev/pytest-xdist#identifying-the-worker-process-during-a-test
Lol
How close is your PR to being merged?
Will you do that, or should I do it?
pretty close, jsut needs reviews
has had some feedback implemented already
lol 45 seconds isn't that long
That's one endpoint
depending on how the tests are distributed, it won't help
What do you mean? What will not help?
Oh, paralel testing. No, I'm almost certain it will.
I mean 45 seconds is not long, but if we aren't gonna implement paralel testing, it's gonna take much longer.
That's what I want to avoid.
Does @stable mountain have slash commands and buttons?
Not slash commands but it does have buttons
using dpy 2.0?
Do you guys plan on adding your own implementation of slash commands or via a fork?
oh
Neither will happen any time soon (within sort of 3-6months) but we'll most likely pick a fork
But we probably won't be using slash commands
okay so doesn't look like pr comments go to #dev-log
some form of comment lol
Should .aoc [command] be limited to #aoc-bot-commands?
only join, subscribe, and countdown are allowed there. The other ones are restricted
ah alright
itβs kind of taking over #advent-of-code though and Iβm sure it isnβt a worry now but in the future it might be
specifically .aoc join
I'm okay with it taking over for now because there isn't much else to talk about with AoC
!remind 166h dusk time.
Your reminder will arrive on <t:1638059219:F>!
Fuck wrong channel
@clever wraith you can run !remind delete 3522 if you want to delete that
No I want the reminder I just sent it in the wrong place
Ah ok
Well I meant you could delete this one and send it in the right place
I noticed a "minor" error in the AoC dayandstar feature,
could someone take a look at sir-lancebot#954 ?
It's 3 liner basically, shouldn't take more than a minute to review.
Where?
Nope, if you run postgres with docker it has to be in correspondence with the url specified in docker.
For now it's enough if you specify a bogus value, but as soon as my PR gets merged(if it ever gets merged lol) you'll have to specify an actual db url.
But if you did not touch any of the API part, the tests should pass. π
is that really a good idea?
Yes, it is.
It's under development. I can't really do anything else.
The current tests don't use the database at all, so you can just provide a bogus value. It does not matter.
But my PR introduces tests that actually require a database to be set up.
what's your pr number?
api#30
will leave review
kind of seems overscoped, both a migration and setting up the test suite...
That's how it is.
I worked a lot on that PR.
In order to set up an endpoint I had to create a testing suite.
And actually, tests are the core parts of the endpoints.
The only additional things are the fixtures.
if one builds on the other then it can be done with two prs, pointing the migration pr towards the testing suite pr and leaving as draft but specifying do not merge
because it's overscoped and large that's likely why there's no reviews yet π
and I know that from experience, having made some 2000 line diff prs lol
It is not large at all.
I just modified a few models so that it's more convenient. (we're talking about one-liner changes)
Secondly, I pushed that PR yesterday 
ah, I was explaining towards the (if it ever gets merged lol) part here
To be totally honest at this point, I was trying to be humble.
ah
hey could someone look at bot#1967 lol might want to close it
Lol what the hell
Thanks @cold island
Hey! Would someone mind to take a look at sir-lancebot#954 ? It only needs one review.
(It's a three-liner basically)
Thanks a lot.
Hey! I would appreciate a few reviews on sir-lancebot#901. Thanks so much!
I've noticed that .halloweenify and .spookyfact aren't locked to October. Should they be?
Also noticed a grammatical mistake here: https://github.com/python-discord/sir-lancebot/blob/main/bot/exts/avatar_modification/avatar_modify.py#L289
bot/exts/avatar_modification/avatar_modify.py line 289
brief="Spookify an user's avatar."```
May I PR a fix?
Also if I could get assigned to sir-lancebot#937, that would be great. Thanks!
bot_1 | 2021-11-22 02:29:42 | bot.utils.scheduling | ERROR | Error in task Task-16 140701060127440!
bot_1 | Traceback (most recent call last):
bot_1 | File "/bot/bot/exts/help_channels/_cog.py", line 316, in init_cog
bot_1 | await self.move_idle_channel(channel, has_task=False)
bot_1 | File "/bot/bot/exts/help_channels/_cog.py", line 352, in move_idle_channel
bot_1 | await self.unclaim_channel(channel, closed_on=closed_on)
bot_1 | File "/bot/bot/utils/lock.py", line 108, in wrapper
bot_1 | return await func(*args, **kwargs)
bot_1 | File "/bot/bot/exts/help_channels/_cog.py", line 436, in unclaim_channel
bot_1 | return await _unclaim_channel(channel, claimant_id, closed_on)
bot_1 | File "/bot/bot/exts/help_channels/_cog.py", line 448, in _unclaim_channel
bot_1 | claimant = await members.get_or_fetch_member(self.bot.get_guild(constants.Guild.id), claimant_id)
bot_1 | File "/bot/bot/utils/members.py", line 20, in get_or_fetch_member
bot_1 | member = await guild.fetch_member(member_id)
bot_1 | File "/usr/local/lib/python3.9/site-packages/discord/guild.py", line 1714, in fetch_member
bot_1 | data = await self._state.http.get_member(self.id, member_id)
bot_1 | File "/usr/local/lib/python3.9/site-packages/discord/http.py", line 335, in request
bot_1 | raise HTTPException(response, data)
bot_1 | discord.errors.HTTPException: 400 Bad Request (error code: 50035): Invalid Form Body
bot_1 | In user_id: Value "None" is not snowflake.
whyyyy
did someone change the help channels in the test server 
it's cause of this #dev-contrib message
Makes sense, how am I supposed to fix it?
hmm, !dormant didn't work as apparently it's disabled?
Manually move the channels to dormant and reload the extension I guess
seems to have fixed it, thank you!
@green oriole fyi your issue (bot#1968) is a dup. of one I made a few weeks ago (bot#1930)
Not sure what the process for duplicates is
:BaguetteSwing: duplicate :BaguetteSwing:
Thanks discord, appreciate it
Well, in most cases you can copy the information from the newer issue to the older and close the newer one
I guess I'll do that then, thanks π
I think it is fine personally
I hope so :p
π
@static canyon Just as an FYI so you don't yell at me for committing failed lint code like last time lol. I committed Bluenix's suggestion which probably caused a line spacing issue, which I'll try to fix later today. Thanks!
Sounds good π
Although to be clear, I wasn't meaning to "yell" at you last time; was just making sure you had pre-commit etc.. on because it makes life way easier
I'll probably review your PR over the weekend or something
Ah ok
!remind 5d Review sir-lancebot#901
Your reminder will arrive on <t:1638016170:F>!
Thanks
heyyy could a admin or owner add api to #dev-log π₯Ί
I use dev-log to keep track of stuff over github notifications lmao
@vale ibex I will just ping you
welp π
seems owner only
okay
@patent pivot please do, (I am pinging cuz this is like the 4th time someone is asking to do that)
4th time someone
that was me lol
i did once, rest you lol
not all comments are
okay, enabled the PR comments that weren't on
thanks!
thanks!
pytest-xdist is a real wonder π
Managed to cut API test times to one-fifth of the original times.
there is no real reason to not add it
Yeah, the issue is more about the hows, because of the databases.
But I managed to get it work with worker ids.
Just waiting for an approval or similar on api#31
Done-zo.
It took a bit longer because of package installs.
But the test only took 11 secs, in contrast to that yesterday it took 24 secs.
Nice
there's another plugin and many hooks to do that lol
lmfao https://nvd.nist.gov/vuln/detail/CVE-2021-41250 medium severity
That was literally two lines of code. I wouldn't bother with hooks and plugins if I can use a built in feature that works perfectly fine (it seems so)
Feel free to check it out.
built in feature
the hooks are built in
Okay.
π
I still believe, that we shouldn't bother with hooks and plugins, when you can do the same thing with worker ids.
And I find it more convenient. But, we'll see π
well, this looks like it runs on the runner, sure. But how do I run it locally?
Just the way you would run it normally. pytest
I feel like I recognize that ID
so the database is already running, everything is already set up?
As of now, you have to have a database up and running, and provide a db url in the env.
Then, pytest.
But you can also run in docker.(not sure though)
We might create a task, not sure.
gotcha
so it'll give me a very cryptic error if there isn't a database running π
Most certainly yes.
We should just support it in docker
Yeah, like the migrations
if you want to run psql locally then that's up to you
use a pytest hook to block the test run if there isn't a database, or mark all tests that rely on a database and run them if it exists
If you have the knowledge to have a psql server running locally, then you likely have the knowledge to run pytest against it
Seems overcomplicated to me.
There will always be a database, since we will have it running in docker
Okay, but I'm not sure why we would torture ourselves with hooks and such.
tests/conftest.py
import pytest
def pytest_configure():
if not database:
pytest.exit('A database must be running to test')
and database just needs to validate it can connect
We're gonna support it only in docker. As Chris mentioned
could also use pytest_sessionstart
not sure why you think hooks are torture lol
but docker is another fine solution
Because those are integrations tests, I'm not sure why would someone go ahead and run them just out of the blue.
But sure, we're gonna support it in docker only, but still..
I'm not sure why would someone go ahead and run them just out of the blue.
I read both readme.md and contributing.md and neither mention a database is required to run the tests
While it is implied, it is never mentioned. So that's my review, I guess. I'll convert it to a github review
Yeah, since...
We don't have the tests yet. π
It's a PR yet to be merged, I'll open PR to make the README better later on.
But I'm a bit busy with the endpoints already, I'm terribly sorry.
It's a PR yet to be merged, I'll open PR to make the README better later on.
I was reading that pr. Since it requires it, there should be a sentence that says it requires a running database, and tests must be run in docker. Doesn't need a whole pr to add it, a sentence should do. π
The API repo is still very much under development and the readme and contributing are by no means finalized. We're not even using the API yet. So it should be fine to only support docker as d0rs4n and Chris have so far indicated that they'll do.
Yes, I know its under development, that's why I'm reviewing it.
you may. lol
@vale ibex It seems like that I cannot run pytest in docker, because the dev packages won't be installed when building the container. (--no-dev)
Do I just add a poetry install to the development "target"?
Yea, you could
but I'd suggest swapping production and development around if that is the case
since you always want to "build up" a docker image
Yeah, I can't really, since poetry is not installed in the development stage.
ahh
And If I were to swap the stages around it would mean that dev packages are installed even in the prod. stage.
So, I'm clueless π
Nah, you'd do the install with --no-dev first
then in the dev stage install again without the flag
if production is before dev, then it would be stopped before that second install
Yeah, but poetry is installed in the builder stage
Then, even if I were to put production before dev, I still wouldn't be able to use poetry. (I guess, I tested it out.)
Yea, you'd need to do FROM builder as development
rather than FROM base as development
Is there a particular reason we use assertEqual in site tests rather than assertCountEqual when comparing json? I don't think we really care about ordering, just that the actual key:value pairs match.
Bump #dev-contrib message
Managed to get it work. (Did not swap it in the end, so the order is: builder, development(from builder), prod(from base))
Also, is there a particular reason as to why the app volume is read only? Pytest wanted to write to some cache file, so I had to remove it. Now it works fine.
It's read only so that code changed in teh container for whatever reason doesn't mess up your local copy
We should keep that volume read only and add specific writeable volumes for what we need
Oh, yes. Makes sense, sorry.
No worries π
pytest writes to cache to be able to help debugging test runs
Is this referring to the mistake I found?
it's referring to the message you linked.
Thanks!
So, If I do something like that:
- .:/app:ro
- ./.pytest_cache:/app/.pytest_cache
- ./.hypothesis:/app/.hypothesis
It should be fine, right? π
(The tests work, I'm just curious if it seems fine to you)
Sure! π
PR is ready, sir-lancebot#955. Could you please review?
Thanks @molten perch !
you can also move pytest's cache, if you desire (not saying this is a good solution nor better than the above, it's not, it's just an option)
what is hypothesis?
Hypothesis is a testing framework in Python iirc
An educated theory \s
Lmao
are link shorters blacklisted?
For the most part, yes
Soonβ’οΈ they won't need to be but for now they are
but some of them (at least 1) seems to be available
It's not something where they all have to be blacklisted
It's more that bit.ly for example has been used loads by people sending the nitro scam
oh I see
And so we blacklisted the entire website until we get url unfurling
Which will be soonβ’οΈ (there is a PR for it somewhere on bot)
oo, nice
No they are still blacklisted
My PR deletes the shortened URL before unfurling it
We unfurl for the purposes of applying further filters
There is no good reason to use a shortener here
Right, fair enough
lmao
also, I remember an issue for this already existing 
So I cannot remove the do not merge tag on https://github.com/python-discord/site/pull/627#pullrequestreview-813563184
Chrome just crashes if I try to do that
removed it
Thanks
use firefox π€‘
no
@austere hornet I am reviewing your PR and one of your comments gave me a great idea.
You asked about the author check - and yes we can use it!
Add a self.checks = set() attribute inside __init__().
Inside the command after defining the author_check() add it to this set using self.checks.add(author_check) (and remove it after you're done).
Now inside the listener you can have this code: ```python
for check in self.checks:
if check(after):
break
else:
# This means that no check returned True
return
Now put the code that adds the message here:
...
You can do if not any(check(after) for check in self.checks):
damnit Zig

Ah, right
!remind 5H this
Your reminder will arrive on <t:1637702066:F>!
Thanks!
Hey if you have some time, would you mind to take a look at api#30?
(It supports running tests in Docker, so It should be fairly easy to set it up, but you can read the README, it has been modified as well)
Hmm the otn endpoint was already migrated right?
No, it has not been.
It built upon my previous PR that was close due to recent discussions regarding SQLAlchemy async, and 2.0 Syntax.
So that's the first endpoint effectively
But I can almost certainly say that this is the last heavyweight PR, since we've set up everything we need(including this PR):
Tests, ORM, Migrations.
I see
I think once we have one endpoint migrated we should look into using the new API in prod so that we can test that it's working properly, and then continue to the other endpoints
Here's your reminder: this
[Jump back to when you created the reminder](#dev-contrib message)
!remind 3H trying to do homework smh
Your reminder will arrive on <t:1637712916:F>!
Yeah, sure! π That would be really cool!
Here's your reminder: trying to do homework smh
[Jump back to when you created the reminder](#dev-contrib message)
setup-python supports caching for both pip and pipenv projects.
RIP
Use the composite action smhhhhhh
Iβve already scammed my way into botcore, and soon, every other repo
use pip. poetry invokes pip underneath.
so it should cache the dependencies for poetry too
!ban 816637783233527839 7d You were told literally yesterday to not self-advertise. Should you decide to rejoin, make sure you DON'T do this again.
:incoming_envelope: :ok_hand: applied ban to @tardy wraith until <t:1638362201:f> (6 days and 23 hours).
Hey! I've been looking at the site and bot code for a while, but I don't seem to get, when the active field of a Reminder will be set to False, I haven't really thought of that before.
It seems like that when a user is reminded, the reminder will just simply be deleted π
(or maybe that's is only for backwards-compatibility? )
Oh I see.
I was just confused since the Patch Request Body format looks like that:
>>> {
... 'mentions': list[int],
... 'content': str,
... 'expiration': str, # ISO-formatted datetime
... 'failures': int
... }
So, activate is not accepted in that case, in the FastAPI version.
I'll go ahead and add it.
sir-lancebot#901 needs core dev reviews! (non-core dev reviews are also appreciated ofc)
.github/workflows/lint-test.yaml lines 84 to 91
# Run flake8 and have it format the linting errors in the format of
# the GitHub Workflow command to register error annotations. This
# means that our flake8 output is automatically added as an error
# annotation to both the run result and in the "Files" tab of a
# pull request.
#
# Format used:
# ::error file={filename},line={line},col={col}::{message}```
The page is called formatting output inside github actions iirc
Hey does anyone know when PyDis will incorporate threads on the server?
We've been discussing it. I think it's probably a matter of an admin having time to pay proper attention to it.
Ah I see. Thanks
I have a bunch of things ready for that admin 
Alright
Hey! If any of you could look at api#30 it would be greatly appreciated. The PR might seem a lot, but actually it's just a few files, the rest of them are one-liner tiny model improvements, and Docker - or - Github Actions - related things.
(It should also be pretty straightforward to set the project up and run the tests!)
Thanks! π
What do people think about me using the nltk module for validation in sir-lancebot#901 (as stated in Shom770's latest comment)?
!pypi nltk
Yeah, I think nltk.corpus.wordnet has support for all the english nouns and more
Is there a way to get all the issues/PRs I've commented on for a specific repo? Presumably it's stored somewhere so that GitHub knows to email you when a new comment/commit/etc. is made
Sure
commenter:TizzySaurus org:python-discord
You can add some is: tags to search for issues or PRs, and set their status
Perfect, thanks π
Just looking for some assistance with snekbox. In particular the following config
2021-11-25 09:57:01,374 | 12 | snekbox.nsjail | WARNING | Failed to set the memory swap limit for the cgroup. This is probably because CONFIG_MEMCG_SWAP or CONFIG_MEMCG_SWAP_ENABLED is unset. Please ensure swap memory is disabled on the system.```
Tryna sus the correct config
Also please @ me on a response, Im off soon
snekbox/nsjail.py lines 98 to 107
try:
# Swap limit is specified as the sum of the memory and swap limits.
# Therefore, setting it equal to the memory limit effectively disables swapping.
(mem / "memory.memsw.limit_in_bytes").write_text(mem_max, encoding="utf-8")
except PermissionError:
log.warning(
"Failed to set the memory swap limit for the cgroup. "
"This is probably because CONFIG_MEMCG_SWAP or CONFIG_MEMCG_SWAP_ENABLED is unset. "
"Please ensure swap memory is disabled on the system."
)```
from googling around, those two seem to be kernel flags, are you running this in docker or locally?
Isn't it because those env vars are set and not unset?
The problem is that you have a swap on your system
Its using the docker container
Try running sudo swapon
Correct, 2G
I'm not sure of the flags in snekbox and if I can disable it without removing swap
Then you'd want to turn it off if you want the memory limit to work
Although I could just remove it, not a big deal
We could add an option to not turn on the memory limit
Due to how the swap system works, we cannot set a limit when you have some swap set
π
Hey! If someone could take a look at api#30 it would be greatly appreciated. The PR might seem a lot, but actually it's just a few files, the rest of them are one-liner tiny model improvements, and Docker - or - Github Actions - related things.
(It should also be pretty straightforward to set the project up and run the tests!)
Thanks! If you have any questions regarding how to set it up, feel free to ask! π
site#621 is failing because of a merge conflict but when I do what it says to resolve it says no conflicts were found?
Error:CommandError: Conflicting migrations detected; multiple leaf nodes in the migration graph: (0075_infraction_dm_sent, 0075_add_redirects_filter in api). To fix them run 'python manage.py makemigrations --merge' Error: Process completed with exit code 1.When I do the command:```
C:\Users\tizzy\site>python manage.py makemigrations --merge
No conflicts detected to merge.
It seems like a migration has been merged since you generated your migration, so you have to modify the βdependenciesβ part in your migration to be up to date with the current migration βHEADβ(?) Iβm on phone so I canβt send you a snippet but you can follow the syntax of the previous migrations.
(In case I havenβt wrote enough βmigrationβ: migration)
or just delete your migration during the merge, create a new one, then add it and commit
Cool, thx
what.
yeah
Cheers
python-dotenv
Solid. Re-writing my little input getter for advent of code
Figured I should do it correctly this time
python-dotenv, importable as dotenv
however, given what you're writing, I would look at using environs :D
!pip environs
will serialize the types for you
I'm happy and familiar enough with dotenv. You can feed it a file path to the .env file, right?
By default it searches the work directory
But I believe you can also specify
I just realized I was thinking the wrong way anyway
I'm good now, just had a derp
For some reason my brain was like "Yeah put it in the project root" despite me putting the input getter in a sub project folder, so I'll just put it there with that
Ignore the crazy man
I might be wrong, but I think it pulls it from sys.path
I know it loads the .env stuff alongside that
so if it's in that or a sub dir then it should be fine π
Structure is:
advent_of_code/
advent_of_code/
input_getter.py
So yeah, they see me derpin
hah
yes, you can also customize what it searches, too
@patent pivot how [can it be harmful]?
how what
oh i'm mainly just trolling
but force pushes can be harmful because they change history
especially on a PR whihc multiple people are working on
but Volcyy is a genius, an expert, the top of his field, I know if anyone is careful about force pushes, it's him
ah
i've been force pushing a lot recently lol
mostly because i've been debugging github actions
This is why you have a private repo with an easy to remember name
This is just the main branch π€‘
Canβt actually see the action count # on the mobile app tho
I suppose... the problem was it was related to the existing workflows and extra integrations.
specifically was setting up coveralls and ensuring it was set up in a way to not cause workflow failure if coveralls failed
lol @last patio how often do you update your about me with Joe quotes?
every time the queen retreats to enter a "new phase"

But is mongodb Webscale?
Lmao
How would I install the dependencies for nltk with poetry install? Is it simply poetry install nltk?
!pypi nltk
iirc when i was messing around with nltk earlier it's a bit of a weird one
You install nltk and then you install the bit that you actually want (i.e. corpus iirc)
nltk.corpus.words is what we'd want (a from nltk.corpus import words)
>>> import nltk
>>> nltk.download()
This is what they show on the website
Then it brings up a GUI and you select corpus or whatever it is
Hmm I don't really understand the need for nltk
Here we go, "words" is shown there (you actually want wordnet but same process)
If it's just validating user input, I don't really see the need
The main idea iirc is that it gives a list of words
Which I guess could also be used in .hangman
Looking at the issue in question that doesn't seem to be the use case here
Unless I'm misunderstanding
Relevant comment on the PR: https://github.com/python-discord/sir-lancebot/pull/901#pullrequestreview-815493133
Yep, seems sort of out of scope and unnecessary
I think it's alright to let people enter nonsense, part of the fun
I was thinking the same thing and so was @brisk brook , cc @trail pilot since I DM'd you about this too
Hm, I didn't know you had to do all this jank to download the corpus itself
so it's fine as is
just rolled out a couple of security headers to all python discord web properties
if anyone notices something weird on pythondiscord.com please ping me, if any staff notice something weird on an internal service also ping me
Is it just me or is the icons not loading at all (not sure if this is pre-existing issue but I just noticed it)
oh
huh
that's
lol
ahhhhh
so
yeah that's related to this
hmmmmm
hmmmmmm
so the reason is that I stopped us sharing pythondiscord.com with sites that we link out to
How I know it's devops trickery hour:
and one such site is fontawesome, who uses our referrer to figure out if we are allowed to use pro icons
I think I can leak a bit more info, I'll just tell browsers to set the referrer to www.pythondiscord.com with no page details
@full fractal give that a shot
lmfao true true
And it works, no 403 from fontawesome in the logs
awesome, cheers
thanks!
I don't think the answer you received was correct. Swap can be enabled on your system, but then your kernel must have support for managing swap memory resources I.e. It should support setting a swap limit in a group. This is what those kernel flags mentioned in the error are for. If swap is enabled but can't be controlled by the cgroup, then the process would effectively have no memory limit since it would be able to just use the swap space.
Alternative to those kernel flags is to completely disable swap on the system.
The message is warning you that snekbox can't limit swap memory so it's now your responsibility to disable swap
It shows that warning even when swap is already disabled too, in which case you can just ignore it.
Would love some reviews on:
Yea. My kernel doesn't support the c group flag so I had to disable swap. Although I managed to completely brick the server in the process somehow. Not sure how I managed to fuck up something as simple as disabling swap but yea
If I copy some systems or parts from @stable mountain I need to add licence from the repo to my code even if it is modified source, right?
yes, you need our license to appear somewhere
good to know, I was about to make some commits and had to get this checked up, Adding it to on top of files where I use anything copied should be good?
yeah it is fine
great, thx!
Bump
@austere hornet Could you add some example executions (screenshot of running the command) to your christmasify PR?
Sure!
Well actually it isn't really ready yet, but I will do that when it is. Sounds good?
π yep
I just wanted to see how the feature wasn't going, haven't planned on reviewing it yet btw
What is the url it's making a session to? A closed one that can't be seen or smth from discord itself? https://github.com/python-discord/bot/blob/1302632c39469a124e85e6b43c5278526874ce5e/bot/exts/filters/filtering.py#L561
bot/exts/filters/filtering.py line 561
f"{URLs.discord_invite_api}/{invite}", params={"with_counts": "true"}```
These constants are defined here https://github.com/python-discord/bot/blob/main/config-default.yml#L377-L379
config-default.yml lines 377 to 379
# Discord API URLs
discord_api: &DISCORD_API "https://discordapp.com/api/v7/"
discord_invite_api: !JOIN [*DISCORD_API, "invites"]```
If you have an invite code, you can see any guild, even in the discord client
Why are we still using v7 lol
Iβm not even sure what v7 is, itβs documented as βdoesnβt look like anything to meβ in the docs
Oh I was just looking at the wrong place, thank you!
v7 is actually what dpy 1.7 was using for the longest time
now dpy 2.0 uses v8 for the REST api and v9 for the gateway
(it was like this because as i was told, ppl were using it before it was documented, so everything was documented as v8.)
I remember being told that it's v6 but with some bugfixes/better errors/etc. and library devs went "Ooh, shiny" for it
@summer garden consider yourself assigned for the epoch command
is the http_session smth from dpy or not? I can't seem to find from anywhere https://github.com/python-discord/bot/blob/1302632c39469a124e85e6b43c5278526874ce5e/bot/exts/filters/filtering.py#L560
bot/exts/filters/filtering.py line 560
response = await self.bot.http_session.get(```
the .get is from python src but session is smth else?
and I think it requires intents
!d aiohttp.ClientSession
class aiohttp.ClientSession(base_url=None, *, connector=None, cookies=None, headers=None, skip_auto_headers=None, auth=None, json_serialize=json.dumps, ...)```
The class for creating client sessions and making requests.
;-;
http_session is an instance of that ^
that explains stuff
.get() is actually a GET request to the provided url endpoint
will it be sufficient to just put the link of the repo in the readme/commit message ?
ianal, but no
depends on how much is copied
is this inbuild to python, yes?
that's a very confusing description imo
that's good to know, thx! I'll get back to work
it's a dependency of discord.py, which means if you've installed discord.py it'll already be installed
The terms of the license include adding the license to your code:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
Umm⦠okay sure
MIT is as simple as it gets, you need to include the license including the copyright license somewhere with your software. a separate license file would be the usual choice
or add the copyright notice if your project is also mit
Stop sending messages in dev log joe
if I want to include it in seperate file, what would it be named like?
ohh crap 
so is there any suggested/best-practice way to include them then?
like I usually copy template files ig? like github workflow, tox.ini ... etc
IANAL, but it does say substantial and a configuration file hardly seems substantial to me IMO
license_3rd_party or something, it should just be clear, it'd also be good practice to include what it applies to
so far I have just added the license to every file that copies smth from the bot
Hi, I found this in the code-base: https://github.com/python-discord/bot/blob/main/bot/exts/moderation/clean.py#L286-L290 (Introduced in PR #1793). As the comment below suggest, we can only allow up to 100 messages for bulk deletion, that's fine and all, but the condition itself forces the number to be equal (== ) to 100 messages, rather than forcing it to be less, that's most likely a typo and should probably be fixed
bot/exts/moderation/clean.py lines 286 to 290
if len(to_delete) == 100:
# Only up to 100 messages can be deleted in a bulk
await channel.delete_messages(to_delete)
deleted.extend(to_delete)
to_delete.clear()```
I assume it was missed in the review since the PR edited a lot of things and the commit that changed this was actually quite old (Nov 22, 2020) but I'm fairly sure it's wrong since I don't see any reason to enforce the length to be exactly 100, especially with that comment saying the number just needs to be less or equal to 100
It's not a typo. It's adding messages to a queue to be deleted, if it hits 100, then it'll delete it. If you look further down the code, you'll see that if there's anything leftover (i.e. >0) then it'll call a delete on those messages.
If you changed that line to be <=, it would delete messages one by one, not bulk
oh, I see, my bad then, I just quickly glanced over it in a diff from another PR that didn't show the rest of the code before it and I was too lazy to read over it since it just immediately seemed wrong, in that case it's fine
Yeah, in general I recommend reading the context of the code and the code before and after a snippet.
Hey! Sorry that I keep promoting my PR π
So, I would love to have some reviews on api#30.
It's not that bad, the core part is ~6 files in total, and there are also taskipy tasks that make things easier, like test , that will run tests inside docker, so that no-one has to bother with setting things up.(More about on that, in the README in the PR)
Thanks! π
I will try to take a look at it soon, I'm currently looking through other PRs which need a review
https://github.com/python-discord/site/pull/572 this is pretty important, since it means inconsistent data
Indeed, would love to have some reviews on that as well. π
Cool just checked myself and it looks good
Did you want to rebase off main rather than add another merge commit? π
Auto merge should just merge it after ci then
Yeah, I guess so.
I wanted to rebase but I might have misinterpreted it π
You did, but more commits have been merged to main since π
So it's out of date with main again
Oh, so I managed to do it in the end, cool. π
So, do I rebase it again, or just auto-merge it? π
auto-merge will merge when all criteria are met, one of which is being up to date with the branch it's being merged into (main)
if you rebase onto main and forcepush, it will bring it up to date, so then auto-merge will merge it
sometimes we use the "update branch" feature in GitHub to bring a branch up to date with main, but that adds a merge commit, so is nice to avoid sometimes
Yes, I've done that a five times, never ever again. π
I'll do that, thanks for the heads-up. I was always confused about that π
I have finally conquered all the main Pydis Open Source Projects π
Are we using a wrapper for message components with lancebot?
Has that implemented message components though?
hmmm, given that dpy is going to break in only a few months (5 at max) what is the plan, if any, from pydis yet?
Still hasn't changed
I believe that discord.py's implementation of message components are broken or destroyed with most forks if any other features interaction api features from the forks want to be used.
ah gotcha, okay
And it isn't gonna break to my knowledge
Wait for the first library to come out as a strong contender for the main library
And what change are you referring to
Yeah what Akarys said
We have post april 2022 support
It will, discord have confirmed that post April you need to supply the message content intent when connecting to the gateway if you want message contents
in April you will need to define a different intent number, doable with a monkey patch
So we either monkeypatch intent flags (not too hard) or migrate
That much should be easy to patch in though
Not as difficult as migration if we don't have a good contender for sure lol
but at that point unpatched dpy will be broken, so I'm not wrong
it's not officially documented yet, nor was announced when dpy shutdown, so I'm not sure how that would be possible
that intent you're thinking of is a different intent
Really? The intent number has been known for months, hasn't it?
there's a message intent and a (TBA) message content intent
it's likely 1 << 15 but again, not yet documented.
Could we make our own fork for small things like that, so we don't have to monkypatch for now?
since I checked it
We could fork it, or monkey patch it
not too much difficulty either way
Yeah
but at that point, I imagine a contender for migration will eb fairly obvious
Patch is my preference, but that's not very relevant right now
given that there's... 7 bots for here now a fork might seem more useful
disnake seems like the winner right now, but 4 months can change that
Yeah, we will see about it in a bit
That's an option we still have if we don't want to migrate
Yea
We'll have bot core by then hopefully, and also its just a small snippet tbh.
So, to answer your question arl, we haven't really got a plan other than wait it out and decide later π
yeah also novus, possibly
but we have some things we can do to extend the time we can wait, such as patching
I'm against py-cord and some other libs for some personal reasons
Since the most important thing to us in a lib is that has decent maintainers
and we can't really tell that right now, since most of these libs have only been around for 4-5 months
since it's new, some of the forks ended up as some people's first big project
yup
I haven't used it really, nor kept up with any drama, if there is any
Not really too interested in it either π
tldr py-cord is poorly maintained and basically rewriting the whole lib afaict
Ah
Well the main thing for us will be a lib that has minimal changes to the core implementation
am I wrong in thinking buttons and dropdowns are not implemented in dpy?
I've been participating on the disnake repo for a few days since I like it but not it itself
They are implemented in d.py
only in the master branch alpha version
Is that the one we're using? π
Yea
Yup
Docs are here https://discordpy.readthedocs.io/en/master/
Someone had fun migrating 
lol
Only things it doesn't have right now are context menus and slash commands
disnake is drop-in rn. aaaand it implements slash commands and other features too so once a switch to it occurs its not too hard afterwards.
they do have a disnake discord shim, to not have to rewrite all of the imports, but they don't recommend using it
and anything new that discord adds
like channel banners, scheduled events, text in voice, timeouts, etc
I highly recommend looking at a fork sooner rather than later given upcoming timeouts which can replace muting and work much better
a discord side block on all server interaction which does not relate to permissions at all
Right now we have an excellent infraction system that works perfectly, while it will surely be better to use the native impl there is no rush
It should also be a really small change
famous last words
yeah this isn't something we urgently need
our system will always be more granular, so we need to see if we want to integrate with this or stay as is
But it is something that will become more painful to implement the longer we go without it
Why will it become more painful?
forks will deviate and seperate from the initial dpy implementation. Right now, most of them are mostly a drop in replacement. As time goes on, they will have their own features, and as discord gets more features, they will become breaking features and need to be implemented.
at least, i think that's what @fervent sage means
Kinda what arl said but also the more services we have using dpy the more places we will need to update
discord donβt tend to have many breaking changes - if they do itβll be on a new api version
thatβs true yeah - we should actually think about that for some upcoming projects
hmmm, i wonder if the next voice feature will be v10 then
text in voice channels?
yeah
on current api version but doesnβt seem to break dpy from my last testing, not sure if thatβs still the case
you have text in voice channels here?
not here
fortunately in terms of new channels discord.py just kinda ignores those events
djs and eris both outright crash 
at least they used to
had some great fun crashlooping zeppelin with stage channels back in the day lol
Exactly, that's a good thing
What if we pick one and it deviates in a way we disagree with?
Thats not really a valid point since any of them can at any point
Like sure it could happen but it could always happen
short of maintaining our own fork (which seems like a bad idea) you cant solve that
Right, that's true. But arl's point is that we should switch ASAP so that it will be easier to migrate because forks will eventually deviate - and I think the opposite. If we wait and see what general direction they're heading it is easier to make an educated decision.
It's been a couple of months, and we can already see which general direction they're heading
if any of the major forks were going to make drastic changes to the paths they're on it would have happened by now
I think I'm here
Oh yeah, I don't think any of them will make any huge changes. They all seem to have the goal of continuing the work of discord.py
IMO the drastic changes are about to happen, with text in voice, channel banners, and timeouts. That will be where implementations will be separate between libraries
I disagree with this, I genuinely do not see the difference between the forks without jumping into the diffs.
I suggest a higher priority, but not asap fixes
I may be missing information, but I don't think Discord has made any really major changes to the API since the deprecation, so I'm of the opinion that we should wait a while longer to see their general direction (so I'm with Blue).
There's still until april, but by april there must be a solution--even if that's just a monkeypatch
That's great, we can wait until that and then make a good decision when that has happened
!remind 3w these released yet?
Your reminder will arrive on <t:1639791254:F>!
ye, and that's also where I'm curious-- which forks break the discord.ui.view module?
That's a good point, disnake does the fastapi-style and the rest seem to try to have a good compatibility with discord.ext.commands
Since as those features are adopted more on pydis bots, that namespace may be broken by forks if implementing slash commands is also wanted
Im confused; nextcord doesnt yet have slash commands, pycord's dont work in cogs...?
hence neither can be compatible surely
also pycord overall has not the best maintainers IMHO
I am saying that they're trying to go that route, as in be as similar to that system as possible.
I haven't double checked recently, but a few weeks ago I tried a few forks with my bot having a few view components and they had issues with the discord.ui.View module, enough so that they need to add more support or remove it
personally i don't think the maintainers of pycord or nextcord are super decent maintainers but that may just be me

wait are you maintaining one of them?
I may own the nextcord discord
oh, oops
dw
RPS contributes to like 4 of the major py libs
interesting commits, but neat
My brain is currently split across like 6 libs
what are all of them?
2 of my own, nextcord, pycord, disnake, and hikari 
not sure what they're expecting, they've contacted the owner and the owner said no.
doesnt pypi make clear that requests like that wont happen?
yes
and if you're making an issue that sounds more like you're trying to convince someone of solving a dispute.... π€¦ββοΈ
For what it's worth, the current project has just 57 lines of meaningful code, while my project has thousands.
also this line just makes me dislike it in all
anyways, that's why I dislike pycord, but not the right channel at this point lel
ultimately I think taking Blue's approach and holding off for now is the best bet, things are very much still up in the air with all forks but we've got plenty of time to think about things
it's not likely we're going to use the native muting functionality anytime soon, and we wouldn't change libraries just to support text-in-voice either
so, it'll be like threads and not publicly enabled for a few months+?
maybe, maybe not, we'll see if the feature has a place and discuss it, that's something for Hemlock's domain, but usage of it would be blocked until we could support it in @stable mountain
the current system works well enough
π
Holy shit they won't win this. Considering they even got a response from the owner explicitly declining that request.
Besides, pycord has been a thing for like a year now by kyb3r: https://github.com/kyb3r/pycord
I always found it rather shitty that they took that name, though I don't know if they've (the maintainers of the discord.py fork called pycord) got permissions to use the name by kyb3r.
yeah, its pretty bad what they've done imo. Furthermore they apparently will release their actual library in January, as currently what is on pypi is an exact copy of discord.py 1.7.3.... and nothing else. Not even sure why the pypi name matters to them so much as they don't even use it (so far)
but also that pycord by kyb3r mentions in the readme, its a dead project, with a most recent commit in December 2019 Β―_(γ)_/Β―
In response to this text - why name your package that way if it was already taken. That's on you!
I still consider that a shitty thing to do, imagine if someone comes out with a library called discord.py in two years
wasn't there a fork called that?
actually I shouldn't joke about that, someone will think I'm being serious
Oh I get it lmao
To weigh in on the pycord pypa thing: yeah that's a really shitty request imo
after being denied the name by the package owner they have no right to try and take it by force
I think it's also on them for not being explicit enough about py-cord versus pycord and as Bluenix said why choose that name if it was taken in the first place
Like, what's happening here is that this ffmpeg wrapper is "getting hurt" (I don't know what the best way to put it is) because they (discord.py fork maintainers) chose a bad name. They are the ones who chose a bad name and they (discord.py fork maintainers) are to blame.
except actually, discord.py is the second name for that project, it used to be called something else.
pydis rewrites to disco π
used to be called pydiscord
As for the original owner's claims that "any change to the name would break all projects which relies on it," I reviewed the listed dependents on GitHub. From the code in each of these repositories it is clear that all of them depend on my project, not the current project. I could not find any evidence of any repositories that depend on the current project, across all of GitHub.
Tl;Dr "I don't think there's any damage made because the original owner's code is useless"
Did I get that right? I am confused
it is a weird one, it is off topic for this channel though
where is it not offtopic?
off topic, probably, or I guess #discord-bots
You got that right
but nitty gritty about package naming is not for here
Good point we've ranted enough lol
its not off topic nor purely discord related though?
it's not dev-contrib related, either
python-general? /s
libraries out there are relevant, but pypi name claims (and the validity) are not lol
I'd suggest a new channel but in 3 months when we agree on a name it will be too late π
and it'll already be taken by joe last year
Ah welp to get back on topic then I guess.. tomorrow will be review day for me π
Got a few PRs that I need to test π€·ββοΈ
Lmfao
Alright, in the main bot, constants.Colours.bright_green exists for some reason and is used exactly 3 times. Twice in the help channel system (DM to author and available message) and once for the !modpings off command. There's also constants.Colours.soft_green which is incredibly similar and used 19 times in 12 files. Can we get rid of bright_green and just use one green color?
Side-by-side comparison
For comparison, orange and soft_orange have a huge difference, and soft_red doesn't even have a red to compare with.
!remind 8D this
Your reminder will arrive on <t:1638673511:F>!
!remind delete 3568
That reminder has been deleted successfully!
!remind 7D this
Your reminder will arrive on <t:1638587176:F>!
!remind edit duration 7D8H
Converting to "int" failed for parameter "id_".
!remind edit duration 3569 7D8H
That reminder has been edited successfully!
The color choice seems pretty deliberate, and they seem distinct enough to me. Is there a technical reason to not have two greens?
The bright green embed color is used with an icon that has the same color, Using soft green with that icon won't really look good
Here's your reminder: Review sir-lancebot#901
[Jump back to when you created the reminder](#dev-contrib message)
I guess there's no technical reason, it's more of just a visual annoyance here:
A visual annoyance as in, it's too bright?
As in they're very slightly different, in the same place, and both related to the help system. It makes it seem like they should be consistent but they're not.
Yeah that seems much more reasonable than what I did π
I'd quite like us to get away from named colours like this

Tldr I use file logging for seeing differences between runs, or after a test run and they fail.
