#dev-contrib

1 messages · Page 141 of 1

fallen patrol
#

Wow.

vale ibex
#

they did it at the CF level too, so all typing called just get 403'd

#

which means any command that triggers typing fails, since the typing call errors

fallen patrol
#

Lmao

#

That's

#

Uh

fallen patrol
vale ibex
#

I'm currently monkey patching d.py

#

this also means @slow bone just doens't work at all

fallen patrol
#

Since typing is a bonus, not a feature

#

Jeez

vale ibex
#

so I'll port this patch over there

fallen patrol
#

I think mine does right now lmao

#

Since I only listen for typing events on two places in one method

#

:)

#

You pushing this patch to pypi?

vale ibex
#

no, was just going to monkey patch it in bot

#

but now we're looking into dropping any requests that match https://discord.com/api/*/typing at the point of egress from our cluster

fallen patrol
#

ah

patent pivot
#

we can't do it anyway, or not quickly

#

we don't break tls by default nor do we have SNI filtering ready

#

we can only block IPs

fallen patrol
#

that would work /s
just block discord's IPs
now you won't have any bugs

#

honestly this is probably related to facebook and whatsapp being down

#

ppl using discord because they can't use those

patent pivot
#

probably

fallen patrol
gritty wind
#

If for the API, UTC is probably the most logical

#

Or you could be nice and use my TZ :)))

patent pivot
#

utc+5:45 yea

#

no utc utc is great

gritty wind
#

Oh

#

Yeah thanks

patent pivot
#

we should change out the template probably, make it a bit more pydis

#

oh uh, no, i'd keep those

gritty wind
#

Probably just set the formatter there to the one we use, and don't include root. Then in the actual program set up the logging for the project itself

molten perch
#

Don't you need the models before? I mean it would make sense to have the models, and then set up the migration environment.

#

Oh, okay. Cool. 😄

gritty wind
#

So what are these loggers for

#

When are they used basically

#

Okay, in that case it doesn't matter much

#

The only real change you can make is set the formatting string from pydis projects, but that's not really necessary

#

as is is fine

fallen patrol
#

@vale ibex there's a proper thing to check rather than 403s

#

40006

patent pivot
#

is that the code they are actually giving

#

because we've been getting cloudflare 403s

patent pivot
gritty wind
#

It would be that code if it was actually the API returning that

fallen patrol
#

Well

patent pivot
#

lol

fallen patrol
#

Then it should check if it was a cloudflare 403

gritty wind
#

It really doesn't matter

patent pivot
#

we aren't expecting a 403 anywhere else

#

it's fine as it is.

#

this is a fix to work around something discord deployed in a way they probably shouldn't have

fallen patrol
patent pivot
#

and that's why we've got a warning on it

gritty wind
#

That's why we're logging, also this is not something we're expecting to happen often

#

Especially not from the typing endpoint

green oriole
#

I'm really whatever about catching other errors

#

It is a temp fix

gritty wind
#

If we're getting global 403s on all other endpoints, those will still work as normal

patent pivot
#

yeah

#

and then we just move it to another node mmLul

fallen patrol
#

Ah

gritty wind
#

We migrate away from linode

green oriole
fallen patrol
#

The ban should be upp

thorny obsidian
#

at some point I'm pretty joe can just "yo... can you unban? kthxbai"

green oriole
#

Tbh we can deploy another node super easily lol

fallen patrol
#

Since they have 3 nodes, and bans last 30 minutes per IP

patent pivot
#

yeah i have a button that says recycle node

green oriole
#

It takes like 5 minutes

patent pivot
#

we have as many nodes as we want lol

fallen patrol
#

Ofc the second time it goes to 90 minutes

gritty wind
#

Is it like on your desk, under your bed, etc?

green oriole
#

Oh true, there is recycle too

fallen patrol
green oriole
fallen patrol
patent pivot
#

where my image

fallen patrol
#

You deleted

#

Or someone did

patent pivot
fallen patrol
#

Is someone making the pr for Lance bot too?

#

!eval 5

stable mountainBOT
#

@fallen patrol :warning: Your eval job has completed with return code 0.

[No output]
patent pivot
#

not as critical but probably at some point

fallen patrol
#

Ok

green oriole
#

Heh, I vote for letting sir lance be broken for now

#

Who cares, it almost doesn't use typing events

#

Even if it does, not a big harm

fallen patrol
#

Oof, gotta fix modmail too lmao

#

Have fun with that 👀

patent pivot
#

or i could just

#

?config set user_typing false

slow boneBOT
#
Success

Set user_typing to 0.

patent pivot
#

lol

fallen patrol
#

I'm pretty sure that won't fix it lmao

#

Yep

#

Did not fix it

patent pivot
#

any idea why?

fallen patrol
#

Bot uses a shitton of typing requests

patent pivot
#

?config set user_typing true

slow boneBOT
#
Success

Set user_typing to 1.

patent pivot
#

alright we'll monkeypatch

fallen patrol
#

Since you already have a fork, it's worth just patching it to not make any requests lmao

patent pivot
#

we just need to update our fork

fallen patrol
#

Ye

patent pivot
#

or we copy the change from bot which is easier

fallen patrol
#

I'd like, just patch the method to not do anything

#

Since the bot uses it in a crazy number of places

#

Actually

#

@patent pivot one sec, don't do anything

#

You can just monkeypatch with an eval command if you want

patent pivot
#

oh lol devops just merged a PR

fallen patrol
#

Ah okay

#

The unofficial kyb3r modmail monkeypatch is this

#
from discord.context_managers import Typing

class MTyping(Typing):
    def __init__(self, messageable):
       ...

    async def do_typing(self):
       ...

    def __enter__(self):
       ...

    def __exit__(self, exc_type, exc, tb):
       ...

    async def __aenter__(self):
       ...

    async def __aexit__(self, exc_type, exc, tb):
       ...

def typing(self):
    return MTyping(self)
async def e(*a):
  ...
discord.abc.Messageable.typing = typing
discord.abc.Messageable.trigger_typing = e 
#

And that can just be evaled

#

Although that will work for any bot, actually

gritty wind
#

Who's familiar with our redirects apps

#

Need someone to help me debug the tests

#

As in, can you recall every single piece of it from memory

#

Nah lol

#

if you have a look at apps/redirect/tests.py, I have that test skipped

#

If I remove the skip, the tests fail with:

