#discord-bots
1 messages · Page 674 of 1
Greetings
@patent lark got it, ```py
@commands.command()
async def verc(self, ctx):
configured = var.execute("SELECT * FROM verification WHERE guildid = ?", (str(ctx.guild.id), )).fetchall()
vguild = self.bot.get_guild(int(configured[0][0]))
vrole = ctx.guild.get_role(int(configured[0][1]))
vchannel = self.bot.get_channel(int(configured[0][2]))
await ctx.send(configured)
await ctx.send(f'{vguild.id} {vchannel.id} {vrole.id}')
''' if ctx.guild.id == 890306563565305866:
role = ctx.guild.get_role(917284127701598250)
if ctx.guild.id == 821722608767598663:
if ctx.channel == 864368495952396309:
role = ctx.guild.get_role(863016275613319209)
ctx.message.delete()'''
@commands.command()
async def verify(self, ctx):
member = ctx.author
def check(m):
return m.author == ctx.author
configured = var.execute("SELECT * FROM verification WHERE guildid = ?", (str(ctx.guild.id), )).fetchall()
vguild = self.bot.get_guild(int(configured[0][0]))
vrole = ctx.guild.get_role(int(configured[0][1]))
vchannel = self.bot.get_channel(int(configured[0][2]))
if ctx.guild.id == vguild.id:
if ctx.channel == vchannel.id:
role = ctx.guild.get_role(vrole.id)
ctx.message.delete()
but i get this error UnboundLocalError: local variable 'role' referenced before assignment when using the verify command
can that work? its a value from a config database
That’s a way to solve your UnboundLocalError
The error says it all🕴️
Bro what 🚶
wait
I'm so stupid
they used role before it was declared
🚶 I'm out of here
You use the .mention attr
!d discord.Member.mention
property mention: str```
Returns a string that allows you to mention the member.
await message.channel.send('@EggyinIt')```
You can ig
But not the correct way
ya not working
Are you trying to mention the author?
Do ctx.author.mention or…something else
no other members
Hes using message
Which exactly?
other member in server
What are you trying to do exactly?
There was a thing
Always the same member?
pin someone 100 times to weak him up
Whilst helping me
Then you can get the ID and use this @empty moon
Oh shit
the member object, yeah.
LOL
Youll get rate limited
;-;
Send something like this
Replace the number with the member id
You can add a member arg and then ping him 100 times
use a while loop
ya
or just do member: discord.Member ig
But your probably gonna get ratelimited
Your answer is in my PC somewhere but unfortunately my PC is away rn
ok nvm
the answer is quite simple.
Yes very
Ok
Trying to print a PDF it’s doing my head in
Trying for an hour yet
FINALLY IT WORKED
async def joinn(ctx):
channel = ctx.message.author.voice.voice_channel
await channel.connect()```
why this bot not joining vc
;-;
*not
ok
it is defined though
@commands.command()
async def verify(self, ctx):
member = ctx.author
def check(m):
return m.author == ctx.author
configured = var.execute("SELECT * FROM verification WHERE guildid = ?", (str(ctx.guild.id), )).fetchall()
vguild = self.bot.get_guild(int(configured[0][0]))
vrole = ctx.guild.get_role(int(configured[0][1]))
vchannel = self.bot.get_channel(int(configured[0][2]))
if ctx.guild.id == vguild.id:
if ctx.channel == vchannel.id:
role = ctx.guild.get_role(vrole.id)
ctx.message.delete()```
channel = ctx.author.voice.channel
@commands.command()
async def verc(self, ctx):
configured = var.execute("SELECT * FROM verification WHERE guildid = ?", (str(ctx.guild.id), )).fetchall()
vguild = self.bot.get_guild(int(configured[0][0]))
vrole = ctx.guild.get_role(int(configured[0][1]))
vchannel = self.bot.get_channel(int(configured[0][2]))
await ctx.send(configured)
await ctx.send(f'{vguild.id} {vchannel.id} {vrole.id}')
```see
@tacit horizon
That should work
INDENTS
iNDENTS
ok
Not the error
On mobile
THE INDENTSSS

