#dev-contrib

1 messages · Page 169 of 1

static canyon
#

Good enough

#

m = await bot.wait_for('message', check=lambda m: m.author == ctx.author and m.channel == ctx.channel) or whatever

fallen patrol
#

it depends on when (possibly if) pydis chooses a fork

#

and you can use modals even in dpy if you want to make the raw requests yourself lolol

clever wraith
#

I know one that isn’t technically a fork

#

It’s made by a helper in the dpy server

fallen patrol
#

interesting I didn't know it grew

clever wraith
#

Are you sure the user guesses are right?

#

Because when I try testing it, idk but it seems a lot of my guesses aren’t in that list

clever wraith
#

Not anymore, only the solutions one now

#

I have NO clue how to play this game at all I can’t test it

sleek steppe
#

The first one seems to be the possible wordle answers, and the rest are just other words that are accepted

clever wraith
#

I’m randomly selecting from the solutions one as the word to play

#

this list doesn’t take the commonest words… shade, sodas doesn’t work

#

Update: I used or instead of and

clever wraith
#

Yeah

#

I’m literally getting my friend to solve this wordle

#

My mind is the solar

#

works!

hoary haven
#

another itty bitty PR bot#2096 pleading_taco

dusky shoreBOT
fallen patrol
#

lol unreads again?

green oriole
#

Pretty sure I still have the muscle memory to do it

#

Anyway tested & approved even if that doesn't do anything lemon_cyclops

gritty wind
#

Was there a reason for picking the question mark instead of the typical wordle orange?

#

Also from the screenshot, you had “plebe” when the word was “plume”, yet the last letter e was marked as incorrect

#

I’m guessing you’re doing an array of available letters and popping off from it if you find a match? If so, make sure to look for any greens before trying to do question marks

#

That’ll avoid these situations

green oriole
#

Remember that the algorithm for repeated letters is a bit more complex

#

3B1B explained it in his last video

static canyon
#

I've been looking around bot for some more bug fix PRs I can implement and stumbled across bot#2004.

The suggested fix was to add HTTPException to the supress, but the error seemed to be because the thread had already been archived by the time the bot tried to join it (based on the first line of the traceback), so wouldn't it be better to have a if thread.archived: return instead?

Although I suppose if the issue was because the thread had been archived, then that raises the question of why a thread in on_thread_join was archived.

dusky shoreBOT
green oriole
vale ibex
#

imo we can just delete the event listener

#

the bot doesn't need to join all threads

static canyon
#

Hmm

#

That does mean the bot won't be able to moderate those threads (thinking in terms of public threads) @vale ibex

vale ibex
#

the bot still gets events from threads

#

even if it's not in them

static canyon
#

Not sure if that's correct

#

Seems weird to get on_message for a channel you're not a part of

vale ibex
#

feel free to test it yourself

static canyon
#

Would it be able to send messages without joining?

#

E.g. the auto mute messages

vale ibex
#

Yea

static canyon
#

Huh

vale ibex
#

it'll just join after sending

static canyon
#

I suppose sending the message just makes it join

#

Yeah

vale ibex
#

exactly like users do

static canyon
#

That makes sense

#

Is there any reason to autojoin then?

#

And if not, why was it added in the first place?

vale ibex
#

The only argument for it I can see is so that that bot is in the member list, so users get the prefix hint. Which isn't a strong one imo

vale ibex
static canyon
#

Right

#

In which case I'm happy to do a PR just removing the event

#

If that's the course of action we want to take

vale ibex
#

seems like the way to go for me, rather than investigating a race condition for a function we don't need

static canyon
#

Yeah

#

Okay, cool

#

bot#2097 👍

dusky shoreBOT
static canyon
#

@vale ibex I committed your suggestion on the regex validation PR but that meant you were credited so your review now doesn't count lemon_sweat

#

bot#2094

dusky shoreBOT
vale ibex
#

co-authored should be fine for policy bot

static canyon
#

Ah, nice

#

Cool

#

Will address your reviews on the other PRs later (probably over weekend) 👍

vale ibex
#

yea no worries, or rush 😄

#

just trying to get through a few PRs

hoary haven
#

as scoff once said

more like whyos

#

also is it fine if i do a fix up PR?
add the same for antispam alert and remove for autoban alerts maybe

vale ibex
rapid swallow
#

yep

vale ibex
#

Sure, sounds good

hoary haven
#

do i try and squash it with the commit already merged to main? is that desirable/worth it?

vale ibex
#

although, if you meant fixup as in the term used for squashing commits, please don't do that 😄

hoary haven
#

so brand new commit

vale ibex
#

Yea

#

squashing commits in main will be a bad time

hoary haven
#

i did not delete my fork/branch yet, can i just do it there

vale ibex
#

since it rewrites history, and anyone with a local copy will hate you

vale ibex
hoary haven
#

oki

sleek steppe
hoary haven
#

lol

#

i will specifically request a ToxicKidz Review

#

what's your github?

sleek steppe
#

same as my username 😄

clever wraith
#

tehe

green oriole
#

That's so stupid

brisk brook
#

Congratulations tada tada tada

austere hornet
#

Congrats @sleek steppe !!! 🎉 tada

static canyon
#

Congrats @sleek steppe! 🎉

vocal prairie
#

Congratulations Toxic! 🎉

austere hornet
#

Bump

sleek steppe
#

@hoary haven re: bot#2098, the code you linked basically just checks if the spammed message's content (in this case there's only 1 message) is too long for an embed description, and then upload the content if it is too long. I guess you could do something like first_message_content for the content variable, but it's up to you 🙂

dusky shoreBOT
hoary haven
#

i couldn't find a way to test that section of code (test as in, watch it happen in a debugger) and that's what i've been doing to try and understand this behemoth bot haha

#

i couldn't think of ways to trigger antispam other than posting the same message repeatedly, or messages really quickly, by # of new lines, or by # of emoji

cold island
hoary haven
#

maybe a message with lots of emoji? haven't tried that

cold island
#

A message has a limit of ~4000 characters, and an embed description can contain 4098 characters iirc. But the embed also includes metadata about the alert

#

So there might not be enough characters left to display the full message

hoary haven
#

but when would a singular message trigger antispam?

cold island
#

newlines for example

hoary haven
#

but look at line 89?

cold island
#

Ah

#

That's a more recent addition

#

yeah, I suppose lots and lots of emojis

hoary haven
#

let's try

cold island
#

But it's good hygiene to have that condition there anyway

#

I'll make an additional commit to rename the content in the code block below, since it overlaps with the content parameter used a little later on.
Can you explain this part?

#

Is it because there's a function being called with an argument called content?

hoary haven
#

yeah bc i'm adding a content arg to that function call right below

cold island
#

I don't think we need to worry about the argument names of every function we call, it's fine imo