Failure
Traceback (most recent call last):
File "pydis_site\apps\redirect\tests.py", line 54, in test_redirects
self.assertEqual(1, len(resp.redirect_chain))
AssertionError: 1 != 0

#

That * 37

#

It's probably something stupid like me forgetting to load the app or something

#

I wonder if the app has to be loaded before the others

#

Yeah that's exactly it

#

Okay I hate life a little right now

austere hornet
#

Lmao

molten perch
#

Depends on the reviews 😄 So unfortunately, I don't.

fervent sage
#

Hi

patent pivot
#

alembic/versions generally

#

I’m not sure what you mean

#

I’ve never had to explicitly configure offline migration stuff with alembic

fervent sage
#

My review wouldn't mean anything, I hate sqlalchemy and have barely used it

#

Awful orm imo

patent pivot
#

we don’t need this

#

sqlalchemy is neat

remote wigeon
#

incoming @fervent sage, but i dislike orms in general

#

granted i really only played with them in rust not so much in python, but still

#

horrible experience

vale ibex
#

volcyy

#

volcyy is great

patent pivot
vale ibex
#

he's joe's outsourced prom dev

patent pivot
#

it’s why we added an orm to pixels

vale ibex
#

but will before we run the next event lol

remote wigeon
thorny obsidian
#

joe does not need to be a human migration tool

fervent sage
#

Why can't there be any good orms lol

thorny obsidian
remote wigeon
vale ibex
#

yea, we had always planned for it to be a recurring event

vale ibex
dusky shoreBOT
vale ibex
#

it totally isn't based off sql alchemy

thorny obsidian
#

We even have pixels tentatively scheduled~

vale ibex
#

you would be correct

patent pivot
brisk brook
#

I am honestly curious how the hand-crafted SQL used for Pixels will be with SQLAlchemy...

vale ibex
#

I'm curious too lmfao

dusky shoreBOT
gritty wind
#

Nah joe memorized all the code and types it out by hand on demand

vale ibex
#

the view is what I'm worried about

#

went through a few revisions to make sure it was performant

brisk brook
#

I don't even know where to start with it haha

vale ibex
#

It might be alright with numpy

#

or some thing like that

#

hmmm that loses a lot from the init of the cache though

#

yea, needs more thought lol

brisk brook
#

Ah, true. How does SQLAlchemy handle ON CONSTRAINT? Will we have to have a try/except?

brisk brook
#

Bruh

gritty wind
#

Strange

#

Sir-lance works

#

I assumed they’d all work in that case

cold island
#

lol the one page that matters

#

rules doesn't work either

gritty wind
#

I’m aware of most things not working, just thought that one did

cold island
#

ic

gritty wind
#

Interestingly sir-lance stuff is a folder unlike bot

#

Okay brb

#

@cold island omgomgomg that observation seems to have fixed most things

#

Pushed the fix, so unless anyone finds anything else that's broken, the only thing left is CI

cold island
gritty wind
#

right, so I have to deploy manually, forgot to deploy yours

#

Ugh are all events links broken

#

Alright, I think I know where to go

#

Oh yeah I did zilch on events lmao

#

Wait where are the event pages on the repo

cold island
#

uuuh sec

gritty wind
#

found ittt

#

wait no i didn't

cold island
#

pydis_site/templates/events/pages/

gritty wind
#

but... how do those urls even resolve

cold island
#

django magic I guess

#

You'd need to ask kosa or ks

gritty wind
#

I need to unwrap that magic 🤡

#

Alright, at least I have something to go off of

fallen patrol
#

Lmao

gritty wind
#

I don't even

#

Brb again

#

Um

#

Where did you find that link

#

It seems to be a redirect, which wouldn't work with this

#

Alright, that's a tougher challenge

#

Getting redirects to work statically hmm

#

For sure lol

stable mountainBOT
#
It has arrived!

