#dev-contrib
1 messages ยท Page 125 of 1
is ~ just poetry's version of ~= with a bit different semantics on the allowed versions? Seems easy to confuse things when both will be used in the same file
So poetry's ~= is pep 440 ~=
but it also has ~
where ~2.8 is >=2.8.0 <2.9
for here, it's probably clearer to use ~=2.8.0
rather than mix ~ and ~= in the same file
I think just the tilde requirements to lock in the minor version would make more sense for most of the deps? We can always run poetry update or watever so things don't break like this on unrelated changes
How does python get the docs for the docs command?
Look up documentation for Python symbols.
I think that is what would make sense
That also seems to be what numerlor is suggesting too
that is what you mean by tilda lock the minor version right?
~ is tilde
~=2.8.0 will mean the minor version is locked and we will just get the latest patch version on update
I was thinking of just ~x.y which would also lock the minor, and applying that for all of the deps (or most if we can rely on the versioning on some)
the file has a mix of locking to major and minor with ~= which just makes things like this likely to come up in the future
yea
I'd say use ~= but I think it should be looked into in the projects, I recall flake8 also had a bump in an unrelated PR because of it which then needed to fix linting errors
looks like pep8-naming also got bumped, could be a new error
then force push
It's your own branch on a draft pr, if there's ever a good time to do a force push that is it
That's a terrible warning, Error/Exception at the end is often unnecessary noise
It's better than leaving some typo in and having to introduce a new commit to fix it and things like that
raise EverythingIsOnFire
``` Hmm I wonder if `EverythingIsOnFire` is a string, list, socket, generic type alias or a Lark parser. ```py
raise EverythingIsOnFireError
``` oh dear, it's an exception, so clear now
I think we discuss flake 8 ignores with the core devs, not sure...
in sir-lancebot and bot we just chucked Error on the end when updating
Well
That's what we have been doing so far
I don't know if it would require a discussion among the core devs or not. I personally don't agree with this but not enough to go and discuss it.
Also do you know about precommit @clever wraith?
Can I get another review on bot#1742 please?
the info for the docs command is stored in a database right
Yes, the inventories are stored through the site api
Tizzy you need to have patience, I have prs waiting from 2-3 months
is bot#1540 reviewed?
Doesn't seem to have been approved/denied by a core dev yet, no.
I've answered, thanks!
for bot#447 , does anyone know the most efficient and reliable way to get the closest matches?
Yeah I think difflib is also better
We switched to using rapidfuzz on the bot which is an MIT-licensed fork of fuzzywuzzy (from before it became GPL)
not that it's needed, but would the bot being gpl affect anything in a meaningful way?
I believe we had some plans of extracting stuff from our repos into libraries
if I'm not mistaken
and if we make changes to these parts while we're GPLd, the libraries would have to be GPL, right?
but, well, it's not been tested in court โข๏ธ
ah wasn't aware of that, that'd probably have to be gpl yes; although considering there aren't that many contribs if everyone okayed it, the extracted lib could use an another license
hmmmm
Yea, we're aware of the issue, working on a fix
๐
๐ข
textdistance.JaroWinkler()
I have a question
The source command
The docs command*
Where does it get the info from?
I think someone said a website or some API, can I interact with that API for my bot?
!src d
Look up documentation for Python symbols.
I am not good enough with python and discord.py to understand this
It's like:
functions that leads to a functions that leads to a context manager that leads to another function that leads to a class and it's hard lol
+1, Jaro Winkler is most likely the best option. Should be able to do XXk+/s easily.
It really depends on what youโre trying to match also. 5+ words is a lot different than 1-4 words. You can average the scores of something like JW and smith waterman if you want, it really depends on the goal though
There is surely lot of magic in there ๐ simply put it gets the markdown from the objects source of a particular documentation, for example , https://docs.python.org/3/objects.inv for python, and then parses the markdown
Thatโs what I got right now, I am not familiar with that section
problems should be resolved
the tldr of docs would be that the inventory file maps the names you use for the command to the urls where they are located, and then the html in there is converted to discord markdown
I'm not familiar with that, which module?
textdistance
Is it better than rapidfuzzy
I havent played with rapidfuzz, but if its a fork of fuzzywuzzy then yes
I think rapidfuzz is quite a bit faster than fuzzywuzzy. Haven't used textdistance before but it seems to focus on giving choices between a lot of different algorithms
@echo narwhal please review my comments on your last two PRs before opening more
Yeah ill stay with rapid fuzzy then
Anyone got a good value or ideal one for the score_cutoff kwarg of rapidfuzzy process.extract function
depends what you want, i'd just play around with a few different values and see how they work out for you.
range -1 to 0 right
Not sure too, though I'm looking at the docs and it says
score_cutoff (Any, optional) โ Optional argument for a score threshold. When an edit distance is used this represents the maximum edit distance and matches with a distance <= score_cutoff are ignored. When a normalized edit distance is used this represents the minimal similarity and matches with a similarity >= score_cutoff are ignored. For edit distances this defaults to -1, while for normalized edit distances this defaults to 0.0, which deactivates this behaviour.
https://maxbachmann.github.io/RapidFuzz/process.html#extract
okay maybe it's 0 to hundred
For bot#447 if it were to get implemented can I get to which form it would be in? Like how the output of the feature would be? I was thinking if there is more than one result, it will add reactions and according to which one you react to it will edit the message accordingly.
I think that'd be better to ask on the issue so it can be discussed properly
Alright, done thank you
It would be nice to have some kind of indicator or countdown to when the channel will be closed due to inactivity
hey
anyone want to test soemthing for me
https://prometheus.pythondiscord.com/ what happens when you browse here
Access denied
This website is using a security service to protect itself from online attacks.
okay neat
maybe I should move our tooling to another domain some day

hmmmm I don't like mtls
not for this anyway
firefox seems inconsitent
mtls rules
under firewall/ssl (client certs)
can someone see what it says now
epic
Please contact @patent pivot if you experience any problems logging in.
I'm experiencing problems logging in, it wont let me log in 
lmfao
ok AM works
=[
lol it's fine. I can't even see stuff on sentry, so I'm used to devops being a blackbox
but devops should be OPEN AND BEAUTIFUL
lol no open prom access
that's a bad idea
devops is a black box
that's how we do an hour with joe, we just ship him in his black box
when are you going to officially join devops btw =P

chris hi join my team?
k
yessss, now I can bother Chris when shit breaks
Sometimes joe decides to "sleep" or "have a life" which is really rather rude. Now I can bother Chris and continue to not feel bad about it :D
not without logging into github
with logging in
no access
oh wait. i didn't click save i didn't click save
try now @thorny obsidian
I'm in
they call me mr webscale
it's just a graph of disk reads
I'm doing alerts as code now so I don't have to deal with Grafana's hell
lol
yes its in all your git commits
yeah you tried to sign in lol
arthur ed [-GVhs] [-p string] [file]
Ed is the standard text editor.
lmao why the fuck is that a thing
?
arthur ed -GV -p "aaaaaa?" test.txt
?
Ed is the standard text editor.
I don't have any reference other than how kubectl does it
which just seems to be copying the jobspec from the cron and throwing it into a job
Time to buy an hour with Joe!
I mean isn't one hour of training from devops daddy kind of makes you devops son
lmfao
Also @patent pivot please rename <@&797752289771126784> to Kubernetes Daddy thank you Joe
lol i intentionally avoided that bbecause then i get randos calling me it and I do a lil ๐คจ
@timid sentinel just FYI since you've already approved the PR. I've reworded the error from "Both members must have the lovefest role! You can get this by running the `{Client.prefix}lovefest sub` command." to ```
"This command can only be ran against members with the lovefest role! This role be can assigned by running {Client.prefix}lovefest sub in <#{Channels.community_bot_commands}>."
cool cool sounds good, do I need to press approve again for my review to count then?
nah it's still good
Once you've approved the only way to remove the approval is if someone manually dismisses your review
We looked into automatically doing that if enough lines change, but don't think we turned it on
Or force push
*or request changes
ok mr Akarys

