#dev-contrib

1 messages ยท Page 86 of 1

gritty wind
#

noice

#

are there any characters you can't put in an embed?

vocal wolf
#

I escaped the markdown

#

ehhhhhh

#

there may be some

#

I don't know of any, though

#

Filtering specific characters before requesting from a website

#

so there's no possibilities of injections or something

#

also just a good practice tbh

#

sanitization

short snow
#

oo, you are streaming, lemme join

vocal wolf
#

yep, it should be done with all commands.

#

current state

short snow
#

ok, (Review my pr, of wiki command, and update ttt on sir lance if u get time, and they need update in the labels too)

gritty wind
#

That embed looks pretty cool, well done Vester

vocal wolf
#

@obsidian patio great work. bot#1429 has been merged.

dusky shoreBOT
obsidian patio
#

Awesome!

short snow
#

that was a pretty fast merge

obsidian patio
#

Short PR, quick revisions. Nice when things are moving

brazen charm
#

Still looking for some reviews on bot#1014 if anyone has maybe an hour or two free

dusky shoreBOT
vocal wolf
#

I'll add it to the bounty board

#

Done.

short snow
#

is bounty board visible for contributors?

obsidian patio
#

Yep

short snow
#

@vale ibex Mentioned changes in c4 pr :D

vale ibex
#

!remind 23949s connect 4 PR

stable mountainBOT
#
Sure thing!

Your reminder will arrive in 6 hours, 39 minutes and 9 seconds!

vale ibex
#

Dang, 2 seconds off 6pm ๐Ÿ˜‚

#

I updated the bot test server yml on notion with @obsidian patio's change, not sure if its worth a dev announce or not

#

<insert Ralph I'm helping meme here>

obsidian patio
#

Cool, thanks!

vale ibex
#

I really like the language used in the DM too, nice job ๐Ÿ˜„

obsidian patio
#

Thanks ๐Ÿ˜„

vocal wolf
#

Question

#

How does one use the Redis cache to store message object or message id?

#

preferably message object, if that's even possible

vale ibex
#

would it be cache.set(key, value)

vocal wolf
#

Using self.bot.redis_session?

vale ibex
#

Where cache is async_rediscache.RedisCache(namespace=foo)

vocal wolf
#

ah

brazen charm
#

Don't think you can really serialize a message in any other way

vale ibex
short snow
#
vocal wolf
#

tyvm

#

I think I know the direction I should go in now

short snow
#

have we used redis cache in bot?

#

if yes where

brazen charm
#

help channels and dm log come to mind

green oriole
#

We use it quite a lot

gritty wind
#

voice gate, silence, branding

green oriole
#

On top of my head, we use it for people who got the ping in #voice-verification, branding state, silenced channels, defcon state (soon)

gritty wind
#

What are you using it for again?

short snow
#

xith was asking for in the stream on twitch, we were doing it for the ^

gritty wind
#

Riiight

#

Do you need to store anything other than the IDs?

vocal wolf
#

am trying to store the object

#

but other than that

#

no

#

message object, that is

gritty wind
#

Well, I'm presuming you want it to edit it, yeah?

short snow
#

yeah

gritty wind
#

I think you can store just what you need to recreate it and get discord to edit it

#

Without storing the whole thing

short snow
#

(kwzrd suggested use of redis)

gritty wind
#

Let me look at the init

#

I saw the issue, just wasn't sure what data you needed

vocal wolf
#

I'm not completely sure if we need redis though

#

Since it's only one ID

gritty wind
#

Are you planning on ditching persistence, or?

vocal wolf
#

I'm thinking about it

#

I mean it would be neat to have it

#

But is it necessary for this?

short snow
#

i had the same thinking, of not using redis, but when xith told that a big contributor told about it, there must be some reason

vocal wolf
#

Would it take more work to use the redis cache, or just search for the message?

short snow
#

redis cache would probably be neater i think

vocal wolf
#

I mean it's like one extra API call, which we don't exactly want

#

My verdict: yes on the Redis cache

gritty wind
#

It's 1 API call on startup to avoid having to use d.py hacks

short snow
#

hmmm, what was the issue last time?

#

when we merged the pr

vocal wolf
#

Editing an uneditable message

gritty wind
#

I'm looking at the message edit src code, and all you'd need to inject is channel ID and msg ID

short snow
#

webhook messages are uneditable?

gritty wind
#

They aren't from the bot

#

Can't edit a message from a different user

short snow
#

ok, so what are u doing rn then? Making the bot send a message and then edit it on claiming channels?

vocal wolf
#

if message exists, edit message. otherwise, send message, set dynamic message to that message, save in cache.

short snow
#

ah right

vocal wolf
#

skipped some parts, but that's a tldr

short snow
#

yeah understood

gritty wind
#

Made a POC for editing a message from a channel id + msg id

#

but it became a bit esoteric

#
import discord; from types import SimpleNamespace; msg_props = SimpleNamespace(_state=SimpleNamespace(http=self.bot.http), channel=SimpleNamespace(id=776836333208600591), id=813748314746912819, _update=lambda x: x); await discord.Message.edit(self=msg_props, content="test")
vocal wolf
#

oh god

gritty wind
#

It doesn't look too bad when you expand it

#

but I'm too lazy to expand it

#

What have you done

#

Expanded version

#

I will slap you if this makes it into a PR though lol

vocal wolf
#

!e print('\n'.join('import discord; from types import SimpleNamespace; msg_props = SimpleNamespace(_state=SimpleNamespace(http=self.bot.http), channel=SimpleNamespace(id=776836333208600591), id=813748314746912819, _update=lambda x: x); await discord.Message.edit(self=msg_props, content="test")'.split('; ')))

#

ffs

stable mountainBOT
#

@vocal wolf :white_check_mark: Your eval job has completed with return code 0.

001 | import discord
002 | from types import SimpleNamespace
003 | msg_props = SimpleNamespace(_state=SimpleNamespace(http=self.bot.http), channel=SimpleNamespace(id=776836333208600591), id=813748314746912819, _update=lambda x: x)
004 | await discord.Message.edit(self=msg_props, content="test")
vocal wolf
#

lol

vocal wolf
#

now I want to

gritty wind
#

I mean we do something similar with docs

#

but that's because a better solution doesn't exist there

vocal wolf
#

@gritty wind unfortunately objects cannot be put into the cache

#

but maybe I could serialize them

#

would that be overdoing it?

gritty wind
#

Yesh, hence the hack with IDs above

#

But yeah that's overkill

#

just save the IDs, and fetch them

#

The channel should be available, the message should be fetched

whole forge
#