Here's your reminder: Test sir-lancebot#860
[Jump back to when you created the reminder](#dev-contrib message)

dim pelican
#

Yup

#

Getting 3.10 installed at home now

#

Might try to play with starship

patent pivot
#

btw @gritty wind how are you actually doing these

gritty wind
#

Which aspect

patent pivot
#

the whole shazam

gritty wind
#

The static building is distill_django which does basically what you had in mind

patent pivot
#

bundling the site into a static bnudle

#

ahh

gritty wind
#

It basically scrapes the site at startup into html

patent pivot
#

interesting

gritty wind
#

I'm not sure if making redirects is worth it or not

#

On the one hand, they are used on the site

#

On the other, I can't even begin to fathom how they work

#

Also the library I'm using doesn't support 301, so I have to handle them by hand

cold island
#

I think for now being able to view the right page is good enough

dim pelican
# stable mountain

@trail pilot
I keep getting this error when trying to get Sir-Lance running from the docker file (I did poetry install and have the added dependencies)

sir-lancebot    | discord.ext.commands.errors.ExtensionFailed: Extension 'bot.exts.utilities.challenges' raised an error: ModuleNotFoundError: No module named 'bs4'
sir-lancebot exited with code 1
vale ibex
#

When you did docker-compose up did you add --build?

#

In most of our projects we define volumes within the docker compose. This means any code changes don't require you to rebuild docker images.
However, changes to dependencies or the Dockerfile itself still require you to docker-compose up --build to rebuild the image and get those changes in

dim pelican
#
C:\Users\Brad\Desktop\python\programming\sir-lancebot>docker-compose up --build
Building sir-lancebot
[+] Building 0.0s (1/2)
 => ERROR [internal] load build definition from Dockerfile                                                         0.0s
 => => transferring dockerfile: 786B                                                                               0.0s
------
 > [internal] load build definition from Dockerfile:
------
failed to solve with frontend dockerfile.v0: failed to read dockerfile: error from sender: open \\?\C:\Users\Brad\Desktop\python\programming\sir-lancebot\lib64: Access is denied.
ERROR: Service 'sir-lancebot' failed to build : Build failed
vale ibex
#

That's not good

dim pelican
#

Do I need to compose down?

vale ibex
#

Maybe

#

You'd need to stop the container

#

Not sure about a down

dim pelican
#

Same error (it was stopped and built down)

vale ibex
#

Never seen that one before

dim pelican
#

I just swapped back to my wtf-python branch and built it back up

vale ibex
#

Can you link the pr?

dim pelican
#

sir-lancebot#860

dusky shoreBOT
dim pelican
#

I was trying out the gh pr checkout 860 command to test things locally

vale ibex
#

Huh can't see anything that should cause an error like that

#

I'm on mobile, so can't trouble shoot too much

#

I can look tomorrow if you're still having issues

dim pelican
#

Yeah its pretty weird. I can run it just fine with my own branch

#

Even the docker-compose up --build

obtuse arrow
#

If you're still confused about anything after reading that, go ahead and ask here.

kindred oriole
#

Hi. Are there any projects/repositories on the Python Discord GitHub that are designed to help introduce someone with intermediate level experience to contributing to open source software projects? I have 9 years experience coding in Python but little experience actually writing functioning code. I want to learn the ropes, but don't know where to start, and was given the advice to join a project on the Python Discourse GitHub. Sorry for being so long-winded. Thanks in advance!

kindred oriole
obtuse arrow
#

Haha, no worries.

kindred oriole
#

I guess I got my answer, it says what projects are for Beginners etc.

vale ibex
#

@timid sentinel did you try this?

timid sentinel
#

would that fix the circular import problem? I think that would still cause contants.py and services.py to be ran before logging is set up

vale ibex
#

we setup the log in the init right?

#

Ah, I think I can see the issue now

#

not sure if this fix would deal with that or not

cold island
# kindred oriole I guess I got my answer, it says what projects are for Beginners etc.

To be clear, the "level" is about knowledge of Python and some specialized frameworks. For example our site uses django extensively. But if you see something on the bot repo that interests you more than on lancebot (for example), there's nothing preventing you from trying your hand with one of the issues there, we'll help you set up the project anyway if you need it.

#

The contributing page mentions our three "main" repos, but we have other repos as well which might interest you more depending on your knowledge. You can browse them at https://git.pydis.com

kindred oriole
timid sentinel
# vale ibex Ah, I think I can see the issue now

It could be a sensible thing to do anyway, although as the logging relies on constants.py I don't think we could have logging there unless we make logging just read any config from env vars directly or something.
With the stuff in the utils folder it's a bit weird as logging doesn't actually need most of it, but by accessing the one file it needs runs some others as a side affect (because the utils/__init__.py is run)

#

Actually, if we definite get_logger in the bot init file that might fix it, rather than importing it

dim pelican
green oriole
#

Lmao really

#

Chown is a thing on windows?

dim pelican
#

WSL2 😎

static canyon
#

Assuming you mean moving from bot.utils.logging to bot.__init__

#

Maybe even having it in bot.log?

#

Maybe defining in bot.log and then importing in bot.__init__? bot.log already gets imported

#

That way there wouldn't be any circular imports

timid sentinel
#

And then just remove all logging from constants.py, or replace them with simple prints?

green oriole
static canyon
#

Will work on that later (probably tonight)

gritty wind
#

Is there a specific way to mark a python file as having compatibility with only a certain python version?

#

I can't just do it using a package or poetry or whatever because it's just a utility script sitting along side the main project

cold island
#

Not sure I understand the situation

#

What happens if the Python version is incompatible

gritty wind
#

Well, the file may not run. If someone adds a walrus to it, it will just error out where it's used because walrus isn't valid in 3.8

#

I have no control over the environment it will be run in, that's managed

#

I left a comment at the very top of the file saying as much, but I'd like an enforcement method if possible

green oriole
#

Check sys.version and exit if it isn't right?

gritty wind
#

Hm, not a bad idea

#

Though it will only stop developers that actually test it

#

which is never a guarantee

cold island
#

If the project depends on it, that means the project is incompatible with 3.8 isn't it?

green oriole
#

You can also add version specifiers in poetry

gritty wind
#

It's a utility script that lives alongside the project. Let me explain better:

Site uses 3.9
Netlify uses 3.8

I need to run a python script on netlify, which I need to keep in the site repo

gritty wind
#

Oh lol

#

Uhh... just think of any 3.9 features haha

#

Anyways, it's probably okay as is

green oriole
gritty wind
#

😱

green oriole
#

It will raise value error?

cold island
#

TypeError

green oriole
#

ValueError = TypeError

#

Now my statement is right

thorny obsidian
#

@patent pivot what's the process for updating snekbox to 3.10 (or really any new python version)? I would expect it to be a PR after testing locally to make sure the packages are happy with 3.10, but I feel like I'm missing something else.

gritty wind
#

We discussed it this morning in a mod channel

#

The first main blocker is that 3.10 hasn't been released on docker hub yet, so we'll have to wait for that.

In terms of what needs actual testing, we'll want to try out the libraries. Most of the errors are probably going to happen during installation, so they're easy to catch. Some libraries just won't have wheels, and for those our best option is either to drop them, or halt the entire upgrade process

thorny obsidian
#

why did it come up in a mod channel in the first place pithink

gritty wind
#

mod-channel -> modmail thread
and the answer to that is because someone opened a modmail for it lol

patent pivot
dim pelican
#

RE: sir-lancebot#842 I am just a bit lost on the re-structure

dusky shoreBOT
vale ibex
#

I can take a look if you like

dim pelican
#

Go for it, there is a decent conversation chain too.

Also for the docker issue last night, got that fixed.

vale ibex
#

ah nice

dim pelican
vale ibex
#

Did you mark is so that contribs can edit?

dim pelican
#

I can try lol
I started the PR before I was a helper so it is on my fork

vale ibex
#

Yea, I'm not sure if you can set it afterwards or not

#

Akarys might know

green oriole
#

When you edit the PR you have a button "Allow edit from maintainers" to do that

dim pelican
green oriole
#

It gives people with write access to the target repo write access to your fork on that specific branch

#

So there you go

#

Chris should have write access

chrome cradle
#

python

vale ibex
#

kk that should be it

#

could you do git pull -f

green oriole
#

Wait wait wait

#

Make sure your local branch is clean first

dim pelican
#

From origin or upstream

vale ibex
#

yea, have you got anything locally that isn't pushed?

dim pelican
#

Started a color 2.0 to sketch out my thoughts, but not worth keeping. No commits or anything to push

vale ibex
#

kk cool

#

I've made edits directly on your branch

#

on your fork

#

so you should just be able to git pull -f

green oriole
#

I'd git stash before

#

Juuuust in case

dim pelican
#

git pull origin color-677 had no issues

#

Time for upstream?

vale ibex
#

did it actually pull anything?

#

since I rebased, I'd expect you to need to -f

dim pelican
#
From https://github.com/brad90four/sir-lancebot
 * branch              color-677  -> FETCH_HEAD
Merge made by the 'recursive' strategy.
 .gitpod.yml                                        |   5 +
 README.md                                          |   1 +
 bot/constants.py                                   |   3 +-
 bot/exts/core/extensions.py                        |   2 +-
 .../events/hacktoberfest/hacktober-issue-finder.py |   8 +-
 bot/exts/fun/hangman.py                            | 182 +++++
 bot/exts/fun/quack.py                              |  75 ++
 bot/exts/holidays/halloween/spookyreact.py         |   8 +-
 bot/exts/holidays/valentines/lovecalculator.py     |   3 +-
 bot/exts/utilities/bookmark.py                     |  13 +-
 bot/exts/utilities/emoji.py                        |   4 +-
 bot/resources/fun/hangman_words.txt                | 877 +++++++++++++++++++++
 12 files changed, 1164 insertions(+), 17 deletions(-)
 create mode 100644 .gitpod.yml
 create mode 100644 bot/exts/fun/hangman.py
 create mode 100644 bot/exts/fun/quack.py
 create mode 100644 bot/resources/fun/hangman_words.txt
vale ibex
#

cool, that looks like it

#

you should be good now

#

I've rebased your branch onto sirlance main

dim pelican
#

Alrighty

vale ibex
#

fwiw I didn't make any code changes on your cog, so you might need to update it for the new paths to things

dim pelican
#

Should be ok, still have the referenced color name / hex color file in the PR that hasn't been added yet

#

But what I was hung up on was how to restructure the color.py file based on LX and Bluenix's recommendations. I can't wrap my head around what to restructure in a sensible way

vale ibex
#

ohhh, when you said restructure, I thought you were referring to the restructure we did to lance recently

dim pelican
#

Haha no, I got that one handled earlier 👍

#

I wish it was that one, would definitely make my life a bit easier

green oriole
#

I find the cog fairly okay-ish organized

vale ibex
#

i think what the suggestion is for there to be one group command color

green oriole
#

What could help is:

  • Separate color transformation into another file
  • Use a dictionary to select the right function
  • Make use of colorsys when available
vale ibex
#

and then have each mode be a subcommand of that

green oriole
#

Oh, I thought it was about the code lemon_eyes

vale ibex
#

Rather than have this ```py
if mode.lower() == "hex":
await self.hex_to_rgb(ctx, user_color)
elif mode.lower() == "rgb":
rgb_color = self.tuple_create(user_color)
await self.color_embed(ctx, rgb_color)
elif mode.lower() == "hsv":
await self.hsv_to_rgb(ctx, user_color)
elif mode.lower() == "hsl":
await self.hsl_to_rgb(ctx, user_color)
elif mode.lower() == "cmyk":
await self.cmyk_to_rgb(ctx, user_color)
elif mode.lower() == "name":

green oriole
#

If we convert this to a dict, it will be waaayyy less duplicate code

#

Like, multiplying subcommands is way more copy paste than that

vale ibex
#

at that point you wouldn't have the functions though

#

the functions would be the sub commands

dim pelican
#

"Main" color command: parses user input with regex -> goes to sub command?

cold island
#

match case hyperlemon

vale ibex
#

so you'd have !colour be the parent group command

#

and then have commands under that for each conversion

green oriole
#

The PR clearly says it is !color

dim pelican
#

Color with an alias for colour

vale ibex
#

lemme write a quick basic

#

Akarys was trying to be funny

#

ignore the italian

green oriole
timid sentinel
#

time to request changes to change the command to !colour and auto-ban for !color /s

vale ibex
#
@commands.group(aliases=("colour",))
async def color(self, ctx: commands.Context) -> None:
    await invoke_help_command(ctx)

@color.command(name="hex")
async def hex_to_rgb(self, ctx: commands.Context, hex_string: str) -> None:
    ...

@color.command(name="hsv")
async def hsv_to_rgb(self, ctx: commands.Context, h: int, s: int, v: int) -> None:
    ...
#

each color.command is a subcommand of color

dim pelican
#

Oh

vale ibex
#

that way each sub command can have different input

#

and describe what it expects

green oriole
#

hello docstring copy pasting

vale ibex
#

lol

dim pelican
#

So instead of static methods or class methods they would be sub-commands. Would they get called directly from when the user uses the color command or would it be able to be called from the "main" command?

vale ibex
#

Calling .color would just show the doc string of the group command

#

calling .color hex would call that function directly

dim pelican
#

Like if the user does .colour rgb(255,0,0) I will need to regex that to match the "mode" and parse it to get the rgb values

vale ibex
#

they'd need to do .color rgb 255 0 0

#

no regex

dim pelican
#

Well, I'll need to handle all of the cases

vale ibex
#

yea, each mode would have it's own sub command

dim pelican
#

🤯

#

So no regex if we do subcommands

vale ibex
#

exactly

dim pelican
#

Ahh

#

How would I handle sending the user's input to the correct sub-command?

#

Negatory

vale ibex
#

Discord handles calling the right arg, and will error if the user input doesn't match the args

vale ibex
dim pelican
#

That is sorta what I have with my "modes" if/else structure

#

LX brought up the point to handle rgb(100,100,100) or rgb (100,100,100) or rgb 100,100,100 or rgb 100 100 100 etc

vale ibex
#

yea, so in this case, you would force the last one with sub commands

#

the good thing about doing it this way, is that the help text gets automatically generated with what the input should look like

#

!mute 3

stable mountainBOT
#
Bad argument

Could not convert "user" into UnambiguousMember or UnambiguousUser.
3 is not a User mention, a User ID or a Username in the format name#discriminator.

#
Command Help

!tempmute <user> [duration] [reason]
Can also use: mute

*Temporarily mute a user for the given reason and duration.

A unit of time should be appended to the duration.
Units (∗case-sensitive):
y - years
m - months∗
w - weeks
d - days
h - hours
M - minutes∗
s - seconds

Alternatively, an ISO 8601 timestamp can be provided for the duration.

If no duration is given, a one hour duration is used by default.*

vale ibex
#

!tempmute <user> [duration] [reason] describes the interface

#

and the stuff below that is the docstring for that subcommand

#

you cant perma mute

dim pelican
#

!src tempmute

stable mountainBOT
#
Command: tempmute

Temporarily mute a user for the given reason and duration.

Source Code
dim pelican
#

Ok, good stuff to chew on

#

Might need to break a lot of things before they are working again

#

@elder belfry CC for you, had a convo about the PR

dim pelican
late wolf
#
Using python3.9 (3.9.7)
installing dependencies from lock file

No dependencies to install

Even though it says no dependencies to install I am getting discord.ext.command.errors.ExtensionFailed: Extension: 'bot.exts.fun.typerace' raised an error: ModuleNotFoundError: No module named 'markovify'.
Why?

static canyon
#

We're able to edit a mute to be permanent, but not permamute directly If I remember correctly

clever wraith
#

site#594 needs reviews

dim pelican
clever wraith
#

No, you rename the pydis origin to upstream and then add your own origin

dim pelican
#

Copy, since you are assuming someone is following this the first time and has forked & cloned the repo locally

clever wraith
#

Yeah

#

Or just cloned it on GitHub

#

Forked*

late wolf
clever wraith
#

Try poetry update

late wolf
#

I still get the same error

clever wraith
#

Ty brad

dim pelican
late wolf
#

yes

dim pelican
#

Have you reloaded the cog in your test server?

late wolf
#

wdym?

dim pelican
#

Or stopped the docker container and then started it again since you did your poetry install

late wolf
#

That I have not

#

Leme restart

dim pelican
#

.c r <your command you are testing>
Is what you would run in your test server to reload the cog (assuming this is universal and not just for sir-lancebot)

late wolf
#

The error happens when I run the bot itself

dim pelican
#

Hmmm, is this for a PR? I don't see that file in the main branch.

late wolf
#

No this is not for a pr

#

well it kinda is?

dim pelican
late wolf
#

yes cause well its in my forked repo?

dim pelican
#

👍

#

What do your imports look like in your file?

late wolf
#
import urllib.request

import markovify
import discord
from discord.ext import commands

from bot.bot import Bot
#

I think it involves docker, but I have no clue. I don't think there is anything wrong within the edited files.

timid sentinel
#

Are you sure markovify is in the poetry.lock? Did you run poetry add markovify?

late wolf
#

Well I deleted the images and ran docker compose up and now its working

late wolf
#

I have no clue what was happening before

vale ibex
#

if you change dependencies, you need to do docker-compose up --build

late wolf
#

oh

brisk brook
#

Damm Chris I was gonna say that 😦

brisk brook
vale ibex
#

build works too

#

the message I just pinned explains why

dim pelican
#

You would think that Helper you explained that to would be able to help others with the same problem 😅

vale ibex
#

😄

#

yea

vale ibex
#

Depends how complex it is

#

Yea that seems like most of it would go by making it a sub command

#

Alr

brisk brook
#

Wait I am confused, wasn't Brad working on this?

dim pelican
#

All good, doublev has volunteered to help out

#

I have been struggling with getting the new structure "on paper"

dim pelican
#

Sweet, LX had mentioned maybe pulling those out of the class and into the module level, so that way we can remove the staticmethod calls.

I guess those would then need to be moved back called in to the subcommands?

#

Would it return a tuple explicitly from the "if all 0" check?

#

Uh where is that

#

That will later be used to look up a color name, so it is good to have the "#" there

molten perch
#

Hey! I would really appreciate if someone could take a look at api#17 , it still needs a "few" reviews.

static canyon
#

How can I "undo" pushed commits, without locally deleting the changes made? I'm wanting to split a commit into two commits to make it tidier and not sure how to do this

late wolf
#

uh u can use soft reset using head

#

so something like git reset --soft HEAD~1 which will remove your last commit.

static canyon
#

Thank you

static canyon
late wolf
#

ye

slim widget
#

Has the plan changed?

static canyon
#

That's a lot of god damn conflicts

trail pilot
#

Could anyone who can dismiss the reviews on sir-lancebot#860 which requested changes since I implemented those changes?

dusky shoreBOT
slim widget
#

Ah right, I see. So the plan now is to use command arguments for the colour components, and not to support e.g. ```
.color rgb(0, 0, 0)

#

👍

static canyon
#

How do I resolve conflicts when I can't even see them? 🤔

#

I think it's like 90 conflicts

#

bot#1831

slim widget
#

I'm happy with that. It does negate the need for parsing the input yourself with regexes, which can be a pain 😄

vocal prairie
#

It's probably just merging in the restructure nvm it's bot not lance

slim widget
#

Although, can we get a comment on the PR stating this explicitly? So that anyone contributing/reviewing can see what the intended behaviour is.

static canyon
brisk brook
#

Which PR is it?

static canyon
static canyon
dim pelican
#

Hey Blue, is your recent comment regarding limiting the length of the user input?

brisk brook
#

Well- just that it literally matches anything lol

#

Did you read my comment 😂

brisk brook
#

I think you should simply rebase from main. If there are conflicts Git will walk you through them

late wolf
dim pelican
vocal wolf
static canyon
vocal wolf
#

my god

static canyon
#

I know

#

rofl

vocal wolf
#

uhhhhhhhhh

static canyon
#

I can't even see what the conflicts are

vocal wolf
#

is it even worth it to continue with this specific PR?

static canyon
vocal wolf
#

it does

#

and also the amount of them

static canyon
#

I can't even see the conflicts at the moment

late wolf
#

These?

static canyon
#

It could literally just be because I'm changing the import or something

vocal wolf
vocal wolf
#

the conflicts

static canyon
#

As I keep saying, I can't even view the conflicts

brisk brook
#

smh Numerlor 😤

vocal wolf
static canyon
#

I don't think I'm explaining myself properly because no one seems to understand.

I need to know how to view what the conflicts are. How can I view them?

dim pelican
late wolf
trail pilot
#

There is a how

late wolf
#

oh there is

brisk brook
static canyon
late wolf
#

oh

#

sorry then

static canyon
#

I'm asking what the actual conflicts within those files are

trail pilot
#

I think how I used to do it in pycharm is just pull main and then it'll tell me all the merge conflicts and I manually went through it, but there was a much better way than that

#

I think a git gui has a much better way

late wolf
vocal wolf
static canyon
vocal wolf
#

ye

static canyon
#

Thanks, I'll try that

vocal wolf
static canyon
#

Yeah, I'm wanting to resolve them

#

25 conflicts, and they all seem to be easy fixes

brisk brook
#

Yeah so what that will do @static canyon since you haven't worked a lot with Git is that it re-applies the commits onto the new head.

That means that when the branch originally branched off (also called based on) will change. Moving the whole thing by re-comitting the commits.

Essentially what Git will do is take your changes and apply them on the new base/head (which you decide is the newest commit of main). As if you would commit the same changes there again.

#

This of course can have conflicts because Git is working with old commits, which is exactly what we want. You will have to force-push after this though

dim pelican
#

Did ya break it

static canyon
dim pelican
#

Add this after line 66:

buffer.seek(0)
#

I don't think you need the await on line 67

#

noice

#

Could you test it with

.colour rgb (100,0,0)
.colour rgb(100,0,0)
.colour rgb 100, 0, 0
.colour rgb 100 0 0
#

But should it?

austere hornet
#

Lmao

gritty wind
dim pelican
#

Alrighty, I was under the impression to be as flexible as possible when it came to handling the user input

gritty wind
#

I can see your beautiful collapsible elements :O

#

disclaimer: Not a euphemism

dim pelican
#

Welcome to the color madness

#

Anyways, gotta go!

vale ibex
#

Yea, that seems about right

vale ibex
#

It might be worth looking into using inline fields, so that you use more width, rather than making a long embed

gritty wind
#

hm?

cold island
#

The preview

#

It should be of my PR?

#

oooh

gritty wind
#

Yeah

cold island
#

@gritty wind sorry

#

I slandered you

#

Looked at the wrong page

gritty wind
#

Haha it's a bit confoosing

cold island
#

Very cool 👌

#

You want to add that to the site repo?

#

I think it will confusing with so many numbers

vale ibex
#

Is there a sixth mode we can add, so the columns are balenced?

#

it would make the embed look better

cold island
#

YIQ? lol

vale ibex
#

YcbCr YUV

#

sounds good

vocal wolf
#

@static canyon very nice job on fixing conflicts.

gritty wind
vale ibex
#

not sure about the brackets though, we should probably keep those

cold island
gritty wind
#

I just found more missing urls

cold island
#

I always remember it as "intensity" for some reason

#

yeah

clever wraith
#

When someone has time could they merge site#594? All checks and approvals are there

slim widget
#

Have you tried putting them in code-blocks?

#

Like (255, 255, 255)

gritty wind
#

I have site#599 blocking my changes for static previews. It's just updating http links to https. Would appreciate a review :D

I need a review from an admin or Kat

dusky shoreBOT
slim widget
#

That sometimes makes things look neater.

static canyon
clever wraith
#

What the hell is YIQ

#

I don't know shit about it

cold island
#

hmmm can you try with code blocks and brackets?

clever wraith
#

@clever wraith where are you testing this?

#

I've got a feeling a lot of people are gonna try .colour hex b00b69

slim widget
static canyon
#

bot#1798 and bot#1806 seem to have fallen through the cracks unnoticed. I opened them just over a month ago, and they never got the second required review. Would appreciate any reviews anyone can give 👍

slim widget
#

Ohhh right 😄

clever wraith
slim widget
#

Nevermind

dim pelican
#

The sixth should be the name

slim widget
#

Just oblivious as always 😄

#

I wonder what colour that is though 🤔

#

Ah

#

Quite a nice colour actually.

#

Kind of fuchsia.

vale ibex
#

YIQ is a float

slim widget
#

Alright, that sounds like a good idea 👍

vale ibex
#

which is why it's weird

#

IE its 0.0-1.0

#

maybe just round to 2 d.p and it'll be fine

cold island
#

You can just multiply by 255 and round it

austere hornet
#

Prob mine too ngl

cold island
#

Go do your homework

elder belfry
austere hornet
#

What timezone are you in?

#

Oh ok

#

Ikr

dim pelican
cold island
#

@gritty wind so for how long does the netifly link work

gritty wind
#

It's supposed to be a permalink

cold island
#

Is there like... a limit?

gritty wind
#

From forms experience, they basically work forever

cold island
#

interesting

#

It should create a link only when site content changes I think

#

And not API stuff

gritty wind
#

That granularity really isn't feasible, but creating deployments doesn't cost anything

cold island
#

alr

gritty wind
#

Either way, it'll eventually be moot once we separate API out

cold island
#

yeah

gritty wind
#

Just flexing on you poor, non preview-having peeps at this point 🦾

patent pivot
#

actually might need to change PARENT_HOST as well, cc @gritty wind does that change stuff you're doing?

gritty wind
#

So what’s allowed-hosts used for

patent pivot
#

ALLOWED_HOSTS is just a django filtering step to control what hosts can be used to access django

gritty wind
#

PARENT_HOST isn’t easily available during build time, so I use a mock value, which is string replace after the compilation is done

#

I don’t think hosts are enforced with the static build

stable mountainBOT
#

pydis_site/settings.py line 201

PARENT_HOST = env('PARENT_HOST', default='pythondiscord.com')```
gritty wind
#

Okay that should be fine

patent pivot
#

alright sweet

gritty wind
#

Do you need an

#

Approval thumb

patent pivot
#

uhhh once i change this yea

gritty wind
#

Why are we going to www anyways lol

patent pivot
gritty wind
#

Nice

#

It’s missing a review from a core dev Kronifer

#

Oh is it just content

#

Alright you’re good to go

#

Did something break Joe

patent pivot
#

lol nah

#

chris told me i was wrong

#

hmmm

#

so

#

but

#

the links are all built without www

gritty wind
#

Yeah parent host sets that lol

vale ibex
#

iirc parent hosts would also mean subdomains get put under www too

#

if we put www in there

#

do we use CommonMiddleware?

#

if so, we can set PREPEND_WWW to true

patent pivot
#

oh wait

#

maybe we use DEFAULT_HOST

gritty wind
#

Maybe

#

Yeah that

patent pivot
gritty wind
#

I’ve only had bad experiences with django host tbh when do we remove sub domains smh

patent pivot
#

lol soon soon

#

maybe this?

vale ibex
#

seems about right

patent pivot
gritty wind
#

Is any of this actually testable

vale ibex
patent pivot
#

lol

#

probably

gritty wind
#

Could deploy it on my own domain, buuuuutt it’s easier to just approve and see if it breaks

vale ibex
#

it entrely breaks dev lol

patent pivot
#

fuck

#

lol

vale ibex
#

since it pushes to www.pythondiscord.local/*

patent pivot
#

shit

#

okay

#

hm

vale ibex
#

IG we just need to get contribs to add www. to hosts?

#

like we do for other sub domains

patent pivot
#

I guess, or we conditional in development

vale ibex
#

I'd rather deal with hosts, rather than conditional it

patent pivot
#

hmm yea

patent pivot
vale ibex
#

did we remove that subdomain?

#

or is this a problem

patent pivot
#

as expected

#

there is no /

vale ibex
#

gives me django auto docs

patent pivot
#

yea then it works

vale ibex
#

nice

patent pivot
#

approval pls

#

we will see if it works

vale ibex
#

ah, yea 😄

patent pivot
#

yeah that's fixed the links

vale ibex
#

should we redirect to www. too?

#

or is that the next part of your master plan

patent pivot
vale ibex
#

is there some rollout delay?

patent pivot
#

try now

#

hmmm it's 302'ing

#

i want 308

vale ibex
#

yea lgtm now

#

on 302s

vocal prairie
#

What's the difference between a 302 and a 308?

vale ibex
#

this at CF level?

#

browsers cache 308s more irrc

vocal prairie
#

oh ok

patent pivot
#

kube ingress

#

308 is permanent yea, 302 is temporary

vale ibex
#

I think 308 also means search engines replace their indexes too

patent pivot
#

yeah

vocal prairie
#

Oh that's interesting

patent pivot
#

alright I think banks has found the answer

#

need to put on some 80s pop to write nginx configuration

vale ibex
patent pivot
#

@vale ibex i think

#

this

#

no that 302s what

vale ibex
#

Yea I have no clue with nginx ingress lol

#

Should read up on it at some point

#

But I'm in bed now, so today is not that day kek

patent pivot
#

lmfao

#

i will resolve this i will do everything it takes

#

oh I know why

#

forgot a location block around it

#

alright solved it I think

#
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/auth-tls-verify-client: "on"
    nginx.ingress.kubernetes.io/server-snippet: |
      location ~* / {
        return 308 https://www.pythondiscord.com$request_uri;
      }
    nginx.ingress.kubernetes.io/auth-tls-secret: "kube-system/mtls-client-crt-bundle"
    nginx.ingress.kubernetes.io/auth-tls-error-page: "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
  name: www-redirect
spec:
  tls:
  - hosts:
      - "pythondiscord.com"
    secretName: pythondiscord.com-tls
  rules:
  - host: pythondiscord.com
    http:
      paths:
      - path: /(.*)
        pathType: Prefix
        backend:
          service:
            name: site
            port:
              number: 80

#

that was the answer

#

pretty clean in the end tbqh

vale ibex
#

Nice nice

patent pivot
vale ibex
#

Good idea

#

We might mention it in contributing guides too

patent pivot
#

hmmm i'd hang fire on that for now, me and volcyy might get subdomain removal through in coming weeks which means we don't need to care for this

vale ibex
#

Ah nice

patent pivot
#

okay I checked google docs, the 308 should be enough to indicate content move

trail pilot
#

What is everyone's thoughts on changing out reactions to a view for some games in sir-lancebot

austere hornet
dim pelican
#

Instead of reactions doing the pagination, having different views in a dropdown type thing?

austere hornet
trail pilot
austere hornet
trail pilot
#

views are discord's new UI

austere hornet
#

Aahh

#

Ok

#

Well

summer kettle
#

Hello
I am interested in contributing. Is there something I can help with, or somewhere I can read up on what needs assistance?

obsidian patio
#

@patent pivot why migrate to using www?

gritty wind
winged sigil
#

@patent pivot this

static canyon
#

But yeah, /rules used to redirect to /pages/rules

#

Redirect from /guides to /pages/guides etc. are also broken

gritty wind
#

Are those CF redirects or in app redirects hmm

#

CF

obsidian patio
#

Makes sense, even though I love the clean look of not using www

fervent sage
#

no need to sue ww specifically

#

use h instead, which is beautiful

green oriole
#

I think we broke the short urls, didn't we

#

Okay, it just doesn't use short urls on www.pydis.com, @patent pivot might want to add a CF route for that one

remote wigeon
patent pivot
#

uhhh

patent pivot
winged sigil
remote wigeon
#

aaaaaaaaaa @patent pivot you made me have an iternal debate about www or no-www again

patent pivot
#

I don't get why redirects aren't processing

gritty wind
#

The redirects app is black magic

#

Is it imaginable that we drop them in the future

#

I really don’t like the idea of having to maintain them forever just to keep backwards compatibility

remote wigeon
#

why dont you just do a pagerule that redirects non www to www

gritty wind
#

The redirection in general already works

#

But we have separate dynamic redirection rules which are not designed with that in mind

#

And seem to be unable to parse the links with www

remote wigeon
#

strange

green oriole
patent pivot
#

No theu are both broken

#

oh no maybe not

green oriole
#

I can make them work

patent pivot
green oriole
#

Unless it is some form of caching on my device

#

This works without problem

patent pivot
#

ah right

remote wigeon
green oriole
#

Currently it doesn't, but I think it should

remote wigeon
#

why

#

you get none of the advantages and a longer url

#

unlike the normal domain where there's technical advantages

green oriole
#

Well, I could see some people trying to access it using that url

#

it doesn't hurt to support it here too

clever wraith
#

Morning all!

green oriole
cold island
#

merged

green oriole
#

Thank you mister pig zebra

#

And mister owl

cold island
#

Well now it did

green oriole
#

I actually wonder why it took so long to connect

#

I don't even see the startup sequence in the logs

gritty wind
#

CI?

#

Or is there anything in the k8s action

green oriole
#

In the grafana log

slim widget
#

You done this?

slim widget
#

Ah it's no problem. I can do it, if you like?

slim widget
#

Great stuff 👍

patent pivot
#

more or less

molten perch
#

Unfortunately, it is not. At least 2 approving reviews are required by reviewers with write access. :/

#

However, there's a reason to those checks. 🙂
No, you don't.

#

Or.. be patient. 😄
It has to be reviewed thoroughly, anyways. 🙂

cold island
#

@molten perch @clever wraith Contributors count

molten perch
sleek steppe
#

Yes, it uses the GitHub branch protection rather than the policy bot check

cold island
#

The API repo? I don't know anything about fast API

dim pelican
#

^ Or how to test it

trail pilot
#

Oh, could any of the members on sir-lancebot dismiss a few stale reviews?

#

on sir-lancebot#860

dusky shoreBOT
trail pilot
#

Because I implemented the changes on both of them

molten perch
#

Actually, you can. However, not the API itself, but the SQLAlchemy models. 😄

dim pelican
trail pilot
#

I implemented the changes for both those reviews

green oriole
#

You should ask @hardy gorge

static canyon
#

I've dismissed both reviews so they won't block the PR @trail pilot

green oriole
#

Why asking Sebastiaan?

#

He is in charge of the fastapi project

patent pivot
#

uhhh… like all our other projects lol

trail pilot
patent pivot
#

👍

#

it’s fine to do imo, we do it on all other projects

static canyon
dim pelican
#

No problem, I have lots of practice with that

dusky shoreBOT
hardy gorge
#

Sounds good

patent pivot
#

ya i'm gonna start shortly

#

cc <@&409416496733880320> hello migrating

green oriole
#

hello migrating I am dad

patent pivot
#

arthur cj trigger blackbox

radiant merlinBOT
#

:tools: Pick a CronJob to trigger

radiant merlinBOT
austere hornet
#

Why did @radiant merlin 's avatar change to a sun??

patent pivot
austere hornet
last patio
#

👋

dusky shoreBOT
molten perch
#

I didn't know about that. However, I still believe it would be more convenient.

patent pivot
#

arthur deploy ls

radiant merlinBOT
#

Deployments in namespace default

+----------+------------------------+------------+
|  Status  | Deployment             |  Replicas  |
|----------+------------------------+------------|
|    🔴    | bitwarden              |    0/0     |
|    🟢    | black-knight           |    1/1     |
|    🟢    | bot                    |    1/1     |
|    🟢    | code-jam-management    |    1/1     |
|    🟢    | forms-backend          |    2/2     |
|    🟢    | ghost                  |    1/1     |
|    🟢    | grafana                |    1/1     |
|    🟢    | grafana-image-renderer |    1/1     |
|    🟢    | graphite               |    1/1     |
|    🟢    | h-asgi                 |    1/1     |
|    🟢    | hastebin               |    1/1     |
|    🟢    | king-arthur            |    1/1     |
|    🟢    | logcord                |    1/1     |
|    🔴    | metabase               |    0/0     |
|    🔴    | metricity              |    0/0     |
|    🟢    | modmail-bot            |    1/1     |
|    🟢    | modmail-web            |    1/1     |
|    🟢    | mongodb                |    1/1     |
|    🟢    | olli                   |    1/1     |
|    🔴    | pixels                 |    0/0     |
|    🟢    | policy-bot             |    1/1     |
|    🟢    | postgres               |    1/1     |
|    🟢    | prestashop             |    1/1     |
|    🟢    | public-stats           |    1/1     |
|    🟢    | quackstack             |    1/1     |
|    🟢    | redis                  |    1/1     |
|    🟢    | sir-lancebot           |    1/1     |
|    🔴    | site                   |    0/0     |
|    🟢    | snekbox                |    1/1     |
|    🟢    | thread-bot             |    1/1     |
+----------+------------------------+------------+
vocal prairie
#

PG 14 is out? I feel like 13 was released 3 months ago

#

Even though it's been like a year

patent pivot
#

yes

stable mountainBOT
#

README.md?plain=1 line 10

CI Tested PostgreSQL versions: `​9.4`​, `​9.5`​, `​9.6`​, `​10`​, `​11`​, `​12`​, `​13`​```
patent pivot
#

newly released

clever wraith
vale ibex
#

yo, can I get a quick approval on bot#1862

dusky shoreBOT
trail pilot
#

Could a core-dev look at sir-lancebot#860 when they're free? I think a core dev approval is the last one it needs before it can be merged

dusky shoreBOT
twilit juniper
#

that bothers me so much

trail pilot
#

The dropdown is above the button

twilit juniper
#

Sorry lol I didn't read the whole PR

trail pilot
vale ibex
#

I can, but it wouldn't do anything lol

#

anyone who authored a commit is skipped by policy bot

gritty wind
#

Why would he do reviews when he can tell people to do them and they just happen

vale ibex
#

this is true

#

@gritty wind you do review now

gritty wind
#

What's appeals 2

#

How rude

vale ibex
#

just from that screenshot no

#

what repo?

#

What are you trying to do?

#

not too sure

#

I'm not familiar with that repo

#

probably best off asking Seb

#

or just try adding it back and see if you run into issues

#

pre-commit isn't even in the deps

#

So there might have been something Seb was trying to check in a pre-commit hook that wasn't working

#

seems like a pretty similar setup to our other repos

#

I imagine it would just work if you copied from python or lance and added black.

#

one is guitar hero, the other is the best public transport the world has ever seen

gritty wind
#

The arrows show where there was a diversion in the tree

#

So from one branch to another

#

Dots are commits

patent pivot
#

arthur deploy restart bot

radiant merlinBOT
#

:warning: Please confirm you want to restart deploy/bot in default

radiant merlinBOT
patent pivot
#

no more hosts file 🎉

clever wraith
#

Anybody got something in need of reviews

austere hornet
#

Have you reviewed api#17? I've heard it's a big one rn

dusky shoreBOT
dim pelican
#

sir-lancebot#859 should be ready to test again (RE: matching anything, I have now set if a user query is over 50 characters it will not match, but the limit on the score from rapidfuzz needs to stay around ~60 for things to not break)

dusky shoreBOT
vocal prairie
#

Are you sure that's the right number- nvm

dim pelican
#

No no that is definitely sir-lance with the problem, not me with a typo

green oriole
#

Are those... metro lines?

patent pivot
green oriole
#

What's the difference lemon_cowboy

static canyon
green oriole
#

Why the heck do you have so many lines wtf

static canyon
#

Yeah, there's a lot lol

timid sentinel
#

tube map is very cool

green oriole
#

Da heck

green oriole
#

lol

#

I think I can name every single station here

#

Let's move to ot though

dusky shoreBOT
dim pelican
#

I can't review what I can't test

...or can I?

molten perch
#

If you have some experience with SQLAlchemy or with ORMs overall, you can test out the validations. It'd a huge help.
I've added Postgresql to the compose file, so it should work just fine.

#

¯_(ツ)_/¯

dim pelican
#

Time to learn SQLAlchemy I guess...
I can review content, but without really testing I would leave my review as "comments" rather than approval. I think it is a more robust review that way

molten perch
dim pelican
#

Nope, mods and higher

#

!otn s rick

static canyon
#

What are you looking for?

dim pelican
#

I'm guessing if he has any ot names

static canyon
#

I can confirm that is indeed a thing

#

👍

molten perch
#

Just a note for your functional review: relationships, and the embed validations are number one priorities. 🙂

austere hornet
#

Pretty sure that was there for a long time

fallen patrol
#

@vale ibex can you pls check the cache length? I have an idea on why the cache isn't fully populated

#

len(guild.members) iirc

vale ibex
#

it must have been a one off issue