#discord-bots
1 messages · Page 1084 of 1
just tell the person that, id returns an integer but is being compared with a string, so it'll always be False
but on replit this error is coming -
Replit: Package operation failed.
Replit: Updating package configuration
--> python3 -m poetry lock
NonExistentKey
'Key "metadata" does not exist.'
at venv/lib/python3.8/site-packages/tomlkit/container.py:553 in getitem
549│ key = Key(key)
550│
551│ idx = self._map.get(key, None)
552│ if idx is None:
→ 553│ raise NonExistentKey(key)
554│
555│ if isinstance(idx, tuple):
556│ # The item we are getting is an out of order table
557│ # so we need a proxy to retrieve the proper objects
/home/runner/Ayr/venv/lib/python3.8/site-packages/setuptools/command/install.py: 34: SetuptoolsDeprecationWarning: setup.py install is deprecated. Use build and pip and other standards-based tools.
warnings.warn(
exit status 1
Ok thanks for helping
Improving my english
dont use repit
Replit is trash
then how should i host the bot
get a cc
ask ur parents I want to host a bot
And I want cc
It will take no money
cc doesn't solve the issue of hosting...
guys my bot takes like 2 seconds to boot up, how can I stop this?
fax
bro i want mine to boot instantly
go buy a server then
Imposible
i did
then u bought a trash one if u wanna boot instantly
that's fast, fast enough to not be upboosted, that's why 2 seconds isn't much
Bro don't say if u don't have knowledge
you can always delay it using time.sleep though
ur demotivating him
nah bro im just sayin if ur bot boost in 2 seconds u should be happy asf
File "c:\Users\thoma\Desktop\MyBot\main.py", line 6, in <module>
from discord.ui import Button, View
ImportError: cannot import name 'Button' from 'discord.ui'```
Yes
Bro don't import
install 2.0
I do have 2.0
he should not be complaining. mine takes like 180 secs or smtng to boot
not in the same environment that ure using to boot up your bot
hard luck then
rip brawlhalla 
I'm trying my best to help
You installed dpy 2.0 in a different py version
nah no rip I just got 2200 elo
either you're too smart or dpy devs are too dumb 
though I'm impressed you know the game
I want to know why async is there in python
So
So what? Just install dpy2.0 in the same version of python ure using to boot up your bot
I'm not smart then dpy devs are too dumb according to you
hahahaha so funny, I'm dying
I do have 2.0
version
get a life, meh 
which editor u usin
VSC
eh idk then
.
run python --version in any terminal and match the interpreter version in the bottom left/right corner in VSC
ye
😬 anyone know what might be the issue?
install ffmpeg - https://ffmpeg.org
and yes you gotta do that too iirc
can i do it though linux cmd?
sure
how
never used linux so idk
ah
Here's a weird question, does custom_id support unicode characters?
python3 -m pip install --upgrade pip is that how to install the latest dpy?
huh turns out the answer is yes
which distro?
no.....
that dont really matter
is the new dpy already done?
Then?
pip install -U git+https://github.com/Rapptz/discord.py
Damn Rapptz is famous how idk
it definately does because the package providers differ distro-by-distro
debian uses apt
arch uses pacman
redhat/fedora used rpm/dnf
🙂
amazon linux
Still says 1.7
wrong python version then
its basically ubuntu/debian bash $ sudo apt install ffmpeg
3.10
see, told u it dont matter
Am using 3.10
if it was arch that would be sudo pacman -S ffmpeg in redhat you would have to get it from their repo first.... so just saying "linux" is a very vague amount of information
what do i do once i download it?
don't know about that myself, never used ffmpeg, since its pretty pointless to (for me)
simply installing ffmpeg with pip fixes the issue already
!pip ffmpeg
ffmpeg python package url [https://github.com/jiashaokun/ffmpeg]
dating profile lounge lmao
Please stop ive seen ppl that kind of thing
can someone help me?
.content not .message
Is there a better way I could be doing this?py if before.permissions_synced is after.permissions_synced: embed.add_field( name="Permissions Synced", value="Permissions synced" if after.permissions_synced is True else "Permissions not synced", ) elif before.permissions_synced is not after.permissions_synced: embed.add_field( name="Permissions Synced", value="Permissions not synced -> Permissions synced" if before.permissions_synced is False and after.permissions_synced is True else "Permissions synced -> Permissions not synced" if before.permissions_synced is True and after.permissions_synced is False else "Permissions synced -> Permissions synced" if before.permissions_synced is True and after.permissions_synced is True else "Permissions not synced -> Permissions not synced", )mainly the elif's value statement
elif before.permissions_synced is not after.permissions_synced:you don't even need this
that sticker is accidental
yes
what are you trying to do?
lol thanks dafug why did i have ther .msg
yeah that's a good point
Would anyone know how can I make my own api to interface with my bot? like telling it to change activity etc
I already have a file I just need to pass in parameters from my api
-bash: apt: command not found
rip
did you try installing with pip first tho?
ill try
nah that aint work
on my pc i installed ffmpeg from the site but no clue how to do it through linux cmd
What about yum?
yea
it works to an extent
so far im at "209 packages excluded due to repository priority protections"
No package ffmpeg available.
Try downloading the ffmpeg executable
never heard of it
Curl exists
never heard of it
You have ubuntu?
no
Then what os do you have
i just said its on amazon linux
Why not use ubuntu tho
cuh
"Never heard of it"?
amazon linux is cheaper
Ok
😏
so your saying if i get the ffmpeg.exe file onto the AWS server im good
cuz i can just use github for that
And the curl should look like
$ curl https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd64-static.tar.xz -o ffmpeg.tar.xz```
whats -o ffmpeg
Then you would need to unzip it
Output file
how would i unzip it
There's a command for that too
cant i just use github
And I think you can find how to unpack archive on linux CLI without my help, it's in straight access on google
How would you
just put it on github and pull it
Sure
ok cool
But ffmpeg weights like 80 mb iirc
Off-topic channel: #ot2-never-nester’s-nightmare
Please read our off-topic etiquette before participating in conversations.
In fact it is close to edge
file too big
That's the main issue. Just use curl on your aws
it is
I think I gave you correct link
you ever made a bot?
so is this all one line
alr
@vale wing so how do i unzip it
its not a requirement for discord bots
🤣
if you wanna do anything with music it is so...
i like how many confusing human there is here
then ask in the appropriate channel, this channel is not related to music
||No channel is|| 👀
no errors. just doesnt start
Also pass_context is deprecated
ur doing await ctx.send(embed=em) outside the function.....
right click -> format document please
And regenerate your token, you just leaked it
^
ye I'm aware of that
dude, u are using cstyle string format inside in str.format???? why????
how do i handle the rate limited error
so it doesnt flood my screen with a 10million words essay
error? or warning?
error handler
Replit?!
did that but doesnt start
if u want to critise then give me money to buy a vps 🤣
Try logging 
now indent that await inside the function
?
u know how indent work?
just self host, it aint that bad
indent
works
like
this
########################################
not
like
this
Well then just override on_error in your bot subclass
!d discord.Client.on_error
await on_error(event_method, /, *args, **kwargs)```
This function is a [*coroutine*](https://docs.python.org/3/library/asyncio-task.html#coroutine).
The default error handler provided by the client.
By default this prints to [`sys.stderr`](https://docs.python.org/3/library/sys.html#sys.stderr "(in Python v3.10)") however it could be overridden to have a different implementation. Check [`on_error()`](https://discordpy.readthedocs.io/en/latest/api.html#discord.on_error "discord.on_error") for more details.
Changed in version 2.0: `event_method` parameter is now positional-only.
i mean music BOTS cuh
u didnt ask a question related to the bot, just ffmpeg which by not means is related to discord bots.
it is
@scarlet sorrel I don't wanna argue or smth, but music bots are against ToS
Hunter did you see my solution from yesterday
where did you have this from? its fakenews
not against discord tos
As long as the issue isn't related to ytdl or smth we can help
only spotify and google wont allow it anymore
Maybe he's just trying to play it from file
Term three, streaming music you don't have licenses for, is breaking ToS
Of course, not every music bot is breaking ToS, but the majority will
Since licenses will be very expensive, especially if you want big library
I did, but wasn't really able to test it out since it was morning when I saw it and I wasn't on my laptop. Gonna do it now
Nvm he is using ytdl 😒
!e ```py
from future import annotations
from typing import TYPE_CHECKING, Any, Callable, Coroutine, TypeVar
import asyncio
import inspect
import re
class MaybeAwait:
def init(self, coro: Callable[..., Coroutine]) -> None:
if not asyncio.iscoroutinefunction(coro):
raise RuntimeError("Received non-coroutine.") from None
self.syncf: Callable[..., Any]
self.coro = coro
def __call__(self, id: int) -> Any:
ctx = inspect.getframeinfo(inspect.stack()[1][0]).code_context[0] # type: ignore
if re.search(r"^(.*?)(\bawait get_member\b)(.*)$", ctx):
return self.coro(id)
return self.syncf(id)
def sync(self) -> Callable[..., Callable[..., Any]]:
def inner(func: Callable[..., Any]) -> Callable[..., Any]:
self.syncf = func
return func
return inner
async def main() -> None:
@MaybeAwait
async def get_member(id: int) -> int:
print(f"Async {id}")
@get_member.sync()
def _get_member(id: int) -> int:
print(f"Sync {id}")
print(await get_member(123))
print(get_member(456))
asyncio.run(main())
@pliant gulch :x: Your eval job has completed with return code 1.
001 | Traceback (most recent call last):
002 | File "<string>", line 48, in <module>
003 | File "/usr/local/lib/python3.10/asyncio/runners.py", line 44, in run
004 | return loop.run_until_complete(main)
005 | File "/usr/local/lib/python3.10/asyncio/base_events.py", line 646, in run_until_complete
006 | return future.result()
007 | File "<string>", line 44, in main
008 | File "<string>", line 20, in __call__
009 | TypeError: 'NoneType' object is not subscriptable
Oh i guess it doesn't work in snekbox
Solution was too hacky for me to like it though
Until smth like this isn't implemented in Python, everything is hacky
I got another cool hacky trick, I'll write an example rq
Thanks!
what does this do?
PS C:\Users\Clicks\Desktop\Timmy> python3 bot.py
Traceback (most recent call last):
File "C:\Users\Clicks\Desktop\Timmy\bot.py", line 13, in <module>
import exceptions
ModuleNotFoundError: No module named 'exceptions'``` it wont work, why?
why r u importing exceptions
what is exceptions?
idk im using a template
And where is it using the exceptions module?
Allows for two implementations of the function dependent on whether it was awaited or not
ah like overflow for a?sync
overload yea
yea, 😅
Right now I'm writing some basic built-ins literal thingy to make int.fetch
for user blacklisted
I'll send in a bit
wym
so u mean we can do id.fetch()?
if isinstance(error, exceptions.UserBlacklisted):```
Ah what is yr file structure
U need a file named exceptions in the root of the folder
Yes
Damn cool
I guess that would involve messing with builtins module?
No, that won't work for literals
You need to either mess with the class in memory using ctypes, then making the dict mutable
or you can use a glitch, what i'll use to expose the underlying map of dict
from __future__ import annotations
from typing import Any
import asyncio
import os
import aiohttp
async def main() -> None:
session = aiohttp.ClientSession()
headers = {"Authorization": "Bot " + os.environ["DISCORD_TOKEN"]}
URL = "https://discord.com/api/v9/users/{0}"
class _:
def __eq__(self, other: dict[str, Any]) -> None:
async def fetch(id: int) -> dict[str, Any]:
async with session.get(URL.format(id), headers=headers) as resp:
return await resp.json()
other["fetch"] = fetch
int.__dict__ == _()
me = await (270700034985558017).fetch()
print(me)
asyncio.run(main())
``` here it is
if re.search(rf"^(.*?)(\bawait {self.coro.__name__}\b)(.*)$", ctx):
return self.coro(id)
lil more dynamic
😳
Orignally I was hooking onto RuntimeWarning but that was a total headache
I had to use f_locals to see the args and stuff
I would love it if someone implements this in their very lib and people start to criticize the person
The only reason I would never use it is cause it's basically impossible to typehint correctly with it
And, plus inb4 segmentation fault
Discord.ext.commands.errors.CommandInvokeError: Command raised an exception: KeyError: '766960170349363210'
@client.command()
@commands.has_permissions(kick_members=True)
async def warn(ctx, member: discord.User, *, reason):
save_warn(ctx, member)
dm = await client.fetch_user(member.id)
em=discord.Embed(title="Warning", description=f"Server: {ctx.guild.id}\nReason: {reason}")
await dm.send(embed=em)
💀
this skull is the best for help ty sir
U can send directly by member.send() no need to fetch
change it to discord.Member also
thats a old stack
ig
code yourself instead of copying code from stackoverflow, so you actually know what's happening
Can anyone help me in making my bot online 24/7
Do u have hosting tho?
oh cool
I don't know about hosting
ok but the problem with the json
the error the ID
Yes
typing.Any ftw!
Tell me sparky how to host 24/7 🥺
@slate swan
type of fetch is unknown
I have no bots hosted right now
Ah okay
I don't even have an active development bot either kek
The only discord stuff I've done recently was Rin
Just wanted to ask, approx how much memory yr bot needed and what intents it had on, along with approx number of users it had
Mmm my bot never had a lot of users
But I did use a special custom caching method
So it wouldn't chunk guilds on startup. allowing start up times to be extremely fast no matter how many guilds
Ah, I like that
Then it would chunk when needed, storing data else where
Less than a 100?
So my memory usage was pretty low
Nice
About
Well how much RAM it took then?
Like 50-60mb
I had a gig of memory left to use
Haha 50-60 MB RAM is almost nothing
Else where being Mongodb
But I didn't use much things that required persistence anyways
Thanks for telling!
anyone one to help me with a bot
?
guildobj = await client.get_guild(guild)
TypeError: object NoneType can't be used in 'await' expression``` any help? why is client.get_guild returning None?
@maiden fable Im a shit sandwich at coding but I know pine editor Im trying to create a discord bot that will grab a link from tradingview
ok?
it has to go in and click that or type alt + s in tradingview
@maiden fable is this possible?
what u stuck at?
Hi, im trying to connect my database to my bot. This code used to work, and in d.py 2.0a this doesnt work anymore
code: ```py
this is in sub-classed commands.Bot class
self.db = self.loop.create_task(self.create_db_pool())
this as a normal function
async def create_db_pool(self):
ssl_object = ssl.create_default_context()
ssl_object.check_hostname = False
ssl_object.verify_mode = ssl.CERT_NONE
await asyncpg.create_pool(
#dsn=os.getenv("DATABASE_URL"),
dsn=os.getenv("DB_URL"),
ssl=ssl_object
)
https://cdn.discordapp.com/attachments/790798642474123304/982680947499614248/unknown.png
what is self.loop
wait nvm
self is the bot class
pretty much everything I have no idea what im doing
do
self.db = asyncio.run(self.create_db_pool())
What u tryna do is advanced, so I suggest learning some more Python
how much strings of code will I need?
Doesn't depends on that, u gotta learn some basic OOP, asyncio programming and basic programming like loops, conditional programming and stuff
@maiden fable I'm Microsoft Excel certified I know Pine I can pick up on the python quickly I just don't know the commands yet
!resources is a great way to start!
The Resources page on our website contains a list of hand-selected learning resources that we regularly recommend to both beginners and experts.
it returned a huge error
what?
I was thinking step 1 would be getting a discord bot to answer a command and say "hi" then go on from there
!d discord
In order to work with the library and the Discord API in general, we must first create a Discord Bot account.
Creating a Bot account is a pretty straightforward process.
Docs have a small tutorial
Nice
😂
!paste please use this
Pasting large amounts of code
If your code is too long to fit in a codeblock in discord, you can paste your code here:
https://paste.pythondiscord.com/
After pasting your code, save it by clicking the floppy disk icon in the top right, or by typing ctrl + S. After doing that, the URL should change. Copy the URL and post it here so others can see it.
ok
@maiden fable I downloaded visual studio last night will that be enough to run a discord bot or do you have to run it through the command center
I finished downloading all the pips I needed
enough
And the award for the largest traceback ever goes to.... DTS!
anyone in here has experiance with virustotal api?
No
did u like halfway hack thru pentagon
what
lmao
spelled name wrong
but thanks :)
Kek
Proactor error, this is indeed a windows moment
and the end is nonetype object has no attribute send -_-
😏
another error to your name 😉
my man ;))
yeah bcz the db has no data to fetch bcz its not connected
I don't even have the caching system anywhere anymore, I've lost it 👿
U can remake it easy andy
how did u do that?
I can but I don't wanna do another bot
True that, i've turned that caching off since i keep my bot private now
i once had a terrible error handler, which barely shows the traceback.. now I updated it and it shows the full traceback
Just turn off the caching guilds on startup
Did you lose your verified bot when you got hacked
Also what ever happened to the tinder bot
Yeah ahahhaa
oh
Tindabot died cuz ive worked with a lazyass that didn't want to do anything than getting credits on my code
Does python have a user manual to learn commands?
Help me rewrite Rin, then we'll make Tindabot in Rin
Isnt rin dead
@maiden fable any idea why that error occured?
wut commands?
Yes but I'm on the 9th rewrite now
@shrewd apex mind helping DTS?
@pliant gulch https://media.discordapp.net/attachments/959114251258171463/982689931870740542/rank-950522606128332841.png still flexing your card design tho, guys get andy as a gfx
Pass Bot(chunk_guilds_at_startup=False)
I am stuck with smth
ok lemme try
Not even my best, lemme show you my old art portfolio
looks good
does this slow down the bot?
In tradingview when I code something live average I type . . . x = sma( stock, 12)
Bro thats some hardcore sh*t
"sma()" is a command how do I learn these commands
No, it'll make your startup times faster
Except caching isn't done, so you'll need to manually chunk
"print()" is a command
Yes
no it's a function...
🥲 I'm also finding
looks cool
calling a function...
what have i come to😳
yeah how do I learn functions do you have a list
Also make something like a 24 last hour active guilds so it caches only the guild that have been active within the 24hours
And boom easy startup
well I'd suggest a youtube video or w3schools
w3school is trash
damn you okimii
btw i generate gifs using pil and they take like .5-.7 secs for abt 90 frames u have any tips to speed that up?
w3school is great
okimii banned from udevs? 
LMAOO
Is there a user manual or references on python?
Uhh, that'll be hardware dependant
😂
If he didn't I would've
run your function in an executor
i do
Python is trying to keep me a shit a sandwich at coding
dont care
at being trash yes
Then theres nothing else u can do except leaving some useless code to make it faster
shut
Disagreed 👎
there it is thanks
Kai are we gonna do this or wut 😔
hmm i see my laptop is welp not state of the art so... will know when i host my bot
Nah im not into coding anymore for now :((
i want to see kais impl👁️ 👁️
@heady sluice Business wise how does Python make me dollars
yeah will try to optimise
you gotta learn functions before asking these questions
👿
sad
isnt blanket doing it with you andy
No that was Lefi
is blanket alive
and blanket only did the vc impl 💀
day to day what does python do is the question
altho examples are small and dumb i agree but they give a good list of stuff of what to learn and in what order
@heady sluice how does it make ones life better/easier
He did a bunch of state as well
e.g backend in websites
task wise
they only give the basic with bare explanation which is a waste of time
oh so I can edit the backend of a shopify?
is that so?
prolly
Did u ever saw their documentation??!??
we're in #discord-bots though
no i mean like it gives u a good index to refer for beginners like how to start and what to learn next
i learned from it and i hated each second:))
no i mean like it gives u a good index to refer for beginners like how to start and what to learn next
theirs really other websites that have better explanations imo
Ask the web developers
Yes he did like most of the events
i didn't say the content was pro
hi i need help, my bot sending messages twice...
i checked if the bot is hosted in 2 hostings in the same time but its no.
i have restarted the bot but its still not work..
please help me
the models of the events or the parsing?
u might have run a bot in parallel
do you have an on_message?
without stopping the old one
Event parsing
yeah, but its responding to commands twice too
i might continue my discord api wrapper cuz i havent done anything complex in a few
yeah but what does your on_message look like
shouldve been specific
no im not, i checked it
can u give an example or how the cache part works with the bot?
He lost it 
howmuch time will it take for a hybrid command to log ?
💀
360p picture
240*
nah just a big one
But it's easy enough to know the methodology
Actually 180p
Give him an example andy :((
are y'all dumb
the commands r working with prefix but not with slash cmnd
something for noob me plz
atleast make it good quality, that picture has the quality of your life smh
shut it banned boy
What u think 🤔
a satellite picture isn't 180p just because you don't see the andromeda galaxy without zooming in
OoO
lmao
is he clicking that pic from space?!??
whats the function for making my computer take control. . .how do I let bill gates start touching buttons
?
that's a program called anydesk
Only if it was this easy 😔
bot = Bot(chunk_guilds_at_startup=False)
chunked: dict[int, tuple[discord.Guild, datetime.datetime]] = {}
@bot.event
async def on_message(message: discord.Message) -> None:
if message.guild.chunked is False or message.guild.id not in chunked:
chunked[message.guild.id] = message.guild, datetime.datetime.utcnow()
await message.guild.chunk()
@tasks.loop(seconds=...)
async def check() -> None:
for id, (guild, time) in chunked.items():
if (datetime.datetime.utcnow() - time).seconds > 100:
del chunked[id]
```Close enough?
imagine disabling commands
thx a lot 🥰
Brb lemme copy paste
i took a ss
Haha I was jk
Better chunk in a try except block
@heady sluice how many strings is it going to take to create a bot that can log into Microsoft edge of firefox
Nice
🤔
wtf?
thats called a crawler lol
U mean scraper?
crapper
Chunked should me be in a database and then you chunk the guilds that were active within the 24h on startup
_ _
ok thanks for telling
In an try except block cuz chunking too much can cause a ratelimit 
@😂
Gateway commands are 120/2s
It'll raise an error if bad intents as well
I remember it was fucking up something with my bot when I tried to chunk too much guilds at the same time. It it couldnt chunk, it would return an error
https://github.com/Rapptz/discord.py/blob/f6a74f74a7aed0879fc086805eae8873e745d0ea/discord/gateway.py#L652-L654 there is also ratelimit handler
discord/gateway.py lines 652 to 654
async def send(self, data: str, /) -> None:
await self._rate_limiter.block()
await self.socket.send_str(data)```
nice
what's the block?
I remember my bot used to get ratelimited on startup never found out why prolly cz of chunking
Some lock stuff
It wasnt blocking my bot from working but at a certain moment it would fuck up my bot. Thats why I've passed it to a try except block and easy fix
It was starting slow cuz it was trying to chunk on startup
Was it raising errors or something?
Which is ON by default
Prolly that
No andy 
Yea that sucks for bigger bots lol
why the try execept then
.
😔 \
class Fight3(discord.ui.View):
def __init__(self, context: commands.Context):
super().__init__(timeout=None)
self.value = None
self.command_ctx = context```
with my view, `timeout=None` works, but if i plug in an amount of seconds like 5 it instantly times out, anybody know what im doing wrong?
Plus the try-except syntax is horrid
It was fucking up my whole bot connection, dont ask me how the fuck it was doing that, im a lazy ass didnt look further
No, just disable chunk on startup and do manual chunk
Yea that is what I did
Then?
i'm working with pycord and im wondering if i can do something like this
@bot.slash_command()
async def(ctx, *args):
mylist = ', '.join(args)
await ctx.send(users)
using slash commands? if not possible can i use bridge since it allows for ext.commands capabilities
Oh right chunking populates user + member cache, so u'll need to delete those too if you want to get less memory usage
class Fight3(discord.ui.View):
def __init__(self, context: commands.Context):
super().__init__(timeout=None)
self.value = None
self.command_ctx = context```
with my view, `timeout=None` works, but if i plug in an amount of seconds like 5 it instantly times out, anybody know what im doing wrong?
Might cause issues later on, but if you always do checks on your cache lookups it'll be fine
welp it gets more and more complex ig I will do that after finishing my bot
||touch ups and optimisations||
class Fight3(discord.ui.View):
def __init__(self, context: commands.Context):
super().__init__(timeout=None)
self.value = None
self.command_ctx = context```
with my view, `timeout=None` works, but if i plug in an amount of seconds like 5 it instantly times out, anybody know what im doing wrong?
Unless you ahve more than 100 guilds with thousands of members, thats useless
What would be nice, discord.py having cache drivers
i hope your account gets hacked again

so instead of a python dict which can be slower compared to others
wdym
You'll be able to use RBDMS, Redis
?
I mean 5s is fairly short
im saying it doesnt matter the amount i plug in it always times out instantly
I'll add that to rin 😏
REdis
yes pls
and how do you know it timed out
because interaction failed
I use my computer's EEPROM to cache andy's fat a*
👿
and it goes past my view wait statement
cant
huh
if I remember correctly wait returns True if it times out but false if it just finishes like regularly
i have it as smth like await view.wait() and then an if view value and then an else statement
wh
I'm wondering, so I'm building a Discord bot that makes use of 17Track API to track online orders. Thing is that the way 17Track API works is that you need an HTTP server so the server can POST you updates.
To the point:
How can I run discord.py alongside some web server such as flask or aiohttp in a way that lets me interact within each other (because using threading doesn't let me send a message when the HTTP endpoint gets an update)
!pypi discord_ipc
!pypi discord.ext.ipc
A discord.py extension for inter-process communication.
Oh so, let me get this straight, this lets me run Flask in a separate process and then, when I run a special instruction, send a message to an specific channel?
lol my bad
This is like a web server (not Flask) which can run anywhere (even on a different VPS) and u can use it to request data from a bot and show it
What a fast answer!
sorry for.lags
Haha its fine, I was jk
i'll check tonight, thanks
Cool
im most proud of an on_message
basic encryption of text in a command
I am proud of making a custom commands system via on_message
U don't wanna see
you really just have to get the prefix and context and arguments in a string so its mostly just parsing a string
U will get a stroke
Ofc, its not as easy as it seems
i feel you 😭
how you know that
Because its cursed
Eh, I shut the project anyways and edited it many times
Lmao this is next level cursed, even people in #esoteric-python will get a headache
lol thats why you keep going back to fix it
thats a strong statement
thats part why its gotten good tho
It is what it is
those ppl wont get a headache lmao
Lmao
BTW is it normal for discord client to take more than 1 GB RAM and still lag lmao
do those people even know whats a headache😭
yes
Oh cool
wbu @slate swan
they had to learn esoteric python too
yours outputs ciphertext?
wut
your encryption cmd
I am sure grey made an on_message which banned every person who messages, even when the bot has no perms
what about it
nothing
its just a simple dict
lol what the f
wow what could go wrong??
Discord do be adding AutoMod 👀
discord really?
at this point handle everything including bots
MEE6 and Dyno: Are we non-existent to discord?
Lmao discord do be adding every feature that a mod bot has
mee6 like give me money
Wonder if discord is still gonna roll out guild monitesation, like patron. I remember reading a data-mine and seeing those features
Yea, premium channels
So cursed
Ugh/
Discord is trying to tap into the onlyfans market I guess
well im going to switch to revolt😩
Its dead
@ revolt I'm andy 😏 sniped
The user base is a passive one
Yea that too
what is this
I joined revolt early so I got a beta badge as well
😔 they don't even support custom chars
Good
pay to access those premium channels
lol
Both the pics are from same server
discord's trying to copy that?
discord is slowly turning in to a free to play game but everything in the game isnt free
Discord premium-gating features like they suddenly got acquired by EA
EA sports
andy revolt or guilded
@maiden fable
Revolt
Yea?
hunter
okimii
Isnt guilded good?
No
Too game based
Or atleast when I used guilded it sucked
remember when you said that discord is a gamer platform well now its becoming OF
Literally waited 1 minute for it to go past loading page
?
And was using memory BAD
Last time i checked they were in early startup
Memory leaks holy
They all discord clones anyway
Well its also owned by Roblox or its parent company
Powered by the child labour game programming industry
bro discord was game based too
was*
I tried guilded, it is a bit TOO game based
U cannot use it for general chatting or making even a Programming server
At least discord was not that much
lets all just switch to WhatsApp guys
No thanks
bro why not
joins revolt by logging in with discord
I don't wanna share my mobile number with some online weirdo
Lmaooo
does revolt have a mobile client yet?
still in prod
you calling me a weirdo?
a 3rd party is making it, the last time I checked
bruh
Don't start it here

How do I make a change lets say style becomes green from red to be edited in the view im using buttons subclass
!d discord.ButtonStyle
class discord.ButtonStyle```
Represents the style of the button component.
New in version 2.0.
😳 And they also support markdown in about me
They support md in messages too
Revolt
Vouch for me andy
class ticketbutton(nextcord.ui.Button):
def __init__(self,style,label):
self.style = style
self.label = label
async def callback(self , interaction : Interaction):
if self.style == nexcord.ButtonStyle.green:
style , label = stylelabel(False)
col.update_one({'gid':gid},{'$set':{'ticket':0}})
elif self.style == nexcord.ButtonStyle.red:
style , label = stylelabel(True)
col.update_one({'gid':gid},{'$set':{'ticket':1}})
self.style = style
self.label = label
await interaction.response.edit_message(view=self)
Basically open sourced discord
Tell them to give me special badges
Should've joined early for beta badge
I didn't even know that existed when it was in Beta 😔
i wonder if google would ever make a discord alike app they would be like: give me your data
😳 super inactive tho
No brandon made it
smh
We dont invite okimii tho
🖕
Yes but soon they will have end-to-end encryption on your messages
nice marketing
Selfhostable as well
Far from it
Discord is infact very spooky when it comes to privacy
No
There are still UI differences
It isn't the literal ditto
Also they ain't earning money from it
they can but it would be a hard and a waste of resources
Its open sourced
Donations
And they only use one server rn
Like only one server is enough to run the instance
Based in Germany
howmuch time will it take for a hybrid command to log ?
the commands r working with prefix but not with slash cmnd
It can take upto 2 hours for the commands to sync
ohk
if ctx.guild.id in list:
is it good ?
i make list and i dont know is it work
hello, i am trying to do a discord bot with discord.py, i want the main command of the bot to be a little pytoh code i made before, how can i do this ?
the code i made :
from itertools import product
import time
import math
inputs = input("numbers of inputs : ")
goal = float(input("goal : "))
start_time = time.time()
# sprint
def sprint(x):
return ((x * 0.6 * 0.91) + (0.1 * (1.3 * 0.98) * ((1 + 0.2 * 0) * (1 - 0.15 * 0)) *(0.6 / 0.6) ** 3))
# stop
def stop(x):
return ((x * 0.6 * 0.91) + (0.1 * (0 * 1) * ((1 + 0.2 * 0) * (1 - 0.15 * 0)) *(0.6 / 0.6) ** 3))
# walkback
def walkback(x):
return ((x * 0.6 * 0.91) + (0.1 * (1 * 0.98) * ((1 + 0.2 * 0) * (1 - 0.15 * 0)) *(0.6 / -0.6) ** 3))
# sneak
def sneak(x):
return ((x * 0.6 * 0.91) + (0.1 * (0.3 * 0.98) * ((1 + 0.2 * 0) * (1 - 0.15 * 0)) *(0.6 / 0.6) ** 3))
# sneakback
def sneakback(x):
return ((x * 0.6 * 0.91) + (0.1 * (0.3 * 0.98) * ((1 + 0.2 * 0) * (1 - 0.15 * 0)) *(0.6 / -0.6) ** 3))
functions_list = [stop,sprint,walkback,sneakback,sneak]
def functions_product(f, start = 0):
for func in f:
start = func(start)
return start
for i in product(functions_list, repeat=int(inputs)):
if abs(functions_product(i) - goal) < 0.00000001:
print(f'{[f.__name__ for f in i]}: {functions_product(i)}')
print("--- results took %s seconds to find ---" % (time.time() - start_time))
input("press enter to quit")```
i want the bot to ask the questions of the "input" at the top of the code and then to run everything else with the reponse of the user
(i never used discord.py at all)
What the maths
it's some formulas
you can run the code yourself if you want
(the code basically bruteforce all theses formulas between each others formulas)
it's maybe weird to understand
Ye it is
i just need to know how can i make the bot say this
and to make the response of the user a var
You could just have smth like
async def cmd_name(ctx, inputs, goal):
Use wait_for
Or ^
!d discord.ext.commands.Bot.wait_for
wait_for(event, /, *, check=None, timeout=None)```
This function is a [*coroutine*](https://docs.python.org/3/library/asyncio-task.html#coroutine).
Waits for a WebSocket event to be dispatched.
This could be used to wait for a user to reply to a message, or to react to a message, or to edit a message in a self-contained way.
The `timeout` parameter is passed onto [`asyncio.wait_for()`](https://docs.python.org/3/library/asyncio-task.html#asyncio.wait_for "(in Python v3.10)"). By default, it does not timeout. Note that this does propagate the [`asyncio.TimeoutError`](https://docs.python.org/3/library/asyncio-exceptions.html#asyncio.TimeoutError "(in Python v3.10)") for you in case of timeout and is provided for ease of use.
In case the event returns multiple arguments, a [`tuple`](https://docs.python.org/3/library/stdtypes.html#tuple "(in Python v3.10)") containing those arguments is returned instead. Please check the [documentation](https://discordpy.readthedocs.io/en/latest/api.html#discord-api-events) for a list of events and their parameters.
This function returns the **first event that meets the requirements**...
permissions not permission
welcome
ive got a deja vu cuz i swear i saw someone asking the same question with the same code yesterday i think or the day before
am I the only one who gets deja vu 24/7 or is it normal?
i asked some help with this yesterday but it wasn't discord bot related
its normal i think cuz its the same with me
oh well
how do i have to include this in my code ?
Hey guys i have a rather annoying situation right now.
I made a simple discord bot, that replys with text everytime someone runs a command
like il run !pay
first learn how to create a basic command
and it will respond with
"pay here..." etc
i've tried hosting on both repl.it & pebblehost and i keep getting rate limted.
show the whole traceback
- Repl.it is going to make your bot get ratelimited faster, since, of course, it uses a shared IP divided amongst many clients. And the discord API ratelimits IPs.
- Repl.it machines are superly underpowered
- If the bot is in development stage, use a local code editor (Dedicated - PyCharm, Light - Visual Studio Code, Atom, Sublime Text)
- If the issue is raised during the hosting of it, consider using a Virtual Private Server (VPS, and yes, you have to buy one)
- You can get many cheap VPS' (See pinned messages for more info) or claim 12-months free on AWS (has limitations)
Ok
yeah im aware theyre package files
Repl makes sense, but the issue is pebblehost
i have dozens of bot that have never been rate limited.
that i run on pebblehost
don't know what pebblehost is so uhh
I used to have a minecraft server on pebblehost, it was pretty terrible tbh
Don't remember exactly what was wrong with it as it was a while ago, but I do remember the general feeling I got from it was that it felt kinda cheap and bad, if you understand what I'm saying
Even their Premium version?
ew
Why would this happen?
event doesn't take parenthesis
I don't have parenthesis around event?
discord.Client.event, thats cursed
😬
💀
Im trying to use cogs so if I put it in the main file would it till work cause I'll just do that and then I wouldn't need to have discord.client.event lol
Oh yeah I was looking at the error
If it's inside a cog you should be using commands.listener() I believe?
Is it better to have it in the cog or would it work fine outside of it
commands.Cog.listener()
Ah thank you
it works the same inside and outside
I have no idea what that does lol
Ok I'll just put it outside then and save the copy paste
Still pretty bad but... not as bad as before
@client.event
thats a cog-
then @commands.Cog.listener
()
yes

how can i fix that ?
Traceback (most recent call last):
File "C:\Users\arsbu\Documents\CODE\PKbot\testpy\lib\site-packages\discord\ext\commands\bot.py", line 939, in invoke
await ctx.command.invoke(ctx)
File "C:\Users\arsbu\Documents\CODE\PKbot\testpy\lib\site-packages\discord\ext\commands\core.py", line 855, in invoke
await self.prepare(ctx)
File "C:\Users\arsbu\Documents\CODE\PKbot\testpy\lib\site-packages\discord\ext\commands\core.py", line 789, in prepare
await self._parse_arguments(ctx)
File "C:\Users\arsbu\Documents\CODE\PKbot\testpy\lib\site-packages\discord\ext\commands\core.py", line 697, in _parse_arguments
transformed = await self.transform(ctx, param)
File "C:\Users\arsbu\Documents\CODE\PKbot\testpy\lib\site-packages\discord\ext\commands\core.py", line 542, in transform
raise MissingRequiredArgument(param)
discord.ext.commands.errors.MissingRequiredArgument: inputs is a required argument that is missing.
what i am trying to make :
@client.command()
async def ibf(ctx, inputs, goal):
await ctx.send('How many ticks do you want to bruteforce ?')
inputs = await client.wait_for('message')
await ctx.send('What goal speed do you want ?')
goal = await client.wait_for('message')```
(i am not sure about what i am doing rn)
Bruh
You can't use input() along with your bot, as input() is blocking
if you are already accepting the arguments during command invocation, you don't need explicit wait_for(s) which especially do nothing
can someone make a little example of what of what i should do to just get the response of the user and make this a var please ?
@bot.command()
async def ibf(ctx):
def check(msg):
return msg.channel == ctx.channel and msg.author == ctx.author
await ctx.send('How many ticks do you want to bruteforce ?')
inputs = await bot.wait_for('message', check=check)
await ctx.send('What goal speed do you want ?')
goal = await bot.wait_for('message', check=check)
ew
btw, you should really download the python extension for vsc, its quite helpful
Oh there’s an extensive for that, will do ty
yes
how do I do something like this in poll questions?
you calculate the percentage
ty!
then if you have 56% on one side, you set the embed value to whole_line_character*56 + points_character*44
because those are a bunch of characters Ig
and the value of the second embed would be whole_line_character*44 + points_character*56 + "44% votes"
if votes == 1:
char = 1
if votes == 2:
char = 2
...```
Why not just do votes = char?
because percentage
okay so I think I got it - thank you
Ash's logic was definitely dumbing there
no
u can do str(votes)[:-1]?
await ctx.send(f'{[f.__name__ for f in i]}: {functions_product(i)}')```
is something wrong with this ?
which would do what
Nvm I am gonna go
Why is my bot not being referenced when i reply to something it does now
oh ffs is it because it's using a slash command
why do i get this error message ?
Traceback (most recent call last):
File "C:\Users\arsbu\Documents\CODE\PKbot\testpy\lib\site-packages\discord\ext\commands\core.py", line 85, in wrapped
ret = await coro(*args, **kwargs)
File "C:\Users\arsbu\Documents\CODE\PKbot\main.py", line 50, in ibf
for i in product(functions_list, repeat=int(inputs)):
TypeError: int() argument must be a string, a bytes-like object or a real number, not 'Message'
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "C:\Users\arsbu\Documents\CODE\PKbot\testpy\lib\site-packages\discord\ext\commands\bot.py", line 939, in invoke
await ctx.command.invoke(ctx)
File "C:\Users\arsbu\Documents\CODE\PKbot\testpy\lib\site-packages\discord\ext\commands\core.py", line 863, in invoke
await injected(*ctx.args, **ctx.kwargs)
File "C:\Users\arsbu\Documents\CODE\PKbot\testpy\lib\site-packages\discord\ext\commands\core.py", line 94, in wrapped
raise CommandInvokeError(exc) from exc
discord.ext.commands.errors.CommandInvokeError: Command raised an exception: TypeError: int() argument must be a string, a bytes-like object or a real number, not 'Message'
the code of my command :
# sprint
def sprint(x):
return ((x * 0.6 * 0.91) + (0.1 * (1.3 * 0.98) * ((1 + 0.2 * 0) * (1 - 0.15 * 0)) *(0.6 / 0.6) ** 3))
# stop
def stop(x):
return ((x * 0.6 * 0.91) + (0.1 * (0 * 1) * ((1 + 0.2 * 0) * (1 - 0.15 * 0)) *(0.6 / 0.6) ** 3))
# walkback
def walkback(x):
return ((x * 0.6 * 0.91) + (0.1 * (1 * 0.98) * ((1 + 0.2 * 0) * (1 - 0.15 * 0)) *(0.6 / -0.6) ** 3))
# sneak
def sneak(x):
return ((x * 0.6 * 0.91) + (0.1 * (0.3 * 0.98) * ((1 + 0.2 * 0) * (1 - 0.15 * 0)) *(0.6 / 0.6) ** 3))
# sneakback
def sneakback(x):
return ((x * 0.6 * 0.91) + (0.1 * (0.3 * 0.98) * ((1 + 0.2 * 0) * (1 - 0.15 * 0)) *(0.6 / -0.6) ** 3))
functions_list = [stop,sprint,walkback,sneakback,sneak]
@client.command()
async def ibf(ctx):
def check(msg):
return msg.channel == ctx.channel and msg.author == ctx.author
await ctx.send('How many ticks do you want to bruteforce ?')
inputs = await client.wait_for('message', check=check)
await ctx.send('What goal speed do you want ?')
goal = await client.wait_for('message', check=check)
def functions_product(f, start=0):
for func in f:
start = func(start)
return start
for i in product(functions_list, repeat=int(inputs)):
if abs(functions_product(i) - goal) < 0.0000001:
await ctx.send(f'{[f.__name__ for f in i]}: {functions_product(i)}')```
....
!paste
Pasting large amounts of code
If your code is too long to fit in a codeblock in discord, you can paste your code here:
https://paste.pythondiscord.com/
After pasting your code, save it by clicking the floppy disk icon in the top right, or by typing ctrl + S. After doing that, the URL should change. Copy the URL and post it here so others can see it.
You're welcome
oh sorry
youre trying to convert a Message object to an int with the built in converter
Guys anyone know how to make a command that gives everyone a certain role?
!d discord.Member.add_roles
await add_roles(*roles, reason=None, atomic=True)```
This function is a [*coroutine*](https://docs.python.org/3/library/asyncio-task.html#coroutine).
Gives the member a number of [`Role`](https://discordpy.readthedocs.io/en/latest/api.html#discord.Role "discord.Role")s.
You must have the [`manage_roles`](https://discordpy.readthedocs.io/en/latest/api.html#discord.Permissions.manage_roles "discord.Permissions.manage_roles") permission to use this, and the added [`Role`](https://discordpy.readthedocs.io/en/latest/api.html#discord.Role "discord.Role")s must appear lower in the list of roles than the highest role of the member.
inputs is a message
ratelimits?
what is the problem?
if you wrote numbers in that message, you can convert it to int by int(inputs.content)
No like everyone
Not 1 person
ratelimit goes brrrr
for member in guild_members:
await member.add_roles(...)```
sheesh
So that will give everyone that role
Might as well change the perms for everyone role
ew
What rate limit?
too many requests per second -> denial of requests from the api -> non-functional app for a certain period
Discord gonna disconnect u from their API and ban u for a few hours if u mass add roles
which event should I used for live tracking of polls?
await ctx.send('How many ticks do you want to bruteforce ?')
inputs = await client.wait_for('message', check=check)
int(inputs.content)
await ctx.send('What goal speed do you want ?')
goal = await client.wait_for('message', check=check)
int(float(goal.content))```
would this work ?
reaction_add or raw_reaction_add
on_raw_reaction_add (though if you want more info to the event, consider using the reaction_add)
i just want the reaction count
why do you convert it to float first
and no it wouldn't
inputs = await client.wait_for('message', check=check)
inputs = int(inputs.content)
What about lockdown
ah ok
The whole server
night as well use the raw event, since you can simply get the message using the id from the payload
so I have to keep fetching the message?
to count the votes? only if you want to update showing it somewhere
or try getting it first, make a getch basically
update in the embed itself, yes
if payload.message_id == stored_message.id
iirc you can somehow store a message in the cache, if you do that you can use on_reaction_add as well
would buttons be better for this?
shrug
no I don't think so
because when you reset the bot you can't use the button anymore
Hello guys anyone know how to make a command that changes a perm of a role in the server
so I just don't understand where to save the message object from a command to use in another event
buttons, have fun, you'll have to store whole of the option list in a database unlike reactions which can be fetched directly
!botvar
Python allows you to set custom attributes to most objects, like your bot! By storing things as attributes of the bot object, you can access them anywhere you access your bot. In the discord.py library, these custom attributes are commonly known as "bot variables" and can be a lifesaver if your bot is divided into many different files. An example on how to use custom attributes on your bot is shown below:
bot = commands.Bot(command_prefix="!")
# Set an attribute on our bot
bot.test = "I am accessible everywhere!"
@bot.command()
async def get(ctx: commands.Context):
"""A command to get the current value of `test`."""
# Send what the test attribute is currently set to
await ctx.send(ctx.bot.test)
@bot.command()
async def setval(ctx: commands.Context, *, new_text: str):
"""A command to set a new value of `test`."""
# Here we change the attribute to what was specified in new_text
bot.test = new_text
This all applies to cogs as well! You can set attributes to self as you wish.
Be sure not to overwrite attributes discord.py uses, like cogs or users. Name your attributes carefully!
thats gonna be reset
Anyone?
gtg
@bot.command() async def clear(ctx, limit : int = None): premium = [982692724153151569] if limit == None: if ctx.guild.id not in premium: await ctx.channel.purge(limit=30) else: ctx.channel.purge(limit=100000) else: if ctx.guild.id not in premium: if limit > 30: await ctx.send("[**ERROR**] Your max limit is 30.") else: ctx.channel.purge(limit=limit) else: ctx.channel.purge(limit=limit)
main.py:31: RuntimeWarning: coroutine 'TextChannel.purge' was never awaited
ctx.channel.purge(limit=limit)
RuntimeWarning: Enable tracemalloc to get the object allocation traceback
Any who can help?
but there will be multiple polls at once
Anyone know the issue?
``import discord
from discord.ext import commands
token = (token)
bot = commands.Bot(command_prefix='!', intents=discord.Intents.all())
@bot.event
async def on_ready():
print('working smoothly!')
bot.run(token)``
what do you wanna store exactly?
bot.run needs to be outside the on_ready function
THANKYOUU
I just want to make a command that displays a poll and in that poll, the reaction data is updated on each reaction add.
Let's say there are two reactions, If someone clicks one, it'll update the percentage that clicked on that one
i just realised
await ctx.channel.purge
you have to take bot.run(token) out of on_ready
why dont you just fetch the reaction amount when the poll has to end?
What
!d discord.Role.edit use the perms kwarg
await edit(*, name=..., permissions=..., colour=..., color=..., hoist=..., display_icon=..., mentionable=..., position=..., reason=...)```
This function is a [*coroutine*](https://docs.python.org/3/library/asyncio-task.html#coroutine).
Edits the role.
You must have the [`manage_roles`](https://discordpy.readthedocs.io/en/latest/api.html#discord.Permissions.manage_roles "discord.Permissions.manage_roles") permission to use this.
All fields are optional.
Changed in version 1.4: Can now pass `int` to `colour` keyword-only parameter.
Changed in version 2.0: Edits are no longer in-place, the newly edited role is returned instead...
because I want it to be updating in real time
How do events work in dpy
in simple words, whenever the api finds the suitable conditions that were registered by your app, it sends back the required data whenever that certain condition meets
oh well, then use on_reaction_add event
would it be consistent enough?
!d discord.on_reaction_add
discord.on_reaction_add(reaction, user)```
Called when a message has a reaction added to it. Similar to [`on_message_edit()`](https://discordpy.readthedocs.io/en/latest/api.html#discord.on_message_edit "discord.on_message_edit"), if the message is not found in the internal message cache, then this event will not be called. Consider using [`on_raw_reaction_add()`](https://discordpy.readthedocs.io/en/latest/api.html#discord.on_raw_reaction_add "discord.on_raw_reaction_add") instead.
Note
To get the [`Message`](https://discordpy.readthedocs.io/en/latest/api.html#discord.Message "discord.Message") being reacted, access it via [`Reaction.message`](https://discordpy.readthedocs.io/en/latest/api.html#discord.Reaction.message "discord.Reaction.message").
This requires [`Intents.reactions`](https://discordpy.readthedocs.io/en/latest/api.html#discord.Intents.reactions "discord.Intents.reactions") to be enabled.
Note
This doesn’t require [`Intents.members`](https://discordpy.readthedocs.io/en/latest/api.html#discord.Intents.members "discord.Intents.members") within a guild context, but due to Discord not providing updated user information in a direct message it’s required for direct messages to receive this event. Consider using [`on_raw_reaction_add()`](https://discordpy.readthedocs.io/en/latest/api.html#discord.on_raw_reaction_add "discord.on_raw_reaction_add") if you need this and do not otherwise want to enable the members intent.
that's your best option tbh
Yeah ik that, but like how can it check for every new message (on message event)
Why does this give me Attribute Error?
await the purge
@client.event
async def on_message(message):
user_response = ''
if message.author == client.user:
return None
elif str(message.content) == '-chat':
username = str(message.author).split('#')
await message.channel.send('Starting a new chat...')
# starting advanced chat
if check_user('name_log.txt', username[0] + username[1]):
file = open('name_log.txt', 'a')
file.write(username[0] + username[1] + '\n')
file.close()
time.sleep(2)
await message.channel.send(r.choice(new_greeters) + ' ' + username[0] +'\n' + r.choice(questions))
user_response = await client.wait_for('message', check = None, timeout= 15.0)
else:
time.sleep(2)
response = r.choice(old_greeters)
if response == old_greeters[0]:
await message.channel.send(response)
user_response = await client.wait_for('message', check = None, timeout= 15.0)
else:
await message.channel.send(response + '\n' + r.choice(questions))
user_response = await client.wait_for('message', check = None, timeout= 15.0)
user_response = user_response.content
if user_response == 'good':
await message.channel.send('Good to know')
client.run(TOKEN) ```
does the on_reaction_add internally fetch each message?
dont understand your point, really, my bad