thing that came up between me and @gritty wind trying to get @vocal wolf bot dev setup working in docker compose:
what are the opinions on putting restart: always on the bot service? This would allow to bot to restart by itself if it crashes because the site hasn't loaded yet.

personally, i would also like to add a config for the log-storage as to prevent logs file from growing to horrendous sizes when leaving the bot running for a while.

gritty wind
#

๐Ÿ‘ from me, but I'd also like this only as a temporary solution, as there are other docker errors that indicate a problematic config.

I think the bigger fix here, and it's something we talked about at various points but never implemented is to have the bot wait for site on startup. I'd also like better startup errors, but we have an unapproved issue pending for that

cold moon
#

We should do something like site do for waiting PostgreSQL

brazen charm
#

Should we be able to bypass that? I often start the bot without the site running for features that do not require it

gritty wind
#

Doesn't the bot error out on start if site isn't running?

whole forge
#

(tell me if the tags are wrong)

gritty wind
#

So it's probably not CI because we don't use compose in CI but it doesn't matter

brazen charm
#

It didn't last time I ran it like that but it has been a while, something may have changed that makes a request before the bot starts fully

gritty wind
#

I think we also have enhancemnet

brazen charm
#

That was wrapped in a broad except last time I checked so it shouldn't stop startup

#

Looks like it doesn't work now because of await self.cache_filter_list_data() in the bot login, which can be deleted to work without the site running

whole forge
#

right, but its still a issue for people that want the site running/need site features, and just do docker-compose up -d

gritty wind
#

Hmm it shouldn't be except for very specific issues, because the site will be ready when they go to use it

#

But startup features that fetch from bot won't work

#

So a waiting solution would still work better imo

brazen charm
#

Waiting sounds good for me, just also would like something to bypass that, although I'm not sure if there even is a good way of doing that (maybe handling a single keyboard interrupt)

austere jetty
#

#bot-commands

gritty wind
#

Hi

#

Is something wrong?

short snow
#

like we paste a pastebin link, it gets the code from there and then runs it

gritty wind
#

Ah lol, I sent that message before they started typing

#

It probably won't be a snekbox thing, but a bot thing

#

But hmm

short snow
#

yeah yeah

#

a bot thing

gritty wind
#

I'm not sure if we want to fetch code from unknown sources

patent pivot
#

oh that reminds me about something else

#

!remind 1h readiness checks

stable mountainBOT
#
Alright.

Your reminder will arrive in 1 hour!

short snow
#

like:

!e
link=<link>
#

only python discord pastebin links

#

and also support to run .py files, like your message contains a attachement

patent pivot
#

Didn't we decide against that

#

also we ban py attachments

gritty wind
#

we don't allow attachments on the server yeah

patent pivot
#

yeah I'm fairly sure we decided against running from the pastebin

#

it isn't the intent of snekbox or the eval feature

#

there is an issue somewhere, but I'm on mobile

#

either organisation or meta

#

or maybe bot

gritty wind
#

That's all the places an issue can be haha

#

Is it closed?

patent pivot
#

think so

#

now on laptop 1 sec

#

open I guess

#

but yeah I'd rather not

short snow
#

bot#1133

dusky shoreBOT
short snow
#

open

stable mountainBOT
#

@patent pivot

It has arrived!

