#dev-contrib
1 messages Β· Page 166 of 1
I think I'll have time to review it tomorrow unless someone else gets before me - you only need one staff approval (since Wookie already approved)
I'd also like core dev approval (or disapproval) on sir-lancebot#989, sir-lancebot#1000, and sir-lancebot#1018 (sorry if I'm being annoying about it)
Cool, thanks!
@vale ibex hey the last 2 times that we ran out of dormant channels recently, did the bot create new dormant channels? then what gives us the ping in #helpers ?
is it bc we're already at max channel 42?
and if we had say 35 channels, it would create up to 7 more dormant channels before a helper ping
yeah
Or well
no
It would still ping I think
But it would create a new channel
hmmm I might be lying
It might create the new channels immediately on startup
i'm testing right now
it seems to just create dormant channels and isn't pinging helpers
immediately, or only when you run out?
that happened after i claimed a bunch until i had 0 dormant
the check is when the cog tries to pull a channel to available
if there isn't one in dormant, it will make a new one and put it in help available
right and pydis already has a total of 42 channels in rotation?
if it couldn't make a new one, due to being at the max, it pings
yea
.love 528937022996611082
Chrisjl#2655 β€ Sir Lancebot#9543 scored 44%!
β
The chance of this relationship working is not very high, but its not that low either. If you both want this relationship to work, and put time and effort into it, meaning spending time together, talking to each other etc., than nothing shall stand in your way.
This embed still recommends you sub/unsub with the deprecated way
someone feel free to PR an update to the embed footer here, to tell people to use the !subscribe command instead
On it, seems quick and easy π
sir-lancebot#1020
Hm so quick question, I'm using LinePaginator.paginate and it sends the embed but it doesn't seem to paginate it
with the reactions and what not
code is
list_embed = Embed(title="All Trivia Night Questions")
if len(question_list) <= 5:
list_embed.description = "\n".join(question_list)
await ctx.send(embed=list_embed)
else:
list_iter = iter(question_list)
await LinePaginator.paginate(
("\n".join(grouping) for grouping in zip(list_iter, list_iter, list_iter, list_iter, list_iter)),
ctx,
list_embed
)
(apologies for the indentation)
found out the issue!
discord: use http interaction bots, you can host them on cf workers
also discord:
what repo
doesn't work like this
http interactions are called by discord, not the other way
there are some 429 errors from earlier but nothing huge, last successful hit of the worker was at 19:56, not sure what repo you are on about
smh you don't think that http interaction bots use the REST api?
bot
right yea cloudflare have banned cloudflare workers again
not much we can do
i'll speak to someone if i get time
most interaction bots will continue to work but if they want to use the endpoints for anything they can't
i know how they work
what time did they block access last time
i don't remember
similar time by the looks of it
!snf 933888214266150912
You are not allowed to use that command here. Please use the #bot-commands channel instead.
geo balancing?
americas are more online in this time window
that means more requests through cloudflare
which means higher chance of anti-spam trips
ah lmao
hookshot?
oh
uh
internal naming
hookshot is the github microservice they use to send webhooks
if you look at the user agent of any gihtub webhook request you'll see User-Agent: GitHub-Hookshot/6aef237
or something similar - based on the currently active revision
i'll go open a ticket to fix this
okay i've passed a message on to discord
will update here if someone replies
where? internal channels?
by private channel its the lib dev channel right?
one of them yea
...UPDATE: he did not have enough time "tomorrow" π
answer: discord can't do much, unblocking workers would just open a door, has been asked before
might open an issue one day
is it already known that the bot errors when you try to get the source of a tag?
!src resources
Sorry, an unexpected error occurred. Please let us know!
AttributeError: 'TagIdentifier' object has no attribute 'qualified_name'
Yeah bot#2022 (hey, that matches this year)
awesome, assumed it was already spotted at some point
Haha but the issue was opened in 2021 so not really. If it was opened in 2022 that's a whole other story π π
How did pydis bot get coverage badge?
Our lint & test workflow produces a coverage report https://github.com/python-discord/bot/blob/main/.github/workflows/lint-test.yml
But I don't see how that produces coverage 
.github/workflows/lint-test.yml line 128
run: pytest -n auto --cov --disable-warnings -q```
we use a package called pytest-cov. So the --cov flag generates a coverage report
I see but how does that get send to coveralls.io?
Does py cov handles it (^) too ?
I am not exactly sure on that one
I think coveralls may be pulling that data for us on action
with coveralls cloud
I know on the site we have specific actions for it, since was want to to be a status check in PRs
@trim cradle not sure if you noticed or not, but the linting failed on your PR due to trailing spaces.
I've approved the changes already, since they look good. But the PR will be blocked until that's fixed
site#653
Oh okay. I made the edits on GitHub, not locally
Yea, github tends to add whitespace on ends of lines π¦
I have been searching for how the heck we get coverage but it seems that coverage isn't getting used at all π©
https://github.com/python-discord/bot/search?q=coveralls&type= from thes
The badge is outdated, we haven't actually been keeping track of coverage since september. We've been moving away from requiring tests for a while anyway, but we removed coverage upload when coveralls had a multi day outage
Here's the commit that removed it, you can see we were using coveralls to ship it before.
cc @vale ibex
!pypi coveralls
Show coverage stats online via coveralls.io
if you're wondering how the dates line up
I had also meant to reply to this message, see above
@vale ibex I fixed the trailing spaces, but I hadn't noticed your comment about apt-get.
the PR is ruined now.
looks like they're all down
!help
ok we've alerted devops ty
Oh wow all the bots are down....is this the first time that's happened that they all go down at once? ....how odd
not really
if host goes out all bots are goint to go down lol
Welcome to Linode's home for real-time and historical data on system performance.
yea nasty networking problem it looks like
Netcup switch when??
lol it's a very gradual migration, we'll be on linode for a while
this is just an unfortunate networking thing
Can I ask what the pydis forms project is? Sounds pretty interesting to me and I would like to contribute, but not sure exactly what it is as of now haha
Ohh
we have 2 repos related to forms afaik, one is front end and one is back end
Rather than the third party form providers? Interesting
it's one of our more newer projects
Yep, was looking at the repos and yeah there's 2, I think I would probably do front end because I do that better than backend haha
and will be ready for contribution very soon (cc @gritty wind @thorny obsidian)
Forms also powers this for example: #staff-announcements message (staff link)
Fancy! I'll go take a look at the code and see if I might be able to do anything :p
Ah sort of like an API
To glue the front-end and back-end I guess you could say
And the front end is all a single page application iirc
π€ Interesting, assume that's the backend repo
I think itβs https://git.pydis.com/forms-frontend and https://git.pydis.com/forms-backend (on mobile so hope I got those right)
Haven't done single page apps before but mainly because Next.js (react framework) makes it super easy to do routing, should be interesting though
The backend is a FastAPI project and the frontend is a TS/React app.
Awesome! Love TypeScript personally
linode coming back
Looks like I can make a PR, I think maybe because I have write access? Anyway not really planning on making a contribution right this instance
Well it's the only one I have so most likely
You can always bother someone in #dev-forms if you have any questions
Hehe, I'll get acquainted with the code since I haven't worked with React in a bit, I mostly do Next but Next is pretty similar to React so shouldn't be an issue
Yep
Hello! Please visit us in #dev-forms and I can get you familiar with it as soon as you would like! :D
You may be my new favorite person
who was your old favourite person 
π
Probably scofflaw for taking over the survey for me =P
Ah gotcha
all services back
Bot is up but help channels aren't moving out of available
ex #help-ramen
:ok_hand: Extension successfully reloaded: bot.exts.help_channels.
odd
fix it ansible man π
yea, i'm trying
user_id none is not a snowflake
huh
think i need to reset the redis cache
restarting bot
jeopardy theme song plays in the background
also doesn't work on close right now, probably an error, not sure if that info helps
aware of what's going on
error with claimants
won't be immediate, but have a fix in mind
π
fixed
amazing ty
the fact that https://github.com/python-discord/sir-lancebot/blob/main/bot/constants.py#L109-L125 is *almost* in alphabetical order broke me inside a bit
Is there any real benefit to doing that?
I don't see the harm in having them together
There's not much point taking the time to change it if there's no real benefit
Ah so it was just a wim aight
That's already a thing as part of lint-test, so I don't really understand that
We already do this, both the test and lint needs to pass for a pr to be merged
lol yea what tizzy said
Lint errors flashback intensifies
@vale ibex thx bb
π
what other things can I reword. will it ever stop?
everything, no
fuck

why does it work for you
homophobia?
wow
looks like it uses https://i.imgur.com/kJgWZIu.png for the source
does that load for you?
hm we're using imgur to host these images?
That's not a rule no
I'd prefer we didn't tbh
not sure why this one in particular does
What does this mean?
Do I need to upgrade my Python version? Right now I have 3.9.6 so probably not
I'm lost as to why I'm getting this message. This is in Github Desktop btw when I try to commit to a branch on my fork
It looks like python doesn't even exist on my machine according to this but I highly doubt that because py --version in Command Prompt gives me 3.9.6 so I have no clue whatsoever what's going on
Yeah it's definitely not a problem with Python being non existent on my machine as you can see here
Would appreciate some help with this. Thanks!
notice the differences
you use py to run it but the error is python
additionally you're on windows and its trying to use a non-windows python interpeter
idk why atm tho
Oh, so they're 2 different things? I'm still a bit confused
essentially windows is wonky
and git on windows is even more convoluted
i believe it packages its own version of python with itself on windows
Hmm, ok, so how do I add the "real version" of Python back to Windows? Do I need to uninstall Python and reinstall it again?
i don't know, i don't use the products in this environment that you're having issues with
you don't need to uninstall, no
If I understand it correctly, py is basically a separate "launcher" program that acts as a runner/launcher for actual Python installations, it comes with Python installations
to anyone who helps, the error is focused on /usr/bin/env which doesn't exist on windows
Now that part, that's weird, and GH Desktop settings are pretty simple iirc so I doubt there's something there to fix it
So....if it's not fixable, what would I need to do? I'm still very confused and have no idea why this is happening
The thing is, I've never gotten this error before, this is the first time, so if that dir didn't exist then I would have been getting this error since I first downloaded GH Desktop, that's my guess.
I really wish I knew, maybe reinstalling GH Desktop?
Me too haha, I could try that tomorrow, heading to bed now. If anyone else has any other ideas about this feel free to ping me. Good night!
Sounds good, and if that doesn't work it might be worth asking in other communities if you don't end up finding help here. Seems to be more a Git/GH issue than Python.
Maybe there's a good Stack site hidden in this list somewhere π€·ββοΈ https://stackexchange.com/sites
We make Stack Overflow and 170+ other community-powered Q&A sites.
Alright, I'll take a look tomorrow, thanks!
.bm
Could be due to git bash using unix like folder structures?
Hmm. I really don't think so but do you have any ideas as to what I could do to not have that be a thing, if that is indeed the case?
I think the git bash / drive is actually C:\Program Files\Git. But since the issue seems to be with the desktop app I'll be a bit useless as I tend to avoid using it
Alright, thanks!
So that didn't really work, still getting an error however it's a bit different than the last one. The last one said "No such file or directory" but after reinstalling GH Desktop I now get an error that says "Permission denied", see the screenshot below.
Not sure why I would not have permissions since my user account on my machine is an administrator, if you know what I'm talking about
I kinda worked around this for now cuz I'm completely lost at this point. I just edited the file on the Github website instead of in my editor.
sir-lancebot#1022 is ready for review!
Yeah now I'm even more confused and have less of a guess as to how to fix it π sorry, wish I could help more
No worries, but at least I found a workaround for now
@hoary haven Just wanted to check with you before I commit my changes to the #pedagogy PR. What do you think about these?
- What is the best way to teach/learn OOP?
- What are some reasons we might want to teach programming?
- How important is it for a programmer to learn some amount of assembly?
- What are some basic concepts that we need to know before teaching programming to others?
- What are the most common difficulties/misconceptions students encounter while learning to program?
- What are 5 pedagogical approaches that can be used to maximize learning?
- How do you teach programming effectively?
i'll defer to @trim cradle on these, i think he'd have better judgement on what topics would work better in this channel
Hello, I am Stelercus.
@tawdry vapor i pushed that last re-wording in site#624 btw. i was gonna wait til someone else reviewed it since it was such a small update but i guess it's fine. what is the protocol/procedure for resolving review threads? do i comment with a link to the commit? do i hit the resolve button or wait for the reviewer to do so?
- What is the best way to teach/learn OOP? β
- What are some reasons we might want to teach programming? βοΈ I would restate as "What benefits are there to teaching programming to students who aren't training to become developers?"
- How important is it for a programmer to learn some amount of assembly?
redundant - What are some basic concepts that we need to know before teaching programming to others? β
- What are the most common difficulties/misconceptions students encounter while learning to program? β
- What are 5 pedagogical approaches that can be used to maximize learning?
too general - How do you teach programming effectively?
that is the whole topic of the channel
Got it, thanks! EDIT: Committed and would appreciate a review.
"How do you make learning programming fun for your pupils?" maybe? or something on those lines
what makes a good beginner project?
I'd say "How do you make learning/teaching programming easier and more fun?" Sounds a bit better.
That sounds like more of a #python-discussion question
@trim cradle What do you think of this question?
I think it's a great topic for #pedagogy, actually. The question isn't "what are some beginner projects?", it's "what makes a project a good learning experience for beginners?" Thanks, @wild prism!
I would probably make it "What can make difficult concepts more fun for students to learn?"
Ah gotcha, will add that too then
Ok, that sounds like a good question, will add it
Done
I don't think there is an established way of doing it. I prefer that authors comment with the commit hash in which the issue was resolved. That way I can easily verify that it is indeed solved and then close the comment myself. If the author resolves it, then I cannot always remember which comments I still have to review and which I reviewed already.
have you seen the way gitlab does it? review thread automatically shows new diff in the thread once changes are pushed
No, I haven't seen that. I haven't really used GitLab since 2018.
That can work sometimes. Other times, there may be necessary changes to parts of the code that are far away from where the comment was left, or even in a different file. So I'm not sure how it'd handle that.
mm
@stable mountain uses Prometheus for logging yeah?
I have a faint memory of someone saying that. Looks to be that something called stasd is used?
Yea we use statsd
we use prom for monitoring, and graphite for looking/keeping the statsd stats
Ah, Prometheus looks at uptime
Yea, we've got a bunch of stuff in prom, mostly devops monitors
like cputhottling, highcpu, nginx4XX reqs etc
How does statsd work if it isn't "officially supported"? https://grafana.com/docs/grafana/latest/datasources/
Ah, okay makes more sense
joe wrote a pretty nice async transport layer for statsd too
pretty simple too, which is great
Yeah I saw that!
thank you chris thank you
Would appreciate a review or 2 on sir-lancebot#1022, thanks so much!
any takers for bot#2073 for a very smol PR? it would help our moderation team
It looks fine, maybe just a bit misleading with showing the author's name in the embed twice?
Maybe it's just me.
I believe that was on purpose, because it is a pain to deal with unresolved IDs on mobile.
yeah, and side benefit is that we'll see both the username#discrim and nickname now
other options were
- a large thumbnail on the right hand side, but in the event that someone had a very inappropriate pfp we didn't want to highlight it so much
- a footer pfp icon
btw, I think this would also require changes to bot#2021 too
Cool.
Although, one tiny thing.
If I'm correct, avatar.url can be None
Better to just avoid that and use display_avatar?
just curious, when are avatar.url None?
uh let me look up the docs
ah ok, thanks π
No worries π
I'm not too familiar with dpy docs and can't find this, could you pls link me?
or is this smth in our code
ok let me explore this, i'll make an account w/ no pfp
yuuup
hm for such a small PR it probably doesn't matter much, but when the PR author resets and force pushes to maintain a cleaner commit history, github doesn't really indicate that previous approvals should be re-evaluated
so how does that work in bigger PRs?
I mean, this is more of a general weakness of our security rather than a problem with force-pushes. You don't get asked to reevaluate if someone pushes a 100 commits either, we don't enable that option
or once it's in a PR it shouldn't be done like this?
There is an option to dismiss reviews on changes though
this?
so for us we just have to trust & communicate i guess? and know when to request re-reviews?
Yes, but there's an option to have it enabled automatically on pushes
Yes, people here have been against the automatic approach in the past
To argue the counter, automatic dismissals will dismiss regardless of the content of the change. Changed punctuation in a docstring? Dismissal. Rewrote the entire PR? Dismissal
mm
We don't have a nice middleground here. We could technically write our own solution to do something like dismiss on the size of diff or whatever, but even that is a bad metric
this is a fascinating topic lol
@hoary haven If you don't hate me enough, it should be message.author.display_avatar.url π
uhh why did it work without the .url
Not sure, it's used with url everywhere π
no problem, please nitpick on everything lol. i'm gonna be a pro at this resetting thing by the end of today
Oh, right. I see π
Nevermind. π
we do use .url elsewhere
Explicit is better than implicit.
Yep, so at least for the sake of consistency it would be good if you could change it.
(and I'll approve ofc. :D)
yup 1 sec
Merged π
thank you!
Pls gib source code if source and resource command I can't find em
GitHub link is fine
Erm, which resources command?
It's loaded as part of the tags command
are there already improvements planned for the .epoch command? i quite like it.
things like adding support for .epoch in 10h as opposed to .epoch in 10 hours
also currently .epoch in 1 hour doesn't work (have to do .epoch in 1 hours plural)
cc: @summer garden since you were working on that command I believe ^^
I'm personally not planning any, and there aren't any planned that I've seen. The parsing is coming straight from a third party library. If we were to parse the string ourselves we definitely get nicer results
oic
The other big shortcoming is the lack of support for parsing of named timezones, eg PST
being on this server has forced me to memorize many of those offsets from UTC haha
The named timezones are kind of meh
They aren't unique
AST stands Atlantic Standard Time, as well as Arabian Standard Time
I know this because I was in AST, and sometimes you'd run into stuff like that
UTC offsets are superior in that regard
and no one i personally know switches between EDT/EST depending on time of year... i just always say EST
daylight versus standard
e=eastern
Abstract Syntax Trees and Binary Search Trees, my favourite timezones
timezones are fine, daylight savings time is stupid
@placid ermine your requested changes on sir-lancebot#988 have now been addressed
They are definitely BST
Haha I mean it's just an opinion after all. I personally think the same as dawn
@vocal wolf a wa https://github.com/python-discord/bot/pull/2072
will review in time
π
If anyone wants to click the green button below sir-lancebot#988
Bump
Looks like checks aren't being run on https://github.com/python-discord/sir-lancebot/pull/988. Any idea what's going on?
They won't run if there are conflicts
Ah, didn't even see the conflicts
How do I most easily fix the poetry lock conflicts?
resolve the pyproject.toml conflicts if there are any and relock
if i wanted lance to do something at a fixed time every day, how would i go about it
one thing i thought of was to have a @tasks.loop(hours=24) on the task; then when the start command is invoked, i get the time until the config'd time, sleep for that duration, and start the task
but that feels quite janky
also might bork if its redeployed in between or smthn
Merge conflict solved. Do you know why this thing isn't passing now? The PR already has 3 approving reviews
needs a core dev approval https://policy-bot.pythondiscord.com/details/python-discord/sir-lancebot/988
you can pass a timestamp of sorts too, i think
to tasks.loop?
Im trying to find it in the docs
https://docs.disnake.dev/en/latest/ext/tasks/index.html#disnake.ext.tasks.loop
time (Union[datetime.time, Sequence[datetime.time]]) β
The exact times to run this loop at. Either a non-empty list or a single value of datetime.time should be passed. Timezones are supported. If no timezone is given for the times, it is assumed to represent UTC time.
hmm, it's in disnake
not discord.py
hmph
hey, so coveralls was removed from the bot's lint/test workflow back in september (https://github.com/python-discord/bot/commit/802fa0dd29f35d4cf02c7be88dcec01d9ab67729), is there any reason to keep the coveralls dependency in the poetry dev deps? keeping coverage itself makes sense, but we probably don't need coveralls anymore
We never removed it because it never really mattered, and it was forgotten over time
If you want to PR it, go for it
I just figure there's no reason to keep around an extra dependency π€·ββοΈ
bot#2075
Could you remove it from the Readme too
@gritty wind is coverage used too or does it make sense to remove that as well?
@thorny obsidian (cc) mentioned in a staff channel that coverage reports are still useful, just not uploading them to coveralls
Itβs 50-50
We donβt use coverage for anything explicitly atm, the whole reworking testing thing has gone silent
But at the same time we can keep it till we figure out something
!d discord.utils.sleep_until
await discord.utils.sleep_until(when, result=None)```
This function is a [*coroutine*](https://docs.python.org/3/library/asyncio-task.html#coroutine).
Sleep until a specified time.
If the time supplied is in the past this function will yield instantly.
New in version 1.3.
There is no specific utility function for that, so you would need to use sleep_until in a task loop
π Here is how Reddit cog uses it: https://github.com/python-discord/sir-lancebot/blob/d6d8992e68a18819706bcb2a6e40a7ee1e581ca9/bot/exts/utilities/reddit.py#L251
There's also this scheduling code https://github.com/python-discord/bot/blob/main/bot/utils/scheduling.py#L63 in Python
bot/utils/scheduling.py line 63
def schedule_at(self, time: t.Union[datetime, Arrow], task_id: t.Hashable, coroutine: t.Coroutine) -> None:```
Which could be ported to bot-core and then used by both
A bunch of 404s/failed 301s from scipy and numpy https://docs.scipy.org/doc/
which is causing #dev-log
probably refresh inventory?
o
This page has links to numpy and scipy docs https://docs.scipy.org/doc/
but none of the important links work
couldn't find any objects.inv files
EG https://docs.scipy.org/doc/numpy/user/ is a 301 to itself
π
I'm hoping it's a bad deployment and they'll fix it themselves in a bit
looks like it's getting a rework... you could temporarily set it to https://scipy.github.io/devdocs/
objects.inv is at that path ^
!docs setdoc scipy https://scipy.github.io/devdocs/objects.inv
Package scipy has already been added.
Successfully deleted scipy and refreshed the inventories.
!docs setdoc scipy https://scipy.github.io/devdocs/objects.inv
Added the package scipy to the database and updated the inventories.
!d scipy
is there a similar one for numpy?
Your reminder will arrive on <t:1644319920:F>!
wait isnt that supposed to be disabled
yep :3
!docs deletedoc numpy
Successfully deleted numpy and refreshed the inventories.
!docs setdoc numpy https://numpy.org/devdocs/objects.inv
Added the package numpy to the database and updated the inventories.
nice ty π
uhhhh not sure
I saw a load of questions about it but haven't read myself
I know that there was something about them not being dropped off and that the impl was poor because it requires member cache and other things
idk
so is the fix just use get or fetch?
@gritty wind remind 24h numpy docs
If so, we already have a helper func for that, so it's about 2 loc π
not sure, because that would be a lot of fetches....
idk I can look at it later, I have a lot on my plate as it stands
it would be one for each person that has a reminder right?
since a fetch then adds to the cache
Yea, maybe even adding like a 5s asyncio.sleep before doing that could help π
I think it does, but honestly not sure
it depends on how you fetch afaicr
it's not crucial that reminders get sent the instant the bot starts up
if you fetch a user I don't think it saves
so waiting a bit before fetching from DB and sending is fine
if you fetch a member it miiight save
gives the cache some time to populate
speaking of cache
there's a bug in dpy which if fixed could speed up chunking about 2x times π
wait, isn't the a flag we can use to see if the guild member cache is chunked?
lol nice
I guess we could do guild.member_count == len(guild.members) lol
we have been testing it on a large bot for a week now, gonna add the fix to our fork soon
eh this will fail since offline members aren't cached
which will never be accurate
or wait
it will be
Yea, member_count isn't based on the cache
but member cache only populates online members afaik
!d discord.Guild.member_count
property member_count: int```
Returns the true member count regardless of it being loaded fully or not.
Warning
Due to a Discord limitation, in order for this attribute to remain up-to-date and accurate, it requires [`Intents.members`](https://discordpy.readthedocs.io/en/master/api.html#discord.Intents.members "discord.Intents.members") to be specified.
It's the first line that made me think it didn't
since if it works without being fully loaded, then it must use something else
viewed the source
it uses the api supplied count if it exists but falls back to len members
Ah cool
Ah yea, member_count? * integer total number of members in this guild
from discord api
good morning gamers
yeah the api is wack
thanks man i went to bed early last night
11pm bedtime, woke up at 3am to make curry and then went back to bed
lol
Do you have a moment to talk about your lord and saviour graphite?
this is unacceptable, the person who caused the bot to report 0 members to statsd should be dealt with
lol it was me that caused the issue π
this is the problem with python discord ! this is the problem i have been gaslighted into believing all failures are my fault when in actuality, I am a genius
fixing it now
lmfao
iirc the member count was off, so we tried fixing it with a guild chunk
but the member syncer didn't like that, since it was making a site api call for each member as it came in
bot was not having a good time
lemme look
wait
it was in #admin-spam
what month is september
oh
i'm an idiot
i've done the american thing and have been trolled
excellent work
#admin-spam message
hell ye
member count was off so a pr was submitted to chunk the guild in on ready and I had the idea to test it here before we merge it and then that happened so gj, we tested it
ye
NAILED it
nice nice
hey @crude gyro,
Would you be able to give me these assets as SVGs?
I'm awful at asset creation and I want these toggle switches as they look nice and fit the site theme perfectly
I've managed to setup the cookie thing as you described, ty for the detailed response c:
they don't exist, I just threw them together in photoshop
and we'd want animation for the little circle
so, hmm.. might need to make it in css
but I could probably try to put something together in a fiddle for you
ah, so currently I have it refresh the page so the correct CSS is requested and sent (using context processors).
Would you want this to load both so the can be swapped without a refresh?
that would be supercool, yes, but I'm not sure exactly how we'd solve it
can JS easily swap out and reload a css file?
can we just have it as a comment out css style tag π so it isn't use
i'll research
maybe if the html tag had a class somehow... keep in mind, django-simple-bulma is my repo so if changes are needed, that might be doable.
there is literally a .disabled value for elements, so if we pass both. the client can figure it out.
I'll quickly implement it and see if there is any weirdness.
very fun
pretty sure I can help throw together a nice custom switch a tiny bit later today.
just gotta finish cleaning house
I wanna css animate the background color transition too
it's gonna be awesome

one thing i'm currently trying to solve is that
{% bulma %}
{% bulma 'dark' %}
resolve to
<link rel="stylesheet" href="/static/css/bulma.css">
<link rel="stylesheet" href="/static/css/dark_bulma.css">
I can work with this to select these elements to then disable. But it feels messy not doing it using an id tag.
Is there a way to pass an id tag to the django template blocks (idk what they are called), example below
{% bulma id="default-theme"%}
{% bulma 'dark' id="dark-theme"%}
I've never used Django, but I'm guessing the package would need to support these arguments/params.
Which I assume it isn't as it is a weird use case, i'll check tho.
I'm pretty sure you can modify the href attribute of the link tag
i'll give that a go, although having it use an id to gather the element would still be nice
Should be a matter of getting the element via one of the methods (document.getElementById or whatever, I don't know what works) and then calling setAttribute on it
I think that would update the styles?
i'll test, ty
it works
although, the first time a new css file is loaded the menu disappears.
might be nicer for UX to not have it in the dropdown menu, for that reason
i'll drop a quick gif shortly (not actually made the theme work yet, just does the top bar)
on the top bar
could work.
let's test it.
I'll be at a computer in a sec
can try to build a thing then
https://gyazo.com/6cc20e19200e3a48a84d64e25aa404d2 menu disappears, there is a bit of jumping too.
Ah, FOUC is always wonderful
whats FOUC
Flash of unstyled content
https://gyazo.com/c4eb9361b7f24c67bb3331adbe806c45 on top bar with just emoji. i'd need to implement the icon switch in the js
Are you loading the second style sheet on demand or on every load?
i'm swapping the href so on demand i think
if I did the disabled it could be on every load, i'd have to check
Hmm. I wonder if there's a way to wait for the request to complete and then update the sheet.
Assuming that's what the problem is
I'm making that assumption since it works after the initial load
I could just make the css element spawn below it, so it would only take priority when it is downloaded (another guess of how browsers render)
this feels really hacky tho, but it would just be in one place
what size do you want the thing?
it depends on where we are going to put it, can you review the two gifs.
Would you prefer it on the top bar or in the menu? I prefer the top bar.
top bar seems fine
probs about half the size of the discord button then, for SVGs do I just have to tell you the ratio?
or do you want exact pixel?
ah
we only do raster around these parts
I think it's fun to build these things in pure css
that sounds dreadful
It's really not, at least for simple things
Like <circle>s or whatever
And I think <line> is one? And path and g and whatever else
I forget what I used that one time
Doesn't Mark also like to manually code out SVGs?
@spare plaza here's something
colors can be messed with
https://jsfiddle.net/eh3nxjqy/276/ here's the fiddle
Test your JavaScript, CSS, HTML or CoffeeScript online with JSFiddle code editor.
haven't battle tested it, might be fragile.
no, there's no way to do this, except to change the template tag in django-simple-bulma to do so.
which isn't unreasonable, by the way
https://github.com/lemonsaurus/django-simple-bulma/blob/main/django_simple_bulma/templatetags/django_simple_bulma.py#L29-L34 this is the relevant bit of code that does this
django_simple_bulma/templatetags/django_simple_bulma.py lines 29 to 34
# Build the html to include the stylesheet
css = static(f"css/{theme + '_' if theme else ''}bulma.css")
html = [
f'<link rel="preload" href="{css}" as="style">',
f'<link rel="stylesheet" href="{css}">',
]```
I just used some document.getElementsByTagName and .find with regex to gather them.
adding that would just shorten the logic for getting the stylesheet elements
so it would be pretty trivial to do something like id="bulma-css-{theme} in there
or whatever
time to PR it 
are you talking to yourself
yes
if you do, I'll get it released quickly
seems very minor, won't break anything,
I can release a patch version right away
@crude gyro, PR submitted
https://github.com/lemonsaurus/django-simple-bulma/pull/84
did you test it, @spare plaza?
i'll test it with pythonsite, i should beable to build locally. 1 sec
also, chris just pointed out. if there is a theme called "default" it would overwrite the real default. i'll update
yeah, just inject the code right into your dependency, and then rebuild the docker container
@spare plaza
here's a variant that uses css.gg icons instead of fontawesome. a bit cheaper to load, too, since I'm loading only those two icons and nothing else.
Test your JavaScript, CSS, HTML or CoffeeScript online with JSFiddle code editor.
I was hoping to just use a git dep
django-simple-bulma = { git = "https://github.com/GDWR/django-simple-bulma.git", branch = "gdwr/add_id_to_stylesheet_element" }
But I kept getting this unhelpful error
#9 10.79
#9 10.79 FileNotFoundError
#9 10.80
#9 10.80 [Errno 2] No such file or directory: 'git'
#9 10.80
#9 10.80 at /usr/local/lib/python3.9/subprocess.py:1821 in _execute_child
#9 10.92 1817β else:
#9 10.92 1818β err_filename = orig_executable
#9 10.92 1819β if errno_num != 0:
#9 10.93 1820β err_msg = os.strerror(errno_num)
#9 10.93 β 1821β raise child_exception_type(errno_num, err_msg, err_filename)
#9 10.93 1822β raise child_exception_type(err_msg)
#9 10.93 1823β
#9 10.93 1824β
#9 10.93 1825β def _handle_exitstatus(self, sts,
#9 10.93
------
executor failed running [/bin/sh -c poetry install --no-dev]: exit code: 1
Either way, I just mounted it inside and made it a path dep. It is working.
i'll use this, ty
I usually just.. inject the code straight into the dependency
also I made it spin because this is how I have fun at 00:30 AM
Spin on hover π that is awesome
it's super stupid but so much fun.
why would the moon spin
your PR has an f-string inside an f-string
are you trying to kill me
it has, what we call in the biz, "a high cognitive complexity"
i see, would this be more suitable?
stylesheet_id = f"bulma-css-{theme}" if theme else "bulma-css"
html = [
f'<link rel="preload" href="{css}" as="style">',
f'<link rel="stylesheet" href="{css}" id="{stylesheet_id}">',
]
or just a full if statement?
i'll update it, one mo
the inline condition is very readable like that
i'll also give it another test, just to ensure
this time with git installed so this works
@spare plaza BTW github supports a zip download of every single commit so you can use those and not require git
ah, so I can do this?
django-simple-bulma = { url = "https://github.com/GDWR/django-simple-bulma/archive/refs/heads/gdwr/add_id_to_stylesheet_element.zip" }
yep, as long as the link is valid :D
seems like it misses files if I try just a zip, cos it doesn't build (i think)
> [7/8] RUN BUILDING_DOCKER=yes SECRET_KEY=dummy_value DATABASE_URL=postgres://localhost METRICITY_DB_URL=postgres://localhost python manage.py collectstatic --noinput --clear:
#11 0.823 Traceback (most recent call last):
#11 0.823 File "/app/manage.py", line 195, in <module>
#11 0.823 File "/app/manage.py", line 184, in main
#11 0.823 execute_from_command_line(sys.argv)
#11 0.823 File "/usr/local/lib/python3.9/site-packages/django/core/management/__init__.py", line 401, in execute_from_command_line
#11 0.824 utility.execute()
#11 0.824 File "/usr/local/lib/python3.9/site-packages/django/core/management/__init__.py", line 395, in execute
#11 0.824 self.fetch_command(subcommand).run_from_argv(self.argv)
#11 0.824 File "/usr/local/lib/python3.9/site-packages/django/core/management/base.py", line 330, in run_from_argv
#11 0.824 File "/usr/local/lib/python3.9/site-packages/django/core/management/base.py", line 371, in execute
#11 0.824 output = self.handle(*args, **options)
#11 0.824 File "/usr/local/lib/python3.9/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 194, in handle
#11 0.824 collected = self.collect()
#11 0.824 File "/usr/local/lib/python3.9/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 109, in collect
#11 0.824 for path, storage in finder.list(self.ignore_patterns):
#11 0.824 File "/usr/local/lib/python3.9/site-packages/django_simple_bulma/finders.py", line 215, in list
#11 0.825 File "/usr/local/lib/python3.9/site-packages/django_simple_bulma/finders.py", line 116, in _get_bulma_css
#11 0.825 for dirname in self.bulma_submodule_path.iterdir():
#11 0.825 File "/usr/local/lib/python3.9/pathlib.py", line 1160, in iterdir
#11 0.825 for name in self._accessor.listdir(self):
#11 0.825 FileNotFoundError: [Errno 2] No such file or directory: '/usr/local/lib/python3.9/site-packages/django_simple_bulma/bulma/sass'
------
executor failed running [/bin/sh -c BUILDING_DOCKER=yes SECRET_KEY=dummy_value DATABASE_URL=postgres://localhost METRICITY_DB_URL=postgres://localhost python manage.py collectstatic --noinput --clear]: exit code: 1
ERROR: Service 'web' failed to build : Build failed
I'll try the other way
still working after the change c:
Version 2.5.0 on its way out.
had to do a minor version bump because I also bumped bulma to 0.9.3
should be on pypi within a few minutes
might be there now, actually
mmmyep
thanks for the pull request!
dude, your button is so cool https://gyazo.com/b55f94fa711466ecb7175fd57b585755
Imma have to go through some of the SVGs, some are pure white for example (the wave under the hero banner).
I think we would want the stylesheet to effect them. but ill take a look another time as it is getting late.
the button seems a bit big, and the colors probably aren't quite right - but the animation and icons totally rock
this is gonna be fantastic when it's done
nice work so far!
oh, so im not crazy after all
Well... it's nice until you encounter all the inconsistencies across different rasterisers. Some of the more advanced/niche parts of the standard can have no support or buggy implementations.
!remind 2h bonk joe for member stats
Your reminder will arrive on <t:1644292112:F>!
can we do it now instead of 4am lol
nah i'll bonk you tomorrow then
not sure if the sweeping raid hit here yet, or if it did at all
lol
Public statistics for the Python Discord server
you can see it there
don't need to ask me
sir-lancebot#910
lol ok, I used github ui to rebase this to get it up to date with main
but now I'm marked as a committer on every commit π
Yeah... you accidentally rewrote the history π
well I meant to rewrite the history, since that's how rebasing works
thought it would be smart enough not to mark me though lol
It still sets the author as @trail pilot from my experience of rebasing, but you are now considered the committer I think?
Yeah a merge commit might be better moving forward. I remember seeing the changelog from GitHub and figured there'd be issues like this with rebases
I prefer rebases though, since you don't have a load of merge commits in the history
It's probably best if @trail pilot just force-pushes that away and then use merge commits since we use merge commits to merge PRs
Same, I think that option is fine if you squash or rebase in the end when merging the PR but here we use merge commits
it's probably only that since it's the default, rather than an active thought on how we merge
but yea, the repo has been running so long like this it barely makes a difference now
Meaning that this commit with you as the committer will show up in the main branch, not sure if that's desirable?
I meant that the repo has been using merge commits so long, that there's likely little point in stopping now, since there are so many of them
Ah π . This was one of the first things I asked I think #dev-pixels message
Yea, if I had known it would mark me as the committer I would have asked fronto to rebase, or just merged main
Yeah, I really dislike merge commits. If you need to use merge commits then you have a badly scoped PR imo.
it makes squashing harder too, if you have a bunch of merge commits in the branch history between branch commits
Yeah, you kind of have to decide between only squashing + rebasing or merge commits
or try and walk someone through dropping the merge commit locally and then possibly dealing with conflicts before you can squash/fixup π
oh I'm here now, anything I need to fix or is it fine
Yea, probably worth fixing π
could you sync main on your fork with upstream main
then pull main locally and rebase your branch to main and then force push
it should sort out the changes I made then π
Yep
!remind 9h30M sync main
!remind 9h sync main
remind cog is unloaded iirc
ah I see
So something like
git pull link_to_upstream main
git checkout trivia-night
git pull link_to_upstream main
git rebase main
git checkout main
git push --force
I'm not very good at git hence I'm double checking
if you go to your fork on github there should be an option to fetch upstream
Once you do that it would be ```
git checkout main
git pull
git checkout trivia-night
git rebase main
git push --force
hello folks, just wanted to check, have y'all blocked the project name smartconfig on PyPI back when that was still a pydis project?
I've just tried uploading it, and I'm getting 400
imma CC @patent pivot because I think if someone did it would be you 
blocked?
yeah like you can create a project and don't upload anything to reserve the name
no, we didn't do that
I don't think we ever made any progress towards a pypi release since project direction wasn't clear
Did we get something that was pypi ready
no
lol
just wanted to double check, because I'm really unsure why PyPI is rejecting it
smartconfigparser is an existing package, I wonder if that's why
but isn't the project name smartconfig?
i have a async_rediscache.RedisCache instance, is there no way to add a list to the cache?
i saw an .update method which took a dict so i suppose i could make a dict keyed by ints to mimic a list
Redis Cache is entirely dict based, so afaik no easy way to add a straight list
redis itself has a list type
assuming there has been no updates since then, there is no builtin list type
yeah, I mean our async redis cache implementation that Seb maintains
that said you can serialize it yourself using comma separated values or something
mm sad
yea, there was complexity in ensuring atomic writes to the cache and redis for lists (iirc)
so asyncrediscache only supports primitive types
I wonder if you could subclass the default impl to have an actual list
yeah we purposefully avoided dictionaries and lists
it's just a prime case for race conditions when you're doing things like that
probably was published at some point and then deleted
from what I can see, deleting should free the name 
I'll poke some people about it
though I'd actually hope it doesn't work like that lol
if packages get deleted the names should never be able to be reused
Iirc correctly you can reuse a name*
Except you can never name a release after an existing (or deleted) one
Which is great for security if people actually locked to specific versions instead of blindly updating :P
I guess we get around that by never updating π€‘
wait so does that mean a value can only be ints/strs/etc? no nesting?
never bumping our deps is a security feature, I swear!
yeah, that's already a redis limitation hsp
You can encode values via things like json
Itβs how we sort of get around it
lol
ideally you want to use nicely namespaced keys for that
If possible I'd like to avoid suggesting people throw JSON into redis
It's a complete anti-pattern with how we've got things set up and is just asking for race conditions or weird bugs
what is my alternative
assuming a structure like
[
{"name": "alice", "age": 34},
{"name": "bob", "age": 22}
]
something like setting the key name.alice to 34
is this you trying to store discord IDs against their scores?
that's what Redis intends you to use
currently its me trying to store questions and test cases
but
its not just name and age, i have three fields of which two are lists with some fields themselves
well for instance you could have alice.name set to 34, alice.birthday set to 2004-04-06, ...
hrm
although those lists could probably be comma separated
promising
okay, that seems reasonable enough to work with for dicts
what about lists
How would JSON cause a race condition
Well, could use .index
Because the operations serialize then write isn't atomic
For instance:
1a. Attribute a gets changed
2a. Object with a changed gets serialized
1b. Attribute b gets changed
2b. Object with a and b changed gets serialized
3b. String with a and b changed is written to redis
3a. String with a changed is written to redis
I donβt follow still actually
Not sure what youβre describing
Letβs say the serialization is done outside the context of redis
The numbers are steps, the letters are concurrent actions
Is the race condition there
This feels like more of a problem with your code if youβre changing the value and writing it multiple times at once
Wouldnβt it be true of any string
Is redis just a race condition nightmare
You cannot guarantee that the order in which attributes are changed will be the same as in which the object is saved to Redis because of the serialization step
Nah, the race condition nightmare is using one Redis key to store many information that can be changed concurrently
So the problem here seems to be trying to modify the value in multiple places at once, but likeβ¦ thatβs not a fault of serialization
That said, I believe the issue can be resolved with appropriate locking
You can have the same problem with a string if two functions try to modify it lol
Well, no, because you only store one piece of data
This is a weird argument to me, because the core of it seems to be redis is just super susceptible to race conditions, but nah itβs totally fine to use it as long as you donβt utter the magic combination of letters
Your logic seems to be that you can modify multiple properties about the object in two places at once, but I present you with a string alternative: changing two letters in two different locations at once
Not for encoded values or anything
But literally just a plain string
Maybe that is the case, but then should we be using it if itβs so fragile
AFAIK the issue stems from two different use cases. The one that is the "support" case for asyncredis cache is where you cache a single item, say who claimed a channel, and then read it at some point in the future. but setting the key to a new value doesn't rely on reading the value and altering it, it's purely setting it to a new value
the issue with serialising dicts/lists is that to set the key, you need to read, amend and then write
maybe that'd be clearer
since the new value depends on the old value
Let me grab a pen and paper
taking a similar example with a list being serialized as a dash separated string
two appends are done at the same time, so you expect the data in Redis to be either a-b or b-a, right?
the order is whatever since they happened at the same time
which is what the RPUSH redis command would do
Mentally this feels the same to me
Substitute string[i] for like actual valid code lol
Yes, it is, since in your use case setting the new value of string depends on the old value
So that would also have a race condition
So if itβs just a problem with your code, why would we not allow json
The argument isn't that what asyncredis-cache currently supports doesn't have race conditions, but that supporting lists/dicts will always have race conditions
any time where setting a new value for a key requires reading the current value and updating, it will have a possible race condition
although if it uses redis atomic operations, it won't have any race conditions
The argument against JSON seems misguided
Shouldnβt you be crusading against like
People writing to redis π€‘
for the record, I think using JSON with proper locking would be fine
it is another thing to keep track of, though
trying to store json with the current asyncrediscache impl can lead to race conditions unless you implement some form of locks
but it's not just json, it's when any update to keys requires you to read, modify, then write
to be fair, Redis isn't made to store very complex data structures
Well, that just makes me wonder:
- What alternative do we have
and - Isnβt this true of any data type you use. Why arenβt we locking all our uses of redis everywhere
it is fast because it is simple
I mean it can be, there are pretty decent key types for dicts/lists etc
of course if you need relations then don't use redis
Sir-lance π
for 2, there is the use case where it doesn't apply, just as the example of help channel claiments
you don't care about who previously claimed a channel when updating it
An alternative would finally be adding the third bot thatβs a middle ground between lance and python
in most cases the new value does not depend on the old one
Yea, what Ak said, those use cases are fine
anything where that isn't the case requires lock patterns
You can definitely use json without locking then, just write everything at once >.>
well, see this
sure, if you only read on boot and dump on shutdown, you don't need it
if it's all done in memory, then fine
that'd work too
if you need to write to redis during uptime, you have possible race conditions
But thatβs not the case is it? Claimants read and write at the beginning and end of the function call
writing every X minutes could also be a solution, I believe?
It sounds more like an attempt to reduce the likelihood of it happening than a solution, so how likely is it
This isnβt purely hypothetical, my unfurl PR writes to redis for caching
Though it just writes one value at the end of the operation
And reads it independently
Does updating/setting a key depend on the previous value?
you can see periodic writes as a locked write
Though it just writes one value at the end of the operation
Does it read what's currently there, append to it and then write?
Nah if it found a cached item, it just returned it. If it didnβt, it created a cache item
then yea, that's fine
Zig commented that itβs basically a glorified LRU cache
For all intends and purposes, writing every X minutes prevents parallel writes, which are the issues
From what I could tell hsp was looking at serialising a dict/list into a single key
so updating that key would require reading, updating, then writing back
which would have a race condition if another operation came in after the first read
races conditions here are basically this
If we wanted to add another question + test case, it would read the whole thing back, update it with the next question + test cases, then write it all back. It's not a straight override unless we include all the previous questions everytime we add a new one
could we have a key for each quesiton?
I'm not familiar with what is needing to be stored
but it could be possible to do it in a way that doesn't require defending race conditions
I think that's what hsp is going with. Doing like a question#.testcase1, question#.testcase2, etc
a problem could occur if the same testcase is modified at the same time, but I doubt that can happen
We're storing the esoteric challenge and then the forms-snekbox test cases, since we need to update the form each day with the new question + test case
and me who just joined back to ask about smartconfig
Yea, I'd need to see a PR or more on what the code looks like to give an answer π
why not use the form as a way of storing the test cases directly? 
We're releasing a new question each day, but want to use the same form. We only want one question available. So we have to update the form with the next question and the corresponding test case.
makes sense
did I ever leave documentation on how to write the test cases?
I know I wanted to do that, don't remember if I did
No, I was going to figure out what that looks like and make the documentation next week
I could probably take a bit of time to write something up, if you are interested
sure, that would be very helpful
sounds good
I am whiteant . I need some friends. some Python developer friend, also I am a boy? add me. I love python and building things. I am just a student.
Thank You π
oh and if y'all are curious, smartconfig was previously registered as a malicious package, so the name is locked haha
I'm offended by the package name smartconfig, since it implies my config package is dumb
pls ban
ty
haha
In [3]: o = {
...: "records": [
...: {"name": "alice", "age": 34, "x": [1, 2, 3, {"stuff": "hi"}]},
...: {"name": "bob", "age": 22, "x": [5, 6, 7, {"stuff": "hmm"}]},
...: ]
...: }
In [4]: flatten(o)
Out[4]:
{'records.0.name': 'alice',
'records.0.age': 34,
'records.0.x.0': 1,
'records.0.x.1': 2,
'records.0.x.2': 3,
'records.0.x.3.stuff': 'hi',
'records.1.name': 'bob',
'records.1.age': 22,
'records.1.x.0': 5,
'records.1.x.1': 6,
'records.1.x.2': 7,
'records.1.x.3.stuff': 'hmm'}
should i dump sthn like this to redis
What's up? why do we want to write json to redis?
i want to store a list of questions
each question has a problem description (str), and two lists of test cases
each test case has one input (str) and one output (str)
And you're worried about race conditions?
lol
I think that
- A race condition is unlikely to occur, because there's probably going to be very few people who ever edit the questions, and a single person will probably not try to make two operations simultaneously
- Even if it does occur, it seems rather harmless, as the only effect I see is one of the operations de-facto not happening.
- If you still want to deal with it, asyncrediscache offers a transaction decorator
So while redis might not be the best tool here, storing json is definitely possible
so to clarify, the questions cache has just one key-value pair, the key being smthn like "questions", and the value being a json string representing a list of questions
hmm
I tried reading up on the context but failed, are we just talking Redis race conditions?
Just add an asyncio lock locally or use Redis' scripts
yeah the library offers a lock decorator per cache
This conversation originated about concerns of writing a json.dumps() to async_redis
That's still just an asyncio lock, we can just create on ourselves and not lock unnecessarily
I didn't say it wasn't π
hmm i think im going to go with one question per key
Why write a lock yourself?
this is the originating context
Keep in mind there's no real benefit here if you don't have a way to identify what key you need to get the question you want
Well it could've been a Redis instance-wide lock on Redis π
Ah no, I'm pretty sure it only locks a specific cache
If you only try to acquire it when you use a specific cache, yes
The previous discussion was more about using Json in Redis in general
I'd assume in some instances it doesn't matter much
its aegir now, https://pypi.org/project/aegir/ π
neat
@placid ermine i was looking at the docs for 1.7.3
https://discordpy.readthedocs.io/en/master/ext/tasks/index.html#discord.ext.tasks.loop
realized after i looked at the source code and saw https://github.com/Rapptz/discord.py/blob/master/discord/ext/tasks/__init__.py#L99 π€¦ββοΈ
is that backtalk? banned.
Would appreciate some core dev reviews on sir-lancebot#1022 (not urgent). Thanks!
@crude gyro btw wasn't there a search bar in the scope for smarter resources at one point? did we remove it?
or am i misremembering
Also, question about the django-simple-bulma, it allows you to define any variable from here https://bulma.io/documentation/customize/variables/
But does it allow you to define any variables from here https://bulma.io/documentation/components/panel/#variables and any other component/element based variables.
Annoyingly I can't find a nice way to change the border-bottom colour on these elements, and I think that variable is the key.
I have tried just putting the component's variable name, but it appears to not be working.
@trail pilot In response to this #community-meta message, I have a question but it fits in this channel more than #community-meta. Shouldn't .quiz have an invoker-only message listener like I did for .madlibs if it doesn't already? That way the game can't be interrupted?
Discord is the easiest way to communicate over voice, video, and text. Chat, hang out, and stay close with your friends and communities.
the game wouldn't technically be interrupted but it interrupts the experience if someone say runs code like with !e
because the question might get lost
(.quiz is also a multi-person thing. The bot needs to listen to more than just the invoker)
Oh really? I didn't know that, that helps a bit
Oic what you're saying now
short answer: I'm not sure. Maybe. Test it and see?
But personally, I rarely build a thing with bulma without adding a tiny bit of CSS of my own. Imo you should just add a stylesheet and make the adjustments you need, it'll be much more explicit than some variable in settings.py.
there was, and it would definitely be doable with the system I've built, I just removed it from the scope of the original PR.
shouldn't be a hugely difficult task to install a search bar into the resources page.
might be a task I'd want to take on in the near future myself
I can spin up an elastic search container in our shiny new servers
super over-complicate it, the true pydis way
yes and then we'll use redis as a broker to send the request to the bot, who will consume the order and make the requests via a cloudflare worker microservice that's just there to talk to elastic search. Elastic search will need a list of the resources, so it can make an API call back to the site, which will return the full list of resources and can then be sorted by elastic search. Then elastic search can use websockets to establish a session with the client and bob's your mother!
or I can hack together some search thing with jquery filtering in like 20 minutes
you forgot the new separate Discord bot we'd need too
oh yes, let's name it Galahad
love it, let's make a repo
I propose instead of just making a repo, we create a repo for a serverless microservice that we can use to make repos
we need another bot to interact with that too btw
and how do you propose we make that repo?
so we create Tim the Enchanter, a NLP bot that monitors the chat in this channel and performs sentiment analysis to determine which repos we need before we even know we need them, and which in turn then calls the serverless repo-making microservice to create corresponding repos.
I've been an NLP bot this entire time
learning from you
the true test of its viability will be that we host it on a raspberry pi connected to my neighbours power outlet in my garage, and see if Tim understands that he needs to create a repo for himself.