#discord-bots
1 messages · Page 1115 of 1
what's your code looking like?
bloody confusing if you could send me the docs maybe i can understand it better, im so used to the orginal version
pip uninstall discord.py or pip uninstall discord
use disnake its completely documented and is up to date
disnake?
!pypi disnake
you can just do
pip install disnake
to learn it you can just use the guide: https://guide.disnake.dev/
you say that and your grammar makes you look like a dummy
💀
youre not a dummy
youre my dummy😉
😳
what dummy
lmao
wut
just ping sarthak hes a smart boy
⭐docs⭐
⭐src⭐
⭐seems like a you problem⭐
😡
Okimii reads source at a 5th grade level
No
no females
how do u know im here 😳
welp i saw that
mightve pressed a space or 2
play fall guys with me
Alt tab couldn’t be me
i dont have fall guys 😔
download it
it cost moni, i dont got moni 😔
its in the epic games launcher
and it has crossplay
i can't install epic games, it requires admin which i dont have 😔
what are you on? your school computer🗿
maybe 😳
bro
Bro probably on ChromeOS
💀
Let the man be on his school computer
😭
channel = bot.get_channel(ID_OF_THE_CHANNEL_HERE)
if ctx.channel is not channel:
return await ctx.send("This command is not available in this channel")
Where do I put this code? I want to add it to my command
async def on_voice_state_update(member, before, after):
if after.channel.id == 984492572544213083:
CAT = discord.utils.get(member.guild.channels, id = 984491906237075496)
vc = await member.guild.create_voice_channel(f"{member.name}", category = CAT)
await member.move_to(vc)
if not before.voice is None and after.voice is None:
if len(before.voice.channel.members) == 0:
def before.channel.delete()```
anyone know why it dosnt delete the voice channel after all people leave it?
how can i make a command that pings the person that sent it and sends an embed in the same message as opposed to it pinging them then sending the embed in a different message
Logic is flawed. It should be if(len(after.voice.channel.members) == 0): because if a member is the last person to leave a voice channel, then it'll have 0 members after, not before.
i know how to fix embed but not the ping thing
k
i know how to ping them i just need to make it combine the messages
k
before and after is not a defined. I have that error
embed = discord.Embed(...) # construct your embed here
# more construction 🚧
await ctx.send(member.mention, embed=embed)
Maybe you indented it incorrectly?
ahh thanks
if(len(after.voice.channel.members) == 0):
def before.channel.delete()```
its only the before after here that has no defined
@sick birch can u help me in dms
I don't do DM help sorry, ask here instead
Ah I know why, on_voice_state_update doesn't take a member argument
channel = bot.get_channel(ID_OF_THE_CHANNEL_HERE)
if ctx.channel is not channel:
return await ctx.send("This command is not available in this channel")
Where do I put this code? I want to add it to my command
well you would use logic no?
Are you trying to restrict a command to a certain channel?
Yes
use a check instead then
Idk how
you can just check the id of the channel the command was invoked in
if ctx.channel.id != int:
...
But where do I paste the code
ok. And how to i fix that. Im not the best
Remove your first member argument
ok
in a command?
Yes
do i need to remove member everywhere?
then you have answered the question yourself
ah wait nevermind
Bro wtf I get no help
we cant go to your house and do all of the help
You sort of helped yourself
Yes, yes it was
ok
That's bordering on the line of spoonfeeding
Go fuck off
Okay? No need to get heated over it
thats not very nice is it?
we dont know how your code looks so how can we help😵💫
Its a simple command
but what can be the problem then
mind sending the code if you want further help?
depends what he wants
is it hard to make a DISCORD BOT AUTOSHOP
what
I feel like it may be indented incorrectly, as mentioned before. Can you send the code for the function?
That way I can figure out what's going on in the context of lines around it
async def on_voice_state_update(member, before, after):
if after.channel.id == 984492572544213083:
CAT = discord.utils.get(member.guild.channels, id = 984491906237075496)
vc = await member.guild.create_voice_channel(f"{member.name}", category = CAT)
await member.move_to(vc)
if not before.voice is None and after.voice is None:
if(len(after.voice.channel.members) == 0):
def before.channel.delete()```
Aha, culprit spotted
!warn 815897400211800105 This is no way to speak to other community members. Please read the #code-of-conduct and our #rules if you wish to remain a member here.
:incoming_envelope: :ok_hand: applied warning to @slate swan.
It is indented incorrectly, it's outside the scope of the function hence the undefined name error
for me your talkin some other thing lol. can you say it in a other way?
how would one do some threading with dpy
Yeah, basically those last 3 lines are outside the function
oh ok
Which is why it can't access before/after as that's defined inside the function
robin is it hard to make discord bot autoshop
so wahts the best library for dpy? is it pycord?
ok
There is no definitive "best"
I'm not sure what you mean by "autoshop," can you elaborate?
whats something thats thread safe
Why do you need threading?
hmm I will get some more info and then I will reach out to you
so i just somehow get them to not be a outside function?
im a threading monster
Easy, indent those last 3 lines one level
Sorry..?
I relly dont wanna ask to much but how?
tab
im still trying to learn stuff
ctrl ]
Select those 3 lines, press the tab button on your keyboard
ok
robin are you a php dev toooo?
oh that what you meant by outside lines
Understandable, but probably don't wanna do threading with discord bots if you don't need to
do need toi
No, I mostly work with Python, JS/TS, and Rust
now is it only if thats un error on the 2 line of the 3
sadly i cant just smack numba onto PIL
Rust 😍
there fore making image processing SLOW
Ah I see what you're doing
like I am still learning python but I dont have any ideas in my mind to do
you have any
You want to spawn a new thread when you have to do image processing?
yes
wrap an api
That's more reasonable
ofcourse i wouldnt want to do it for any command
Other than being a "threading monster"
i am a threading monster
hmm okey will try it thanks
you should make an async client and a sync client thats also something cool to do
I'm not fully sure if discord.py is threadsafe so there's that to keep in mind
dont they use asyncio.Lock
which isnt thread safe?
it isnt
what can i use instead of if?
gosync
are async functions even thread safe
Code again please?
I believe you can have an event loop running inside a thread, yes
But how you implement it is the problem (discord.py, for example)
ya i tried dat
bro
async def on_voice_state_update(member, before, after):
if after.channel.id == 984492572544213083:
CAT = discord.utils.get(member.guild.channels, id = 984491906237075496)
vc = await member.guild.create_voice_channel(f"{member.name}", category = CAT)
await member.move_to(vc)
if not before.voice is None and after.voice is None:
if(len(after.voice.channel.members) == 0):
def before.channel.delete()```
dat shit was buggy
ops
can I ask what pingu is trying to do?
Delete a voice channel once everyone has left
think he is doing one of those join to create voice channels
async def on_voice_state_update(member, before, after):
if after.channel.id == 984492572544213083:
CAT = discord.utils.get(member.guild.channels, id = 984491906237075496)
vc = await member.guild.create_voice_channel(f"{member.name}", category = CAT)
await member.move_to(vc)
if not before.voice is None and after.voice is None:
if(len(after.voice.channel.members) == 0):
``` so?
I think you should learn the basics of python first, because it seems like you're only hindering yourself. That aside, your 2nd if statement has to be indented so it's inside of the first, and no need to define a nested function
Let's not spoonfeed please
I have but my brain scks
okie dokie
it doesnt suck just learn python
!resources you may find these helpful
The Resources page on our website contains a list of hand-selected learning resources that we regularly recommend to both beginners and experts.
I don't mean to turn you away, but you'll only be doing yourself a favour by learning python before attempting discord.py
i wonder why python doesnt have an up to date book and async book
i sat on 2 website and tryed
As the issues you're having are quite trivial and should be solved pretty easily
anyways spoonfeed me some information
i aim quiet clueless as to how id do dis
wait let me show uy what i tried first
The first thing that pops up into my head is to have an API that does all the image processing
ya i thought about that as well
Use aiohttp which is already a dependency of discord.py, so it still shouldn't be blocking
hm
@commands.command()
async def foo(self, ctx):
async def processimg(ctx):
...
await self.client.loop.run(await processimg(ctx))
what did i do wrong here
asyncio.AbstractEventLoop has no such attr
idk i cant think of another alternative to threading a command
anybody know, how can i mention a role with webhook?
AttributeError: 'Webhook' object has no attribute 'get_role'
If you got the id just format the string yourself
<@&831776746206265384>
To ping the mod role for example.
Why 
i made that mistake like 2 days ago too so... :D
Sorry it was meant as an example.
you sure?
I came here responding to a mod ping so yes
it doesnt seem formatted for me😭
yeah it isnt formatted
still pings
frrr😭
discord really outdoing 'emselves once again
like always
Does it also ping with a user id?
ping me
oh nw at all, its honestly discord's fault
@slate swan
😮
🎉
😭
Well the more you know I guess.
yup
It's not betterdc it's just a back-slash before a mention.
cursor.execute("UPDATE users SET (работа, должность) = (?,?) WHERE id = ?", ('Шахта', 'Шахтер[1]', {interaction.user.id}))
conn.commit()
Dear, tell me what is wrong?
no I meant the background of that ss
yep so it doesnt format the string
i love you guys more!
Sharp eyes 🐒
did you just monkey me
could be the build override
I love him too, he always helps me❤️
this is the build overwrite i mostly use https://discord.com/__development/link?s=Z7XEywE8rsgTvI0MR9P4OknzH4LtPi9j9%2Br8Hwzrohg%3D.eyJ0YXJnZXRCdWlsZE92ZXJyaWRlIjp7ImRpc2NvcmRfd2ViIjp7InR5cGUiOiJicmFuY2giLCJpZCI6ImFubmllL2RhcmsifX0sInJlbGVhc2VDaGFubmVsIjpudWxsLCJ2YWxpZEZvclVzZXJJZHMiOltdLCJhbGxvd0xvZ2dlZE91dCI6ZmFsc2UsImV4cGlyZXNBdCI6IlN1biwgMjggSmFuIDIwMjQgMDE6NTU6MDcgR01UIn0%3D
its pog
Why is the user id inside a dict?
I never miss 
Too bad betterdc violates ToS, awesome stuff could be done.
I don't know how to?
❤️
not even a command exception wraps that error, I don't know how we even got to this channel with that error
❤️
He doesn't help me :(
except that it's because it's in a discord bot
He is my rrr
too bad nobody will know
Is there a way for the bot write emojis?
You can use the raw format for that
It didnt work i wrote the raw format and the bot typed :pepe: (the emoji name)
i would just use discord.py since disnake is built off of discord.py but discord.py has more users and prob has better support in the server
.bm
woah did you make this override urself?
hello, my bot does not post to discord anymore, and im not sure why
are u hosting it
yeah, i can test !hello, and it answers Hello RenegadeZed.. i can also !ping and he says Pong!
it's a mess of a code, cause i was trying to create a list to check all the people streaming, and post who is streaming from the list.. but im the only one streaming in my discord atm.. and it just plain doesnt work
if anyone wants to help
https://paste.ofcode.org/NGyCdtCgFQwcBwhdje7Da3
i think somehow it gets stuck at the if no channel: return live.. and just doesnt do the for loop
in this part.. cause i never see the print statement
# post in discord if streamer is live
@loop(seconds=90)
async def check_twitch_online_streamers():
channel = bot.get_channel(966493808869138442)
if not channel:
return
notifications = get_notifications()
for notification in notifications:
print("Sending discord notification")
await channel.send(f"We are now live at https://www.twitch.tv/renegadezed\n{notification}")
Are u starting the loop?
im not sure i understand the question
You need to start the loop check_twitch_online_streamers.start()
!d discord.ext.tasks.Loop.start
start(*args, **kwargs)```
Starts the internal task in the event loop.
yeah, thats in the pasted link, at the end
Oh lol I can’t see it on mobile
if __name__ == "__main__":
check_twitch_online_streamers.start()
bot.run(disctoken)
Before you check if not channel can u print channel
let me check.. also as a quick side question.. the @rigid granite(seconds=90) how short of a timer can i use there?
Probably any time but I wouldn’t make it too short
do i get a soft ban if i spam the API too much? like 30 seconds?
I’m not sure
hmm, it printed None
Is this happening the first time it’s looping?
ok now i got live-notifications.. which is the name of the channel
yeah on first time, None, second time, after 90 seconds, i got live-notifications
im getting live-notifications every 90 seconds
Ok because it’s starting before the bot is run it’s returning None because the bots cache doesn’t exist yet. To solve this u can wait_until_ready in the tasks before loop
!d discord.ext.tasks.Loop.before_loop
@before_loop```
A decorator that registers a coroutine to be called before the loop starts running.
This is useful if you want to wait for some bot state before the loop starts, such as [`discord.Client.wait_until_ready()`](https://discordpy.readthedocs.io/en/latest/api.html#discord.Client.wait_until_ready "discord.Client.wait_until_ready").
The coroutine must take no arguments (except `self` in a class context).
Changed in version 2.0: Calling [`stop()`](https://discordpy.readthedocs.io/en/latest/ext/tasks/index.html#discord.ext.tasks.Loop.stop "discord.ext.tasks.Loop.stop") in this coroutine will stop the initial iteration from running.
well, the None being printed at start isnt the problem i think.. cause i do get live-notifications after 90 seconds.. so it should post to discord no?
guys, i want to get message id and edit it in webhook, how?
msg = await channel.fetch_message(message_id)
I want to this but in webhook
ty i ge it
alright so this one return
live-notifications
Check...
just before forloop
so its not entering the for loop? is it because get_notifications is broken?
# post in discord if streamer is live
@loop(seconds=30)
async def check_twitch_online_streamers():
channel = bot.get_channel(966493808869138442)
print(channel)
if not channel:
print("not channel")
return
print("Check...")
notifications = get_notifications()
print("just before forloop")
for notification in notifications:
print("Sending discord notification")
await channel.send(f"We are now live at https://www.twitch.tv/renegadezed\n{notification}")
# add streamer to online_users
def get_notifications():
users = get_users(config_data["watchlist"])
streams = get_streams(users)
notifications = []
for user_name in config_data["watchlist"]:
if user_name not in online_users:
online_users[user_name] = datetime.utcnow()
if user_name not in streams:
online_users[user_name] = None
else:
started_at = datetime.strptime(
streams[user_name]["started_at"], "%Y-%m-%dT%H:%M:%SZ"
)
if online_users[user_name] is None or started_at > online_users[user_name]:
notifications.append(streams[user_name])
online_users[user_name] = started_at
return notifications
if __name__ == "__main__":
check_twitch_online_streamers.start()
bot.run(disctoken)
alright, i just check the access token... had a weird feeling
it was expired lol
does anyone know what the problem is when bot.get_channel(server_id) never resolves the promise?
wdym by 'never resolves the promise'?
How do i make (str(client.guilds)) just show the name of the servers?
print("Server online in:",(str(client.guilds)))
like I do await bot.get_channel(server_id) and the program is stuck on the line and never goes past it
I meant channel_id
get_channel isn't awaitable, it searches through cache. In the other hand, you've got fetch_channel which is awaitable
use list comprehension
and how do i do that. Pretty new to python :/
!listcomp
Do you ever find yourself writing something like this?
>>> squares = []
>>> for n in range(5):
... squares.append(n ** 2)
[0, 1, 4, 9, 16]
Using list comprehensions can make this both shorter and more readable. As a list comprehension, the same code would look like this:
>>> [n ** 2 for n in range(5)]
[0, 1, 4, 9, 16]
List comprehensions also get an if statement:
>>> [n ** 2 for n in range(5) if n % 2 == 0]
[0, 4, 16]
For more info, see this pythonforbeginners.com post.
Can someon help me i have a giveaway bot and when giveaway ends it says @invalid user and I tried doing {winner.displayName} but when giveaway ends bot doesnt send anything
Pls help
Hello?
It only works with winner.mention
where can i get help for a way to format the twitch API response to a proper discord notification?
theres a key in the json response that says thumbnail_url.. but when i click on it i get 404
hey guys why warn cmd is not working?
@commands.has_any_role(989044819101896735,989043172007104552,)
async def warn(self, ctx: commands.Context, target: discord.Member, *, reason):
await target.send(f"{reason}")
await ctx.send("Member warned :white_check_mark:")
traceback?
Traceback (most recent call last):
File "C:\Users\Copy Service\PycharmProjects\wibuos\venv\lib\site-packages\discord\ext\commands\bot.py", line 606, in _load_from_module_spec
spec.loader.exec_module(lib)
File "<frozen importlib._bootstrap_external>", line 879, in exec_module
File "<frozen importlib._bootstrap_external>", line 1017, in get_code
File "<frozen importlib._bootstrap_external>", line 947, in source_to_code
File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
File "C:\Users\Copy Service\PycharmProjects\wibuos\venv\commands.py", line 76
@commands.command(name="warn")
^
IndentationError: unindent does not match any outer indentation level
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "C:\Users\Copy Service\PycharmProjects\wibuos\main.py", line 16, in <module>
bot.load_extension("commands")
File "C:\Users\Copy Service\PycharmProjects\wibuos\venv\lib\site-packages\discord\ext\commands\bot.py", line 678, in load_extension
self._load_from_module_spec(spec, name)
File "C:\Users\Copy Service\PycharmProjects\wibuos\venv\lib\site-packages\discord\ext\commands\bot.py", line 609, in _load_from_module_spec
raise errors.ExtensionFailed(key, e) from e
discord.ext.commands.errors.ExtensionFailed: Extension 'commands' raised an error: IndentationError: unindent does not match any outer indentation level (commands.py, line 76)
Process finished with exit code 1
Can someon help me i have a giveaway bot and when giveaway ends it says @invalid user and I tried doing {winner.displayName} but when giveaway ends bot doesnt send anything
It only works with winner.mention
Can we see some code?
Ur pinging a non existent id
Yeah, you should be pinging the user's ID, not their name for the bot to work properly
^^
I know for roles you use <@&{role_id_here}>
And what is winners.displayname
not sure if its the same with user id
Sounds like ur using a giveaway bot dashboard
how can u make a giveaway command but not know how to ping
helpppp
With?
Send some code.
my warn cmd its not working
Use <@&{user_id}> to ping that user
@commands.has_any_role(989044819101896735,989043172007104552,)
async def warn(self, ctx: commands.Context, target: discord.Member, *, reason):
await target.send(f"{reason}")
await ctx.send("Member warned :white_check_mark:")
I need to change winner.mention but how cause I tried and then the giveaway bot doesnt send message when giveaway ends
I gave the answer above lol
But why can't you use winner.mention?
Oh, I misunderstood the original message
But yeah: **Winner**: <@%{winners_user_id}>\n
@slate swan
No, the braces and winner. are not needed. Also I was wrong, that is for roles, you just need <@id>
<@&> is for roles, <@!> is for users
Say the user's id is 1234, you need @balmy crown to ping them
Is the exclamation necessary? Getting conflicting answers online
Guys I'm making a bot for tickets reporting, and it has to store image proofs of reports that he gathered from the reported via image links, and image uploads.
However when the report ends, the channel gets deleted and all these images links stored in database don't work anymore.
Anyone has an idea?
@smoky cedar like this?
I'm not so sure, but I'm pretty sure exclamation marks are the new way (?) of @ing someone
No, replace id with the id, don't actually include the word id. And don't include those braces either, they were just to show where the id would go
And I don't mean to be a butthole, but for the love of god please just copy paste into a code block.
With what id man?
THE USER'S ID
This is a giveaway bot it has random pick
That ur pinging
Omfg
THIS IS A RANDOM CHOICE
A CHOICE, OF AN OBJECT, THAT HAS AN ID INSIDE
BOT PICKS WINNER FROM PARTICIPANTS
Do you not know how classes or objects work lol
winner.id man idk what model is being used here
WHAT ID DO I NEED FOR THE LOVE OF GOD
You're hilarious
Tell ya what
Copy paste into a code block, and I'll edit and send exactly how it should look
Ok
You can even use py after the three ticks to color
print('hello')
x = 5
y = 3
print(x+y)
I think this worked
Did it?
Yes I did 2 giveaways 5 minutes the users showed now im gonna try a 1 hour one and we will see
hey guys let's chill with the all caps please
Only because you said please
Hey, could someone give mea a idea on how i could do a check to send a msg at a ceritn time?
ex sending a message at 9 pm exactly every day
You could try to use @tasks.loop(hours=24) and only start that task once it is 9PM
oo omg
ill give that a try ty
Yeah you'd just have to build the logic for yourself on when you decide to call taskmethod.start()
yeah
@tasks.loop() takes time as a param which is the exact time for the loop to run
https://discordpy.readthedocs.io/en/latest/ext/tasks/index.html#discord.ext.tasks.loop
Ope, there you go @indigo pilot , even more powerful tool than I knew haha
oh okay tysm haha
Guys I'm making a bot for tickets reporting, and it has to store image proofs of reports that he gathered from the reported via image links, and image uploads.
However when the report ends, the channel gets deleted and all these images links stored in database don't work anymore.
Anyone has an idea?
Sounds like you may need to download them and store them yourself somewhere
^^ or if you make/have a log system you can just send the images in a log channel and then just save the new url, his way is better but yeah lmao
I mean, technically you'd be doing what I said haha
It's an easy way to stay on discord too lmao
yeah just wouldnt need to download them and store them yourself
xD
hmmmm
so get_images() would take images of type list as argument that contains all the image links from a message text and attachements.
It would then use request or curl to store the image in a variable. Then upload it in a channel that won't be deleted. Then take all image links from attachements, then return a list of all new links?
sounds like a fair project indeed !
lmao, yep
i'mi trying to create a thread using discord's api,
headers = {"content-type": "application/json", "Authorization": os.environ['AUTH_TOKEN']}
json = {"name": name, "type": 11, "auto_archive_duration": 10080, 'location': 'Message'}
request = requests.post(f"https://discord.com/api/v9/channels/{channel_id}/threads", headers=headers, json=json)
but this code returns:
{'code': 50035, 'errors': {'channel_id': {'_errors': [{'code': 'NUMBER_TYPE_COERCE', 'message': 'Value "general" is not snowflake.'}]}}, 'message': 'Invalid Form Body'}
any ideas as to what the error could be? I've searched online and most of the scripts are similar or exactly the same as this one
How to make a bot a speaker in the stage channel through the code?
channel_id is supposed to be a string
i'm using a formatted string for the url so type shouldn't matter right?
it would convert it
wait no, channel_id isn't even an ID right, it says it's general
its in an f string and im pretty sure thats self botting no?
yeah it needs to be an int
i'm manually putting in the id
what id
im pretty sure we shouldnt help him @dusky pine
yeah..
looking at his auth header its a self bot
you would be using discord.py then
the only reason why you wouldn't be using it is because dpy doesn't support selfbotting
discord.py does not support message threads
im pretty sure bots use {"Authorization": "Bot TOKEN"})
right
discord.py 2.0a has channel.threads, update to that @radiant junco
pip install git+https://github.com/Rapptz/discord.py
does that create a new thread or just view existing threads?
i'm pretty sure there is a function to create a thread
that property is just to view existing ones
alright let me check it out, thanks
How to make a bot a speaker in the stage channel through the code?
@smoky cedar it didnt get fixed
@smoky cedar is there a code so it doesnt mention it only writes their name
Okay, you have a user object
https://discordpy.readthedocs.io/en/stable/api.html#id7
This is the documentation for discord py
Go to Discord Models, on the left, open User
You can see all the attributes and methods for a user object
Hint: "is there a code so it doesnt mention it only writes their name"
property name```
Equivalent to [`User.name`](https://discordpy.readthedocs.io/en/latest/api.html#discord.User.name "discord.User.name")
Hello! I wrote a custom decorator that checks if a user has set an account name with the bot, so if it doesn't it raises a CheckFailure exception. I'm writing a cog-level exception handler and wondering, if I have several decorator checks on a command, how do I know which of those decorators raised the exception in the first place?
I was looking at using the exception string, but I realized it only tells me the name of the command that a decorator failed on. This isn't useful because I may have several decorators on multiple commands
Where can i see examples of https://discordpy.readthedocs.io/en/latest/interactions/api.html?highlight=interactions#view
if __name__ == '__main__':
for extension in extensions:
bot.load_extension(extension)```
2 questions
is this necessary?
and why is it giving me this error
Traceback (most recent call last):
File "main.py", line 30, in <module>
bot.load_extension(extension) # Loades every extension.
File "/home/runner/discord-bot-moment-thing/venv/lib/python3.8/site-packages/discord/ext/commands/bot.py", line 674, in load_extension
spec = importlib.util.find_spec(name)
File "/nix/store/p21fdyxqb3yqflpim7g8s1mymgpnqiv7-python3-3.8.12/lib/python3.8/importlib/util.py", line 94, in find_spec
parent = __import__(parent_name, fromlist=['__path__'])
File "/home/runner/discord-bot-moment-thing/venv/lib/python3.8/site-packages/cogs/__init__.py", line 7, in <module>
from .shell import Shell, ArgDsc, OptDsc, Failure
File "/home/runner/discord-bot-moment-thing/venv/lib/python3.8/site-packages/cogs/shell.py", line 276
except (Failure, IOError, KeyboardInterrupt), exc:
^
SyntaxError: invalid syntax```
except (ErrorClasses) as exc
so just ignore the error?
you missed an as dude
where do i put the as
after the error tuple
...?
this is all i have
cool
...?
cause i have another bot with that folder and it works
what is keep_alive, is it some replit thing?
so it doesnt die
pings the repl so that it doesnt auto turn off
workaround so you dont need to pay for it to be on 24/7
its basically a flask server
which people use for hosting their repl by pinging it with uptimerobot
oh
does anyone know how i get the cogs folder with all the stuff inside
u want to get __pycache__?
yea
well i want everything in that screenshot i sent
wdym by want?
if __name__ == '__main__':
for extension in extensions:
bot.load_extension(extension)``` needs it
cause an extension i have is cogs
pycache is not related to that.
(1) loading a .pyc which is the files inside __pycache__ will just throw errors cuz its not a python file
(2) just load the .py files, u should not mess with pycache
well its in the cogs folder
it just get created whenever you'll run the program
clearly it didnt
you didn't load the cogs then.
its basically there for faster execution in the second run, u should never need to use thtat
look all i know
is the only difference between 2 bots is 1 has the folder and works
1 doesnt have the folder and doesnt work
what?
✨ doesn't work ✨ won't get you any help. you need to mention the traceback
pycache is not related to discord bots
its in the folder of a bots code which is why im mentioning it here
if you coded in python before, you would know its in every folder you have your code in
you don't even have a cogs folder idk what ur talking about
create the cog folder, create the cog_example file
run the code, and the pycache will get created itself.
long answer short, dont mess with pycache
if you still don't understand read this
https://stackoverflow.com/questions/16869024/what-is-pycache#:~:text=__pycache__ is a directory that contains bytecode cache,any compiled files at all.
it didnt get created..
it creates itself, look i have 423 folders like that
you didn't run the code.
i clicked the run button
how is your pycharm transparent
its not, its a background image
don't think its transparent but its a theme?
yeah
pycache is compiled byte code of your program so its faster its like caching ig
use vscode with GlassIt extension
looks pog
wait yall dont use notepad?
in my spare time
not a windows user, I'd rather use gedit
dual boot note pad is the best ide
not a text editor, an ide
😳
gedit is better, use ur terminal as the editor
windows 11 notepad it better, it has dark mode, regex text search, etc
cmd like: am i a joke to you?
vim users angry
😳
all my homies hate cmd
after i click run this remains in the folder
guys i have a problem
cmd is 👎 you can't even compare it to linux terminals
why doesnt my command work?
powershell is better

sarth cannot be installed on cmd
choco install sarth
rm -rf sarth 😳
bro
you can't import me, i have already imported you
circular import !!!!
refactor your code then
if typing.TYPE_CHECKING:
use sarth::love;
😏
oki why u keep flirting with everyone 😔
trying to catch a fish
pass
i was trying to get inputs in rust using std::io::stdin().read_line and turned out that it always includes an extra \n in all inputs for no reason
.trim().unwrap();
yeah~
was python annotations inspired from rust?
i think its the other way around
im pretty sure annotations were always a concept in programming langauges idk
rust is younger than python annotations ig?
no i mean the syntax for it
annotations in python came way after rust was born
How to install dpy 2.0
pip install git+https://github.com/Rapptz/discord.py
you need to install Git beforehand
yeah just realised its a 6 year difference
5*
im talking this sort of thing
def foo(a: int, b: int) -> int:
rust
fn foo(a: u32, b: u32) -> u32 {
they are exactly same
i32 or u32?
u - unsigned
ik what it is but like why would you want to use unsigned instead of signed
variable annotations was added in 2016 (3.6)
!pep 526
idk, i dont code in rust
only real difference is pythons annotations is just a theory while rust is statically typed
while basic type annotations goes back to 2014
!pep 484
How
bruh
tell me the meaning without googling it
the branch of linguistics and logic concerned with meaning. The two main areas are logical semantics, concerned with matters such as sense and reference and presupposition and implication, and lexical semantics, concerned with the analysis of word meanings and relations between them.
without google
smh
i did without google
like i would believe you
it means what zeffo said 😳
smh
i have to google a word for every sentence smh
arent u used to googling?
havent you seen how much sentences a pep has😵💫
the pep did😳
then youre just learning the basic meaning and syntax🗿
thats good enough ig
not for me!
then stop complaining ...
how and why
just read it like its a story book from a very high class writer who only uses weird words
me whos mother language isnt English: 🗿
bro
Get on that level
What parts do you have trouble understanding?
Just the wording or?
the meaning of some words which im not quite familiar with
install a dictionary pulgin
good idea
puts word meaning when u hover over it
ya anything
ill check
Okay, for an example in paragraph three, it says in parenthesis that although currently with python does not regulate type annotations, you can in theory/practise utilise run-time type checking, be it JIT (just in time) or other methods
This would be the plan définition and not a one directed in a programming context
mhm ill check that out
Semantics in a programming way would be your regulated stuff
Eg PEP-8 is really the baseline semantics for python style
Semantic Versioning eg MAJOR.MINOR.PATCH is the regulation for versioning, regulation with a grain of salt as it isn’t strictly enforced by simply the most used one
Hence semantics
andy smort
no andy doesnt go outside hence why he plays league of legends
I’ve never played league in a day of my life
Also it’s not hard to do research on the internet!

But anyways peps are good! Better to have an organized thing than not
Typehinting is good too, but don’t even get me started on that type theory mathematics
theres math behind type hints?🗿
Wut
I was doing research because I wanted to write a language with types, evidently I stumbled across type theory and the jumble that comes along with it, for an example
yeah i dont want to hear it, i hate math, but i love typehints so dont ruin it for me😡😔
Do you love covariance and contra variance in typehinting
dont talk to me😤
😒
Ok
you love ruining stuff for me smh
quantum type hints
hey guys, this worked perfectly before but it just started giving me errors even tho i didnt change anything lol.
from discord.ext import commands
import discord
from scripts.channelFinder import ChannelFinder
from scripts.fileHandler import JsonHandler
from scripts.botManager import BotManager
is there a more reliable way to import classes from other scripts in other folders? thanks for the help :))
stop running cog files.
wdym
how would i override a command cooldown on pycord for users in a list?
don't run the Cog files?
use dynamic cooldowns, don't know if pycord has it yet or not
!d discord.ext.commands.dynamic_cooldown
@discord.ext.commands.dynamic_cooldown(cooldown, type)```
A decorator that adds a dynamic cooldown to a [`Command`](https://discordpy.readthedocs.io/en/latest/ext/commands/api.html#discord.ext.commands.Command "discord.ext.commands.Command")
This differs from [`cooldown()`](https://discordpy.readthedocs.io/en/latest/ext/commands/api.html#discord.ext.commands.cooldown "discord.ext.commands.cooldown") in that it takes a function that accepts a single parameter of type [`discord.Message`](https://discordpy.readthedocs.io/en/latest/api.html#discord.Message "discord.Message") and must return a [`Cooldown`](https://discordpy.readthedocs.io/en/latest/interactions/api.html#discord.app_commands.Cooldown "discord.app_commands.Cooldown") or `None`. If `None` is returned then that cooldown is effectively bypassed.
A cooldown allows a command to only be used a specific amount of times in a specific time frame. These cooldowns can be based either on a per-guild, per-channel, per-user, per-role or global basis. Denoted by the third argument of `type` which must be of enum type [`BucketType`](https://discordpy.readthedocs.io/en/latest/ext/commands/api.html#discord.ext.commands.BucketType "discord.ext.commands.BucketType").
If a cooldown is triggered, then [`CommandOnCooldown`](https://discordpy.readthedocs.io/en/latest/ext/commands/api.html#discord.ext.commands.CommandOnCooldown "discord.ext.commands.CommandOnCooldown") is triggered in [`on_command_error()`](https://discordpy.readthedocs.io/en/latest/ext/commands/api.html#discord.discord.ext.commands.on_command_error "discord.discord.ext.commands.on_command_error") and the local error handler.
A command can only have a single cooldown.
New in version 2.0.
see if it exists in pycord
does any1 have a good bot idea?
bruh why you don't use cogs my god.. or... my cog
the bot instance in that view is a string
that was so cheesy😭
check where you pass the bot variable to it
duh in that file there isn't any cog
neither a command
only a lot of views builded in that same file
Why not creating a file for every views 
if there are more that means that they don't do the same thing
so have more files is more easy to handle
and you could create a utils file in that folder where you can create a base View subclass and then subclass it, with that you will not have to setup a new view every time you create a new one, with maybe some function that you keep using more times 
hellpppp
async def warn(self, ctx: commands.Context, target: discord.Member, *, reason):
await target.send(f"{reason}")
await ctx.send("Member warned :white_check_mark:")``` this warn cmd is not workingg
It doesn't do really much 
eror :
"C:\Users\Copy Service\PycharmProjects\wibuos\venv\Scripts\python.exe" "C:/Users/Copy Service/PycharmProjects/wibuos/main.py"
Traceback (most recent call last):
File "C:\Users\Copy Service\PycharmProjects\wibuos\venv\lib\site-packages\discord\ext\commands\bot.py", line 606, in _load_from_module_spec
spec.loader.exec_module(lib)
File "<frozen importlib._bootstrap_external>", line 879, in exec_module
File "<frozen importlib._bootstrap_external>", line 1017, in get_code
File "<frozen importlib._bootstrap_external>", line 947, in source_to_code
File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
File "C:\Users\Copy Service\PycharmProjects\wibuos\venv\commands.py", line 75
@commands.command(name="warn")
^
IndentationError: unindent does not match any outer indentation level
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "C:\Users\Copy Service\PycharmProjects\wibuos\main.py", line 16, in <module>
bot.load_extension("commands")
File "C:\Users\Copy Service\PycharmProjects\wibuos\venv\lib\site-packages\discord\ext\commands\bot.py", line 678, in load_extension
self._load_from_module_spec(spec, name)
File "C:\Users\Copy Service\PycharmProjects\wibuos\venv\lib\site-packages\discord\ext\commands\bot.py", line 609, in _load_from_module_spec
raise errors.ExtensionFailed(key, e) from e
discord.ext.commands.errors.ExtensionFailed: Extension 'commands' raised an error: IndentationError: unindent does not match any outer indentation level (commands.py, line 75)
Process finished with exit code 1
idk wym
uhhhhh
!e
def my_func():
print("a")
my_func()
@placid skiff :white_check_mark: Your eval job has completed with return code 0.
a
!e
def my_func():
print("a")
my_func()
@placid skiff :x: Your eval job has completed with return code 1.
001 | File "<string>", line 2
002 | print("a")
003 | ^
004 | IndentationError: expected an indented block after function definition on line 1
!indents
Indentation
Indentation is leading whitespace (spaces and tabs) at the beginning of a line of code. In the case of Python, they are used to determine the grouping of statements.
Spaces should be preferred over tabs. To be clear, this is in reference to the character itself, not the keys on a keyboard. Your editor/IDE should be configured to insert spaces when the TAB key is pressed. The amount of spaces should be a multiple of 4, except optionally in the case of continuation lines.
Example
def foo():
bar = 'baz' # indented one level
if bar == 'baz':
print('ham') # indented two levels
return bar # indented one level
The first line is not indented. The next two lines are indented to be inside of the function definition. They will only run when the function is called. The fourth line is indented to be inside the if statement, and will only run if the if statement evaluates to True. The fifth and last line is like the 2nd and 3rd and will always run when the function is called. It effectively closes the if statement above as no more lines can be inside the if statement below that line.
Indentation is used after:
1. Compound statements (eg. if, while, for, try, with, def, class, and their counterparts)
2. Continuation lines
More Info
1. Indentation style guide
2. Tabs or Spaces?
3. Official docs on indentation
guys why its not working
@commands.has_permissions(ban_members=True)
async def ban(self, ctx, user: discord.Member, *, reason):
await ctx.guild.ban(user, reason=reason)
await user.send(f"You have been banned in {ctx.guild} for {reason}")
await ctx.send(f"{user} has been successfully banned.")
because it doesnt want to
¯_(ツ)_/¯
what's the error?
and you cant send messages to the user after banning them
seems about right but i‘d send a message to the user and ban thrm afterwards
and make sure to try and except the send message part
value = self.__dict__.get(value, value) 😳
also, is this any useful for a slash commands gist for dpy 😔
https://gist.github.com/Ashley-Violet/9be0affc876d65138000aea31c84974a
!d id
id(object)```
Return the “identity” of an object. This is an integer which is guaranteed to be unique and constant for this object during its lifetime. Two objects with non-overlapping lifetimes may have the same [`id()`](https://docs.python.org/3/library/functions.html#id "id") value.
**CPython implementation detail:** This is the address of the object in memory.
Raises an [auditing event](https://docs.python.org/3/library/sys.html#auditing) `builtins.id` with argument `id`.
i'm impressed, well done
what are you looking for?
object has no attribute 'id'
because the docs command(!d) has 41 packages so you must be specific
ok
well the error says it such object has no id attr
thanks okimii, you too
pycord is a bunch of stolen bullcrap and is coded poorly
never heard of disnake but wouldn’tbt recommnd it
and discord.py the godfather of them all
what did they steal?
all of their stuff
and renamed it
like just look at their source
and compare it to other forks
like i like pycord
pycord aint bad
who is "their"?
but i just wouldnt recommend it over discord.py
other forks
how can i make that my bot add an reaction to the message he just send? In a command
aren't other forks of discord.py also open-source?
@bot.event
async def on_messsage(msg):
msg.add_reaction('ur emoji')
ok
yup
So how do you "steal" open source code
by ur emoji did i have to gove 5he name or id?
ok look idc
im not argue over some dpy fork
Well you said they stole code so I'm just trying to find out what exactly they stole lol
pycord is considered as a fork of d.py but actually it could be nearly considered as a completely different package
cya guys later
all forks of discord.py are completely different packages though...
disnake is by far termed to be the best fork
it is*
dpy
termed automatically makes it applicable
¯\_(ツ)_/¯
yes it does
put you'll have to install dpy using the link of the master branch from ithub
for that
github*
you can do it with for example :sleepy:
ok
could you show the code?
||hikari||
snekcord 😡
thanks
is it usable yet? i saw the repo and it was in dev by that time
add
await bot.process_commands(msg)
says a person who loves pycord 😔 fake love
i love pycord thats why i wont use it
deep pain
i'd rather just keep digging into the source code to point out mistakes
well that would be a good choice
imo pycord should patent api wrappers for discord
so that people dont counterfeit its uwuness
😔
!pip pycord its not even related to discord
you gave me an idea
i bet ashley loves your idea
py-cord, my kind sir
could be i missed the uwu in my old name
I love anybody with uwu in their name (and I love you anyways)
you are a girl of culture xD
smh
pyuwucord

I got this in my cog listener
print("tewst" + self.client.user)
It wont print the bot name eventho the listener is working because the print above will print.
No error
use this setup: https://github.com/Tvrsier/BaseBot
Base bot setup for discord.py and relative forks. Contribute to Tvrsier/BaseBot development by creating an account on GitHub.
Ok why?
Nvm fixed it by myself
You could learn how to properly setup a bot with that
Ok, I have my bot properly setuped
open source advertisement 😔
💀
where 2 spacing before in-line comments
smh
I'm gonna do that from now on too 😔
in the example below, how can i reference the knife value to change my output, without changing (=) the value? ```py
KnifeTest = {cond: 'damaged', value: 25}
Inv = [KnifeTest]
money = 100
print(Inv)
print(money)
if KnifeTest['cond'] == 'used':
money += KnifeTest['value']
print(money)
elif Knife['cond'] == 'damaged':
money += KnifeTest['value'] * 0.5
print(money)```
huh?
coz this aint workin; this is simply a test i want to implement further later on
when i change the knife cond dict entry, it prints correctly before i try to modify the end result. as soon as i try to * the value it doesnt work... i think i understand why, just not what the correct way to do it is
ah
specifically this line
money += KnifeTest['value'] * 0.5
so you mean that it ain't updating money at this point, right?
correct
lemme see
just prints 100; doesnt modify anything at all
also shouldnt cond and value be keys inside quotes?
i have this
cond = "cond"
``` coz i prefer the look rather than everything being green
makes it easier to read
works perfectly fine for me
yeah thats what it should be doing; im missing something on my end clearly
!e
KnifeTest = {"cond": 'damaged', "value": 25}
money = 100
if KnifeTest['cond'] == 'used':
money += KnifeTest['value']
print(money)
elif KnifeTest['cond'] == 'damaged':
money += KnifeTest['value'] * 0.5
print(f"damaged -> {money}")
@slate swan :white_check_mark: Your eval job has completed with return code 0.
damaged -> 112.5
ok wth lol
if i copy paste it works; i cant see what is diff tho
oh my gawd
i figured it out x.x
i had a typo referencing somethin further up the doc smh
was ```py
Knife['cond'] == 'damaged':
not ```py
KnifeTest['cond'] == 'damaged':
thanks for the help haha
knew it
Can someon help me add a reroll command to my giveaway bot cause I tried and failed
People here can guide you
Can u guide me
what do u have so far?
Skeevvvvvvvvvvvv
@client.command()
@commands.has_permissions(kick_members=True)
async def reroll(ctx, channel : discord.TextChannel, id_ : int):
try:
new_msg = await channel.fetch_message(id_)
except:
embed = discord.Embed(title="Command Error ⛔ - GameBot", description=f"The Id Of A Channel Was Entered Incorrectly! 🎉", color=0x992d22)
await ctx.send(embed=embed)
return
users = await new_msg.reactions[0].users().flatten()
users.pop(users.index(client.user))
winner = random.choice(users)
embed = discord.Embed(title="Giveaways 🎉 - GameBot", description=f"**Giveaway Has Been Rerolled!** \n \n**Winner -** \n`{winner.mention}`", color=0xe74c3c)
await ctx.send(embed=embed)
When I run the command nothing shows
Hello Ashy
@client.command()
@commands.has_permissions(kickmembers=True)
async def reroll(ctx, channel : discord.TextChannel, id : int):
try:
new_msg = await channel.fetch_message(id)
except:
embed = discord.Embed(title="Command Error ⛔ - GameBot", description=f"The Id Of A Channel Was Entered Incorrectly! 🎉", color=0x992d22)
await ctx.send(embed=embed)
return
users = await new_msg.reactions[0].users().flatten()
users.pop(users.index(client.user))
winner = random.choice(users)
embed = discord.Embed(title="Giveaways 🎉 - GameBot", description=f"Giveaway Has Been Rerolled! \n \nWinner - \n{winner.mention}", color=0xe74c3c)
await ctx.send(embed=embed)
someone help me cretate a discord bot
Helly 😭
I try that?
No they just made it easier to read
Ok
!rule 9
btw 2.0?
?
they are talking about the version of discord.py,not software 🤦
open the toml and lock file and see
Can u read my third sentence👍
Before acting smart
did you install dpy using pip install discord.py?
oh im sorry
assuming it is 1.7.3 this should work
Everything else works repl.it has preinstalled everything
Ryuga doesn't act smart, he's the smartest amongst us
u missed a _ in fetch_message
ah well, then it's 1.7.3 since replit looks for packages on pypi
i wish
side note if it is 2.0 u have to iterate async
that was a fact

A tutorial to help you make better Discord bots.
I literally hate vcokltfre's name
I had to search the entire discord for that
I can't even write it properly even if I have it written correctly and looking at it while typing
is it possible to get print(Inv) in the below to just print names without changing Inv = [x, y] to Inv = [x['name'], y['name']?
KnifeTest = {name: 'Knife', cond: 'used', value: 25}
SwordTest = {name: 'Sword', cond: 'used', value: 25}
Inv = [KnifeTest, SwordTest]
Selected = []
money = 100
print(Inv)
print(money)
Not discord bot related
It's actually one of the most convenient names to type
its to do with my bot; its a simplified test of a feature :p
For you
||you|| ||are|| ||clearly|| ||not|| ||a|| ||human|| ||:)||
Well just because it's in your bot doesn't mean it's discord bot related
he prolly got adhd so what we see may not match with what he sees💀
fr
yes
dic = {'name': 'a'}#
full = [v for k, v in dic.items() if k == 'name']
I swear if I applied the same amount of brain as Asher does in this channel, I'd be long time gone
no bc i feel like advertising open-source projects goes against the open-source nature, dunno tho
Ok ima try with message id then
it should be .reroll 9xyz...
Ok
@client.command()
@commands.has_permissions(kickmembers=True)
async def reroll(ctx, channel : discord.TextChannel, id : int):
try:
new_msg = await channel.fetch_message(id)
except:
embed = discord.Embed(title="Command Error ⛔ - GameBot", description=f"The Id Of A Channel Was Entered Incorrectly! 🎉", color=0x992d22)
await ctx.send(embed=embed)
return
users = await new_msg.reactions[0].users().flatten()
print(users)
users.pop(users.index(client.user))
print(users)
winner = random.choice(users)
embed = discord.Embed(title="Giveaways 🎉 - GameBot", description=f"Giveaway Has Been Rerolled! \n \nWinner - \n{winner.mention}", color=0xe74c3c)
await ctx.send(embed=embed)
''@client.command()
@commands.has_permissions(manage_messages=True)
async def reroll(ctx, channel : discord.TextChannel, id_ : int):
try:
new_msg = await channel.fetch_message(id_)
except:
embed = discord.Embed(title="Command Error ⛔ - Giveaway", description=f"The Id Of A Channel Was Entered Incorrectly! 🎉", color=0x992d22)
await ctx.send(embed=embed)
return
users = await new_msg.reactions[0].users().flatten()
users.pop(users.index(client.user))
winner = random.choice(users)
embed = discord.Embed(title="Giveaways 🎉", description=f"**Giveaway Has Been Rerolled!** \n \n**Winner -** \n`{winner.name}`", color=0xe74c3c)
await ctx.send(embed=embed)''
run this and tell what it prints
ok
i think i understand the concept here; im just not familiar with using for commands so im not 100% what the v and k refer to
this is not so useful for single dicts since there can only be one key = name
so its better usage would be i a nested dict
k and v are variables unpacking the dictionary as it iterates through it
aka the key value pairs
ah
that is equivalent to
for key, value in dict.items():
if key == 'name':
list.append(value)
indeed
yeah that helps me understand whats going on; i think im missing something tho... i gtg briefly but ill be back in a bit
Anyone know what i can use instead of name?
object has no attribute 'name'
what was printed?
command?
nothing
async def on_voice_state_update(member, before, after):
if after.channel.name == "🎤|join to create":
CAT = discord.utils.get(member.guild.channels, name="Voice")
vc = await member.guild.create_voice_channel(f"{member.name}", category=CAT)
await member.move_to(vc)
else:
if str(before.channel.name) == str(member.name) and after.channel == None:
await before.channel.delete()```
This is the code
do u have intents enabled?
whats that
!intents
Using intents in discord.py
Intents are a feature of Discord that tells the gateway exactly which events to send your bot. By default discord.py has all intents enabled except for Members, Message Content, and Presences. These are needed for features such as on_member events, to get access to message content, and to get members' statuses.
To enable one of these intents, you need to first go to the Discord developer portal, then to the bot page of your bot's application. Scroll down to the Privileged Gateway Intents section, then enable the intents that you need.
Next, in your bot you need to set the intents you want to connect with in the bot's constructor using the intents keyword argument, like this:
from discord import Intents
from discord.ext import commands
intents = Intents.default()
intents.members = True
bot = commands.Bot(command_prefix="!", intents=intents)
For more info about using intents, see the discord.py docs on intents, and for general information about them, see the Discord developer documentation on intents.
!d discord.VoiceState.channel
The voice channel that the user is currently connected to. None if the user is not currently in a voice channel.
Hey @slate swan!
You either uploaded a .txt file or entered a message that was too long. Please use our paste bin instead.
voice state dosent have name
only voice channel has
The channel name.
👀
👋
hello, how can i show the api latency?
like
!ping
You are not allowed to use that command here. Please use the #bot-commands channel instead.
!d discord.Client.latency
property latency```
Measures latency between a HEARTBEAT and a HEARTBEAT\_ACK in seconds.
This could be referred to as the Discord WebSocket protocol latency.
format it using round(latency * 1000)
and it would be in milliseconds
Nvm I did it
so like py api_latency = discord.Client.latency(latency * 1000)?
no?
bot.latency*1000
imagine 'bot' is not defined
im getting a weird exception guys
same
which version of dpy do u use?
avatar.url
its ^ in 2.0
it's either that or this i don't think dpy has any other implementation 👀


ill use literally every wrapper atleast once