hoary haven
#

haha that's fine too

#

i've removed the draft status

clever wraith
#

hey @hoary haven what's the reasoning for not including the ID for autobans? I assume in the case of a potential misfire you'd want to have the UID, wouldn't you?

#

I approved since it does what it is meant to, I'm just curious

hoary haven
#

i haven't yet seen a case where we reversed an autoban which was a misfire or a false positive (like a user copying/pasting a message they got in DMs for example) in the moment. i think 2-3x i saw such cases come in thru the appeals server though

#

thx for the review :)

clever wraith
#

I think I can remember one, but it is extremely foggy

#

like someone posting it as an example or something

hoary haven
#

yeah that's what i've seen 2-3x of. since these are usually users we don't know, we don't have an easy way of contacting them. i think it's easier to let them come to us via the appeal server

#

@rapid swallow when the time comes pls still get core dev approval since idk the technical details and can't provide input on that

rapid swallow
#

yeah, ofc joe_salute

cold island
#

If I have a string e.g "add x", how can I make the bot run the command "add" with the argument "x" as if someone invoked "!add x" in the chat? I want to avoid having to parse the string myself, and I assume discordpy already has code which does this

gritty wind
#

Might need a bit more detail because the correct answer to this is add a command

#

You could try to get into the nitty gritty and manually call the dispatcher d.py uses to parse and dispatch commands, but you need a good reason

brazen charm
#

there's get_command that you could use, though that requires parsing on your own to a certain degree

cold island
#

I have a command that got invoked, but it's missing an argument. I'm making some calculation, get the missing argument, and now I want to invoke the command again with that argument appended. I'm not inside the command callback, I just have the Context object

brazen charm
#

doesn't the context tell you the command?

cold island
#

It does, but what do I do with that? there may have been arguments already provided

brazen charm
#

I don't have the docs at hand at the moment, but I don't think the command would have any arguments bound? So you could reinvoke it after getting the command object from the context

coarse pulsar
#

Although that requires prefix to be involved in

#

But it can be modified such that it doesn't need to, I believe

cold island
#

I have the prefix so it's not a problem

cold island
coarse pulsar
cold island
#

hmm I'll probably manage, thanks

#

But yeah, this is probably what I was looking for

#

ctx.view.buffer seems to give me the original invocation as a string

cold island
#

@placid ermine they haven't responded yet so I'm just going to merge it

placid ermine
#

alright

hoary haven
#

woohoo is this the latex command?

placid ermine
#

yee

cold island
#

.help latex

dusky shoreBOT
#
Command Help

**```
.latex <query>

*Renders the text in latex and sends the image.*
cold island
placid ermine
#

.latex $joe mama$

dusky shoreBOT
placid ermine
#

lmao who did it

vale ibex
#

hey @placid ermine FYI sir-lancebot#1035

dusky shoreBOT
vale ibex
#

did you want to work on it, or should I leave it up for grabs?

placid ermine
#

uhh

#

interesting

vale ibex
#

from the api ```
{
'status': 'error',
'description': 'Human readable message of what went wrong',
'log': '(LaTeX rendering log, not guaranteed here)'
}

#

log may not always be there

placid ermine
#

ugh

#

hmm

#

should i just

#

.get

vale ibex
#

yea

placid ermine
#

instead of[]

#

lol

#

hm

vale ibex
#

with some deafult str

placid ermine
#

ill do it in the morning

vale ibex
#

foo.get("log", foo["description"]) maybe

patent pivot
#

.latex $\frac{a}{b}$

dusky shoreBOT
patent pivot
#

good bot

#

.latex $\LaTeX$

#

bad bot

#

.latex $\LaTeX$

dusky shoreBOT
patent pivot
#

wtf!

placid ermine
#

mfw

rapid swallow
#

@vale ibex currently, if an archived thread is added to the bump list, it stays archived and auto-bumping will happen only if someone manually unarchives the thread or if the task for unarchiving is run.

should we:
i) leave it as it is
ii) spout out an error message if you try to add an archived thread to the bump list
iii) add the thread to the bump list and make the bot unarchive the thread
iv) ...

cold island
rapid swallow
thorny obsidian
rapid swallow
#

(this message is more of a note to myself or/and chris)

#

hmm, if you are adding a thread to the bump list, you definitely want it to be unarchived. So, imo rn, I dont think it matters if they thread was manually archived or auto-archived

#

so a confirmation prompt would be nice

#

or straight up unarchive the thread

vale ibex
#

I'm not even sure the thread convertor will work for archived threads

#

but I can play around with it later anyway

#

planning to migrate it to use a site endpoint for persistance

#

Speaking of, feast your eyes on site#663

dusky shoreBOT
rapid swallow
#

i thinkk

sleek steppe
#

I thought ThreadConverter fetches from the API, turns out it doesn't

vale ibex
#

Yea, it doesn't I checked last time 😄

#

So if the conversion fails I could extract the id and try to fetch it

#

I'll have a play after the site pr anyways

rapid swallow
#

alright, no problem then

cold island
vale ibex
#

await ctx.hack()

brisk brook
sleek steppe
brisk brook
#

Thread IDs copy their message ID ☝️

sleek steppe
#

Ah didn’t know that

sleek steppe
#

.src t

dusky shoreBOT
#
Command: timed

Time the command execution of a command.

Source Code
cold island
#

oh duh, how didn't I think of copy.copy

#

This is what I did lol

added = f' "{value}"'
self.ctx.view.buffer += added
self.ctx.view.end += len(added)
await self.ctx.command.reinvoke(self.ctx)```
vocal wolf
static canyon
#

Yeah, I'm aware thanks

#

Been busy with family stuff past few days

#

Will get to it when I can

#

@vocal wolf

vocal wolf
#

ah

#

ty for update

vale ibex
#

!ban 760770208809091082 Sharing Discord token grabbers is unacceptable.

stable mountainBOT
#

:incoming_envelope: :ok_hand: applied ban to @glossy edge permanently.

heavy spade
#

hi

sleek steppe
dusky shoreBOT
stable mountainBOT
#

bot/exts/help_channels/_cog.py lines 444 to 448

# It could be possible that there is no claimant cached. In such case, it'd be useless and
# possibly incorrect to lock on None. Therefore, the lock is applied conditionally.
if claimant_id is not None:
    decorator = lock.lock_arg(f"{NAMESPACE}.unclaim", "claimant_id", wait=True)
    _unclaim_channel = decorator(_unclaim_channel)```
placid ermine
#

maybe a message like "no logs available" in its place

placid ermine
#

sir-lancebot#1036

dusky shoreBOT
rapid swallow
#

whoa, the ID of the thread is the same as the message from which the thread was created from

#

wack

vale ibex
#