Here's your reminder: readiness checks.
[Jump back to when you created the reminder](#dev-contrib message)

green oriole
#

I was about to ask someone to investigate that :D

patent pivot
#

!remind 1h actually readiness checks

stable mountainBOT
#
You got it!

Your reminder will arrive in 1 hour!

stable mountainBOT
#

@patent pivot

It has arrived!

Here's your reminder: actually readiness checks.
[Jump back to when you created the reminder](#dev-contrib message)

obsidian patio
#

Hey @patent pivot @green oriole @subtle kraken @vocal wolf @gritty wind! It's just about time for the meeting. Wanna join dev-vc?

subtle kraken
#

hello

short snow
#

(hello)

celest charm
#

@patent pivot what's the text chat for dev-voice?

short snow
#

Everyone left hmmm....

#

ah shifted to staff

balmy sparrow
#

Heyo, the fuzzy matching for the commands suggestion seems to pick up any additional text that come with it as well

#

Saw something happen where a super large text block was also added to it, leading to a large embed reply from the bot

#

!pste test 1 2 3 4 5

#

Should I be making an issue for this? (the suggestion embed gets deleted but you can test it with ^ )

sleek steppe
#

Afaik, paste is a tag, not a command.

#

!t paste

stable mountainBOT
#

Pasting large amounts of code

If your code is too long to fit in a codeblock in discord, you can paste your code here:
https://paste.pydis.com/

After pasting your code, save it by clicking the floppy disk icon in the top right, or by typing ctrl + S. After doing that, the URL should change. Copy the URL and post it here so others can see it.

sleek steppe
#

wait nvm there are still suggestions for tags

stable mountainBOT
#

@vale ibex

It has arrived!

Here's your reminder: connect 4 PR.
[Jump back to when you created the reminder](#dev-contrib message)

grim tide
#

how is the command typo fixer coded?

rapid swallow
grim tide
#

ah, so the typos are manually coded in?

rapid swallow
rapid swallow
clever wraith
#

why do you guys make a cog for every command?

rapid swallow
rapid swallow
grim tide
#

thanks

clever wraith
brazen charm
#

Why is that under the tag function anyway

fallen patrol
#

so

#

what was the bug for the help channels clonking out today?

obsidian patio
#

Basically, we merged a feature where the first message from the user in the help channel was sent to them in DMs (check out #changelog)

#

the issue is when they just sent an image. That means there was no message, so the bot tried to send an empty message, which throws an exception

fallen patrol
#

yeah, and bumped the count up to 3, but i'm guessing that was a config change

obsidian patio
#

Since there's an exception before the new channel is moved up, we'll be left with one less available help channel

fallen patrol
#

so now I assume it will attach the image in DMs

obsidian patio
#

Scaleos fixed it. Not sure how it handles that edge case now

fallen patrol
#

would I get in trouble for testing?

obsidian patio
#

No

#

Seems like it just logs the exception and ignores it atm

#

Not optimal, but it works

clever wraith
#

can confirm, works

fallen patrol
#

oh hey it didn't crash

obsidian patio
#

Yep, scal fixed it

fallen patrol
#

Well, I tested to see if it would crash if it deleted the message via the spam filter

#

so I attached a message.txt and filled it with useless text

obsidian patio
#

Yeah

#

Right now we just filter out the exceptions

clever wraith
#

erm

#

i wanna contribute to

#

uh

#

sir lancebot

#

but erm

#

yeah

#

how do i do that

thorny obsidian
#

We have resources for that! First off, here's the repo for for Sir Lancebot:
https://github.com/python-discord/sir-lancebot

Take a look through and see if there are existing issues that you want to work on. If you have a specific thing you want to implement, that's fine too. We just want you to make an issue about it first so we can assign you to it.

short snow
#

And the contributing guide on the sir-lancebot repo and site

thorny obsidian
#

Feel free to ask here if you want to bounce ideas off of us or have issues getting Sir Lancebot running

short snow
#

You need to have a good understanding of discord.py for contributing to sir-lancebot.

clever wraith
thorny obsidian
clever wraith
#

i am sfupid so i do not know how to make cogs

thorny obsidian
clever wraith
#

oh ok

#

cogs are great because all my commands are in separate files

#

i know how to do the usual @client.command thing

#

why do you guys make cogs for pretty much for every command?

#

pretty confusing lemon_thinking

thorny obsidian
#

Because we can then unload/reload them and it keeps it fairly structured. If you want to work on a specific command, you only need to alter a few smaller files and not massive ones

clever wraith
#

yeah

#

if you have 20 commands all packed in main.py

#

then...

sleek steppe
#

I don't think it's confusing

clever wraith
#

if anyone has a good tutorial on cogs please tell me

#

so i can contribute

vocal wolf
#

@thorny obsidian thursday sounds good. What timezone are you in?

thorny obsidian
fallen patrol
vocal wolf
fallen patrol
fallen patrol
#

Those two

vocal wolf
fallen patrol
#

itd be for internal use only ยฏ\_(ใƒ„)_/ยฏ

#

besides, you don't think they can submit offensive questions already?

vocal wolf
#

I've already seen pretty wack posts

fallen patrol
#

This was the reason i gave for it

#

This way someone could get updated with their question got added

vocal wolf
#

I mean I guess it's so we can contact the user if we have questions

fallen patrol
#

And i never fixed the typo, *when

vocal wolf
#

Have you made an issue in the sir-lancebot repo?

#

It would be much easier to keep track of progress there

fallen patrol
#

No, i haven't coughs

vocal wolf
#

@thorny obsidian we shall be productive.

fallen patrol
#

I wasn't sure if i make a meta issue and a sirlancboe issue

vocal wolf
#

sir lancebot issue will do

fallen patrol
#

perhaps she'll tell me what she uses for git eventually

fallen patrol
#

Unfortunately i can't make it right now and probably not uh, until thursday

#

I have a thingy tomorrow so that's out. ๐Ÿ˜“

vocal wolf
#

ah

#

I wish you luck

#

I hope everything goes well!

fallen patrol
#

Yee, it should go well, not that big

vocal wolf
#

oh god damn

fallen patrol
#

Can continue in another fairly ignored channel lol

#

i wouldn't say this in ot

vocal wolf
#

You have teh powah!

fallen patrol
#

Anyways

#

There's a lot of stuff in #community-meta soley about the topic command not having a lot of topics on it and ppl saying no one looks at the stuff

vocal wolf
#

!remind @thorny obsidian 39h Meet for thing

stable mountainBOT
#
Affirmative!

Your reminder will arrive in 1 day and 15 hours and will mention 1 other(s)!

fallen patrol
#

Wut you can do that

vocal wolf
#

ye

#

tbh I think #community-meta is for suggesting the idea, and then you go to the repo and make an issue after getting approval from others in that channel

#

that channel's like for staging I guess

green oriole
vocal wolf
#

adding more, editing, deleting, etc.

green oriole
#

A'ight

vale ibex
#

@short snow Sorry I just realised that my comment on your connect 4 PR lost the context of the other comment I was replying too, so might not have made sense. I've updated the comment, hopefully it makes more sense now ๐Ÿ˜„

short snow
#

ah an guild check, that's what was missing

#

๐Ÿ˜ฌ

#

uhh, i will do that rn

#

should i hardcode the channel, or use constants?

gritty wind
#

If you're just trying to prevent it from running in DM, I think there's a check for that

#

Or are you trying to do something else

gritty wind
#

Right, so what needs hardcoding?

short snow
#

lemme see if there is a check for that

vale ibex
#

I think the commands.guild_only() check would be enough

short snow
gritty wind
short snow
vale ibex
gritty wind
#

You just need to stop it from running in guild

short snow
#

ah ok

#

got it

gritty wind
#

All commands in sir-lance run through the whitelist_check, which passes on guild, and checks for very specific channels otherwise

short snow
#

It doesn't provide the sir lancebot chanel here

vale ibex
#

you can pass a channel kwarg to the whitelist check, which will output the channels

#

although the check doesn't seem to be running

gritty wind
#

The whitelist check wouldn't help here because it only affects on-server things

vale ibex
#

yea, true.

#

One option is to use the commands.guild_only() decorator and then catch NoPrivateMessage in an command error handler

#

but something more generic may be useful for the bot

gritty wind
#

We already handle it globally

short snow
#

(Example the ttt command pic i showed)

vale ibex
#

Ahh right, so just the decorator is needed then

short snow
vale ibex
#

That's good to know for future and probably invalidates the point of sir-lancebot#581

dusky shoreBOT
short snow
#

@gritty wind whats your say?

#

should i jsut do it with c4 pr

#

since it is just a line change

gritty wind
#

Sure

short snow
#

okie dokie

short snow
#

@vale ibex done ๐ŸŽ‰

vale ibex
#

Looks good, how come you added a new import for guild_only, instead of using commands.guild_only, since you already have commands imported?

short snow
#

uhh, i just hovered over the error and pycharm did that lol

vale ibex
#

Ahhh ๐Ÿ˜‚

short snow
#

should i change it?

vale ibex
#

another reason why notepad is the one true editor

vale ibex
short snow
#

if u approve, it is a merge

#

lol

#

press the secret button ๐Ÿ™ƒ

vale ibex
#

๐Ÿ˜ฆ

#

Not my decision lol

gritty wind
#

I can merge it in a bit

short snow
#

ok lemon_hyperpleased

short snow
vale ibex
#

It's only a matter of time until the owls take over brother

short snow
#

We should change the annotation for bot from commands.Bot to bot.Bot to fix the http_session annotation errors

green oriole
#

@gritty wind do you mean commands that need to be invoked in the server, or commands that will require DMs?

gritty wind
#

The original issue was about commands being invoked from DM

#

The code chris posted will only affect that, not the bot using DMs

green oriole
#

Right, there shouldn't be any commands that need to be invoked in DMs then

gritty wind
#

sweet beans

cold moon
#

I think minesweeper uses DM commands?

short snow
#

only input

gritty wind
#

Ideally we should move all that to the server

#

But for now I think none of those require you enter commands into DMs

short snow
#

uhh, that could be a bit spamming, and would loose the board, since even others use the channel

#

loose board meaning go up in message history

gritty wind
#

Battleship and minesweeper are the only games affected by this?

#

We can have the bot delete the messages

#

And the sir-lancebot channel does not move as fast as bot-commands

short snow
#

uhh, just allow inputs in DMs, and not "invoking" the command

gritty wind
#

But input is also susceptible to breaking

#

And it's already difficult enough to investigate some bugs

#

If we can reduce the complexity, that would be awesome

short snow
#

hmmm, so we can do it like the sal command

#

true

#

sorry for breaking the discussion, but:
there are two annotations issues in the sir-lancebot dunno about bot.

We should change the annotation for bot from commands.Bot to bot.Bot to fix the http_session annotation errors

in a lot of places in the sir-lancebot code this happens:

def func() -> None:
  return await ctx.send()

but it should be

def func() -> None:
  await ctx.send()
  return
cold moon
#

Maybe we can make global DM disable, but decorator that bypass this.

gritty wind
#

That would be easy, but why?

cold moon
#

Like minesweeper should stay in DMs

gritty wind
#

That would be unrelated to this

#

The change to make commands invokable only from the server won't affect message handlers getting messages in DMs

#

So there is no need for an override

cold moon
#

I don't understand now. Do you want disable commands in DMs?

short snow
#

this like i said in my comment on the github

gritty wind
#

Yes, that's what I want

#

Invoke commands only from the server

short snow
#

you can get messages from DMs, but not start a command or "invoke" it in the DMs

gritty wind
#

Which is what we do with @stable mountain

cold moon
#

But .ms reveal|flag commands is meant to be executed in DMs

gritty wind
#

Which is the difficult part in this

#

I want it moved to the server

#

But the concern is that it would flood the chat

#

So I'm thinking we delete the message after the action is done

short snow
#

it would also go up in the message history

#

the board

gritty wind
#

The sir-lancebot channel does not scroll that fast

short snow
#

it could, you never know

short snow
#

@gritty wind Done! Also why did the lint and status embed run twice?

gritty wind
#

Hmm Iโ€™ll check it out in a bit

patent pivot
#

huh

#

would that be me

#

no

gritty wind
#

Nah

#

Itโ€™s two runs

gritty wind
#

I don't know

#

I think it's just github fucking up

#

the merge went fine

short snow
thorny obsidian
#

!source

stable mountainBOT
dry folio
#

i see a bunch of files with weird names lol

thorny obsidian
#

so all of your bot code in the repo is in the bot folder you see. The way we use our bot is with extensions and cogs, so for most things you go to the exts folder

dry folio
#

yeah i see a folder named "moderation"!

thorny obsidian
#

utils is for useful functions used in multiple parts of the code, resources is for things like json files and the like. rules is to help with some filtering things.

#

Moderation is typically our moderation system. For things like invites and the like, we put that under filters

dry folio
thorny obsidian
#

filters is for things our bot will check for and usually just straight up remove

green oriole
#

or notify the mods

dry folio
thorny obsidian
#

mhm, we have filters for tokens, webhooks, spam (which uses our rules which is the other folder I mentioned earlier), and then just other filtering. So you can see that we filter for invites, blacklisted domains, too much zalgo, etc

green oriole
#

I have probably made the last modification of this file, but not everything is written by me ๐Ÿ˜„

dry folio
#

im looking into it right now. tysm @thorny obsidian!

thorny obsidian
#

no problem~ if you anymore questions feel free to ask here

green oriole
#

If you are curious about how a specific command is implemented @dry folio, you can use the !source command like this

#

!source rule

stable mountainBOT
#
Command: site rules

Provides a link to all rules or, if specified, displays specific rule(s).

Source Code
dry folio
#

!source pypi

stable mountainBOT
#
Command: pypi

Provide information about a specific package from PyPI.

Source Code
dry folio
#

im still trying to understand the anti-spam function lol, this is my first time seeing real good code made by other devs and it's rly cool

short snow
#

is there a way to put emojis, and webhooks into the server templates?

green oriole
#

There is not afaik

short snow
#

adding them seems a tedious task

green oriole
#

I know, I know..

#

It should be more streamlined soon-ish

short snow
#

Cool, maybe we can have a different solution for time being make a config file containing emoji name and its raw github link and adding it through code

#

similary for webhooks

gritty wind
#

Webhooks should come included

#

at least mine did

#

emoji is only one that's mandatory

#

I don't think it warrants much effort while we wait on smart config

short snow
eternal owl
#

do we have a fixed style on how imports should be?
example:
from discord.ext import commands => commands.command, commands.Cog

or
from discord.ext.commands import stuff

cold moon
#

Depends how many things you have to import

eternal owl
cold moon
#

py-gen have so high activity that nobody see this actually.

eternal owl
#

wut is py-gen

cold moon
clever wraith
#

i like the idea of appending a fact to the file though

eternal owl
#

gotcha ๐Ÿ‘

clever wraith
#

how do I append a line to the file again?

eternal owl
#

you can open the text file in append mod

#

mode*

#

with open("...", "a") as f:

clever wraith
#

riiight

vale ibex
#

Would it be worth using aiofiles here, if we're doing file io in a command

cold moon
#

@eternal owl @clever wraith This is not possible anymore, because file persisting was removed with migration to Kubernetes.

green oriole
#

we have redis though!

cold moon
#

Yes, but using files isn't option anymore

patent pivot
#

we try avoid it for persistence

vale ibex
#

Is redis persistent?

patent pivot
#

just abouts

#

but would much rather use it as a cache

vale ibex
#

Yea, that's safer

green oriole
#

I mean, we do consider it as more or less persistent now

vale ibex
#

What do we use to persist otn?

green oriole
#

It is Lance anyway

patent pivot
green oriole
patent pivot
#

postgres

green oriole
#

meh, joe is faster

vale ibex
#

Ahh yea the Web is a thing

#

Having a discussion and manually updating is probably good enough for now

cold moon
#

This is so sad that we can't have DB in lancebot

patent pivot
#

I think not having a DB is a primary goal of the project

#

lancebot is our project to inspire open source contribution

#

I think that having a simple setup process with no other moving components is the goal

#

and that's why we make redis optional and stuff

green oriole
#

Honestly, will we ever loose the redis cache

patent pivot
#

ยฏ_(ใƒ„)_/ยฏ

green oriole
#

At worse we have the backup

patent pivot
#

yeah

cold moon
#

But you can't have tables in Redis

patent pivot
#

sure

#

but that's just a limitation we deal with

#

because that's a better downside than having contributors having to set up a whole database or docker

cold moon
#

If we could get Redis hash tables then this would partially give something like table

green oriole
patent pivot
#

seasonalbot being KV at core is very simple for new contributors

#

and async-rediscache makes it super easy to add pseudo-persistence

green oriole
#

Don't we already have hash maps with async-rediscache?

cold moon
#

But each namespace is hash table

patent pivot
#

internally yeah async-rediscache uses hashsets

#

yeah

short snow
#

can i have the trash can emote?

patent pivot
short snow
#

Ty

#

Failmail and defcon ones too please

patent pivot
#

heading off now but if you need any others just drop me a DM

brazen charm
#

Can just replace them with ordinary emojis if it's for your test server, not like they come up much

short snow
#

Currently i do that, but sometimes it is needed for the look, how does it look? And maybe u need that emoji while writing some code, so i just thought of adding them all

#

No need of adding style.icons right?

#

And to use eval we would need to host it right?

#

And how do we see if a issue is approved to work on or not in bot

brazen charm
#

Yes, you need to host snekbox to use the public eval. I believe it is included in the bot's compose

patent pivot
#

Which issue are you interested in?

short snow
brazen charm
#

Issues that don't have the planned tag should be ready afaik, but it'll always be clear after you ask to be assigned

short snow
#

Alright

brazen charm
#

BOT_API_KEY is what the bot uses to authenticate with the site's api

short snow
#

And how do we get that?

brazen charm
#

The development key is the badbot one

fallen patrol
#

Or you gotta host the site as well.

brazen charm
#

You host everything yourself

fallen patrol
#

Ah okay

short snow
#

which voice gate channel?

#

#voice-verification?

short snow
#

I did docker-compose up -d but the bot isn't online

#

all the images are build

#

Logs have no errrors

#

lemme see if the site is up

#

site is up

#

hmm, everything except the bot is up

#

the token is correct

#

what else can be the problem? lemon_thinking

obsidian patio
#

Try starting the bot container now that everything else is up, if it's not already running. I personally have an issue where bot starts before site is running, so bot can't quite start

short snow
obsidian patio
#

I've done it using the ui

short snow
#

ubuntu has no docker ui ๐Ÿ˜ฆ

obsidian patio
#

Hmm, I don't know how it'd be done with the CL. Just try to run the container if it's not already running, assuming that the other containers are running already

short snow
#

alright

#

on docker-compose up --no-deps bot

obsidian patio
#

Not sure what's happening

#

Hopefully someone else knows

brazen charm
#

I believe you'll need to change the hosts in your config

#

"redis.default.svc.cluster.local" into "redis" etc.

short snow
#

done done odne ๐ŸŽ‰

#

ty

short snow
#

here this works and sends a webhook

#

butt

#

here it doesn;t

#

same id being used

#

am just messing around to check whether the setup is correct

#

--

and i get this:

According to the API, your request is malformed.
after every !clean

short snow
short snow
#

the onl problem, i found with !ping command

#

running the bot like this: docker-compose up -d bot

gritty wind
#

Yeah thereโ€™s an issue to fix ping on local deploys

#

Itโ€™s very broken

sullen phoenix
#

yeah, the ping command wonโ€™t work locally

short snow
#

whats the issue, i can try to fix it

gritty wind
#

It isn't approved

#

The fix is ready

#

but

#

I actually don't remember why it isn't approved

#

bot#1407

dusky shoreBOT
gritty wind
#

Or maybe not? Akarys quietly removed the planning tag

patent pivot
trim cradle
#

@gritty wind I did this in my current deployment but it's not working again ๐Ÿคท๐Ÿปโ€โ™‚๏ธ

gritty wind
#

o no

trim cradle
#

did something change about the website?

gritty wind
#

what's the error

#

shouldn't have

short snow
#

even the site api would change to api.web:8000 if that's what u mean

trim cradle
short snow
#

@eternal owl Done ๐ŸŽ‰ , mentioned the required changes in improve wikipedia pr

gritty wind
#

I c

#

try docker-compose up -d web

#

then docker-compose up -d in a few seconds

#

also what's in your redis setings

short snow
#

trying to set up bot?

trim cradle
gritty wind
#

well it shouldn't matter then

#

should just be the other thing

trim cradle
#

@gritty wind I don't understand why it be like it is

#

namely why I need the -d

gritty wind
#

The d is just so it doesn't lock you in the console

#

You can omit it if you want

#

more importantly you need to start the site before the bot

#

Because @patent pivot didn't add readiness checks >.>

short snow
#

this is what i did:

docker-compose up -d # Will get the site, redis and eval running
docker-compose up -d bot # Will re run the bot, since bot starts before site is running, so bot can't quite start in the first command

And

I believe you'll need to change the hosts in your config
"redis.default.svc.cluster.local" into "redis" etc.

gritty wind
#

He's already using fake redis, so that won't affect it

#

it's just the startup readiness here

short snow
#

ah ok

patent pivot
short snow
#

hmm, i tried it once again but the bot doesn't come online

#
  1. run docker-compose up -d and docker-compose up --no-deps bot --> Cannot connect to api.web:8000
#
  1. run docker-compose up -d and docker-compose up -d bot -->
bot_redis_1 is up-to-date
bot_postgres_1 is up-to-date
bot_snekbox_1 is up-to-date
bot_web_1 is up-to-date
Starting bot_bot_1 ... done
``` But doesn't come online
#

hmm, seems like i need to do this:

#
- docker-compose up -d bot
- docker-compose up --no-deps bot
#

and i don't get a startup message in #dev-log

#

(my dev log)

gritty wind
short snow
#

alright

#

without any commands before that?

#
jason@devlab:~/PycharmProjects/bot$ docker-compose up -d web
bot_postgres_1 is up-to-date
bot_web_1 is up-to-date
#

lemme stop them and do it again

#

Ok, nothing seems to work now, even the earlier thing

#
aiohttp.client_exceptions.ClientConnectorError: Cannot connect to host api.web:8000 ssl:default [None]
``` on doing `docker-compose up --no-deps bot`
hardy gorge
#

what's the schema set to?

short snow
# hardy gorge what's the schema set to?
    # PyDis site vars
    site:        &DOMAIN       "web:8000"
    site_api:    &API          "api.web:8000"
    site_api_schema:           "http://"
    site_paste:  &PASTE  !JOIN ["paste.", *DOMAIN]
    site_schema: &SCHEMA       "https://"
    site_staff:  &STAFF  !JOIN ["staff.", *DOMAIN]
#

should i shift it to http

#

for site_schema

hardy gorge
#

yes

#

That's causing the SSL errors

#

There's no certificate or TLS route exposed locally

#

although

#

I wonder why it's using site_schema at all

#

However, it does mention SSL (the error)

#

So it's worth a shot

short snow
#
aiohttp.client_exceptions.ClientConnectorError: Cannot connect to host api.web:8000 ssl:default [Connect call failed ('172.22.0.5', 8000)]
#

same

vocal wolf
hardy gorge
#

@short snow Alright, change the site_schema back in that case

#

It supposed to be for the outside world website, I think

short snow
#

i changed it back to https

#

and ran docker-compose up --no-deps bot

#

and tada

hardy gorge
#

Alright, that's a bit odd.

short snow
#

yeah, i don't understand whats going on

#

i changed nothing else

hardy gorge
#

The local schema for the API you're connecting to internally should be http, since there's no TLS/SSL locally

short snow
#

should i show the web part of my config, rn? the one which is working rn?

#

fails on eval

hardy gorge
#

that's a weird configuration

#

It looks like it's looking for a kubernetes cluster address

#

Are you running snekbox locally?

obsidian patio
#

I believe mine did that as well, before I changed something in the config file

hardy gorge
#

I don't think you get snekbox by default with our docker-compose, but I haven't actually checked it in a while

#

Which just means the eval command doesn't work, as you can't use the remote one

timid sentinel
#

You need to change the snekbox API URL in the config. I think http://snekbox:8060 works if you're using docker

green oriole
#

It is http://snekbox:8060/eval

timid sentinel
#

Ah yes

green oriole
#

You do get it by default in the compose setup

short snow
short snow
#

ty everything works now

#

i will go through the code and then start contributing to bot too

vocal wolf
subtle kraken
#

Hi am reviewing your PR (bot#1392)
how are we skipping fuzzysearch with changing it to True?
At best we skip command suggestion which uses difflib and not fuzzy
Can you explain it to me?

short snow
#

i can take over the left behind prs if u want to

#

on sir lance and bot.

#

you ppl seem to be on ๐Ÿ”ฅ

green oriole
#

@vocal wolf ^

short snow
#

ak, xith and senjan

vocal wolf
#

lol

#

thanks

short snow
#

u missed part 1 of the ping

subtle kraken
#

yeah am reviewing stuff because more than 20prs and it gets terrifying

#

am trying to close as many new PRs as possible so we can focus on old ones, which am also looking into reviewing

short snow
vocal wolf
short snow
#

(sir-lance)

vocal wolf
#

I'll go over all the PRs in sir-lance and label them accordingly

#

you can start on those

short snow
vocal wolf
#

in fact, let me take an even closer look

short snow
#

alright let me know which can be taken

#

and sir-lancebot#600 needs another approve, iceman gave first one

dusky shoreBOT
green oriole
#

@subtle kraken I heard you want to increase your streak pithink

subtle kraken
#

who told you that

#

and what do you want

green oriole
subtle kraken
#

Do I look like I review sir-lancebot smh

subtle kraken
green oriole
#

haha

vale ibex
#

This invoke see's if the given command is a tag by trying to invoke it

#

Currently if the tag is on cooldown, that function returns False, which makes this check think it doesn't exist

#

There were two options that I saw implement a 3 state system of exists, exists but on cd and not exists. or return true even if its on cd

#

since the return of that specific function I changed isn't used anywhere else, changing it to True there means anything that calls invoke gets told it exists, but the tag still doesn't run as its on cd

subtle kraken
#

@vale ibex yeah but I don't see that point to fuzzy search at any point in either case of return

#

so its just more of a misnaming of PR?

#

it looks good otherwise

vale ibex
#

So if the invoke returns false, the error handler thinks it isn't a tag, so carries on and tries to fuzzy search

#

But since the invoke returns true, the error handler sees that its a tag and doesn't do anything

#

but within the invoke it still doesn't run the tag, since its on cd

#

Currently if a tag is on cd, and a user tries to run the tag as a command, this error handler will be hit, try to invoke the tag, the invoke will return False (since its on cd) so the error handler will think its not a tag and try to fuzzy search

#

By making the invoke return True even if its on cd, this error handler sees that its a tag so doesn't do the fuzzy search

#

or am I missing the point of your question? ๐Ÿ˜›

subtle kraken
#

am not quite seeing that being False go into any sort of fuzzy search

#

if it's False it will just go and invoke send_command_suggestion

vale ibex
#

yea, which is the fuzzy search for a command

#

or at least that's what I've heard it be called

subtle kraken
#

difflib uses fuzzy search?

#

but yeah okay

#

sounds good either way

vale ibex
#

Alright, might be my misunderstanding of it then, I've just heard it be called fuzzy search ๐Ÿ˜›

subtle kraken
#

maybe it was fuzzy search before

#

if similar_command_data := difflib.get_close_matches(command_name, raw_commands, 1): is what searches for commands at the moment

#

well either way I can approve it, looks good

vale ibex
#

๐Ÿ‘

balmy sparrow
#

sorry to butt in, is this somehow related to bot#1400 ?

dusky shoreBOT
balmy sparrow
#

No wait

#

I meant 1432, it's an issue with the "did you mean..." Embed catching any extra words

subtle kraken
#

not quite

balmy sparrow
#

I saw some cases where it could lead to quite large embeds

subtle kraken
#

that PR I talk of simply means suggestion won't be sent on cooldown

balmy sparrow
#

Ah right NVM then, thought the fuzzy matching would be related

#

how are tags to issues assigned?

#

Am I supposed to set them as I make an issue, or will some staff member do it?

gritty wind
#

Submit a proposal on the tag discussions, get it approved, then you'll be assigned to an issue

balmy sparrow
#

I think I'm not using the right lingo here

#

I'm talking of those little color bubbles with stuff like "status: planning"

subtle kraken
#

core devs assign those

#

those are called labels

balmy sparrow
#

Ah right ๐Ÿ‘

wind socket
#

might want to look into this

#

only saw this behaviour in #discord-bots , remember seeing the old embed in help channels

green oriole
#

There is a fix incoming for that :)

cosmic moat
subtle kraken
mossy wolf
#

@vocal wolf on my PR for the empty-json tag. Sorry I was under the impression I already merged the requested changes from the review. I guess I forgot those. They are merged now. Will wait for a review
bot#1393

clever wraith
stable mountainBOT
#

@vocal wolf @thorny obsidian

It has arrived!

Here's your reminder: Meet for thing.
[Jump back to when you created the reminder](#dev-contrib message)

vocal wolf
#

mmmmmmmmmm

thorny obsidian
#

postpone?

vocal wolf
#

ye

#

I'm busy being sad lol

thorny obsidian
#

no problem~ ping me when you are less sad, also do something else to distract yourself!!!

green oriole
#

like sleeping

fallen patrol
vocal wolf
#

@thorny obsidian I have recovered. Shall we meet sometime today?

thorny obsidian
#

yeah! I have a meeting in 90 minutes, but can chat anytime before then

vocal wolf
#

Noice

#

Lol it's hard to think on 3 hours of sleep

#

Unnecessary sadness

thorny obsidian
#

You feeling any better?

vocal wolf
#

Oh yeah

#

I just slept for like 6 hours, that's some good shit right there

thorny obsidian
#

whoo! Don't make me bully you into letting me mail you cookies hyperlemon

vocal wolf
#

Lol

#

Am on phone, will move to desktop.

thorny obsidian
#

@patent pivot do you wanna chat about the .topic command?

patent pivot
#

๐Ÿ’ค

vocal wolf
#

@patent pivot

#

Have a good sleep

patent pivot
vocal wolf
#

my internet isn't being healthy

thorny obsidian
#

.topic

dusky shoreBOT
#
**What is the title of the last book you read?**

Suggest more topics here!

eternal owl
#

What are you guys talking about

vocal wolf
eternal owl
#

Ohk

vocal wolf
#

@thorny obsidian topics have been pushed.

fallen patrol
vocal wolf
#

PR created, needs review.

vocal wolf
thorny obsidian
#

@vocal wolf Thanks for doing all the work and just letting me chat about random things~~

vocal wolf
#

lol np

#

was fun

clever wraith
#

ok

mossy wolf
vocal wolf
#

It really depends

#

Some PRs are absolutely massive and take months to get merged

#

others are small and can take as little as 5 minutes

#

So given the size of the tag in this case, I'd say usually a day or two, maybe up to 5 days?

#

Not too sure though

mossy wolf
#

Fair enough. Iโ€™ll wait and see when we get the #changelog message

vocal wolf
#

oh yeah I can post that

brazen charm
#

The bot redeploys almost immediately after a pr is merged if everything went correctly if you were asking about that

vocal wolf
#

!empty-json

stable mountainBOT
#

When using JSON, you might run into the following error:

JSONDecodeError: Expecting value: line 1 column 1 (char 0)

This error could have appeared because you just created the JSON file and there is nothing in it at the moment.

Whilst having empty data is no problem, the file itself may never be completely empty.

You most likely wanted to structure your JSON as a dictionary. To do this, edit your empty JSON file so that it instead contains {}.

Different data types are also supported. If you wish to read more on these, please refer to this article.

mossy wolf
short snow
#

we need one for connect 4 too ig

short snow
gritty wind
#

hello

#

sure, I don't see why not

short snow
#

alright, so if the message it long, i will just paginate it, cool thanks for the quick response

gritty wind
#

just paginate everything

#

if it fits in one page, the paginator should already handle that

short snow
#

yeah, the paginator would manage that

short snow
#

so api is separate from site now?

gritty wind
#

that is under active development

cold island
#

@gritty wind does my answer in the PR make sense? not sure if that's what you meant

gritty wind
#

So what I'm thinking is

#

If it isn't an actual error

#

It shouldn't be printed and treated as such

#

It'll make it to sentry, and it will error out on local dev

#

Especially with fakeredis which does not maintain state across restarts

cold island
#

Keep in mind also that the try-except is suppressing any errors, so it's not gonna make it to sentry

gritty wind
#

I don't necessarily agree with that sentiment that errors in it should be relayed to sentry. Imo, exceptions should only be raised when you have an unpredictable, or uncatchable error.

short snow
#

which framework is being used for the api?

gritty wind
#

That info will be available once the repo is made public

gritty wind
#

In that case, I don't see what we're talking about

#

It's just the difference between a try-except and if-else

cold island
#

Well, it's an unpredictable behavior that we need to address at that moment

#

So it pings mods because they need to see if the settings should be changed, and devops so they know there's an issue

gritty wind
#

Yeah that's what I'm hoping it would do

#

I just don't see the value in a sentry error

#

But if that's not in the question

#

Then I'm good with it

cold island
#

There won't be a sentry error

#

It will just print out the traceback

gritty wind
#

Hmm that I'm unsure of

#

Primarily because it will be confusing on local development

#

And I don't see what a KeyError traceback will provide over a customized message

#

or no message at all, and a discord warn

cold island
#

by printing I mean to Discord

gritty wind
#

Ah lol

cold island
#

to the channel

gritty wind
#

In that case, don't mind me

short snow
#

Ahh, am not sure if stackoverflow thing is needed, since if a cheatsheet query is not available to them, the send back the result of a stackoverflow search

#

If there is no cheat sheet for a programming language query (and it is almost always the case), it is generated on the fly, based on available cheat sheets and answers on StackOverflow. Of course, there is no guarantee that the returned cheat sheet will be a 100% hit, but it is almost always exactly what you are looking for.

short snow
#

Bot errors out on

!e

from random import random
while True: print(chr(round(9585 + random())), end='')
#

in #bot-commands

gritty wind
#

I think it's currently having a bit of a problem with infinite loops

#

@patent pivot ^

patent pivot
#

yeah we're working on a fix internally

#

!e ```py
from random import random
while True: print(chr(round(9585 + random())), end='')

stable mountainBOT
#

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

ClientResponseError: 500, message='Internal Server Error', url=URL('http://snekbox.default.svc.cluster.local/eval')

patent pivot
#

yeah that's the one

#

will hopefully have something together by the end of the weekend, if not earlier

short snow
#

Hmm, I dunno but another bot with snekbox woks with this using lxc containers, it keeps it simple and doesn't coomplicate it our current implementation is. Run on a linux server

#

uses nodejs now, but can be done with python too

#

and using lxc containers, it implements half security for us

gritty wind
#

I don't think this will help in this case

#

But more details once we actually fully debug it and fix it

short snow
#

yeah, but it is about simplifying the current one, maybe if i get time, i can share a detailed implementation of it.

gritty wind
#

I guess if this is a general thing, you'd want to talk to @tawdry vapor about it too

short snow
#

(I am not sure about how it is implemented currently, just basic information ik, so I could be wrong)

fallen patrol
patent pivot
#

so

#

yeah

#

it runs out of memory

#

okay so

#

hm let me try describe how this all works

fallen patrol
#

but shouldn't there be a limit on the memory usable by the process?

patent pivot
#

no yeah that is the limit that is being hit

#

this isn't an escape that is causing us to run out of memory or anything

#

when you start an eval on snekbox, the server actually creates two cgroups (which are there to limit resource usage)

#

we create one, nsjail then creates one inside that

#

once we are done, we delete the one we created

#

the issue is you can only delete a cgroup if there is nothing inside it

#

when nsjail exits normally it cleans up the cgroup it created, it does not do that if it exited due to a memory error or other cgroup limit hit

#

so basically we are trying to delete a cgroup which is "busy" because it has a child cgroup that had a process that got killed

#

there is no security compromise, it's just that nsjail isn't clearing something up which we need it to clear up in order to run our clear up tasks

fallen patrol
#

ah

patent pivot
#

by the time the error above has hit the actual python execution has long finished and we are in the stages of cleaning up and sending the data back to @stable mountain

fallen patrol
#

ok

short snow
#

ah thanks, i Think using lxc would be much simpler than this, i will talk to Mark about this.

patent pivot
#

lxc will not work for us in terms of devops

#

we don't want to set up a whole new container runtime, it works well enough in docker with the security policies in place

short snow
#

hmmm, alright i will think about it, but still think if lxc is worth it, i will talk to mark about it

#

how do u ppl delete codejam teams?

#

and this should be caught, no two team names and one person should be in one team only

gritty wind
#

We don't really use this frequently enough for it to be a big deal

patent pivot
#

yeah

gritty wind
#

but open an issue for it

short snow
#

for both of them?

hardy gorge
#

I don't know if it's worth adding the functionality

#

I'm not quite sure what the exact setup will be for the next code jam

#

The current command has served us fine so far, but I'm not sure we'll be using it again in the future

hardy gorge
ember cloud
#

I don't know if this is the right channel to ask this but what would cause a Something went wrong. error when pasting in paste.pydis.com?

#

I keep getting that

hardy gorge
#

That's odd. I'm not getting anything like that. When do you see that error?

ember cloud
#

when I try to paste my code

#

it works when I write a small string like abcd

#

but not for my code

patent pivot
#

hmmmmmm

#

one sec

#

can you DM me your code

ember cloud
#

Yes

#

here's how my screen looks like

thorny obsidian
#

I'm not sure we'll be using the code jam set-up code exactly as it is currently. There are a lot of lessons learned for how we'll run it and there are definitely aspects we're going to change.

patent pivot
#

alright hastebin resolved, firewall got greedy

thorny obsidian
#

I haven't looked at the exact code and functionality yet, but plan to in April

short snow
#

how were teams removed till date?

patent pivot
#

internal eval

short snow
#

ah

late wolf
#

#bot-commands message
got a problem

gritty wind
#

Same issue as

gritty wind
patent pivot
#

I'll open a PR on snekbox when I get home

#

I wonder why this problem has only just manifested

#

Might be upstream

hardy gorge
#

When did you make the cgroups change?

#

Wasn't that yesterday or something when it got merged?

green oriole
#

Yesterday we merged a PR making a unique cgroup for each process, but it seems to break in prod

hardy gorge
#

That's what I meant, yeah

#

So, I don't think it's a problem that only just manifested because of upstream

#

But rather it manifested because we merged that PR

#

And it only does this in certain specific circumstances

patent pivot
#

Oh was that only yesterday

#

so

#

I wonder what the thing is

#

is it having large stdouts?

#

!e import time; ' ' * 100_000_000; time.sleep(0.1)

stable mountainBOT
#

@patent pivot :warning: Your eval job timed out or ran out of memory.

[No output]
patent pivot
#

riiiight

#

yeah that's probably something I didn't test, I tested memory & PID limits, forgot that huge stdout wreaks havoc at times as well

#

this is my patch that fixes it for stdout as well

green oriole
#

I wonder why it did work two days ago, but not now anymore

patent pivot
#

I don't think it did work two days ago

#

did we test huge stdout on the dynamic cgroups PR?

green oriole
#

Well, we did have some users running infinite loops, it never broke

#

I can see if I can reproduce locally

patent pivot
#

infinite loops or infinite loops with prints?

#

!e ```py
a = [1]
while True:
a.extend(a)

stable mountainBOT
#

@patent pivot :warning: Your eval job timed out or ran out of memory.

[No output]
patent pivot
#

!e ```py
a = [1]
while True:
a.extend(a)
print(a)

stable mountainBOT
#

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

ClientResponseError: 500, message='Internal Server Error', url=URL('http://snekbox.default.svc.cluster.local/eval')

patent pivot
#

that's where the error manifests

green oriole
#

Alright, let's see

#

I do get a 500 on your branch

#

OSError: [Errno 16] Device or resource busy: '/sys/fs/cgroup/memory/snekbox-dae49828-a99f-4696-926d-7a963487250d'

patent pivot
#

yeah

green oriole
#

Building the image takes a long time man

#

Okay, it did work before the merge @patent pivot

patent pivot
#

yeah

#

expected

gritty wind
#

@cold island can we suppress the ping in dev versions?

#

or rather, with fake_redis

green oriole
#

You can do that if debug is enabled, but I'm not sure if it is worth the trouble

cold island
green oriole
#

smh straight up ignoring my message

gritty wind
#

constants.fake redis

green oriole
#

Hello folks, it would be much appreciated if someone could review bot#1436

cold island
#

Yeah I can add that

dusky shoreBOT
short snow
cold island
green oriole
#

yep

#

I guess it works with the constant

patent pivot
#

do we use bulma calendar anywhere

short snow
#

Hmm, never seen anywhere

#

Ok now my deleted msgs are useful, why did ak merge pr with only one approval

patent pivot
#

which PR

#

1436?

green oriole
short snow
#

Ah ok. Thankyou lemon_hyperpleased

green oriole
#

thank you for your review, appreciate that!

patent pivot
clever wraith
#

how is my PR?

short snow
#

Not my idea, had being purposed by someone on gurkbot so thought it would be good here too, a way to get random challenges from codewars.

#

On sir lance

#

Their image

#

Ooh boy, i forgot the issue for pet bot, i will open it

gritty wind
#

Hey there

#

we don't allow recruitment on this server

karmic cave
#

Oh, apologies.

gritty wind
#

Please review rule 6

karmic cave
#

Okay.

fallen patrol
#

so.โ€ฆ

#

why the abstraction layer?

#

what advantage does it bring to have a layer between the database?

tawdry vapor
#

What are you asking about?

fallen patrol
#

The Python Discord API is an internal API that serves as an abstraction layer between our Discord bot and our PostgreSQL database.The API is not publicly accessible, but only reachable from within our Kubernetes-cluster.

tawdry vapor
#

I don't have the answer to that

#

I'm not involved in the project

gritty wind
#

Well, there are certain advantages to using an API over SQL statements in general

fallen patrol
#

as of now, I know the bot requires the site to act as a proxy to the database, so my question is more, what advantage does a proxy over a database do

#

ohhhhhhhh

#

thanks for the answer

#

it could be bundled with the bot, but that wouldn't be too great if you have a big-ass bot