then whats the issue-
I dont care
you can still indent
cuz im honestly clueless
4 spaces
role is defined
finally
dont be lazy mr.Johnson
discord.ext.commands.errors.CommandInvokeError: Command raised an exception: RuntimeError: PyNaCl library needed in order to use voice
@bot.command()
async def lol(ctx,member:discord.Member):
a = 0
while 100 > 0:
await ctx.send(member.mention)
a =+ 1
@tacit horizon
is it the same error? Or is it what the bot is sending
Their
then install it
*there
🕴️
pip install pynacl
ok
+=
bot doesnt send anything, its a verification command so i have a lot of variables. the role variable shouldnt be the issue considering its defined
ok worked
there
lmao
Knew that looked weird
it will mention to .. ?
Might want
while a < 100:
because while 100 > 0
winwar maybe you can help me with something
it will repeat forever
Difference?
because it's true
I forgot thats a😭
because 100 is always bigger than 0
*meant
The var a😭
ok
@commands.command()
async def verc(self, ctx):
configured = var.execute("SELECT * FROM verification WHERE guildid = ?", (str(ctx.guild.id), )).fetchall()
vguild = self.bot.get_guild(int(configured[0][0]))
vrole = ctx.guild.get_role(int(configured[0][1]))
vchannel = self.bot.get_channel(int(configured[0][2]))
await ctx.send(configured)
await ctx.send(f'{vguild.id} {vchannel.id} {vrole.id}')```
meanwhile apperently `role` is not defined
```py
@commands.command()
async def verify(self, ctx):
member = ctx.author
def check(m):
return m.author == ctx.author
configured = var.execute("SELECT * FROM verification WHERE guildid = ?", (str(ctx.guild.id), )).fetchall()
vguild = self.bot.get_guild(int(configured[0][0]))
vrole = ctx.guild.get_role(int(configured[0][1]))
vchannel = self.bot.get_channel(int(configured[0][2]))
if ctx.guild.id == vguild.id:
if ctx.channel == vchannel.id:
role = ctx.guild.get_role(vrole.id)
ctx.message.delete()
#code
if role in member.roles: ##error occurs here on 'role'
alr = discord.Embed(title='Verification', description=f'You are already verified!', color=0x2f3136)
await ctx.send(embed=alr, delete_after=5)
return```
Mobile isnt easy guys 🕴️
I can do it on mobile aswell
for the mobiles that cant see proper formatting 
Idk chief
i already told you the issue @slate swan
Role is indeed not defined
Idk okimii 
exactly what i said
use global I think
No where else outside
no
shit
just set a default value to role
the commands only meant to work in specific channels
alright
of guilds that are in the database
But im bad?🕴️
And it's await ctx.message.delete()
!d global
7.12. The global statement
global_stmt ::= "global" identifier ("," identifier)*
``` The [`global`](https://docs.python.org/3/reference/simple_stmts.html#global) statement is a declaration which holds for the entire current code block. It means that the listed identifiers are to be interpreted as globals. It would be impossible to assign to a global variable without `global`, although free variables may refer to globals without being declared global.
Names listed in a [`global`](https://docs.python.org/3/reference/simple_stmts.html#global) statement must not be used in the same code block textually preceding that `global` statement.
Names listed in a [`global`](https://docs.python.org/3/reference/simple_stmts.html#global) statement must not be defined as formal parameters, or as targets in [`with`](https://docs.python.org/3/reference/compound_stmts.html#with) statements or [`except`](https://docs.python.org/3/reference/compound_stmts.html#except) clauses, or in a [`for`](https://docs.python.org/3/reference/compound_stmts.html#for) target list, [`class`](https://docs.python.org/3/reference/compound_stmts.html#class) definition, function definition, [`import`](https://docs.python.org/3/reference/simple_stmts.html#import) statement, or variable annotation.
Don't use global

Apparently it’s the devils sign
?
global is not the right answer, the fix is so simple. set a default value to "role" at the top, under your function definition
shit
Snow is giving the answer lol
im gonna sleep
._.
nighty night
thanks, I'll have nightmares again
Yeah im in them
🕴️ 🚶
role = ctx.guild.get_role('Member') that can work right?
^
😅
Dont use that
get_role(role_id, /)```
Returns a role with the given ID.
takes an int.
Programming in mobile isnt easy either lol
its has not any like mention " member "
what?
like the id
@bot.command()
async def lol(ctx,member:discord.Member):
a = 0
while 100 > a:
await ctx.send(member.mention)
a += 1
That should work
No need when you have the member arg
it will mention to who
To the given member?
whoever you fill in the parameter with when you run the command
you would do
!lol @user and it will mention the user
where i put then member name ._.
you dont?
ok
LOL ITS WORKED
op lol
You get what i mean
when you called func you needed to pass it as a string.
Yeah i saw lmfao
I just cant program on mobile for a reason
!e
def func(member):
print(member)
func("@okimii")
@tacit horizon

@slate swan :white_check_mark: Your eval job has completed with return code 0.
@okimii

and can u tell me how to then 100 value like " !lol @tacit horizon 100"
like that
Add a value?
add the value with user
add a parameter to hold the value. then break the loop once it hits the parameters value (int value)
Beat me to it lol
😶
Pretty easy stuff ngl
No im a freshman in highschool
wow
Lol
nc jk
Im 14 you good?
-_-
Most people here arent even 20 lol
same
is that real
@bot.command()
async def lol(ctx, member: discord.Member, count: int):
c = 0
while True:
await ctx.send(member.mention)
c +=1
if c == int(count):
break
else:
continue```
something like this
ok
Why not just do for i in range(count): ...??
Cant you just do a while loop?
let me
while 1 > 2 doesnt it stop?
i edited it
wasnt thinking that way, but that would make it more simple.
u r a collage guy right
assuming it was only for trying to wake your friend up. if it were to be used in a harmful case i would have let it be.
It does lol
no, im 17. senior year of highschool.
Imagine🕴️
xd
BRUH how u guys know code so wellll
Mostly passion and because i love what i do and for my future
ahh i mean where do u learn
it mostly comes from practice, trial and error, and being open to learn. personally, i have a passion for coding/developing. so i dedicated time to it.
Self thought
i'm self taught as well.
Same
I like being self taught its better
it is.
In my opinion
im also starting
Yeah
Best of luck on your journey
you learn your own ways and your own aspects. rather than someone else's opinion of whats wrong or right.
ya
And at your own rate
i took one computer science class but it didnt much help, it was just the super basic coding, like syntax. they didnt even speak of asynchronous programming or OOP.
Most classes are like that
which country
More related to syntax then oop or asynchronous programming or stuff related to apis
Well, perhaps the class was a beginner one
I think theirs classes for backend tho
Never done one but ive been told that
also, i recommend taking a look at basic python before jumping into discord.py.
to code using discord.py it takes: basic python knowledge, asynchronous programming knowledge, and OOP (Object oriented programming)
i have
basic python knowledge = all, expect class
CS classes usually just have you learn a language, learn some basic stuff like time complexity some other stuff as well, later you could get into the more advanced
I see
OOP hmm
!pep8 this also really helped me with writing clean and understandable code.
PEP 8 is the official style guide for Python. It includes comprehensive guidelines for code formatting, variable naming, and making your code easy to read. Professional Python developers are usually required to follow the guidelines, and will often use code-linters like flake8 to verify that the code they're writing complies with the style guide.
More information:
• PEP 8 document
• Our PEP 8 song! :notes:
Specifically if you are writing a python package/program
Other languages and other projects follow different guidelines, styleguides and conventions
if member is member.bot:```
!d discord.Member.bot
property bot```
Equivalent to [`User.bot`](https://discordpy.readthedocs.io/en/master/api.html#discord.User.bot "discord.User.bot")
i used
if member.bot == True:
Code here
and that worked also
hello can i scrape all message from a user by using my account ?
(on a server where im not owner)
No. That would be self Botting which breaks discord tos
mmmh okay thanks u
is that allowed with a bot ?
Yes
mmmhh okay
and how can i "scan" all message from a channel to check their user sender id
with a while ?
hello guys
can i how to create command, for command use wikipedia for search. !wikipedia search (idea)
!pypi wikipedia
This will always be False
Why is that so?
member is a member object
member.bot is a bool
member is member is True, while member is <anything else> is False
you would just check if member.bot here
Ah i see thank you
you're correct. my mistake.
Traceback (most recent call last):
File "C:\Users\thoma\AppData\Local\Programs\Python\Python310\lib\site-packages\discord\client.py", line 343, in _run_event
await coro(*args, **kwargs)
File "c:\Users\thoma\Desktop\discord.py\python\bot.py", line 40, in on_member_join
Myembed.add_field(name="Account Created at:", value=f"{member.created_at(datetime)}", inline=True)
TypeError: 'datetime.datetime' object is not callable```
async def on_member_join(member):
guild = client.get_guild(730651046459998218)
channel = client.get_channel(885464532959526913)
Myembed = discord.Embed(title= f"Welcome",
description=(f"Welcome {member.mention}, You are member {guild.member_count}. \n Please enjoy your stay here and dont forget to read the await [#904279966693355550](/guild/267624335836053506/channel/904279966693355550/)"))
Myembed.add_field(name="Account Created at:", value=f"{member.created_at(datetime)}", inline=True)
await channel.send(embed=Myembed)
await member.send(embed=Myembed)
roles_list = ["Unverified","•.¸¸.•:Colours:•.¸¸.•``•.¸¸.•``•.¸¸.•``•.¸¸.•","•.¸¸.•:Verification:•.¸¸.•``•.¸¸.•``•.¸¸.•``•.¸¸.•","•.¸¸.•:Age:•.¸¸.•``•.¸¸.•``•.¸¸.•``•.¸¸.•","•.¸¸.•:Gender:•.¸¸.•``•.¸¸.•``•.¸¸.•``•.¸¸.•","•.¸¸.•:Sexuality:•.¸¸.•``•.¸¸.•``•.¸¸.•``•.¸¸.•",
"•.¸¸.•:Distance:•.¸¸.•``•.¸¸.•``•.¸¸.•``•.¸¸.•","•.¸¸.•:Ethnicity:•.¸¸.•``•.¸¸.•``•.¸¸.•``•.¸¸.•","•.¸¸.•:Hobbies:•.¸¸.•``•.¸¸.•``•.¸¸.•``•.¸¸.•","•.¸¸.•:Relationship:•.¸¸.•``•.¸¸.•``•.¸¸.•``•.¸¸.•","•.¸¸.•:Location:•.¸¸.•``•.¸¸.•``•.¸¸.•``•.¸¸.•",
"•.¸¸.•::•.¸¸.•`Seeking`•.¸¸.•``•.¸¸.•``•.¸¸.•","•.¸¸.•:DM:•.¸¸.•``•.¸¸.•``•.¸¸.•``•.¸¸.•","•.¸¸.•:Levels:•.¸¸.•``•.¸¸.•``•.¸¸.•``•.¸¸.•","•.¸¸.•:Games:•.¸¸.•``•.¸¸.•``•.¸¸.•``•.¸¸.•"]
for roles in roles_list:
role = discord.utils.get(member.guild.roles, name=roles)
await member.add_roles(role)
await member.send(f"**{member.author}**, please react with :white_check_mark: on this message in 60 seconds")
def check(r: discord.Reaction, u: Union[discord.Member, discord.User]):
return u.id == member.author.id and r.message.channel.id == member.channel.id and \
str(r.emoji) in ["\U00002705"]
try:
reaction, user = await client.wait_for(event = 'reaction_add', check = check, timeout = 60.0)
except asyncio.TimeoutError:
await member.send(f"**{member.author}**, you didnt react with a ✅ in 60 seconds.")
return
else:
if str(reaction.emoji) == "\U00002705":
return
await member.send(f"{member.author} reacted with a ✅")```
Is there a way to distinguish between aliases. So if someone uses one of the aliases it knows that they used that one?
Can you help me with that?
!d discord.ext.commands.Context.invoked_with
The command name that triggered this invocation. Useful for finding out which alias called the command.
member.created_at(datetime)
What are you trying to accomplish?
Why are you naming your commands.Bot instance client then renaming the client variable to bot?
Is that for me?
Yes
?
Well it’s where when a member joins if he/she doesn’t verify within a certain time they get kicked from the server
Is that right? I should have a member variable
I'm talking about the specific line I showed
Ohh that sorry
Well it wanted where it would at how long has this member created this account for example it should say something like 4 days ago
remove 1 indent level from the first 2 line inside the function
@final iron make sense
?
f"<t:{int(member.created_at.timestamp())}:R>"
That's a database question so it belongs in #databases '
== True is unnecessary tho
tutorials
while True:
currentbid = await self.bot.wait_for("message",check=check)
highestbid = await self.bot.pg_db.fetch("SELECT highestbid,user_id FROM auctions WHERE card_id = $1 AND card_set_name = $2",pokemon[0]['card_id'],pokemon[0]['card_set_name'])
print(highestbid)
if currentbid.content.isdigit() == False:
await currentbid.reply("Please refain from using text messages when an auction is going on.",delete_after=5)
elif int(currentbid.content) < 1000:
await currentbid.reply("Bid amount cannot be under 1,000 cardcoins.")
if currentbid.content.isdigit() == True and int(currentbid.content) > highestbid[0]['highestbid']:
await self.bot.pg_db.execute("UPDATE auctions SET highestbid = $1,user_id = $2 WHERE card_id = $3 AND card_set_name = $4",int(currentbid.content),currentbid.author.id,pokemon[0]['card_id'],pokemon[0]['card_set_name'])
await currentbid.reply(f"{currentbid.author.name} has the highest bid at the moment.")
``` for some reason this is sending the "has the highest big" message 2 times
any idea why? no errors.
is it possible to trigger a link using a select option/dropdown?
@commands.command()
async def verc(self, ctx):
configured = var.execute("SELECT * FROM verification WHERE guildid = ?", (str(ctx.guild.id), )).fetchone()
print(configured[0])
print(configured[1])
print(configured[2])```
using this i got these values
821722608767598663
863016275613319209
864368495952396309
The Aether
✔・verification
Member```
now using the following command id like to put it to work
@commands.command()
async def verify(self, ctx):
member = ctx.author
def check(m):
return m.author == ctx.author
configured = var.execute("SELECT * FROM verification WHERE guildid = ?", (str(ctx.guild.id), )).fetchone()
vguild = self.bot.get_guild(int(configured[0]))
vrole = ctx.guild.get_role(int(configured[1]))
vchannel = self.bot.get_channel(int(configured[2]))
if ctx.guild.id == configured[0]:
if ctx.channel == configured[2]:
role = ctx.guild.get_role(int(configured[1]))
await ctx.message.delete()``` how can i make this command work only in guilds that are in the database, whilst checking if the command is used in the proper channel, and to provide the proper role if verification is completed correctly? using just ids alone and not by reading the database this worked perfectly fine, so now im just trying to make the command read the database file for the values and use them as the ids instead of me typing them in the source manually. make sense?
Nope
You could make an exception whilst trying to get the id to check if the id exists in the database. For the other stuff you could make a statement using the and keyword to check if both criterias are fulfilled
If I understood correctly
No, actually not. But you could let the bot send a hidden message
await ctx.send('your link', hidden=True)
If the user selects something
Why would tutorials do such nonesense??? 🤦♂️
tutorials being tutorials
idk why tutorials always name the bot instance client
How to create on_reaction_add multiple times so that there were no errors?
`
discord.ext.commands.errors.CommandInvokeError: Command raised an exception: TypeError: load() takes 1 positional argument but 2 were given
are you loading a cog?
code:
@commands.command(hidden=True)
@commands.is_owner()
async def load(self, *, module : str):
"""Loads a module."""
try:
self.bot.load_extension(module)
except Exception as e:
await self.bot.say('\N{PISTOL}')
await self.bot.say('{}: {}'.format(type(e).__name__, e))
else:
await self.bot.say('\N{OK HAND SIGN}')
its a load command code
i didnt use it
so change that to ctx.send?
parameters
arguments go in the parameter
not really correct since it has its own term
discord.ext.commands.errors.MissingRequiredArgument: ctx is a required argument that is missing.
@commands.command(hidden=True)
@commands.is_owner()
async def load(self, *, module : str, ctx: commands.Context):
"""Loads a module."""
try:
self.bot.load_extension(module)
except Exception as e:
await ctx.send('\N{PISTOL}')
await ctx.send('{}: {}'.format(type(e).__name__, e))
else:
await ctx.send('\N{OK HAND SIGN}')
self goes first
ctx goes second
self is too access a class
but it still goes first ¯_(ツ)_/¯
wasnt talking about it
self isnt really an arg as its used to access variables that belongs to the class
but it still goes first ¯_(ツ)_/¯
wasnt talking about self but about arg so your stance is invalid
but it still goes first ¯_(ツ)_/¯
common sense when using a class
but it still goes first ¯_(ツ)_/¯
Only when in a class
yes
ctx will always be the first argument
as i said lol
Traceback (most recent call last):
File "C:\Users\thoma\AppData\Local\Programs\Python\Python310\lib\site-packages\discord\client.py", line 343, in _run_event
await coro(*args, **kwargs)
File "c:\Users\thoma\Desktop\discord.py\python\bot.py", line 92, in on_raw_reaction_remove
guild = member.guild
AttributeError: 'NoneType' object has no attribute 'guild'```
async def on_raw_reaction_remove(payload):
ourMessageID = 914720242297630750
if ourMessageID == 914720242297630750:
member = payload.member
guild = member.guild
emoji = payload.emoji.name
if emoji == ':white_check_mark:':
role = discord.utils.get(guild.roles, name="Unverified")
await member.add_roles(role)```
member is none
nvm i needed to restart the bot nvm
alr
@slate swan every time i join the server with a different account it keeps sending me this message in DM's await member.send(f"**{member.author}**, you didnt react with a :white_check_mark: in 60 seconds.")
How do i prevent that?
File "C:\Users\thoma\AppData\Local\Programs\Python\Python310\lib\site-packages\discord\client.py", line 343, in _run_event
await coro(*args, **kwargs)
File "c:\Users\thoma\Desktop\discord.py\python\bot.py", line 57, in on_member_join
await member.send(f"**{member.author}**, you didnt react with a ✅ in 60 seconds.")
AttributeError: 'Member' object has no attribute 'author'
what are you trying to do?
make it to where after a certain time if the member does react he/she gets kicked from the server
just use member
async def on_member_join(member):
guild = client.get_guild(730651046459998218)
channel = client.get_channel(885464532959526913)
Myembed = discord.Embed(title= f"Welcome",
description=(f"Welcome {member.mention}, You are member {guild.member_count}. \n Please enjoy your stay here and dont forget to read the await [#904279966693355550](/guild/267624335836053506/channel/904279966693355550/)"))
Myembed.add_field(name="Account Created at:", value=f"<t:{int(member.created_at.timestamp())}:R>" , inline=True)
await channel.send(embed=Myembed)
await member.send(embed=Myembed)
roles_list = ["Unverified","•.¸¸.•:Colours:•.¸¸.•``•.¸¸.•``•.¸¸.•``•.¸¸.•","•.¸¸.•:Verification:•.¸¸.•``•.¸¸.•``•.¸¸.•``•.¸¸.•","•.¸¸.•:Age:•.¸¸.•``•.¸¸.•``•.¸¸.•``•.¸¸.•","•.¸¸.•:Gender:•.¸¸.•``•.¸¸.•``•.¸¸.•``•.¸¸.•","•.¸¸.•:Sexuality:•.¸¸.•``•.¸¸.•``•.¸¸.•``•.¸¸.•",
"•.¸¸.•:Distance:•.¸¸.•``•.¸¸.•``•.¸¸.•``•.¸¸.•","•.¸¸.•:Ethnicity:•.¸¸.•``•.¸¸.•``•.¸¸.•``•.¸¸.•","•.¸¸.•:Hobbies:•.¸¸.•``•.¸¸.•``•.¸¸.•``•.¸¸.•","•.¸¸.•:Relationship:•.¸¸.•``•.¸¸.•``•.¸¸.•``•.¸¸.•","•.¸¸.•:Location:•.¸¸.•``•.¸¸.•``•.¸¸.•``•.¸¸.•",
"•.¸¸.•::•.¸¸.•`Seeking`•.¸¸.•``•.¸¸.•``•.¸¸.•","•.¸¸.•:DM:•.¸¸.•``•.¸¸.•``•.¸¸.•``•.¸¸.•","•.¸¸.•:Levels:•.¸¸.•``•.¸¸.•``•.¸¸.•``•.¸¸.•","•.¸¸.•:Games:•.¸¸.•``•.¸¸.•``•.¸¸.•``•.¸¸.•"]
for roles in roles_list:
role = discord.utils.get(member.guild.roles, name=roles)
await member.add_roles(role)
await member.send(f"{member.mention}, please react with :white_check_mark: on this message in 60 seconds")
def check(r: discord.Reaction, u: Union[discord.Member, discord.User]):
return u.id == member.author.id and r.message.channel.id == member.channel.id and \
str(r.emoji) in ["\U00002705"]
try:
reaction, user = await client.wait_for(event = 'reaction_add', check = check, timeout = 60.0)
except asyncio.TimeoutError:
await member.send(f"**{member.author}**, you didnt react with a ✅ in 60 seconds.")
return
else:
if str(reaction.emoji) == "\U00002705":
return
await member.send(f"{member.author} reacted with a ✅")```
this is the whole class code
put the kick function under the exception
Which is?
After a certain time if a member hasnt verified during that. Then they will get kicked from the server.
what could be the reason that I don't get the on_ready thing
send code?
try deleting author attr
dont need it as your getting the author of nothing
async def on_member_join(member):
guild = client.get_guild(730651046459998218)
channel = client.get_channel(885464532959526913)
Myembed = discord.Embed(title= f"Welcome",
description=(f"Welcome {member.mention}, You are member {guild.member_count}. \n Please enjoy your stay here and dont forget to read the await [#904279966693355550](/guild/267624335836053506/channel/904279966693355550/)"))
Myembed.add_field(name="Account Created at:", value=f"<t:{int(member.created_at.timestamp())}:R>" , inline=True)
await channel.send(embed=Myembed)
await member.send(embed=Myembed)
roles_list = ["Unverified","•.¸¸.•:Colours:•.¸¸.•``•.¸¸.•``•.¸¸.•``•.¸¸.•","•.¸¸.•:Verification:•.¸¸.•``•.¸¸.•``•.¸¸.•``•.¸¸.•","•.¸¸.•:Age:•.¸¸.•``•.¸¸.•``•.¸¸.•``•.¸¸.•","•.¸¸.•:Gender:•.¸¸.•``•.¸¸.•``•.¸¸.•``•.¸¸.•","•.¸¸.•:Sexuality:•.¸¸.•``•.¸¸.•``•.¸¸.•``•.¸¸.•",
"•.¸¸.•:Distance:•.¸¸.•``•.¸¸.•``•.¸¸.•``•.¸¸.•","•.¸¸.•:Ethnicity:•.¸¸.•``•.¸¸.•``•.¸¸.•``•.¸¸.•","•.¸¸.•:Hobbies:•.¸¸.•``•.¸¸.•``•.¸¸.•``•.¸¸.•","•.¸¸.•:Relationship:•.¸¸.•``•.¸¸.•``•.¸¸.•``•.¸¸.•","•.¸¸.•:Location:•.¸¸.•``•.¸¸.•``•.¸¸.•``•.¸¸.•",
"•.¸¸.•::•.¸¸.•`Seeking`•.¸¸.•``•.¸¸.•``•.¸¸.•","•.¸¸.•:DM:•.¸¸.•``•.¸¸.•``•.¸¸.•``•.¸¸.•","•.¸¸.•:Levels:•.¸¸.•``•.¸¸.•``•.¸¸.•``•.¸¸.•","•.¸¸.•:Games:•.¸¸.•``•.¸¸.•``•.¸¸.•``•.¸¸.•"]
for roles in roles_list:
role = discord.utils.get(member.guild.roles, name=roles)
await member.add_roles(role)
await member.send(f"{member.mention}, please react with :white_check_mark: on this message in 60 seconds")
def check(r: discord.Reaction, u: Union[discord.Member, discord.User]):
return u.id == member.mention.id and r.message.channel.id == member.channel.id and \
str(r.emoji) in ["\U00002705"]
try:
reaction, user = await client.wait_for(event = 'reaction_add', check = check, timeout = 60.0)
except asyncio.TimeoutError:
await member.send(f"**{member.mention}**, you didnt react with a ✅ in 60 seconds.")
return
else:
if str(reaction.emoji) == "\U00002705":
return
await member.send(f"{member.mention} reacted with a ✅")```
still the same
It keeps sending me multiple message of await member.send(f"{member.mention}, please react with ✅ on this message in 60 seconds")
u didnt even do as i said lmfao
U go learn python
no one needs to
put your kick function under the exception
Where is the kick function you were speaking of?
he said he wants the user to be kicked if they dont respond
hed have to put it under the timeout error
basic python
wasnt his error?
Well first fix this thing where it keeps sending me multiple messages of await member.send(f"{member.mention}, please react with ✅ on this message in 60 seconds")
and then get on the kick function
im not fixing anything for you, im telling you what you can do to get what you want
@slate swan i think u need to learn python not me
whats set() do
answer that before you open your mouth again 🖐️
can you be respectful?
i think you need to learn basic respect
i was trying to help him, hes looking for free code
how.....
?
What does that have to do from what i was talking about
wow just got owned
I dont think you r a bot developer after what u just said
ok
So?
this is not acceptable. nor calling users here skids. let me make that abundantly clear
@daring olive thank you
no problem... if you feel like you're not receiving a lot of help or if the help doesn't seem easy to follow, don't despair. discord bots aren't an easy first project as far as i know. doable, but you'll have to learn a lot with a steep learning curve
is it possible to send an embed within an embed :()
but if that's what you want to do, you should go for it
explain
not sure
Ive tried restarting the bot still happens
hm
say i wanted to have an invite link command, and when raised, the bot would send an embed with the link inside as a field value, would it be possible to have the invite link embed instead of just stay as a link?
hope that makes sense :d
links get turn into embeds?
uh hang on
You know how when you send an invite link it shows the server icon and the member count?
yeah?
to be able to get the invite link to do its embed thing within the sent embed
That's what they're talking about I think
doesnt discord make them embeds?
hmm lemme rephrase
say... youtube links
normally when you send one in chat, youll be able to see the embed with the title, creator and video player
you want to send a invite link in a embed without it being the invite default embed?
without it just appearing as the link yes
No, that’s literally impossible.
alright then
yeah thats nonsense
understood
thanks
As far as guild invites though you can process that your self. And do whatever with inside an embed ig?
ill compromise
Just use Client.fetch_invite() and it will return a PartialInviteGuild in which you can get icon and name and whatnot
????
great thankyou :)
discord.Embed(title="[Hello](https://google.com/)")
thats a hyperlink
You’re actually shit posting
masked embed
?
discord.Embed(title="[Invite Me](ur bot invite link)")
That’s not what he asked for
. Edit-sorry for the ping.

you cant do that
then wat?
what I just pulled replied to.
use the url kwarg
Can you even hyper link titles?
that one works as a blue link though
nah
"blue link"
afaik no
ig you can use the url kwarg in discord.Embed
no i think they want to make a embed and then have the default embed you get with a invite url within the embed
I honestly think that not everyone here is even on the same page.
yeah
Probably just me. 
hang on, do we have embed perms?
Normal discord users can’t use embeds
no like
if i sent a youtube link rn
would it embed the video player
yes
the thumbnail will pop up
Adobe makes so many software that it can be quite overwhelming for even a professional to understand what each one is used for.
Many people who are new to this have confusing questions regarding similar apps like "what is difference between after effects and premier pro" or "What is the difference between Photoshop, Illustrator, Lightroom and B...
within a embed right?
yeah so the question was whether i could get this ^ to show up within an embed
yea
as i said lol
sure
?
not title i meant diescription or value
That’s still not what he wanted either way.
Hyper links have no relevance to what he said.
.
i don't think its possible to embed a link that already has an embed into an embed, it'll just show the link, not the link's embed
yeah
import os
import discord
import dadjokes
import time
from dadjokes import Dadjoke
client = discord.Client()
client.event
async def on_ready():
print('Dad jokes are ready')
client.event
async def on_message(message):
if message.content.startswith('infinite_dadjokes'):
await message.channel.send('Yessiree')
if message.author == client.user():
await message.channel.send(Dadjoke())
time.sleep(25)
It's a very basic and kinda gimmicky code, but I don't get any output
oh no
;-;
why use discord.Client()
why not
do you even read your own code? client.user is a property it cant be called
Honestly if this is the only feature the bot has. And the only thing it’s meant for it doesn’t even matter that he’s using a blocking sleep.
and your checking if the bot said it, not you
yo dadjokes is an actual module?
dont use client and use asyncio since time.sleep is blocking your code
Alright
That’s true but like
And they miss @ for the decorators
.
^
very
are you new to this?
why u calling the class though? does it have a str/repr dunder that returns a joke
3 months I think
you learn from your mistakes i suppose
No it's because before this I did
dadjoke = Dadjoke()
But because of that, it sent the same joke over and over again
Sooo I just put the contents of the var into the send thing
o
use random?
random.choice?
yeah
that works on that? 
it works on every iterable
yeah it should work
no worries
ok
didn't work for me
cool
are you gonna help me find a way or no 🤔
noo XD
class :')
what
await ctx.send(embed=embed, components=[
[Button(style=ButtonStyle.grey, label="Refresh", emoji=bot.get_emoji(919622656049967164))]])
there's a refresh button but no
emoji
ok
try fetching it
use pycord trust me it's better than discord components
I'd prefer disnake

how?
Really easy to make buttons in disnake ngl
!d discord.ext.commands.Bot.fetch_emoji
No documentation found for the requested symbol.
h
theres no fetch emoji
true
dont you just do forward slash:emoji: to get the thing
needs id i think
yesh do that
yes
lemme try
forward slash:reload: gets the emoji format
yeah no try \:emoji:
I think you didn't put the emoji in a string
^
@boreal ravine how to get that bobons bot
you don't
it's my bot
lmao
🟥🟥🟥
🟥🟥🟦🟦
🟥🟥🟥🟥
🟥🟥🟥🟥
🟥 🟥
Off-topic channels
There are three off-topic channels:
• #ot2-never-nester’s-nightmare
• #ot1-perplexing-regexing
• #ot0-psvm’s-eternal-disapproval
Their names change randomly every 24 hours, but you can always find them under the OFF-TOPIC/GENERAL category in the channel list.
Please read our off-topic etiquette before participating in conversations.
amogOS :trollmask:
amongusss sus
Weirdest channel in the whole python server
agreed
well i mean if ppl have questions, we do our best to answer
a little shitposting cant hurt
less shit posting please
eh.. how to make bot kinda give coin or wmth when voted?
Use the botlist's api
if you were to make a currency bot, would it be wiser to use a json file to store data or a sql database
db
can give link?
json isnt a db or ment to store data
What botlist do you even use?
me who doesn't know anything about it:
we all start somewhere
eh top.gg
somewhere-
the more time you put into it, theoretically, the more you get out of it
hang in there man
k
thankss 😄
Yw
If you want to use something json-ish , go for mongodb , it's a noSQL database
ive learnt some mysql so i think that would be my go to but thanks for the recommendation
use motor if your gonna use mongodb
SQL is the language used by databases like postgresql/ mysql, SQL itself isn't a db and yes you should use postgres, it's not very hard, very reliable and advanced
Oh
Why did you delete the msg
Of course, sql's full form says its a language
who u talking to?
oh
Was referring to eevee and the OP
OP?
The person who asked the question
whos the OP
Loll
when in doubt use a database
👍
Beggars*
databases can store almost any type of data if you're clever with it
@slate swan where do you usually host the bot?
i dont actually host it, i just run it on my ide 😎
im just that good
lmao
you self host.
Ummm.....uhh...okay
resource wastage
same
ill just have my laptop running 24/7
LMAO
And damage it
only thing you need to pay is your electricity bills
lmao
pretty sure my laptop is unbreakable (not a bluff)
put it in the fridge
let me test that i have a hammer in my house
🚶♂️
dont youll break the hammer
lmao
Pretty sure you're using the other 95% of the human brain
me when
best of luck
humans use all their brain
Only 5%
no
And
all
Off-topic channels
There are three off-topic channels:
• #ot2-never-nester’s-nightmare
• #ot1-perplexing-regexing
• #ot0-psvm’s-eternal-disapproval
Their names change randomly every 24 hours, but you can always find them under the OFF-TOPIC/GENERAL category in the channel list.
Please read our off-topic etiquette before participating in conversations.
My superfast phone
we use 100% of our brains
we get a seizure
And wifi bills
And the bill for a new laptop
grr
i dont think it works like that......................
Hosting a discord bot on your own computer won't actually damage anything significantly...
It just depends how we'll you maintain it
E.g proper cooling
It will
And where is the proof of that?
Huh?
FRIDGE
Bruh !ot
Does that mean every vps hosting discord bots are being damaged because they are hosting discord bots???
Why not
🤔
Lol
run your bot on a fridge and youll be good
yeah not until you accidentally do os.remove("C:\Windows\System32")
Conclusion:
im sure my samsung smart fridge is up for the task
It doesn't, you can run perfectly run discord bots in laptops and keep it running, why do you think some people use RPI to host their bot
ofc
What exactly does calling that have to do with a discord bot
Also this talk about fridge, go in off topic channels please
yesh go back to discord bots
average fridge hater
:0
clearly you dont own an air fryer 😔
Decent person, who follows proper rules of the server and has some common sense
Unlike some others
yup
#stopfridgehate
aye
Wtf
give command ideas
latency command
A screenshot command without using selenium or api
idea command
Once made share the code with me
how you gotta render the website then
seems useless
idea command? give me more context
That is literally the first command that anyone makes.
isnt that what selenium does tho
Depends on you look at it.
never done it
well it is just a screenshot command
A bot in the actual dpy server has that feature. It’s constantly used.
Well think of the possibilities with the command
isn't it just a screenshot command
The bot in I was talking about allows you to pass in a website url and takes a ss and sends it. And if it’s a website that takes a bit to load you can pass a delay too.
I though it was hella cool when I saw it.
- i've never used selenium before, so I have no idea how i'd make it
- doesnt look like it has any benefits
bs4
i wanted to use replit for the api but it can either run selenium or a web server idk if theres any workaround to that tho
that thing doesnt run JavaScript
No actual benefits but it’s more a feature that users would like.
Can it work without chromedriver?
It literally says
¯_(ツ)_/¯
without chromedrivers
Ah thanks
Since I have the url on my clipboard, I'd simply open it myself ,-,
Nvm, it says headless
bots are all about automation
I dont
No point but fine
you gotta use mouse for the discord one tho
And you gotta use your mouse to click on links
You gotta use keyboard for the command tho
dont need to move my hands, so easier
the point of a bot is to simplify tasks and save time i suppose
Save time is subjective.
This is getting offtopic
simplifying tasks is objective
!ot
Off-topic channels
There are three off-topic channels:
• #ot2-never-nester’s-nightmare
• #ot1-perplexing-regexing
• #ot0-psvm’s-eternal-disapproval
Their names change randomly every 24 hours, but you can always find them under the OFF-TOPIC/GENERAL category in the channel list.
Please read our off-topic etiquette before participating in conversations.
now on with it
It’s really not.
Talking about the point of discord bots.
Not sure what’s with the mouse shit tho.
Lol
make the bot eye-tracker activated
/shrug
512 mb
You could
Ig I will make an api for myself
its like some 10 lines of code tbh
And host it on another heroku app
What is?
time wastage if its only usable by you
?
I love wasting time ig
guys give command ideas that dont require me to use something i dont have any experience with
discord snek
What commands you already got
snek? wut
Make a command which can control your led bulb if linked
Wait I am gonna do that
eh all the commands that a normal bot would already have
Good idea actually
no
You could use docker to create docker compose stack with multiple containers to do stuff for your discord and then make them talk to each other

Make a command which adds buttons to messages and assign roles on button click
Make chess
So reros?
already did that
I will create an app ask users to install it and then control it with discord
Wdym
Sounds good
Reaction roles
Uh
But instead of reactions you got buttons
Yeahh
hi, is it possible to ignore an argument in a command?
Noice
Nvm said something wrong
a kwarg?
I was talking bout my other idea
no
yes
?
you can set the parameter to None to make it optional
I will create an API and host it on rapid api
Then everyone can use it
that too lol
Yeah, by passing a default value in the argument, making it optional
async def func(ctx: commands.Context, *, user: str = None):
...
You got a google search command yet?
thats the easiest thing ever
True
In here, if you don't pass anything in the user argument, it will take None as default
Depends on how detailed you make it.
sure, i stole the one in the github
Wdym
Ofc you did 
smh
a simple commands works maybe.....
!pypi google
!pypi google

I use another module
its imported as googlesearch
@untold token oh I know you
I was thinking of doing without using another module so he wouldn’t have to install anything but ok
Let’s just have everything done for us
Yes 
I still use another module
nice
for example,
if it does not detect a user, is it possible to skip the user and pass to the pag argument?
to make it optional argument use the = None?
yes
use typing.Optional
So how would i do the kick thing ?
!d discord.Member.kick
await kick(*, reason=None)```
This function is a [*coroutine*](https://docs.python.org/3/library/asyncio-task.html#coroutine).
Kicks this member. Equivalent to [`Guild.kick()`](https://discordpy.readthedocs.io/en/master/api.html#discord.Guild.kick "discord.Guild.kick").
@bot.command()
async def func(ctx: commands.Context, *, user: str = None, pag: str = None):
await _ctx.send(f"{user}, {pag}")
In here both, pag and user arguments are optional, this means if you don't pass a value, it will take None as default
@zenith hare
honestly I don’t really know. When making command ideas I try to avoid making shit that’s been made on other bots but some times that’s inevitable but it’s always good to be original. Gives your bot uniqueness.
That doesn't do anything or changes execution at runtime, it's just typing
not that i mean when a member doesnt react to a message within a certain time they get kicked
can't do this with the argument: discord.Member?
like is it a command or smth?
i mean reacting to this
that’s somewhat true and some what not true.
use timeout errors
no class.event
wait so if they dont react, they get kicked?
async def on_member_join(member):
guild = client.get_guild(730651046459998218)
channel = client.get_channel(885464532959526913)
Myembed = discord.Embed(title= f"Welcome",
description=(f"Welcome {member.mention}, You are member {guild.member_count}. \n Please enjoy your stay here and dont forget to read the await [#904279966693355550](/guild/267624335836053506/channel/904279966693355550/)"))
Myembed.add_field(name="Account Created at:", value=f"<t:{int(member.created_at.timestamp())}:R>" , inline=True)
await channel.send(embed=Myembed)
await member.send(embed=Myembed)
roles_list = ["Unverified","•.¸¸.•:Colours:•.¸¸.•``•.¸¸.•``•.¸¸.•``•.¸¸.•","•.¸¸.•:Verification:•.¸¸.•``•.¸¸.•``•.¸¸.•``•.¸¸.•","•.¸¸.•:Age:•.¸¸.•``•.¸¸.•``•.¸¸.•``•.¸¸.•","•.¸¸.•:Gender:•.¸¸.•``•.¸¸.•``•.¸¸.•``•.¸¸.•","•.¸¸.•:Sexuality:•.¸¸.•``•.¸¸.•``•.¸¸.•``•.¸¸.•",
"•.¸¸.•:Distance:•.¸¸.•``•.¸¸.•``•.¸¸.•``•.¸¸.•","•.¸¸.•:Ethnicity:•.¸¸.•``•.¸¸.•``•.¸¸.•``•.¸¸.•","•.¸¸.•:Hobbies:•.¸¸.•``•.¸¸.•``•.¸¸.•``•.¸¸.•","•.¸¸.•:Relationship:•.¸¸.•``•.¸¸.•``•.¸¸.•``•.¸¸.•","•.¸¸.•:Location:•.¸¸.•``•.¸¸.•``•.¸¸.•``•.¸¸.•",
"•.¸¸.•::•.¸¸.•`Seeking`•.¸¸.•``•.¸¸.•``•.¸¸.•","•.¸¸.•:DM:•.¸¸.•``•.¸¸.•``•.¸¸.•``•.¸¸.•","•.¸¸.•:Levels:•.¸¸.•``•.¸¸.•``•.¸¸.•``•.¸¸.•","•.¸¸.•:Games:•.¸¸.•``•.¸¸.•``•.¸¸.•``•.¸¸.•"]
for roles in roles_list:
role = discord.utils.get(member.guild.roles, name=roles)
await member.add_roles(role)
def check(r: discord.Reaction, u: Union[discord.Member, discord.User]):
return u.id == member.mention.id and r.message.channel.id == member.channel.id and \
str(r.emoji) in ["\U00002705"]
try:
reaction, user = await client.wait_for(event = 'reaction_add', check = check, timeout = 45.0)
except asyncio.TimeoutError:
await member.send(f"{member.mention}, please react with :white_check_mark: on this message in 45 seconds")
return
else:
if str(reaction.emoji) == "\U00002705":
return
await member.send(f"**{member.mention}**, you didnt react with a ✅ in 45 seconds.")
await member.send(f"**{member.mention}** reacted with a ✅")```
You need to loop through the reacted members and the guild members to see if they have reacted or not
yes within a certain time frame
so you want them kicked if they dont react in time
yes
just add a kick statement under your exception for the timeout
How?
you do know what a kick statement is right
!e
import typing
def func(a: typing.Optional[str]):
print(a)
func("1")
@untold token :white_check_mark: Your eval job has completed with return code 0.
1
!d discord.Member.kick
typing stuff in your function signature allows your bot to differentiate bad input vs good.
member.kick()
Why do you think commands.BadArgument exist
!e
import typing
def func(a: typing.Optional[str]):
print(a)
func(1)
@untold token :white_check_mark: Your eval job has completed with return code 0.
1
You can
It's just an example
the best bots are where you merge a bunch of awesome features into one bot, while still staying focused on a single goal
var.execute("CREATE TABLE IF NOT EXISTS verification(guildid TEXT, roleid TEXT, channelid TEXT)")
##
var.execute("INSERT INTO verification(guildid, roleid, channelid) VALUES (?, ?, ?)",
(str(ctx.guild.id), str(role.id), str(channel.id)))
##
@commands.command()
async def verify(self, ctx):
member = ctx.author
def check(m):
return m.author == ctx.author
configured = var.execute("SELECT * FROM verification WHERE guildid = ?", (str(ctx.guild.id), )).fetchone()
vguild = self.bot.get_guild(int(configured[0]))
vrole = ctx.guild.get_role(int(configured[1]))
vchannel = self.bot.get_channel(int(configured[2]))
print(f'{configured[0]} guild')
print(f'{configured[1]} role')
print(f'{configured[2]} channel')
print('--------------------------')
if ctx.guild.id == int(configured[0]):
if ctx.channel == int(configured[2]):
role = configured[1]
await ctx.message.delete()
print(role)
##
if role in member.roles: #error here
alr = discord.Embed(title='Verification', description=f'You are already verified!', color=0x2f3136)
await ctx.send(embed=alr, delete_after=5)
return``` 'role' is not defined, anyone know why this happens? the table values exist so
database isn't your problem (for the above), it's the literal role variable is not defined
i have told you 3 million times. role is being used outside of the scope that it is declared in. therefore, being undefined.
so what do i do? pass this as a check and put it above the command?
Discord.py enforces that, not python
i told you to set a default value to role at the top
(under the function definition)
dude......
Yes bro
...........
its member.kick()
!d discord.Member.kick
await kick(*, reason=None)```
This function is a [*coroutine*](https://docs.python.org/3/library/asyncio-task.html#coroutine).
Kicks this member. Equivalent to [`Guild.kick()`](https://discordpy.readthedocs.io/en/master/api.html#discord.Guild.kick "discord.Guild.kick").
thats SO basic
i recommend you learn python before even trying discord.py

omg i know python trust me
I thought, that you were saying python enforces typehints
yeah clearly
guys give command ideas
then why have you copied an example- im not gonna argue
A command that gives ideas
connections list
Connections?
yes
ideas for what
discord connections
connections to what
yk those little names on someones profile?
new commands
Those aren’t accessible
u can use requests if im not mistaken
That goes under the except asyncio.TimeoutError: right?
it was common in selfbots a while back
this isnt self-bots.
No one is talking about self bots here
but it is dpy
Guys, i've a really dumb question ,-,
what little names?
doesnt matter. those arent accessible
im sure with a lot of hard core coding u can find a way to access that information with requests
dpy doesn't mean selfbot? No? It's an API wrapper written in python for discord API
Why is discord developer portal asking me for a redirect and not adding the bot to the server when I authorize it instead it takes me to the specified redirect
But if the member has not reacted to the emoji within a timeframe wouldnt that go under await member.send(f"**{member.mention}**, you didnt react with a :white_check_mark: in 45 seconds.")
Imagine using requests in asynchronous code
but theres a selfbot option in the bot constructor 🤔
yes
Its deprecated
^
true
self bots are also against tos
anyways, back to my problem snow. are you saying something like this?
role = self.bot.get_role(863016275613319209)
if ctx.guild.id == int(configured[0]):
if ctx.channel == int(configured[2]):
role = configured[1]
#```
the bot object doesnt have a get_role method
umm.....anyone?
It's a Guild method
i'd have to do that manually though
!d discord.Guild.get_role
get_role(role_id, /)```
Returns a role with the given ID.
well, ya, that. is that what u meant
if role is declared and used in the same scope. then you're fine
Did you generate the bot URL from the oauth URL tab?
yep
i mean its a fun command idea, you get to get your hands dirty with ai and shit. make a command to give command idea by some ai
this is what i was using before i transferred to db,and it worked fine
if ctx.guild.id == 821722608767598663:
if ctx.channel == 864368495952396309:
role = ctx.guild.get_role(863016275613319209)
ctx.message.delete()```
hi
its VERY similar to what i have now
doesnt matter
i dont have an ai though
if you use role outside of that if scope. it will be undefined
You got a todo command yet or remind?
make one. thats the fun part
I did this only ,-,

was about to ssay "until a mod asks to stop"