What you're describing happens when an active channel doesn't have a claimant on the cache

#

If that's still happening in that pr, I might need to move the ensure claimant call further up the init process

severe tangle
#

Would it be better to edit the bot token detector so that it will instead upload the token to a GitHub gist instead of deleting the message? Many newbies don't really know much about all this token stuff and tend to ignore the advices to regen the token.

severe tangle
#

The Discord API automatically detects the GitHub Repos and gists for tokens

#

Just for reference to this ^^^

clever wraith
#

the problem that was previously raised is pydis would rely heavily on the detection system being available at all time

#

if this system stops at any point, pydis just effectively spreads the token

thorny spade
#

hi

severe tangle
#

If u r talking about the token detection system built in @stable mountain, then the same could happen at the current time too. The bot won't delete the message with the token if, by chance, it goes offline due to any reason

thorny spade
thorny spade
severe tangle
thorny spade
#

*ic

severe tangle
#

It will be invalidated when it is uploaded to GitHub

clever wraith
#

Discord already has a native token detection, same for the pastebin

severe tangle
#

In both the cases, the token can spread 🤷‍♂️

clever wraith
#

the question is why Discord doesn't already have an invalidation endpoint, but oh well

stable mountainBOT
#

Hey @thorny spade! I noticed you posted a seemingly valid Discord API token in your message and have removed your message. This means that your token has been compromised. Please change your token immediately at: https://discordapp.com/developers/applications/me

Feel free to re-post it with the token removed. If you believe this was a mistake, please let us know!

thorny spade
#

ic

severe tangle
clever wraith
severe tangle
#

I mean, there are still people who send tokens in #discord-bots and other help channels

clever wraith
#

I think at some point there isn't much that can be done

severe tangle
#

Eh they just tend to ignore that warning from the Discord client

clever wraith
#

¯_(ツ)_/¯

severe tangle
#

Or when they are on a mobile, since iirc, it isn't implemented on the mobile client

stable mountainBOT
#

Hey @clever wraith! I noticed you posted a seemingly valid Discord API token in your message and have removed your message. This means that your token has been compromised. Please change your token immediately at: https://discordapp.com/developers/applications/me

Feel free to re-post it with the token removed. If you believe this was a mistake, please let us know!

clever wraith
#

ah yeah there is no warning

severe tangle
#

Indeed

clever wraith
#

maybe that'll appear with the rewrite

#

one can hope

severe tangle
#

Yups

placid ermine
#

oh wait, @clever wraith, I think?

#

do you mean like a logger.warning

static canyon
severe tangle
static canyon
#

Whereas if our system is down, we're not making it worse, we're just not helping either

severe tangle
#

Ah, well the server in talks here, is the Discord API server. It is hardly down, imho

static canyon
#

If discord had some DELETE endpoint or something like they do for webhooks, then we'd use that (as we do for webhooks)

#

Really it's down to Discord to provide a better way. We're not going to be uploading to github

severe tangle
#

Okay, was just a suggestion

static canyon
#

Yeah, it's something that has been repeatedly suggested, and discussed quite a bit internally, but eventually we decided that it's not the route we want to take

severe tangle
#

Ah okay cool

clever wraith
placid ermine
#

a

thorny spade
static canyon
#

@thorny spade commented on the issue

#

It's not been approved yet, so not at the moment

thorny spade
clever wraith
#

Hmmm

#

Hmmmmmm

#

.ping

#

.uptime

#

It has been deleted hasn't it

stable mountainBOT
#

bot/exts/core/ping.py line 29