hotkey is proving useful
yes
!rule 69 42
:x: Invalid rule indices: 42, 69
Hm I think it's correct both ways, it's a list of invalid rule indices with one item
don't expect someone to review it then
this is going to be my only response
โจ devops wins again
joe has added alerting
chugging in the wind โจ
lol
no promisses
I''ll put up manifests for this when i've written more alerts
no
lol
we are never having a "cleanup" PR like that again
it was a pretty awful experience for all involved
merge and reviewing
it was just not worth the effort whatsoever
yes, but not a flurry of 500 PRs lol
Again, I will refer you to the pins for our attitude on those mega "clean up" PRs
The grammar isn't such a huge deal and it'll be easier to fix as we naturally update/revisit those code portions
pypi belongs to the python bot because it's more of a utility for the language
We work on https://forms.pydis.com
Python Discord Forms is the surveying system for the Python Discord server.
Currently not open to external contributions, but the repos are open source under
python-discord/forms-frontend
python-discord/forms-backend
lol no i'm going to merge it now anyway
jut waiting for lint to run
okay
so
these are our alerts now
Please review my PR when you get the time to
Yeah, itโs on my agenda for when I get my proper setup back
Thank you ๐
https://github.com/python-discord/bot/pulls?q=is%3Apr+is%3Aopen+sort%3Aupdated-desc+author%3AShivansh-007 Would love to get some reviews thanks ๐
@vocal wolf could you add the up for grabs for the wtf python pr, re:https://github.com/python-discord/sir-lancebot/pull/605#issuecomment-894634023
ye
cool thanks
np
@vocal wolf @vale ibex Sorry for picking on you guys but I've noticed at least you two have used the backend area tag incorrectly on the bot e.g. https://github.com/python-discord/bot/pull/1661 and https://github.com/python-discord/bot/pull/1642
I thought the PR that I labeled would be internal functionality since there's a difference between if the user could or could not get DM'd
But I can also see how that may also not relate to internal functionality, since it's surface-level type stuff.
Yeah it's technically internal, but by such a broad definition, we'd end up using that tag everywhere and it wouldn't have much meaning. It's not a particularly useful distinction here.
Agreed
I like to use it in a more general sense of pertaining to something that's not user-facing at all or that is a very generic utility used by many things.
With a few exceptions, like I think the sync stuff is backend and we have some commands to control it, but that's not the main interface for it.
It wouldn't be frontend either, more just help channels and that's it
I have mixed feelings about the frontend tag since it's kind of arbitrary what qualifies
I think it's usually for editing of messages/embeds, that's what I've mostly saw it for
Same
not as in the bot editing an embed, but having a format of an embed be modified in the code so it continues to look different
While you're here
Should I transfer all the tag issues to meta, since we agreed on that?
Yep, I don't see why not
In retrospect this is much nicer than it first seems
Cause issues won't get lost in the 100s of bot issues
indeedingly
Should something like this also be moved? https://github.com/python-discord/bot/issues/1703
@vocal wolf How do you think we should structure the issue templates considering a request can be to either add, remove, or revise something?
I think if there's a separate template for each action then it would be overwhelming
But unfortunately we cannot automatically add labels without separating them (https://github.com/github/feedback/discussions/4266).
I'm going to have to think about this more
Okay, for now I set up labels for what I think seems reasonable https://github.com/python-discord/meta/labels
Though I was thinking of breaking off a new "policy" label from "area: features"
I'm just gonna do that before I forget. Not like we have any open issues for it anyway.
That sounds a bit like spring cleanup haha. I'll discuss it with the rest of the core devs and get back to you!
For Python bot, how is the documentations for the docs command stored? It is like there is a column for name and then content?
meaning if a symobl were to be indexed to one, would it just give the name and if it were to be indexed to two it would get the content? or how could it be split like that
Look up documentation for Python symbols.
!d
okay so from what i saw,
self.base_urls
``` this is for the URL links of the docs
And py self.doc_symbols is for the content, is is correct?
where is DocCog Invoked
you should only need self.doc_symbols for the parial search, it's a mapping of the names used to fetch the docs to their urls
Seems like Joe already rejected it, so nope
you asked him to do a chore on his birthday lol
No he rejected that yesterday
you asked him to do a chore on the eve of his birthday lol
lol
can i ask a dpy question here regarding bot#477
Wait sorry, bot#447
go for it
@bot.command()
async def py(ctx):
buttons = {}
for i in range(1, 3):
buttons[f"{i}\N{COMBINING ENCLOSING KEYCAP}"] = i
the_previous_page_number = 1
the_current_page_number = 2
embed = discord.Embed(title=f"Documentations found", description="", colour=discord.Colour.blurple())
msg = await ctx.send(embed=embed)
for button in buttons:
await msg.add_reaction(button)
while True:
if the_current_page_number != the_previous_page_number:
embed.title = f"Page {the_current_page_number}"
embed.description=""
#await msg.edit(embed=embed)
try:
reaction, user = await bot.wait_for("reaction_add", check=lambda reaction, user: user == ctx.author and reaction.emoji in buttons, timeout=10.0)
await msg.edit(embed=embed)
except asyncio.TimeoutError:
return
else:
the_previous_page_number = the_current_page_number
await msg.remove_reaction(reaction.emoji, ctx.author)
the_current_page_number = buttons[reaction.emoji]
I have this right now, when I run the command it gives the embed and on the first reaction, it switches pages and changes the number but if i react the second time, i need to press the reaction twice for it to switch for some reason which I cannot figure out
Hm, i'm sure there's already something in the bot that lets you do pagination
only the first one switches with one reaction press, and the 2nd 3rd forth etc take more than once
that seems long lol
and yeah that's one thing, in the one you sent
if reaction.emoji == LAST_EMOJI:
it checks each one individually where as when compared to mine i do not check each reaction indivudally
example
well anyways, you should be importing that paginator for consistency and code reuse
alright
Can I just confirm that I responded to the review comments correctly here? I'm not sure why it created a separate review from me without the context of Mark's messages as well as the responses https://github.com/python-discord/bot/pull/1742
Commentating on a review will create an embed saying you reviewed the PR, that's normal. It is how the github api works.
Right okay, thanks ๐
I actually blame the spell checker here, but thanks
yooo github is gonna be secure-er
tbh i dont understand why people still use password auth for pushing with the convenience of having an rsa key
{% if thing %}
...
{% elif other_thing %}
...
{% else %}
...
{% endif %}
yea lol, so much easier with ssh
I imagine so, since the if elif block evaluates before sending
sorry but do you know if menus is better than this?
yeah i would, but v2 isn't stable yet
would buttons be implemented to @stable mountain in the future?
alright i guess i'll stick with menus instead of paginator for now
Should i just wait for buttons and then start development of bot#447 
you should implement it using the paginatior in the bot
when we update the bot to use buttons, we will change the paginator
So it'll just work
You suggest pagination over menus?
when you say menus what are you referring to?
context menus or buttons?
or something else?
oh right, this
as far as I know on the menus ext, our paginator implements it
@fervent sage have you had interaction with this menu ext?
would you agree that our paginator does the same thing?
yep
Cool
So yea, @surreal veldt use our paginator class
it does the same thing, and will eventually be updated to use buttons (which are better than emojis)
Could I have the github source please
here
oh that's what you use, okay thank you
Get Discord snowflake creation time.
the pagination class is itself well dcoumented
okay welp that is a long pagination
you want me to implement pythons class to my bot? because i'm going to be needing to test it and then there is going to be tons of code i will need to add
did u go through the contribution guide? it says how to setup the bot (forking and cloning)
oh, no I haven't gone through it yet
Just go through it once, would def help you out with working with bot
You would need site for working with docs command, so either setup the site locally or via docker
i had say docker since it is simpler and faster
Yeah....im not familiar with github tbh lol
What do you mean? Are you not writing this in our bot?
he was copying bits of the bot code into his and then running it if i understand correctly
that's not gonna work very well lol
Well i was thinking to test it first
I'd suggest you follow our contributing guide and get the bot setup
we can help you if you have any issues while doing so
Okay, I'll take a look at the guide when i have time
well, assign sorted(...) to a variable, you use it 4 times
are you splitting it into two?
can you paste it here :P
why do you need to sort the list when calcing the length?
yea, that looks better
you could also make a half_length var too
which does len(..)//2
Do you have a GPG key at least, with gnupg started ?
you need to add it to git also
see .gitconfig
do you see it
nope
not a secret
it was short
and secrets are stored in gitconfig
as far as i know
GPG is totally different from SSH
What are you trying to do?
SSH isn't for signing your commits
It is used to access the Git server
Try echo hello | gpg --sign
lol, is your shell broken
What if you try to start bash, do you get any warning?
welcome Chris and Volcyy to devops team epic win
joe teach me devops 
oh that remind me im gonna set up minikube on a couple old PCs at my house and play with kubernetes
hell yeah
Joe you should make paid DevOps course.
I bookmarked this convo thread from Chris yesterday for this exact reason lol (I need to double check my SSH login set up too)
https://discordapp.com/channels/267624335836053506/635950537262759947/875068596273963118
The blog post in the announcement explains it better than I did
it has photos and everything
https://discordapp.com/channels/267624335836053506/765137969753096202/875674705611350036
For those like me who like to bookmark things
uh could someone help with "getting the bot setup" to write some code for it, I'm not really familiar with github and I can't seem to find this on the contributin guide
oh oops i was apparently reading the wrong one 
okay i forked it and for the development environment i'm kinda lost on what to do, I'm using visual studio code and have copied the HTTPS link
do you have git installed?
yeah i just did that, also it asked Launch git bash, should this be selected?
any of your terminals should work for the clone if you added git to path
I download git and then do git clone (https link) right?
since github is apparently removing password auth for that kinda stuff, I'd set up ssh and then you clone with git clone git@github.com:author/repo.git
(ik public repos dont need auth to http clone, but good practice)
so now using https link is bad?
you can use it
like this?
yes
so once i clone it, i can open it on visual studio code?
okay nvm i got it
okay i'm a little confused i cloned the bot and opened it on visual studio code but there are going to be import errors ofc, and not so sure what to do now
The getting started guide should walk you through setting up dependencies using poetry
Youโve done the โfork the project stepโ, keep going through the rest
(Youโll seriously struggle to get this done if you donโt follow the guide)
could someone help with the "install dependencies" part please (I'm not using pycharm)
just do poetry install in your shell
the part i don't get is
Make sure you are in the root project directory. This directory will always have a file titled README.md.
Install project and development dependencies. Remember to also set up pre-commit hooks to ensure your pushed commits will never fail linting.
The commands below that text are what you need to run basically
poetry install will do most of the work
It will also create a new virtual environment for your project
I'll try to take a look though I prob won't be available for a more involved review until late august or early sept
oh it's the tags tests
ye I'll try
add a translator in python bot ๐ค
What do you have in mind with that?
Who even uses password auth, isn't it, like, super inconvenient?
it also means you don't have 2FA on your account, right?
It doesn't work with 2FA, yes
You can use a PAT instead of your password though, and still use http auth
Hey, is there a scenario when the jump_url does not exists? It seems a strange thing to check for whereas the code does not check for the other elements of the reminder dict.
https://github.com/python-discord/bot/blob/main/bot/exts/utils/reminders.py#L186
And https://github.com/python-discord/bot/blob/main/bot/exts/utils/reminders.py#L197
bot/exts/utils/reminders.py line 186
if reminder.get("jump_url"): # keep backward compatibility```
`bot/exts/utils/reminders.py` line 197
```py
mentionable.mention for mentionable in self.get_mentionables(reminder["mentions"])```
Not in the current db at least
it might have been backwards compatibility with an old version of site, that didn't return a jump_url, or for the period after that key was added
So, it wouldn't be a problem if I removed it, would it?
I don't think so
@green oriole is on the git blame, so maybe he can remember 2 years ago as to why it was needed
Alright, I can somehow keep it in but it wouldn't be so consistent, I'm trying to reply to the original message instead of using a jump url.
I don't think it would be an issue
It sounds like your change should include a change to the site api
probably add a new column called 'original message id' or similar
to store the message to reply to
pat akarys emoji but I don't have nitro
Yes, but for now, I settled with splitting the URL, and we'll change it later.
The reason I think it's better to have the URL although is because if something goes wrong with getting a partial message, we can always fall back to the good old jump url.
bot#1741
sounds good ๐
@vale ibex @molten perch yes, we still had this if case since when we added jump links we still had some reminders in the DB that didn't had any url.
I guess sir @vale ibex can now use his newly found power to check if we still have such a reminder :P
SELECT * FROM site_reminders WHERE jump_url = NULL or something
Alright, then. Iโll remove it then, and push a pr ๐
@molten perch If you want me to review I am happy to help!
Just for removing this if branch?
I don't think we should be opening PRs for little stuff like that
Sure this is legacy code but it doesn't hurt anything
We can remove it when we have a PR touching the reminder code
Isn't the context of this is that it's part of an existing issue/PR for a feature?
Yes, it is! ๐
If it's part of a feature you're working on you can just include it in your PR for said feature. The commit can be used to describe the change being made. No need for a full blown separate PR
Yeah, I never wanted to open a separate PR in the first place ๐
I have been thinking reminders could be allowed in all channels with the bot only sending the remainders in #bot-commands (if invoked from a non mod channel) which would be incompatible with the reply feature. Any thoughts on that or should I open an issue?
Please do open an issue! We'll discuss this, but I think it should be fine
yea, I'd like that
sorta messes with the "reply to" idea slightly, but can be worked around
@molten perch is there a pr for the first change yet?
I'm just about to push it.
or review and add to it then lol
basically draft means that you are not done adding to your code
if its ready for review, don't draft it ๐
Yeah, I thought we were gonna modify it on the way once we discussed the details.
in that case I would still mark it ready for review
So you can invoke the remind command from anywhere and the output will be redirected to #bot-commands ? Than we shouldn't try to do reply to a message when a reminder is done really
We can find a workaround but not sure how good that would be
Well, I don't think so? Like replying: "Hey.. your reminder is in #bot-commands " That wouldn't look so good.
Yeah, I think we should only restrict it to #bot-commands
I mean, it already is, not even to #sir-lancebot-playground
If it's more convenient to not restrict it to #bot-commands then we can trash this reply idea, it worked just fine before.
Yeah but I also don't really get why to enable it in every channel
The reminder command does not seem so related to Python anyways
Why is it not in @dusky shore really?
If this suggestion goes through, it could still use a reply if the output is in the same channel (which will mostly be for staff then)
My solution would work perfectly fine, if the bot fails to reply it'll fall back to use jump_url and send it to whichever channel.
Bulma (or it's extensions) don't offer a way to make a modal, correct? If that's needed for the site, will we have to implement our own?
There is a modal class!
There is? Oh, I must have missed that, I'll take a look
tyty
uh regarding bot#447 i wanted to work on it, but i honestly don't have time for it now...
Why does the remind command in @stable mountain and not @dusky shore instead?
How does it suit Python bot
Python is for moderation and python-related commands, while lancebot is for fun commands right?
And remind command is a fun command which is not related to Python
Feel free to comment there, and a staff member can unassign you
For core developers and staff it might be helpful for moderation purposes, but for over 230,000 members it's a fun command really
No, I don't think it is
If all of our reminders were dropped, it would suck for our internal organization
I think reminders is fine where it is
I managed to misspell "reminders", the thing that I'd been the most afraid of.
I misspelled an important werd when I made a pull request to psf/black so don't be too hard on yourself
Cyan is used internally iirc
@dim pelican Just a tip: when writing commits, don't include line numbers and other stuff seen in the diff into the name. Git commits are named for people reading them as a list, so they should say something like "add an option to order extra sugar in a coffee order"
How long does it usually take for a PR to get reviewed?
not too long, which pr?
really depends on the pr, don't expect immediate reviews though
bot#1725
Nothing much
Ping me if you reply
Ah that one, personally I'll just have to test it before continuing with approving it.
To make sure the regex works correctly and it is not failing to escape correctly.
thanks as Iย said in the pr this is my first one so Iย just don't know how the whole system works
Hey! Sorry, but can somebody take a look at that PR? sir-lancebot#778
Two issues were put on halt, because they involved modifications in that Cog.
Hello, I'm new here and would like to get involved in contributing. Any recommendation on where to get started / any projects that would be good for someone new?
https://pythondiscord.com/pages/contributing/ should cover it!
A guide to contributing to our open source projects.
perfect, thanks!
It should have all of the information you need
Check out the issues on the repos if you're looking for things to do ๐
Hey, does this issue (site#369) still persist? I just want to make sure, I don't know whether issues can "expire", or not! ๐
This one in particular does not seem to be solved, though.
Perhaps if a good solution exists, it could be added. If itโs going to take too much effort, might make sense to save it for the rewrite
You mean the FastAPI implementation of the current API?
Yeah
Oh, well. I think it might take some time, I believe I might have an easy solution for that issue! ๐
why no participation in hacktoberfest 
Oh thanks
@green oriole yeah it is waiting for a re-review.
Cool, thanks!
I have had an idea of implementing an optional monkey-patch on stdin to allow standard input to work inside of snekbox. Giving it a new stdin argument.
Thoughts on if this would be a good addition to snekbox? It could allow for the !eval command to have an optional input.
I think it would be a good addition, but I'm sure how we can have a good UI with !eval. I feel like patching sys.stdin isn't an issue
Im also thinking of making the patch only apply if stdin is used. So we dont start making unexpected errors for those who dont explicitly use it.
Not 100% how i would do that yet. I have the stdin patch already made, i just need to figure out how it can be added to snekbox.
Thoughts on if this would be a good addition to snekbox?
What are yours? What are your use cases for such feature?
Primarily the possibility of allowing !eval in the python discord bot to take in optional input. This can be a great feature as you no longer have to avoid using input() in code examples. My current idea of how that could look would be:
!eval "Input one" "Input two" '''py ... '''
But i dont know what the best way that could be implemented for the least amount of misunderstanding.
I can't really think of a good UX for it and you can always patch the stdin in the code passed to eval if input is required
If we do that we would be piping stdin when creating the process
Yes. That is possible. But it can be very confusing if i try to show an example to someone, and i add a bunch of monkey patching code into the example.
My current solution is a custom StringIO object. That gets set to builtins.stdin
But im not sure how we could set that custom StringIO object to stdin in snekbox. Or if thats the best way.
!e ```py
import io
import sys
class PrintingStringIO(io.StringIO):
def readline(self, size=None):
line = super(PrintingStringIO, self).readline(size)
print(line, end="")
return line
sys.stdin, _stdin = PrintingStringIO("Sofi\n"), sys.stdin
print("Your name is:", input("Whats your name? "))
```
@compact veldt :white_check_mark: Your eval job has completed with return code 0.
001 | Whats your name? Sofi
002 | Your name is: Sofi
This is my current proof of concept.
Prints the stdin to where its expected to be seen if you ran the code yourself.
I think it makes sense to add stdin input to the API (since it's a standalone project that others can use) but not necessarily to support using it with our Discord bot, cause the interface is kinda clunky on Discord.
If this was implemented then I'd rather have it be done on the API so it can just pipe output to the subprocess rather than having to inject code into the user's
Yes. This is what i would like as well. As it seems rather error prone to be injecting code like that.
The nicest interface on discord may be to just have two code blocks: one for stdin and one for code.
That could mess with the multiple '''py ...''' '''py ...''' usability. And I think it would be hard to understand if you are new to the bot.
So we just just not allow multiple code blocks in one command if you want to specify stdin
!e ```input
Sofi
```py
print("Your name is:", input("Whats your name? "))
So something like this?
Yeah agree with that ^. Something sort of fun would be to specify the codeblock language for the stdin codeblock as stdin, which will cause discord to ignore it, but that might just me more confusing ๐
There could also be a check of the language used. Like i used '''input ...''' in the above example which could be a way to handle it as well.
Yeah. As then you need to know that you need to prefix it with input which is not super friendly.
and for other users it wouldn't be immediately obvious what is input and what is code
Sorry, I don't mean to just interrupt. But I believe it might solve the problem, if before actually eval.-ing the code, the bot would send a message, and the user would have to reply with the desired inputs provided that the code contains code that involves user input.
Alternatively it could be a comment in the code that is parsed, but parsing adds complexity
Wouldn't say so, not a bit harder than the logic in the reminder ๐
I didn't consider a subcommand, that could work nicely with two code blocks without interfering with the current codeblock handling
I was thinking about a subcommabd to set the stdin of your next eval
I don't like the idea of saving state
I found out i can probably use the subprocess.Popen's stdin.
I know most developers are on vacation, but anyone might want to comment on bot#1717 ?
Are you gonna make a pr for this then?
bot#1717
If you make it a second command, you can specify in the help that arg 1 is input, art 2 is code
Thatโs something familiar to discord users
Combine that with the ignoring of non-codeblocks and you get
โโโ
!eval-input
Input: all this text is ignored and exists to the benefit of readers
Sofi
Code: this is ignored too
print("Your name is:", input("Whats your name? "))
Still fighting subprocess to figure out how to add it in properly.
I don't remember the full process, but you have not gotten any strong objections so if you would like to do this let someone know and they can assign you the issue.
I'll comment on the issue that I like it, so that we have that on record.
Wdym do this?
Would you like to make a PR that solves this?
Don't worry about it
The question is would you like to try? If you get stuck just ask
Open a pull request?
Yeah
Bad news. This is the first time ever i have met a file object, and not file-like object. You are not able to pass in your own file-like objects. So using stdin in the original idea doesnt work ;-;
Is .communicate() on the process handle not sufficient?
Does it block or something?
Issue is that it doesnt print out the example input.
Never mind communicate won't work here anyway
I would try writing directly to proc.stdin
We can write to stdin just fine. But the issue is that it wont show in stdout.
Thats what the patch was supposed to do. It puts in the stdin section into the stdout. So it looks like you have written it in yourself.
Oh i see
I don't see why that's a problem. This isn't meant to emulate a REPL or terminal, so one should not expect the output to contain the input (it's called _out_put after all)
The idea was to allow:
Input: Sofi
You wrote: Sofi
But writing directly to stdin makes it to:
Input: You wrote: Sofi
You can open a draft pull request, that way if you get stuck and want to show your code you can show the whole pull request.
I'll assign you to the issue, I don't think there's any more steps to be done before you can start working. I think we have fleshed out the idea
Ah, that makes sense, and there is no way around it
There might be other ways to do it. But i cant find out a good way right now
Like we can still swap out the input() function to a different one. But then other functions that rely on stdin will still break.
Well, printing it at the right place would require timing the input, which isn't possible
What is a draft PR?
We could also use a program to wrap the python call in. It would handle the input/output outside of python.
And we can just get the nice stdout with the input in the right places.
you can open a draft pr on github which indicates it isn't read for review/to be merged yet
Instead of messing with python.
Well, how do you place the stdin at the right place in the stdout? That's the whole issue
When you open a pull request, there should be an option to "open it as draft". This has that grey icon and can't be merged until it is converted to an open one.
It's simply a clear way of saying "This isn't done"
The wrapping program, like inputter --input="Sofi\n" python3 ... and it would handle putting the input into the output we capture with subprocess.
Or just open a PR and fork the project?
how would that differentiate between stdout output from something like input and a normal output?
Yes, but in your example you put the stdin after Input:. How would inputter know that it is where it should be put?
you'd need to know when the proc is waiting on stdin which you can't really
The problem is the whole stdin is avaliable when the program is ran
You could look at when the process reads stdin
But that's waaayyy too complex
You're only able to open a PR if you have a fork with some type of difference/change. So fork, start making some changes and working on a thing, and if you'd like to get early feedback then a draft PR is helpful
I think like mark said just not writing that seems like the best option to me, the input is already in the invoking message anyway and newlines can be added to the prompts to avoid having them all on one line
But how can I open a PR from te fork?
It shouldnt be too complex.
create a branch on it with your changes and github should prompt you
Oh wait I have a repo from a PR I did a few time ago
It is way too complex for the benefit it gives. It will probably break on a lot of edge cases, I don't think it is worth maintaining that.
I'd say if you can do it, then go for it. Is this wrapper also in Python? Cause then we could just invoke it with -m wrappermodule
Maybe someone else can do it that knows github better(everyone)? I don't want to get some all the trouble of helping me and that I don't know English and discord.py or Python well
No im pretty tired after trying to make this work now. And i have ran out of ideas for how one could easily implement this
Are you having issues opening the draft pull request? It isn't the most important part, so start by creating a branch on your fork and opening your editor and poking at the bot. When you have something to commit, do that and you should see an option to open a pull request in the GitHub UI
To briefly interrupt you wonderful folks, because I'd rather not manually delete 63 channels or come up with an int-e that I could fuck up to delete said 63 channels, could I get some help reviewing this? https://github.com/python-discord/bot/pull/1677
I don't know how to use it with my editor and github? That is why I said I am not really good
What editor do you use?
Do you have the repository cloned locally?
We're happy to help you here, but if you no longer want to do it @green oriole (:pppp) can un-assign you
Yeah sure I don't know how
Can you share your patch? You said you had something but didn't know how to integrate it.
I might look into it more
@tawdry vapor This is the one.
Thanks
@brisk brook I addressed the requested changes
Perfect, I'll take another look
I think doublevcodes is back so they'll probably be able to finish this up. If you deleted your fork, you can just re-fork the repo on github.
whoops lol
I thought someone else owned that PR
I'm not really familiar with site, what seems to be the problem?
Tbh, after reviewing the site a bit, the way URLs are managed is a bit of a nightmare to reverse navigate. Since each URL can dictate where it's HTML files lie, there is no clear structure. Instead, what we could do is inject the correct path into the metadata of each page when building/starting, that way it's just available, and the button can read it without calculating
Nah, the idea is it's all automated
What that could look like is:
in site.manage.main, we recursively pull all html files, look for a <head> element, and add our own tag which is just the path of the file
I bet there is a django template to do that, but I don't know django
Perhaps #web-development will know, but that's the gist of the idea
Here is where it failed specifically ^
The tracebacks all go back to Django pretty much
Here's what you want to know I think: ```
Creating test database for alias 'default'...
........................./home/runner/work/site/site/.cache/py-user-base/lib/python3.9/site-packages/whitenoise/base.py:115: UserWarning: No directory at: /app/staticfiles/
...................................................../home/runner/work/site/site/.cache/py-user-base/lib/python3.9/site-packages/django/db/models/fields/init.py:1365: RuntimeWarning: DateTimeField Infraction.expires_at received a naive datetime (2021-08-15 02:36:09.794182) while time zone support is active.
Do you not have testing set up locally?
.....................................................................................Unable to parse the GitHub repository metadata from response!
.......Unable to parse the GitHub repository metadata from response!
Unable to parse the GitHub repository metadata from response!
.Internal Server Error: /pages/resources/reading/
django.urls.exceptions.NoReverseMatch: Reverse for 'resources' with arguments '('reading',)' not found. 1 pattern(s) tried: ['resources/list/$']
ERROR: test_redirects (pydis_site.apps.redirect.tests.RedirectTests) (original_path='pages/resources/<str:category>/', redirect_route='resources:resources', name='resources_resources_redirect', redirect_arguments=(), args=('reading',))
Should redirect to given route based on redirect rules.
django.urls.exceptions.NoReverseMatch: Reverse for 'resources' with arguments '('reading',)' not found. 1 pattern(s) tried: ['resources/list/$']
I believe the problem lies here:
https://github.com/python-discord/site/blob/main/pydis_site/apps/resources/urls.py
https://github.com/doublevcodes/site/blob/doublevcodes/smarter-resources/front-end/pydis_site/apps/resources/urls.py
You seem to be using an older(?) version of this file. (I'm not sure though, it seems so for me)
Opened an issue on the site repo after realizing I can't actually run the unittests locally ๐คก
I've contributed to the site before, surprised I never ran into problems
@clever wraith I've come up with a terribly hacky solution
I'll try to integrate it into your branch right now, this has to be witnessed
where is the branch btw lol
ahhh
I can get it from the PR and push it to a new branch
But the PR itself will have to be closed and reopened
Let me
try to replace your branch with this first
In the meantime, hack has been pushed
@clever wraith can you give me permission to edit your fork?
HassanAbouelela
sweet, thanks
From my code, or from what I'm doing now?
Also, was this PR created from your main branch?
That makes it a little harder to fix haha
I can sort of explain what's happening:
-
Context processors get called whenever django is trying to render a template. I added one that adds a meta tag with the content being the link to the file. (Example:
pydis_site\templates\home\index.htmlon the home page). -
If you take the value from step 1, and combine it with https://github.com/python-discord/site/blob/main/, you'll get a URL to the file:
https://github.com/python-discord/site/blob/main/pydis_site\templates\home\index.html -
The button can create this URL
If you are curious about step 1, that's where 90% of the meat of my changes are
Basically, it's magic, but if you're really curious, this is the function that calls path_processor:
https://github.com/django/django/blob/main/django/template/context.py#L244
I use inspect, to get the variables from that function (bind_template)
One of the variables that function sees is self.template. Self.template contains the path pydis_site\templates\home\index.html
haha, that's fair
I'm not sure if this PR will get accepted with my code
Lol what did you try
I see
Yeah...
Actually, now I'm realizing what I did won't work either
I'm linking to the HTML template, not the markdown content
Where is the button supposed to show up btw?
Ah, I see
It isn't on all pages yet
going to have to rethink my approach again though, not sure how these markdown templates work
Erm, @vocal wolf did you intend to request a review from me? I've not really been involved in bot development so far, but I'll give it a try ๐
๐
PR up for grabs - WTF Python command:
Have you had a chance to think about the issue templates/forms for meta?
Oh right yes, I have had some time now. Last time we spoke I had a migraine, couldn't communicate very clearly.
I was about to ping you about the label stuff as well
I need to go back and review the conversation that we had previously
yes
then this will need to change
agreed
That's a misleading license. I can't actually do what the fuck I want if what I want involves making changes without changing the name.
Never mind, that clause is about changing the license rather than the code it's applied to
yeah
DO WHAT THE SHIT YOU WANT TO PUBLIC LICENSE
Version 1, August 2021
Copyright (C) 2021 fix error
Everyone is permitted to copy and distribute verbatim or modified
copies of this license document, and changing it is allowed as long
as the name is changed.
DO WHAT THE SHIT YOU WANT TO PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. You just DO WHAT THE SHIT YOU WANT TO.
``` done
I wonder what the difference is between this and public domain since this license seems to retain copy right, but is trying to grant permission to do anything
Public domain means you're making a contribution to humanity without asking back, WTFPL means you just could've give less fuck, I suppose
@tawdry vapor going back to our conversation starting at the link below, how would adding such things be overwhelming?
There are 4 areas and 3 types. That would mean 12 templates.
@vale ibex PR merged: #dev-log message
Actually, 5 areas
I can now see how that's overwhelming, I misunderstood the statement.
If we just have 1 for each area, then the templates either have to be vague in their descriptions or they have to have elaborate descriptions that go like "if it's an addition, then... But if it's a removal, then ... Or if it's a revision then ...."
I don't have high hopes for GH offering a more powerful forms feature, where we can display components dynamically based on previous choices.
So we only want the 3 areas, being add, remove, and revise/enhance (whatever we call it), what are the types that we're talking about? By labels such as backend/frontend?
Just look at the labels https://github.com/python-discord/meta/labels
ah those labels
It doesn't necessarily have to be 5 * 3 templates. There could be a way to merge at least some of them without it being too vague
I don't know..,
@tawdry vapor I'm thinking of check boxes with somewhat-specific descriptions of when to use a certain type for some area, but that's probably not the best solution.
Hell, it's basically not a solution since what I've just said is a vague interpretation of what we need and discussed
Maybe it's because we don't have that many options here, either way we don't want 15 templates.
I think we need to determine which combinations of areas and types will require unique fields and which can be generalised
For example, we can probably get away with a single template for tags, regardless of add/remove/revise
All it needs is a description and a justification
A description field is a bit awkward for removal, since all it needs to have is the name of the tag.
An example of a unique field would be the locations field for resources. That's only needed when adding a new resource.
CC0 limits liability for instance while WTFPL does not
.love @vale ibex
Seems about right
It is a bit weird that it doesn't keep the embed
yea, there's a 7.5 delete_after on inchannel and inmonth checks
i am getting this for some reason on poetry install, my enhance incidents branch was behind where we had pipenv so, i rebased it to upstream and i get this
I hack fix for this is to change all the 3.5.* in poetry.lock to just 3.5, atleast for me
Is your Poetry up to date?
yeah 1.2.0a2
No idea
did i just mess up the lock file, i will just reset it to head~1
https://github.com/python-discord/bot/pull/1446#discussion_r688997675 should i do this by checking if the channel can be viewed by helpers?
third point
yes, if the role has read messages
right and i didn't understand the second point, what is #message-change-log?
couldn't find it in the code anywhere
mod log channel?
but that's again only mod+ and not helpers
so i don't think we should show that then
#message-change-log is where we log edits and message deletion
It's constants.Channels.message_log
alright
but what about this?
Yea, that channel is mod only
so should i just ignore those messages?
or find the links to them but not show the content
possibly just linking to that message it enough
@patent pivot Not sure if you know already, but
disappeared in #dev-log. Not a big thing, just noticed it.
It never worked, bug on discord end
Ah okay
Hi, how did you start contributing to other projects
How did you find the right one
Wdym?
Reviewing PRs is top-tier procrastination ๐
hey is anyone going to be checking out/working on bot#447 ?
finally back at contributing after 5 billion years
didn't you do something with cloudflare or something?
Yes โ we rewrite the embeds to include the Discord emote but however Discord handles GitHub payloads doesn't support discord emotes
Oh
*except when it randomly does
My belief is it works in comments but not reviews
Like I mentioned in the comment there I'm planning to look into it if nobody else does, just don't want to commit time to it at the moment
@green oriole
Here's your reminder: Ask Sebastiaan if he is back from vacations
[Jump back to when you created the reminder](#dev-contrib message)
Hello @hardy gorge! I don't know if you are back in business yet, but if you are I have a question ๐ We would like to change the reminder.jump_url field in the database schema to instead be a message ID. What should we do? Should we wait for the FastAPI rewrite and open an issue there, change it now on the Django site, or some else?
My opinions, reminders arenโt going to be transferred to api any time soon atleast not this month for sure as dB setup is remaining and we would need to review it. So I would say to implement it on django site
How will you tell which channel it's from?
Yeah wouldnโt you also need the channel ID if you are wanting to fetch the message and reply to it?
Also from what I saw you wanted to have a fallback to the old behavior no?
It's not necessary to change the API, actually.. it's better if we won't. My solution falls back to the old behaviour when it can't find the original message
bot#1749
But the modifications of bot#1748 will probably render this idea useless. So :/
Yeah not sure why we need to change the API
The answer though is that we're not in a freeze for fastapi
(I would love to push the generated models to get the API going, btw. ๐ )
It is already a field
Yes, but why saving the whole url, that's pointless
Because .
Thatโs what happened ๐
If the bot can reply then it will, otherwise it uses the jump url.
Yeah we remove reminders when they are deleted
But if you can use the reminder in every channel, and the bot sends the reminder into bot commands, then adding this reply feature is useless.
@molten perch Adding log.trace(f"Deleting {matches[0]}") just before the if matches line output this for me ```
Deleting discord.com/api/weebhooks/876911370745040986/-uawyVt2XQgXE-u9Bx5d0SpL0szH896jDZlka6Ej_7Rwujw1XHU_FnYSvPQsAeSBxO-b
see how it's missing the protocol?
So the next line raised aiohttp.client_exceptions.InvalidURL
I do, I find it very strange. I've tested it out and it seemed to match the url.
(i changed it to weebhooks before posting here so the bot doesn't zap it)
I wonder if it's because I tested with a canary link
lemme try without canary
It should work with both really
Can I do an eval here? With the code.
Just by testing the regEx?
Sure
Yea, alright. It works if it's just https://discord.com/api/weebhooks/876916761482645544/KY0Wv1_JA_8O6Z4TqtcC9Sm3OuYjqCZDWdCcYySS92Jv99Zcyz25p5aOnrs7RbkTTWuv
But, if it's https://canary.discord.com/api/weebhooks/876916761482645544/KY0Wv1_JA_8O6Z4TqtcC9Sm3OuYjqCZDWdCcYySS92Jv99Zcyz25p5aOnrs7RbkTTWuv the https doesn't match
which makes sense looking at the regex
oh, alright then ๐
I was a bit confused.
((?:https?:\/\/)?(?:ptb\.|canary\.)?discord(?:app)?\.com\/api\/webhooks\/\d+\/)\S+\/? should do the job
but there might be a better way, if anyone is lurking
It seems to be working with both types of link.
Yea it should work, but there might be a more concise regex to do the job
I'm not the best at writing regex
I'm not sure whether regEx can be concise at all ๐
It was hell when doing NLP.
Alright, thank you! I didn't think of canary urls
hey @vale ibex when you have time ive gotten back to .reverse and re-requested a view
@vale ibex, looks like you posted a Discord webhook URL. Therefore, your message has been removed, and your webhook has been deleted. You can re-create it if you wish to. If you believe this was a mistake, please let us know.
Nice @molten perch ๐
Yaay ๐ฅณ
hell yeah
Hopefully it also deleted from Discord ๐
Good job!
๐
alright chris, resolved
RE: https://github.com/python-discord/sir-lancebot/pull/760#discussion_r689875190
It's such a rule I try to live by
hah yea, it definitely leads to nicer code to read
Not to shit on someone's code, but here you can see a good example of where "filtering if-statements" make more sense
Specifically see this code https://github.com/MattW-source/discord-wilfred/blob/master/commands/cosmetics.py#L97-L108
commands/cosmetics.py lines 97 to 108
if msg.content.upper() == "Y":
if image_url is None:
sql.execute_query("INSERT INTO cosmetics (cosmetic_name, cosmetic_rarity, cosmetic_description) VALUES ('%s', '%s', '%s')" % (title.replace("'", "''"), rarity, description.replace("'", "''")))
else:
sql.execute_query("INSERT INTO cosmetics (cosmetic_name, cosmetic_rarity, cosmetic_description, cosmetic_image_url) VALUES ('%s', '%s', '%s', '%s')" % (title.replace("'", "''"), rarity, description.replace("'", "''"), image_url.replace("'", "''")))
await ctx.send("Cosmetic Created")
else:
await ctx.send("_Cancelled_")
else:
await ctx.send("**Error:** Permission Denied. This command requires permission rank `โMANAGER`โ")
else:
await ctx.send("**Error:** Invalid Usage")```
You end up with these error cases at the end, that you don't know to what if-statement they map to

The only way to figure out would be the hide the code and expand it up again
To be fair, it starts simple right. You want the code to run if X right
But then you only want to continue if Y or Z and W.
So you end up like this, it's tough writing readable code ๐
yeah im gonna try and keep on that
Just a question, this issue: bot#1624 , seems to handle two commands ghost pings when an error happens right?
And PR bot#1696
Yes
But I see there is also this thing with eval command
I did !eval in #python-discussion (I thought you can do it there for example) with a user mention, and it was deleted
pretty sure that is intentional for the redirect
Yeah but the user was still ghost-pinged
It's pinging the user who invoked the command immediately, while docs/pypi could have mentions of other users
!eval
print('test')```
@brazen charm
@viscid coral :white_check_mark: Your eval job has completed with return code 0.
test
ah right that'll delete the message too
I'd say it's worth it in this case with the likelyhood of it containing a mention and the size of messages usually passed to eval
I think there's a fundamental difference between those two concepts. When you're pining someone with a tag, there isn't as much...
what Numerlor said
Though I wouldn't really care either way
Admins and mods already get a bunch of ghost pings, I just accept it as a reality of life
It can still confuse other users, it'll delete the message pinged them and even in search history there won't be any result
I mean, there is not really anything bad about adding this
I'd have to retain messages that are currently being purposefully filtered out from the high traffic channel
senpai noticed me 
lol
Is there a way to leave a comment on some changes that are not in the diff?
I want to make a comment about this docstring
only for a few lines around it afaik
@short snow I think it's redundant to put explanations like "this is a dataclass" or "this is a class" in a class, Ideally it would be
@dataclass
class _QuizEntry:
question: str
answer: str # comma-separater
``` alternatively, the comment is not needed if it's clear that `answer` has multiple values ```py
@dataclass
class _QuizEntry:
question: str
possible_answers: t.Set[str]
Another question: why is DynamicQuestionGen a class? seems a bit Java-y to me to be honest, you don't create instances of it, and it doesn't have any state
when people have time, please look at sir-lancebot#760
@clever wraith not directly related to the PR, but
_EXECUTOR = ThreadPoolExecutor(10)
- Why
10? - Are you sure that PIL releases the GIL on all the operations? How was that measured/checked?
There seems to be a bug right now where python bot responds when someone sends a message in #discord-bots
Or in any channel I guess
Yep yep, t'is solved now, sorry about that
What happened?
We tried to deploy a test bot that could only be used in 2 channels, except it sent a message when any other message was posted, because the onmessage handler was trying to process it, but the message wasn't in those two channels
agreed that could be done
I wanted to group all the dynamic question generator functions together, thought class would be the best,
I'd move them to a module if you want to group them together
like
- module.py
+ module/
+ __init__.py
+ cog.py
+ submodule.py
Do I need to be assigned a PR in order to review it?
On either of the main bots, that is.
Nope, assignment is like when you are working on the pr
and review requests are like when someone specific are requested to do a review, for example i did some crazy devops stuff then i would need joe's approval on the pr
so joe would be requested a review
yeah i will do that
I checked out bot#1748 and modified my PR bot#1749 accordingly, so even if the bot replies to a reminder it'll still include a jump_url and if it can't reply, it falls back to just pinging and sending the original embed. This way reminders can be allowed in every channel. Is that fine? ๐
@outer plaza
- wrong channel, check out #โ๏ฝhow-to-get-help
- we're not going to help you make a keylogger, please read our #rules
no idea, i chose that because i saw it used in 8bitify
@patent pivot does king Arthur have a custom paginator yet?
IMO this is better, because sometimes the replies just don't load since they aren't in the cache or get fetched. So always including the jump url is a good idea imo
Ah lol. well, I can make a pr to add one once I have this one working (writing for a different bot so no loss to me if you don't want it)
Using discord buttons, too
interesting, but there is no use for it right now
@timid sentinel how about the most-read articles of the day before? we could also include the on this day?
ooh, that sounds interesting. I think that could work quite well.
right, am a bit busy this week, I will try to get it up by the end of this week. Both of the comments should be resolved by this change :D
Nice, no rush ๐
while i wait for a merge for 760, ill work on cowsay
sure
Interactions are fun but I'm not a huge fan of the discord.ui.View class
I think it's pretty fair and straightforward, but dpy 2 is not stable just now ๐
-_- for whatever reason the master docs isn't possible to get to without know the URL. It doesn't appear as a dropdown on the docs page.
Ehhhh, I would consider it stable enough to use but a production bot probably shouldn't run it
I complained about this bitterly last week
Yeah, it's an option on read the docs hosting to hide a docs build
I'm not even sure how I found it ๐
Oh, it was posted on the dpy server ๐
You might want to take a look at the examples in their repo it helped me a lot.
https://github.com/Rapptz/discord.py/tree/master/examples/views
you don't know every url?
never said I knew every url

Same ;-;