@commands.command(name="uptime")```
clever wraith
#

Why is it not working

placid ermine
#

.help

#

interesting

clever wraith
#

@dusky shore help

static canyon
#

It's ded

#

The bot is just ded

placid ermine
#

<@&267628507062992896> lance ded

static canyon
#

A PR got merged before I got time to test it

#

I'm fixing it now

clever wraith
#

We can't ping devops can we

static canyon
#

I know the issue

#

Why git

#

I hate git sometimes

#

It's including random other commits when I go to push

clever wraith
#

Well well

#

Who are the devops nowadays

#

Joe, Chris, Volcyy & scale?

timid sentinel
#

what's the issue PR? Someone want to fix it or I can revert it?

placid ermine
static canyon
#

@timid sentinel I'm fixing it now

#

My PR got merged before I tested it

#

I even said I hadn't tested lemon_sweat

placid ermine
#

f

static canyon
#

And it caused everything to die

thorny spade
#

@dusky shore

#

it is still live

timid sentinel
clever wraith
#

Basuc automated testing when lemon_pensive

thorny spade
static canyon
#

@timid sentinel sir-lancebot#1037

#

Well, bot ded so doesn't link lol

static canyon
#

But yeah, you're right

#

Was going to later today but it got merged first

thorny spade
#

@dusky shore help

static canyon
#

The bot's dead at the moment @thorny spade

thorny spade
#

oh no

placid ermine
#

.ping

dusky shoreBOT
#
:ping_pong: Pong!

Gateway Latency: 123ms

static canyon
#

It's back ducky_party

placid ermine
#

also

placid ermine
dusky shoreBOT
thorny spade
#

.help

#

apparentally gud

static canyon
#

Merged lemon_pleased

clever wraith
#

.uptime

#

Well, still

placid ermine
#

.help

dusky shoreBOT
#
Command Help

AdventOfCode
.adventofcode
All of the Advent of Code commands.

Anagram
.anagram
Given shuffled letters, rearrange them into anagrams.

AprilFoolVideos
.fool
Get a random April Fools' video from Youtube.

AvatarModify
.8bitify
Pixelates your avatar and changes the palette to an 8bit one.
.avatar_modify
Groups all of the pfp modifying commands to allow a single concurrency limit.
.avatareasterify [colours...]
This "Easterifies" the user's avatar.

placid ermine
#

ok so bot is not down

#

.uptime

dusky shoreBOT
#

I started up 12 minutes ago.

placid ermine
#

🤔

clever wraith
#

Admetly it could use a timestamp, but oh well

thorny spade
#

and i am asking to being assigned

clever wraith
#

Yeah, I understand the original issue now lemon_sweat

#

The title was a bit confusing

#

What about something like "Use discord timestamp in uptime"?

static canyon
#

Before I saw your message so it's not exactly what you suggested but it's clearer than what it was

clever wraith
#

Good stuff

sleek steppe
#

the error is happening inside init_available which is after the ensure cached claimant part

vale ibex
#

Yea, should be a case of moving it up a bit then

sleek steppe
#

The thing is, it’s possible that we’re passing None to get_or_fetch, which will always error

vale ibex
#

In unclaim_channel we could change the claimant_id = await _caches.claimants.get(channel.id) call to default to @stable mountain's user id if not present

#

as a safety net

vale ibex
#

The other option is to change _unclaim_channel's signature to allow for None claimant_ids

sleek steppe
#

yeah that makes sense

vale ibex
#

pushed a commit

vale ibex
#

This is annoying sir-lancebot#1039

dusky shoreBOT
vale ibex
#

I renamed the job because it's not just pre-commit & flake8 anymore

#

but github is still expecting a status from the old name 😦

#

hmmmmmm @patent pivot I might need to remove this from the branch protection

#

then add back in the new name when it hits main

#

orrr, we accept it won't be accurate and don't rename the job? shrugR

vale ibex
#

👌

#

Done

placid ermine
clever wraith
#

I've responded to the comment

fallen sleet
#

!source ot

stable mountainBOT
#

Sorry, an unexpected error occurred. Please let us know!

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

fallen sleet
static canyon
#

That's an known issue btw @fallen sleet

fallen sleet
#

oh okay

static canyon
#

There's already an issue for it on the bot repo

#

!src doesn't work for tags, and when it doesn't raise an error the url it gives is wrong

tawdry vapor
#

Thoughts on a second latex command that doesn't wrap code in a template? Won't be used that much, but we can have fun things in that bot

clever wraith
summer garden
#

I'm looking at sir-lancebot#945 and trying to come up with ideas with how we would cache each user's palette in memory. The stored values should expire after a certain time. Would this be done with redis or some other approach?

dusky shoreBOT
vale ibex
#

current redis would allow you to expire the whole cache, but not individual members

summer garden
#

Maybe setting a task to clear an ordinary python dict key after a certain amount of time?

vale ibex
#

it's a redis limitation, until we migrate to KeyDB

summer garden
#

looking forward to it then :)

brazen charm
#

You can do expires on normal keys, though those aren't available from the normal redis cache interface iirc

hoary haven
#

hey @static canyon, last chance to review site#624
once i pass zig's review i'm going to ask to get this merged
i did address all the points you originally raised on the first version of this PR

dusky shoreBOT
vale ibex
#

yea, sorry, I should have specified, since async-rediscache uses sets, Redis doesn't support expiring individual members

#

KeyDB supports expiring individual members of a SET, SORTED SET, or HASH with the EXPIREMEMBER command

static canyon
#

Thanks for addressing my points though

hoary haven
#

help
trying to run site locally
and i get this error when doing docker-compose up

#

this is when running site in its current state

vale ibex
#

run it with --build once

#

looks like your local image has an out of date version of django

hoary haven
#

right, i have a faint memory of doing that when first setting up site Thinking_chief ok

vale ibex
#

Yea, you'll need to run --build whenever dependencies get updated

hoary haven
#

will i need to build again when i switch back to my older branch

vale ibex
#

if your older branch has different dependencies/versions, yes

#

you'd need to run --build even for code changes, if it wasn't for the fact that we mount a volume in dev to make it so that you don't

#

since when you build an image, that image is then frozen

#

we mount a volume on the same path as where the code is in the image though, so that we can overwrite it on the fly in dev

#

but you can't do that for dependancies

#

well, not in any sane way

hoary haven
#

@vale ibex i independently figured out the line break thing. you're too fast for me PensiveFluent

vale ibex
#

hah

hoary haven
#

was it always 2 newlines required?

#

in the original there was only 1 blank line afaict

vale ibex
#

it varies depending on where it is relative to headings

#

since it was moved from mid-content to the end of a content block for that heading

hoary haven
#

lol bizarre

#

ty :3 as always

vale ibex
#

npnp 😄

#

was looking to see if that was fixed 😄

fallen patrol
#

it was a one liner

#

so ez chefkiss

vale ibex
#

haha yup, waaay easier to change the src than monkeypatch

fallen patrol
#

yep

vale ibex
#

out of interest does disnake do anything about Discord's decision to sometimes throw 403s for typing events?

#

That's the only other monkeypatch we currently have

fallen patrol
vale ibex
#

I say sometimes, it only ever happened once

#

Yea, root aliases I wouldn't expect to be added to the lib

fallen patrol
#

yeah, we don't have any special handling for discord throwing 403s when they aren't supposed to

vale ibex
#

yea, that was annoying when they decided to do that

fallen patrol
#

even more so, they're typing events

#

can't they like, throw a cf worker in front of that that makes it seem like it worked?

#

I doubt anyone cares if they get a 204 when typing events aren't being shown to anyone

fallen patrol
vale ibex
#

Yea, how to implement it in the lib isn't trivial

#

since failing silently is one option

#

but not ideal in all use cases

fallen patrol
#

right

austere hornet
#

Bump

hoary haven
#
❯ git pull
hint: You have divergent branches and need to specify how to reconcile them.
hint: You can do so by running one of the following commands sometime before
hint: your next pull:
hint: 
hint:   git config pull.rebase false  # merge (the default strategy)
hint:   git config pull.rebase true   # rebase
hint:   git config pull.ff only       # fast-forward only
hint: 
hint: You can replace "git config" with "git config --global" to set a default
hint: preference for all repositories. You can also pass --rebase, --no-rebase,
hint: or --ff-only on the command line to override the configured default per
hint: invocation.
fatal: Need to specify how to reconcile divergent branches.``` :(
#

so this branch is 270 commits behind, but the only files changed in this branch/PR are a markdown file and some images

#

if someone can walk me thru this pls let me know

fallen patrol
#

it might be easier to restart with an up to date branch

hoary haven
#

so for site#624 this already has pushes tho

dusky shoreBOT
hoary haven
#

copy/paste my changed files, make a new up to date branch, set to track with the above remote branch,... ?

#

if it helps, it's no loss if all the commits in the above PR are squashed to 1

#

git pull --ff-only failed

vale ibex
#

checkout main branch

#

git pull

#

then checkout the feature branch

#

and git merge main

#

the other option is to do it from github web

#

and then force pull/hard reset your local copy

hoary haven
#

this is resulting in a commit called Merge branch 'main' into content/update-help-channel-timing

vale ibex
#

yup

hoary haven
#

that's what we want right

#

do i need to git push -f ?

vale ibex
#

nah

#

you're not rewriting history

hoary haven
#

so i made that commit and did git push

#
❯ git push
To https://github.com/python-discord/site.git
 ! [rejected]          content/update-help-channel-timing -> content/update-help-channel-timing (non-fast-forward)
error: failed to push some refs to 'https://github.com/python-discord/site.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.```
vale ibex
#

ah, looks like you didn't pull before comitting locally

hoary haven
#
❯ git switch main
Switched to branch 'main'
Your branch is up to date with 'origin/main'.

site on  main [?] is 📦 v1.0.0 via 🐍 v3.9.8 (.venv) 
❯ git pull
Already up to date.
vale ibex
#

on your feature branch

#

So what that is saying is that on the feature branch, there are commits in the remote that you don't have

hoary haven
#

checkout to feature branch and then git pull?

vale ibex
#

and now you're trying to push new commits, and git doesn't know what to do with that

#

you'll likely have merge conflicts

#

Is what you have locally what you want?

hoary haven
#

yeah

vale ibex
#

then git push -f

#

it might mean that some commits get deleted in github

hoary haven
#

i did git pull while i was on main, do i do it again on this branch?

vale ibex
#

but if what you have locally is what you want, it doesn't matter

#

if you do, it'll complain about divergent branches again

hoary haven
#

ok the commits for this PR are all a mess lol

vale ibex
#

lol

hoary haven
#

can i squash them all to 1 or 2 at this point?

#

i've force pushed

vale ibex
#

you won't be able to squash commits before the merge commit

#

you'll need to drop the merge commit, then rebase and then merge in again

#

otherwise you'll re-write the commits from main

hoary haven
#

i'm gonna leave it lol, pls do as you see fit when it's merged dv_bunbunBobaOwO

#

or i'll ask you tmrw. go to bed

vale ibex
#

if you do git reset --hard a7e2bd4dc4f1bbbc3c9c8407b64e6dba5f3b0296

#

that'll reset your branch back to before you did the merge commit

#

then you can git rebase -i HEAD~13 to get your interactive rebase

hoary haven
#

ok

vale ibex
#

then once that's done, you can git merge main and then git push -f

hoary haven
#

so git merge main is what you call a "merge commit"?

vale ibex
#

yea

hoary haven
#

ok that's not too bad

#

let' see

vale ibex
#

that says grab the commits I'm missing from the main branch and add them to this branch as a merge commit

#

git rebase main means rewrite all the commits in the branch to be based from the HEAD of main

hoary haven
#

and which commit is a7e2bd4dc4f1bbbc3c9c8407b64e6dba5f3b0296?

vale ibex
#

The one before your merge commit

hoary haven
#

mhm mhm

#

ok so rebase/squash my commits first, then repeat the process you said above

vale ibex
#

Yea, drop the merge commit, do you rebasing, then add the merge commit again

#

that means the only commits you're rewriting are the ones from your branch

fallen patrol
#

@vale ibex fyi since you were looking at disnake commits today, i just merged what i believe to be our first breaking change with dpy except because so many people got confused by it, its a good change

vale ibex
#

Ah cool, I'm guessing calling Message.create_thread will still work?

fallen patrol
#

yeah

vale ibex
#

Nice, makes sense as a change

fallen patrol
#

that never took a type parameter

#

but ppl were trying to make private threads on messages, or not sure why it wasn't working by default (as private threads are only on level 2 boosted guilds)

#

etc

#

additionally the api removed support for having a default in api v10

patent pivot
#

because i am shitposting at 3:16am

#

i will do that when i rewrite arthur

#

for ansible

fallen patrol
patent pivot
#

god gives his free-est battles to his emacs clowns

#

M-x ed

radiant merlinBOT
#
M-x ed [-GVhs] [-p string] [file]

Ed is the standard text editor.

fallen patrol
#

M-x ed

radiant merlinBOT
#
M-x ed [-GVhs] [-p string] [file]

Ed is the standard text editor.

placid ermine
#

uhhh

#

halp

#

i pulled from upstream/main so i could resolve some conflicts

#

but

#
On branch bug/infr-duration
Your branch is ahead of 'origin/bug/infr-duration' by 101 commits.
#

the 101 commits bit sounds

#

um

#

problematic

tawdry vapor
#

What commands did you run

placid ermine
tawdry vapor
#

And are the commits actually different hashes? It might just count merged commits as being ahead

sleek steppe
placid ermine
#

a

#

hm

#

so when i push it

#

does my PR show up as 100 commits or

tawdry vapor
#

It shouldn't

placid ermine
#

aight

tawdry vapor
#

But I don't remember how the status message counts merge commits

#

If it's messed up you can still fix it so no worries

placid ermine
#

hmm unrelated (i think) but i cant seem to run the bot
i get a ton of errors looking like

discord.ext.commands.errors.ExtensionFailed: Extension 'bot.exts.moderation.metabase' raised an error: ModuleNotFoundError: No module named 'botcore'
sleek steppe
#

are you running with docker?

placid ermine
#

yes

sleek steppe
#

docker-compose up --build

placid ermine
#

oh ok

static canyon
placid ermine
#

hm

static canyon
#

The --build just reruns the docker-compose file, which ensures your dependencies are up to date

#

If there's been no changes to dependencies then you don't need the --build

hoary haven
#

help a mac girl out and approve site#667 :D

dusky shoreBOT
magic arch
#

Woo sir-robin repo exists

vale ibex
#

The bot does too 😄 @humble leaf

#

changing around colour schemes atm and will changelog shortly

green oriole
#

Hmm is it using the standard merge policy

#

Oh yeah it is the site

#

Can't do anything for you my friend

magic arch
#

wooo hi sir robin, lovely to meet you

green oriole
#

Always more bots

#

I mean it is the correct way to go for both perms and rate limits haha

magic arch
#

that and organizing codebases

green oriole
#

I think organization wise it isn't so bad

#

You have all your code nicely sorted in modules and stuff

rapid swallow
hoary haven
#

wdym by global gitignore?

#

there's such a thing?

green oriole
#

Yeah

#

It is the core.excludesfile config option

hoary haven
#

niice

vale ibex
#

yea, I have git config --global core.excludesFile '~/.gitignore'

green oriole
#

You can set it to point to an additional gitignore file

vale ibex
#

then in ~/.gitignore I have a bunch of stuff

#

git config --global core.excludesFile "$Env:USERPROFILE\.gitignore" for windows powershell

hoary haven
#

okioki

#

it works :D will do the same when i get home

patent pivot
#

we want a bot that we can speedrun changes into without affecting availability of other stuff, events is the only thing where we've got hard concrete deadlines, so being able to rapidly prototype on a separate bot is nice

green oriole
#

that makes a lot of sense

austere hornet
#

Welcome @humble leaf !

thorny obsidian
#

It also lets us add additional dependencies that wouldn't be best for lancebot

green oriole
#

I'm curious, what kind of deps are you taking about?

thorny obsidian
#

Snekbox, site

green oriole
#

Ah right

#

me just looking over the rule text and being, "wait, what happened to devops again"

vale ibex
#

lol

#

we're ansibling

green oriole
#

aha, that's interesting

#

I wonder if it is rendered using the system font

#

mine should be Noto

clever wraith
vale ibex
#

Yea, I guess there would be

#

I can add a step that checks if the user is there, and if not add them

#

since we have the user object at least

clever wraith
#

you wont have a joined_at date tho

#

iirc that field isnt nullable

cold island
#

Do we have some sort of agreement on when we should log with info/trace/debug? I get the debug is for granular things we don't want to see in prod, but what about info vs trace?

vale ibex
#

I usually go with trace is for anywhere I would have but an old style print statement

#

debug is for slightly less verbose things, but still only useful in dev

#

info is anything that is good to know if prod, but isn't an issue to raise a sentry alert

vale ibex
vale ibex
#

warning/error/exception raises a sentry issue

#

so I'd use info for things that are useful to know in prod, but aren't things that need to be fixed

cold island
#

ah

#

speaking of... error vs exception

vale ibex
#

log.error supresses traceback by default iirc

vale ibex
cold island
#

Could also use the bot's start time

#

As a best attempt estimate

vale ibex
#

I'd rather use a sentinel, rather than something that could look like a "real" value

cold island
#

that's fair

vale ibex
#

the problem is that this isn't syncing message that the bot missed while offline, it allows for arbitrary dates

#

IE we could sync messages pre aug-2020

cold island
#

How does the syncing work?

#

Does it scrape the channels, or...

vale ibex
#

yup

#

all channels, all threads, all archived threads

cold island
#

And you specify a date to reach?

vale ibex
#

it's a slow process

#

Yea, you specify two dates

cold island
#

eeesh

vale ibex
#

It's intended to do small ranges say if the bot had an outage

cold island
#

yeah ik

vale ibex
#

but there's no validation for the difference

cold island
#

yeah, letting it run from August 2020 backwards would be... interesting 😅

vale ibex
#

lmfao yea

#

probably wouldn't want to anyway

tawdry vapor
cold island
#

Ah yes, the logging level "Note"

tawdry vapor
#

I've never been totally happy with warning always going to Sentry. It makes us avoid that level even if it is semantically appropriate.

cold island
#

I sprinkled a bunch of warnings into the filters rework if that helps 😄

tawdry vapor
#

I guess the solution would be to either ignore stuff in Sentry or introduce a new logging level. I'm not too fussed about it though.

cold island
#

Wait trace is below debug?

#

I thought it was the opposite

tawdry vapor
#

Both trace and debug are for debugging, but trace is more spammy and detailed.

cold island
#

TIL

tawdry vapor
#

Trace means tracing execution, so you end up with a lot of logs saying "im in function x doing y with z argument"

cold island
#

So when would it be appropriate to use debug instead of trace?

tawdry vapor
#

I think I did a good job of using them in the help system, though sometimes I have wished some of those trace logs were actually showing up in our prod logs to debug some confusing situations.

#

I'll answer that in a moment

#

I view the debug level as being for bigger picture debug information. It can be used to log some initial info about an operation, but doesn't go into every single function call involved in performing that operation.

#

Since neither trace or debug are showing up in production, it's really just a matter of making it nicer for developers to filter out the spammy logs that they probably don't care about.

#

It's not an exact science. There's some intuition required for picking the right log level.

cold island
#

yeah maybe I'll pick it up along the way

#

thanks

cold island
#

If a message is sent in DMs, is it that message.guild is None, or that the message has no guild attribute?

green oriole
#

thank god Messages always have a guild attribute

#

oh that's disnake

#

works too, I guess

#

same thing either way

cold island
#

aah, category is the missing attribute (from the channel object)

green oriole
#

ah no, it would be null

#

Right, it is a field of GuildChannel but not DMChannel

#

carry on mmwhereismynose

fallen patrol
#

fun!

hoary haven
#

hi @tawdry vapor could i poke you about bot#2071?
we'll need another review from someone else as well

dusky shoreBOT
hoary haven
#

oo new lance logo looks so good

tawdry vapor
#

I'll review it right now. I haven't been keeping up with GH notifications well lately.

hoary haven
#

wiggledance2 ty!

tawdry vapor
#

Why did you author the PR but someone else made the commits?

#

It's not a problem; it's just odd

hoary haven
#

griff and i were doing it together.. he was teaching me

#

he ended up just making the commits but to my fork A_Shrug_BC

#

and didn't want to open a PR.. but it wasn't like i was gonna re-write the code myself lol

tawdry vapor
#

Are you now learned enough to finish it off yourself

hoary haven
#

that depends lol

tawdry vapor
#

scrap it all 😈

hoary haven
#

lmfao

tawdry vapor
#

It's just some minor changes

#

I need to run it to see if it works though

hoary haven
#

do you use the staff server?

#

lmk if you want help

tawdry vapor
#

Yeah I use it. I think I can trigger it myself pretty easily

wild prism
vocal prairie
#

the host is basically "outside docker"

#

directly on your own system

wild prism
#

why is that more useful for debugging?

vocal prairie
#

that's a good question. maybe because it might work better with e.g. the pycharm debugger? I'm not sure.

tawdry vapor
#

It's easier to attach a debugger. I believe it's possible to attach a debugger to a process in a container but I have no idea how to do that.

wild prism
#

do the env variables not have to be configured when you're using Docker?

tawdry vapor
#

They have default values specified in the compose file, so you don't need to change them in that case.

wild prism
#

what's up with that

patent pivot
#

hmmm

#

try localhost:8000

wild prism
#

yeah that works, it just doesnt like the admin

patent pivot
#

hmmm

wild prism
#

nope, same thing

patent pivot
#

huh

#

i've never seen that

hoary haven
#

i don't think /admin ever worked for me either

tawdry vapor
#

Does the API work?

wild prism
tawdry vapor
wild prism
#

yeah seems to be working

tawdry vapor
#

No idea about the admin page then

patent pivot
#

hmmmm

#

this looks to be it

#

in prod:

pythondiscord=# SELECT * FROM django_site;
 id |        domain         |         name
----+-----------------------+-----------------------
  1 | www.pythondiscord.com | www.pythondiscord.com
(1 row)
#

so the manage.py suggestions there might do it

tawdry vapor
#

What about SITE_ID=1 in settings

#

Would a site be created by default?

patent pivot
#

hmmmmmm

tawdry vapor
#

If not then we should modify the run command to create one

patent pivot
#

we must have at some point

#

let me see what it gets init'd with

#

hmm okay so

#

yea i get the same error locally

#

and in the tableeeee

#

aahhh

#
pysite=# SELECT * FROM django_site;
 id |          domain          |           name
----+--------------------------+--------------------------
  1 | pythondiscord.local:8000 | pythondiscord.local:8000
(1 row)
stable mountainBOT
#

manage.py lines 89 to 96

from django.contrib.sites.models import Site
query = Site.objects.filter(id=1)
site = query.get()
if site.domain == "example.com":
    query.update(
        domain="pythondiscord.local:8000",
        name="pythondiscord.local:8000"
    )```
patent pivot
#

i think setting SITE_ID to 1 should still work

#

let me try

#

yeah it does

#

@wild prism @hoary haven as a temporary fix, adding SITE_ID=1 to your pydis_site/settings.py should allow you to view/login/use /admin with credentials created with poetry run python manage.py createsuperuser

#

i don't think there would be any problems if we added SITE_ID 1 to prod settings.py tbh, or at least debug, but it'd make admin work out of the box

wild prism
#

👍 working

tawdry vapor
#

Well there you go you can make your first contribution already

wild prism
#

poetry run python manage.py createsuperuser what's this about?

tawdry vapor
#

You shouldn't have to do that. I am pretty sure the run command already creates one.

wild prism
#

yeah its just admin/admin, right?

tawdry vapor
#

I think

stable mountainBOT
#

manage.py lines 61 to 62

name = os.environ["SUPER_USERNAME"]
password = os.environ["SUPER_PASSWORD"]```
stable mountainBOT
#

manage.py lines 11 to 16

DEFAULT_ENVS = {
    "DJANGO_SETTINGS_MODULE": "pydis_site.settings",
    "SUPER_USERNAME": "admin",
    "SUPER_PASSWORD": "admin",
    "DEFAULT_BOT_API_KEY": "badbot13m0n8f570f942013fc818f234916ca531",
}```
hoary haven
#

@tawdry vapor

A

        await channel.send(
            f"There {'is' if number_of_channels_left == 1 else 'are'} "
            f"only {number_of_channels_left} dormant channel{'' if number_of_channels_left == 1 else 's'} left. "
            "Consider participating in some help channels so that we don't run out."
        )```

or B?
```py
        if number_of_channels_left == 1:
            message = f"There is only {number_of_channels_left} dormant channel left. "
        else:
            message = f"There are only {number_of_channels_left} dormant channels left. "
        message += "Consider participating in some help channels so that we don't run out."
        await channel.send(message)```
#

i was considering A before i realized there's another plural word later in the sentence

tawdry vapor
#

Neither

#
verb = 'is' if number_of_channels_left == 1 else 'are'
await channel.send(f"... {verb} only {number_of_channels_left} ...")```
That is better IMO
hoary haven
#

then it's There is only 1 dormant channels left

#

also will we ever configure this to 1

tawdry vapor
#

Oh yeah

#

I guess B is the better one

tawdry vapor
hoary haven
#

the rest is just removing some extra spaces and changing finally to else right?

tawdry vapor
#

Yea

#

I tested it and it works fine

hoary haven
#

also i'm wondering if this part in the config description is correct

#
# Note Discord has a hard limit of 50 channels per category, so this shouldn't be > 50
max_total_channels: 42```
#

i think 42+3 available is the true max across all 3 categories

fallen patrol
#

its not when you think about it

#

or rather

#

it shouldn't be

#

42 should be the true max

#

this is because no one category can have more than 50 channels, so it doesn't help to have 53, because those 3 channels can never all be available at the same time

fallen patrol
tawdry vapor
fallen patrol
#

aah, ignore me then

tawdry vapor
#

However, the amount of names it generates uses max_total_channels... so I am not sure what was going on.

#

Maybe my bot was bugged out and miscounted channels. Might be related to one of the names having an emoji in it still.

hoary haven
#

right now when i hit the limit it's always
max_available: 2

  • max_total_channels: 4
  • 1
    i think.
sleek steppe
stable mountainBOT
#

bot/exts/help_channels/_channel.py line 185

user_id = CLAIMED_BY_RE.match(message.embeds[0].description).group("user_id")```
hoary haven
#

i have no emoji in mine

tawdry vapor
#

There is this log line f"Got {len(names)} used names: {names}" what shows for you in the console when the cog is loaded?

#

And also "f"Getting the first {count} food names from JSON."

tawdry vapor
sleek steppe
#

No, it fails at the .group()

tawdry vapor
#

I was also getting errors when channels don't have claimants. It was fetching something from the cache presumably, but it returned None, so it tried to do fetch_user on None and was throwing errors.

sleek steppe
#

Yeah, a pr was merged for that yesterday

tawdry vapor
#

I guess the notifications PR is not up to date yet then

sleek steppe
#

bot#2078

dusky shoreBOT
patent pivot
#

yeah I think we merged something to try recover claimants from channel content

#

if the redis cache doesn't have a key for it

sleek steppe
hoary haven
#

6 used names
Getting the first 4 food names from JSON.

this is from running after resetting to 6 total channels all in dormant

tawdry vapor
#

That seems like an invalid state.

#

If the bot only generates 4 names, as you asked it to, how did it manage to create 6 channels? The only way would be if the channels already existed and you then lowered the limit. At least, that should be the only way in theory.

hoary haven
#

uh the 6 channels were there from a previous run. i've been manually moving occupied channels to dormant before rerunning

stable mountainBOT
#

bot/exts/help_channels/_cog.py lines 199 to 203

try:
    name = self.name_queue.popleft()
except IndexError:
    log.debug("No more names available for new dormant channels.")
    return None```
`bot/exts/help_channels/_cog.py` lines 250 to 254
```py
log.info("No candidate channels in the queue; creating a new channel.")
channel = await self.create_dormant()

if not channel:
    log.info("Couldn't create a candidate channel; waiting to get one from the queue.")```
tawdry vapor
#

I think the description in the config is right. You just started with more channels than configured.

#

If you delete all the channels, then it should work correctly I hope.

hoary haven
#

yeah let's try that

tawdry vapor
#

Or delete 3, so you have 3 left, and then it should create 1 more before saying it's full (assuming you leave the cfg at 4 max)

hoary haven
#

i did test starting with fewer channels than max, but not from 0

#

so starting from 0, it maxed at 4

#

ok

#

i'll wait for toxic's review before pushing changes? since they're very minor?

#

and yeah this notifications PR was opened and not touched since before that #2078

clever wraith
#

So y’all see how pings sometimes show up like this

#

I think it’ll be better if it were to say

#

"Please send a direct message to Python Discord ModMail#6914 ( @slow bone )" or sum

rapid swallow
#

sounds good to me

clever wraith
#

Cuz if you were new and you don’t really understand how pings are formatted

#

It’ll look kinda strange

#

Is there any way for me to write a PR for this?

#

It’s a pretty simple pr honestly

rapid swallow
#

not sure if we should include the nickname or username

clever wraith
#

Hmm

#

It could be nickname assuming the person would go "Okay I need to find modmail" and they swipe to the right and see modmail

#

I’m pretty sure most people would know this anyways

hoary haven
#

impressive ping count

rapid swallow
#

*horrific

hoary haven
#

but yeah this sounds good, idk if a PR will work since it's just internal.. stuff. will ask admins to action it sometime tomorrow

rapid swallow
#

how about a screenshot

#

"Please send a direct message to Python Discord ModMail#6914 ( @slow bone )"

hoary haven
#

it's a good idea but it would overwhelm the #rules embed for which we want the focus to be on rules

#

iirc discord doesn't allow for custom sized images does it?

rapid swallow
#

oh
i thought it's the bot DM from when you join the server

rapid swallow
clever wraith
#

Doesn't the welcome video mentions modmail?

fallen patrol
thorny spade
#

i can work on this! can i be assigned? i have commented on github and didnt have a response yet

gritty wind
#

Assigned

#

Though I wonder which one of y’all is doing int es with 1000000 characters

clever wraith
#

Haha

vale ibex
#

Me 😄

#

it was when Discord was erroring out at CF level, so API calls were returning full html pages

clever wraith
#

Too bad the Egyptian vs French boat battle didn't also include removing sea mines

#

Although wouldn't it make sense to use a thread to play minesweeper now?

#

It seems to have become quite common

#

🏓 @gritty wind as you wrote the issue

gritty wind
#

Sure a thread sounds good

vale ibex
#

Does battle ships have a similar issue?

#

or did we not restrict that one?

clever wraith
#

battleship plays in DMs, but scale made sure it could still be played

#

that's the egypt vs france reference haha

gritty wind
#

It was an epic, very slow battle

#

The delay is killer for a game lol

clever wraith
#

it seemed as slow as an IRL battleship game haha

thorny spade
#

python-discord/sir-lancebot#1041

dusky shoreBOT
thorny spade
#

how do you think

hoary haven
clever wraith
#

I've left a small comment, looks good apart from that

#

Although you should create a new git branch when working on a PR

#

Otherwise you may run into the risk of mixing commits between PRs, and it is a mess to fix

#

@thorny spade what do you use to interact with Git? Your IDE, the command line, github desktop, etc..

thorny spade
#

sometime github dot com

clever wraith
#

Oki, do you use PyCharm?

thorny spade
#

vscode

#

i actually forgot to create a new branch

#

💀

thorny spade
#

@clever wraith

#

@clever wraith can you reply?

placid ermine
# thorny spade wdym by this

set a variable like MAX_LENGTH = 99980 towards the beginning of the file and pass it as an argument, instead of hardcoding the number directly

vale ibex
#

Yea, for some context this type of things is referred to as a magic number or magic constant. It's considered to be an anti-pattern to use numbers directly within source code. It's said to be one of the oldest rules of programming.

#

So defining them as constants at the top of the file with a name, means that when they're used within the code itself there is some added context

#

which in turn makes it easier to read, understand and maintain. Especially if the same number is used in multiple places, it means you only need to change it in that one place at the top of the file

thorny spade
#

thanks for the explanation!

vale ibex
#

No problem!

clever wraith
#

alas

#

hey @thorny obsidian, are you around?

placid ermine
clever wraith
#

what you said too lemon_sentimental

thorny spade
#

smh

cold island
#

Hmmm I'm trying to mock a channel with a category with a specific ID MockTextChannel(category=MockCategoryChannel(id=456))
But that doesn't seem to work, channel.category.id is some MagicMock object

#

oh now it's a number

#

but it's still not the right number

#

Think I found a bug in the mock class

vale ibex
#

🤔

#

interesting

cold island
#

Will make sure the fix doesn't fuck up the other tests

#

Basically it chained the input args and defaults wrong, so the defaults ran over the input

vale ibex
#

Does the ChainMap not correctly overwrite the defauit?

cold island
#

yeah

vale ibex
#

ahhh

#

lol i just looked at it and came to the same conclusion

#

Does the access priority from chainmap rely on the order they're passed to the constructor?

fallen patrol
#

essentially this happens if it's too large:

vale ibex
#

interesting

cold island
#

The class was only ever used once and without params

vale ibex
#

lol

cold island
#

If the tests test our code, who will test our tests peepoCry

vale ibex
#

you apparently

wild prism
#

the code

#

generative adversarial network-driven development

rapid swallow
cold island
#

lmao

rapid swallow
#

!otn a generative adversarial network-driven development

stable mountainBOT
#

:ok_hand: Added generative-adversarial-network-driven-development to the names list.

cold island
#

aka Gandhi development

hoary haven
#

i'm leaning towards the banner still, tbh

#

so long as we can size it correctly

#

and crop the unnecessary space on top

cold island
vale ibex
# cold island 🤨

it means the files that it stashed (because they weren't staged for commit) conflicted with changes that pre-commit tried to do

cold island
#

I don't follow lol. If it's stashed why is it conflicting

vale ibex
#

a pre-commit fix makes a change and saves the file right

#

what that's saying is the change it was going to do conflicted with the files that weren't staged for commit

cold island
#

how is that possible

vale ibex
#

since when pre-commit runs it stashes un-staged files and then applies the stash after it's done

vale ibex
cold island
#

The unstaged stuff is two files I'm just not adding

#

like.. they don't exist at all in remote

cold island
vale ibex
#

The file that it's trying to fix the import for, does that also have changes that you haven't added to the staging area?

cold island
#

oh.. git is saying there are unstaged changes to another file... but when I pull up the diff it's... nothing

#

And now it worked.. even though I made sure it was staged before committing 🤨

#

ok, well, thanks lol

rapid swallow
#

looks fine on mobile too

#

only issue is the padding at the top

#

we can crop it with pillow or something

#

@stable mountain doesnt have pillow as a dependency atm

#

this is with the icon, i dont like how the text gets squeezed

hoary haven
#

the embed width flexes to match the image width?

hoary haven
# rapid swallow

i think this would be my preference, with the extra chunk on top cropped

rapid swallow
#

also an option

hoary haven
#

that looks good too DogeKek i'm sure it'd be easier

cold island
#

yeah the last one seems preferable

fallen patrol
#

@vale ibex I'm a tad surprised, (bot-core#32) no upper bound on the disnake dependency? Or I presume that's because its a package and it will be further restricted on the dependencies that use it?

dusky shoreBOT
vale ibex
fallen patrol
#

👍

vale ibex
#

didn't want to have to update bot-core along with the bots when we want to upgrade

hoary haven
# rapid swallow

can you show an example of this with the banner manually cropped?

vale ibex
#

I've added it as a comment in pyproj to make that obvious

hoary haven
fallen patrol
#

of this disnake.
happythonk

vale ibex
#

haha

#

it was of this package

#

and I was like, lets be specific

#

didn't delete enough words

fallen patrol
vale ibex
#

lol

#

updated anyway

fallen patrol
hoary haven
rapid swallow
hoary haven
rapid swallow
#

show off

vale ibex
#

I've also got the @stable mountain disnake migration ready too

rapid swallow
hoary haven
#

the padding and margins and stuff on android just look off lmao