#discord-bots
1 messages · Page 722 of 1
that works too 
Can someone link the docs for leaving a guild? (disnake)
!d disnake.Guild.leave
await leave()```
This function is a [*coroutine*](https://docs.python.org/3/library/asyncio-task.html#coroutine).
Leaves the guild.
Note
You cannot leave the guild that you own, you must delete it instead via [`delete()`](https://docs.disnake.dev/en/latest/api.html#disnake.Guild.delete "disnake.Guild.delete").
Also one last thing, if I moving from dpy to disnake what changes will I have to make
Apart from refactoring discord to disnake
Just double checking
@slash.slash(name="join",
description="Join a nation of your choice.",
guild_ids=[877730319434919946], options=[
create_option(
name="country",
description="Choose your country.",
required=True,
option_type=8)])
async def join(ctx: SlashContext, country: discord.Role):
Right now, because I’m using option 8, my bot will allow any role as an argument, how can I restrict that to only certain roles?
Cz they use pterodactyl panel, and the owner can literally see everything in the people's servers, even the code (unrelated). I didn't ask much, but could be the owner leaked them or someone from the staff team did 🤷♂️
also
async def join(ctx, country: str=None):
member = ctx.author
country1 = discord.utils.get(ctx.guild.roles, name = country)
await member.add_roles(country1)
im getting the following error - howcome?
No it won't
async def join(ctx, country: discord.Role):
member = ctx.author
await member.add_roles(country)
im getting a new error
No it doesn't
how do i make it unfail
also, where can i get slash cmd help?
command arguments are typed as strings only if they arent type hinted in the function signature
For slash commands, @sage otter do you know if for option 8, you can specify certain roles as options
I honestly have no idea or knowledge about slash commands
I do
As far as this. country's type shouldnt be a string since you typehinted it to a Role. Im not sure if your interpreter sees something different than what you put there.
Yeah, I’m using replit
!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.9)"). 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.9)") 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.9)") containing those arguments is returned instead. Please check the [documentation](https://discordpy.readthedocs.io/en/master/api.html#discord-api-events) for a list of events and their parameters.
This function returns the **first event that meets the requirements**...
@slate swan
if you mean something like getting answers from.user , use wait_for with message as the event
you can use a check to make sure the message is from the command's author
actually i am creating a giveaway cmd so there i want that when i ll trigger that cmd the bot will ask questions such as which channel it ll be hosted, what is the time limit, how many winners and accordinf to the answer it ll execute the rest part of the code
Yeah so you can use it
ok
can u give an example?
@client.event
async def on_message(message):
if message.content.startswith('$greet'):
channel = message.channel
await channel.send('Say hello!')
def check(m):
return m.content == 'hello' and m.channel == channel
msg = await client.wait_for('message', check=check)
await channel.send(f'Hello {msg.author}!')
an example from the docs
ok tysm
how do you keep track of the context between the original message and follow-ups ? you just use wait_for directly inside the original command function?
so im using client.get_all_members() to get the number of people using the bot, but it returns a list of people, but without commas, so i cannot use len() to get the number of people. how can i fix this?
!d discord.ext.commands.Bot.users
property users: List[discord.user.User]```
Returns a list of all the users the bot can see.
len(client.users) ez
don't do this.
Use the guarding clause concept.
additionally, since you're checking if any of them are true, we can use ors to make it more readable
so I'll show both
brb
@fierce pelican Please don't try to ping @everyone or @here. Your message has been removed. If you believe this was a mistake, please let staff know!
ok
if messages[0] >= 100:
if Guest in user.roles:
return
if Member in user.roles:
return
if Moderator in user.roles:
return
if Administrator in user.roles:
return
if Organizer in user.roles:
return
await user.add_roles(Guest)
this is the guard clause concept. Each if does not request the last if to exist.
https://maximegel.medium.com/what-are-guard-clauses-and-how-to-use-them-350c8f1b6fd2
(yea its not in python but this is a programming concept which is applicable to all languages)
however, since the result is the same no matter what fails here, we can use some or logic
although...
because we're checking for user.roles we can make it even cooler
I'll show 2 more ways
@hidden hazel
this is way two ```py
if messages[0] >= 100:
if (
Guest in user.roles
or Member in user.roles
or Moderator in user.roles
or Administrator in user.roles
or Organizer in user.roles
):
return
await user.add_roles(Guest)
i was wondering how people get the full tracebacks with an on_command_error event, it only shows 1-2 actual lines of the error, not a traceback :[
!d discord.ext.commands.Bot.group this
@group(*args, **kwargs)```
A shortcut decorator that invokes [`group()`](https://discordpy.readthedocs.io/en/master/ext/commands/api.html#discord.ext.commands.group "discord.ext.commands.group") and adds it to the internal command list via [`add_command()`](https://discordpy.readthedocs.io/en/master/ext/commands/api.html#discord.ext.commands.GroupMixin.add_command "discord.ext.commands.GroupMixin.add_command").
!d traceback
Source code: Lib/traceback.py
This module provides a standard interface to extract, format and print stack traces of Python programs. It exactly mimics the behavior of the Python interpreter when it prints a stack trace. This is useful when you want to print stack traces under program control, such as in a “wrapper” around the interpreter.
The module uses traceback objects — this is the object type that is stored in the sys.last_traceback variable and returned as the third item from sys.exc_info().
The module defines the following functions:
i've heard about this, but i've never really used it
which means, idk how to use it ¯_(ツ)_/¯
IIRC its traceback.format_tb
!d traceback.format_tb
traceback.format_tb(tb, limit=None)```
A shorthand for `format_list(extract_tb(tb, limit))`.
use the dir method to see what methods it has, and then you can see how to use it
hey what does limit do
@hidden hazel way three ```py
if messages[0] >= 100:
for role in user.roles:
if role in {Guest, Member, Moderator, Administrator, Organizer}:
return
else:
# this runs if the loop went all the way through without breaking early
await user.add_roles(Guest)
click the link
new error :|
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/disnake/client.py", line 505, in _run_event
await coro(*args, **kwargs)
File "/Users/sadancooler/Documents/Code/Python/bots/infinity/lounge.py", line 105, in on_command_error
realError = traceback.format_tb(error)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/traceback.py", line 57, in format_tb
return extract_tb(tb, limit=limit).format()
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/traceback.py", line 72, in extract_tb
return StackSummary.extract(walk_tb(tb), limit=limit)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/traceback.py", line 364, in extract
for f, lineno in frame_gen:
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/traceback.py", line 329, in walk_tb
yield tb.tb_frame, tb.tb_lineno
AttributeError: 'CommandNotFound' object has no attribute 'tb_frame'
@shadow wraith, ah. I'm using traceback.print_exc() in my error handler
no args
whole method is
async def on_error(self, event_method: Any, *args, **kwargs) -> None:
"""Log all errors without other listeners."""
print(f"Ignoring exception in {event_method}", file=sys.stderr)
traceback.print_exc()
!d discord.ext.commands.Group.commands @boreal ravine
property commands: Set[discord.ext.commands.core.Command[discord.ext.commands.core.CogT, Any, Any]]```
A unique set of commands without aliases that are registered.
thanks
its on context objects as ctx.command.commands
lol Vscode is better then replit ig?
yes
man, i can't say true, that's a fact 💀
fact wut?
becuase replit uses a fucking shared ip therefore you can be blocked by discord api
True
vscode or any ide is better than replit
ye I just didnt knew how to run a code on it 💀
get a debugger/extension which debugs python or something
anyways, this discussion should go in another channel so talking about this more is what i won't do.
is that in an on_message event?
hey, when or how is bot.owner_id set? its always None for me
bot = commands.Bot(command_prefix=.... , owner_id = id)
though the api should already do it for u
that's what I'm wondering about. Even a call to application_info does not set it 🤔
This could definitely use some rewriting haha
Using Python 3.9 or 3.10?
Open a command prompt and do python -V
Oh then use match case
!d match
8.6. The match statement
New in version 3.10.
The match statement is used for pattern matching. Syntax:
match_stmt ::= 'match' subject_expr ":" NEWLINE INDENT case_block+ DEDENT
subject_expr ::= star_named_expression "," star_named_expressions?
| named_expression
case_block ::= 'case' patterns [guard] ":" block
```...
See this for more information. A better thing for your usecase (:
>>> flag = False
>>> match (100, 200):
... case (100, 300): # Mismatch: 200 != 300
... print('Case 1')
... case (100, 200) if flag: # Successful match, but guard fails
... print('Case 2')
... case (100, y): # Matches and binds y to 200
... print(f'Case 3, y: {y}')
... case _: # Pattern not attempted
... print('Case 4, I match anything!')
...
Case 3, y: 200
An example
Wym
???
!d discord.Member.mention this?
property mention: str```
Returns a string that allows you to mention the member.
Just typehint to discord.Member
user: discord.Member
This will make user a discord.Member object automatically
discord.py does that automatically... You can then do id = user.id
async def commandName(..., arg: discord.Member, ...):
arg = ctx.author or arg
Will either be the given mention or the person who sent the command. Of course it'll be the object
It can be a mention, ID, or even a name
$profile Robin
$profile @sick birch
$profile 432643355634171905
All of those will get you the discord.Member object for a certain user
And it's really nice since it's all done behind the hood
the arg variable wll always be ctx.author
@sick birch that won't take into account, if the person gives it a member
Since u r telling Python to set it to either author or the other user
Meaning... it will become the other user only if ctx.author returns None which is never
Yeah I meant to set it to None haha
Have the default as it I mean
That's my favourite way to do it when i want it to default to the command author
How do you make a mute and unmute command using dpy ?
```
-help or /help
```
I can't write this in my code
Use \n to change line , or a doc string
```\n-help or /help \n```
it only works inside your python string
@maiden fable remember i was asking bout the ban command, if i use commands.Greedy it'll appear as [days=1]..., how do i prevent it from happening (so it'll only show [days=1]
Does anyone have experience with using the Rich library with Discord.py?
What's that?
hm = SelectOption(label='h', value='wa')
menu = SelectMenu(placeholder='hm', min_values=1, max_values=1, options=hm, disabled=False, row=None)
await ctx.respond('h', menu)```
error:
hm = SelectOption(label='h', value='wa')
menu = SelectMenu(placeholder='hm', min_values=1, max_values=1, options=hm, disabled=False, row=None)
await ctx.respond('h', menu)
help please
i am using py-cord to make a help menu
view=menu
Well that would work only in terminal
No colorful texts will be sent on discord , unless u use markdown
+ As in diffs
``` ```fix
or fixs
Etc...
Gotcha, I'm trying to get the table output this to pass as an object and print in a channel. I dont care about the coloring.
I see , well you would have to see how wide the text appears since every device / window has different message widths
So far passing the table, all I can get the discord bot to print is the object mem reference. This is where I'm stuck, trying to capture the std out and print but that didnt change the outcome.
still same error
discord.commands.errors.ApplicationCommandInvokeError: Application Command raised an exception: TypeError: init() got an unexpected keyword argument 'placeholder'
Hi guys a beginner(I only know python)here so I wanted to o create a discord bot. How much Python knowledge do i need for it and is there a guide. I've heard theres one library called d.py which was disbanded so i am clueless using which library should I start. Pls guide me or give tutorials if possible.
what type of bot you wanna make?
no I mean like music,games,economy bot
memes,image,etc
ohhh
However I can go with the easier option like games or economy for gaining some experience
do you want slash commands in it?
Both
oh then learn py-cord
And learn from docs
dp.y disbandned due to discord was making every bot into slash
Ok
pycord's slash implementations are too bad
well till april every bot will be slash
Yes, if ur bot isnt verified you can still use classic commands
Not here to bitch about the Library. But disnake and nextcord are doing better
Ok
I agree
i am using py-cord should I change?
i am rn learning about so I can switch
Try disnake
Upto you mate , I'll suggest disnake as it's easy and you get updates quicker
Disnake or nextcord?
I use disnake
Same
Are u familiar with asynchronous programming
Nope never heard of
Learn that
you need to learn about async def as its key
Synchronous vs asynchronous vs multithreaded vs multiprocessing
Learn those concepts
Ok actually there's a book called python Crash Course I haven't done classes and objects is that ok?
another thing , don't watch yt tutorials
They are all outdated
Oh ok sure I will learn
Or find a quick guide online on oop
It's fine if you have basic knowledge about atleast what a class is , and how to implement it
I have never even heard abt it
You can learn that , not too hard stuff
And It’ s hsndy
What's that
Handy
It’ s part of oop, you will learn that
Basically class is an object that creates new objects, those objects are called instances
In the first place what is object?
Everything in python is an object
This is a Test to know if you are ready to make a bot using discord.py: ```prolog
A: in your words, what is the purpose of a For Loop?
B: what is Blocking? and why do you have to use Async for a discord bot?
C: how do you know if a line of code is inside a Block or Scope (like a Function, Class, For Loop, etc...);
and how do you make that piece of code be outside of the Block or Scope?
D: if you have to make an HTTP Request with your bot, what Libriary would you use?
E: in your words, what is Object Oriented Programming (OOP) and how does it get used in python?
F: what are Fstrings (3.6+) and how can you use them to just get 2 Decimal Places of a Long Float?
G: what is Try-Except, and how can you use it to except Specific Errors?
H: how would you Force to get an Error in the case of not getting one (or atleast know where the problematic line is)?
I: what are the use case of Function Decorators? and what are they really in the background?
J: how would you store Multiple Pieces of Data that are related to more data? (Example: Name1 = James, Name2 = Steve, etc...)
For example “hello” is an object created by str object
Ok
So I can only answer, A,C,F,G,H ik i am very bad programmer but i rly wanna learn the things which i didn't understand
Thx
What is a Discord chatbot and how do I find it؟
https://discordpy.readthedocs.io/en/stable/ I was thinking this was the only bot library for discord out there
if you do , great!
Now you can try to cover the topics you don't know
There's, disnake, nextcord, hikari, pycord the popular ones
Yup sure I will do! :)
There are some forks and completely different implementations, there are also libraries for js and other languages, you can even make your own wrapper
the libs I love ;)
Why did u even say this now i am interested in making my own wrapper ;(
All of them are made in python
Thanks, that'll be some light reading for me tonight, lol
Make it, could be a fun project
Lol how? Web scraping maybe?
Wdym
Requests
O_O
Well idk but my guess would be that it uses the token to login into discord and types msgs and do stuff
Wut?
You dont even need a wrapper, you can make direct requests
connection timeout
https://stats.uptimerobot.com/GA8lYTBq86
Down for 7 h, 4 min
The reason was Connection Timeout.
Details:The response took so long that the connection timed out.
January 1, 2022, 00:10 GMT +00:00
how to solve this
Do you know what happens when you send a message inside discord
IT HAPPENS EVERYDAT
I don't
This is not replit/uptimerobot support channel.
hey but it is related to discord bot
but the issue isnt related to bots
it is isnt it
Your discord client will send a post request to discord server
you linked your repl and the site badly
no
Nothing related to discord
Post request? Sorry if I sound a dumbo
Unless. Your bot was ratelimited
maybe try asking in #web-development but I doubt you'd get an answer here
Are you familiar with http
Or tcp
okkkk
Nope
going to replit server
Look into that
wow....
Ok
wgat wow u ...
huh?
They r gonna ban u bud lol
Yk that replit has a shared ip
ik
Uhhh?
why ban me
can you explain about the ip thing too lol, I'm like confused about the ip issues
Cuz replit was made as an online ide not as a server where u host ur discord bots lol
Basically multiple bots run on a server with same ip, and they send http requests to discord from same ip, and if one bot gets ratelimited, it will ratelimit all other bots from that ip
how do you send messages to threads in discordpy?
Time to host a spam bot on repl
Lmfao
Just like u send it in simple channels
Laughing my fkin ass off
really?
🤷🏼♂️ probably says in the docs
hm, tysm
If It’ s supported
i think threats were introduced after dpy was discontinued
Np
I mean, it's also a type of text channel, so yea...
Then you need another library
No
im just gonna test
It inherits from GuildChannel?
Yea iirc
!d discord.Thread <=
class discord.Thread```
Represents a Discord thread.
x == y Checks if two threads are equal.
x != y Checks if two threads are not equal.
hash(x) Returns the thread’s hash.
str(x) Returns the thread’s name.
New in version 2.0.
i want it to show [days=1], not [days=1]...
ah
Show code
Thanks :D
threats
🤣
¯\_(ツ)_/¯
sorry i just woke up after a new years eve party lol
Breh
async def ban(self, ctx, member: discord.Member, days: commands.Greedy[int]=1, *, reason: str="No reason provided"):
It's his/her wish 🤷♂️
her :)
there is an event called Discord Bot Hackathon
Participants will make a discord bot on the given topic and would be given points on the basis of creativity, the team/individual with the most points wins
would anyone wanna work w me ?
And how r u invoking it?
Ok
no it's on the help commadn
Gonna keep it in mind cool 👍
Where is this?
I smell The Coding Realm... Hmmm
in some server
it has prizes
Such a cool thing exists well i would love to participate but not rn since idk object oriented programming lol
That ... means it can consume many args
I could have , if I knew python
@slate swan what?
i dont want it to show
It's because of the greedy right?
Idk how to fix it ngl
Indeed
U just guided me and u say u dunno python like wtf? 😂 😂
Same

Just .replace("...", "") while sending it ez
im using greedy because days is optional, and it must be an int
!d discord.ext.commands.Greedy @cedar stream
class discord.ext.commands.Greedy```
A special converter that greedily consumes arguments until it can’t. As a consequence of this behaviour, most input errors are silently discarded, since it is used as an indicator of when to stop parsing.
When a parser error is met the greedy converter stops converting, undoes the internal string parsing routine, and continues parsing regularly.
For example, in the following code:
```py
@commands.command()
async def test(ctx, numbers: Greedy[int], reason: str):
await ctx.send("numbers: {}, reason: {}".format(numbers, reason))
``` An invocation of `[p]test 1 2 3 4 5 6 hello` would pass `numbers` with `[1, 2, 3, 4, 5, 6]` and `reason` with `hello`...
there's another reason argument behind days so if days is not passed in, some error will be raised
Ohh, It’ s a converter
Yea
I copy pasted old messages from hunter
😳 don't Reveal me
Wtf?
🤨
😂 😂 😂
embed.description.replace(...)
Show code
U have a space before async def
😂
unlimited memory hmm
!indent
Indentation
Indentation is leading whitespace (spaces and tabs) at the beginning of a line of code. In the case of Python, they are used to determine the grouping of statements.
Spaces should be preferred over tabs. To be clear, this is in reference to the character itself, not the keys on a keyboard. Your editor/IDE should be configured to insert spaces when the TAB key is pressed. The amount of spaces should be a multiple of 4, except optionally in the case of continuation lines.
Example
def foo():
bar = 'baz' # indented one level
if bar == 'baz':
print('ham') # indented two levels
return bar # indented one level
The first line is not indented. The next two lines are indented to be inside of the function definition. They will only run when the function is called. The fourth line is indented to be inside the if statement, and will only run if the if statement evaluates to True. The fifth and last line is like the 2nd and 3rd and will always run when the function is called. It effectively closes the if statement above as no more lines can be inside the if statement below that line.
Indentation is used after:
1. Compound statements (eg. if, while, for, try, with, def, class, and their counterparts)
2. Continuation lines
More Info
1. Indentation style guide
2. Tabs or Spaces?
3. Official docs on indentation
me with 125 mbs.
Eh?
python: can't open file 'bot.pypython': [Errno 2] No such file or directory
Not for me tho
Show code
Enslo , it appears like this only for u
Ohh
but idk where is the error i mean

🤷🏼♂️
They missed a. self , as hunter told
I told the problem but okay
Whats .pypython
what did you mention as your bot file file in startup?
My guess too
Startup iirc
The tabs in the left side , one of them is startup
Where did u define startup file
Go there , look-up for a bot file field
i using host for hosting and making in it bot too
Man
…
you didnt pass self
is there a built in method to check if a user is not banned or must i iterate through guild.bans()
Uhhh?
sigh json as a db
that's the only way ig
oh ok
It’ s probably not in a cog
Just see if the user is there in the guild. If he isn't, then iterate through guild.bans, but why will u wanna do that?
Took a new year resolution to use light mode most of the time BTW
I dont think It’ s wise to store data in a json, especially in ur use case
Poor eyes
Facts
unban command
if user is not in ban list then
!unban
class Ping(commands.Cog):
def __init__(self, bot):
self.bot = bot
self._last_member = None
@commands.slash_command(description="Shows bot ping")
async def ping(inter):
await inter.response.send_message(f'Pong! **{round(self.bot.latency * 1000)}**ms')``` you should pass self in ping arguments to be able to access the class attributes 
Then just do await ctx.guild.unban(discord.Object(id)) and if it raises an error, that means either u dont have the perms or the person isn't banned
hm
Slash cmds are kinda nice
Excuse me wtf
But would be better to iterate through guild.members first since many people like me like to use the unban cmd to try and unban people still in the server
Cool

You dont need the * param anymore and you can define the argument type
PyLance doesn't shout on u when using botvars :DDD
Custom properties , methods easily
Thank
!d discord.Guild.bans
await bans()```
This function is a [*coroutine*](https://docs.python.org/3/library/asyncio-task.html#coroutine).
Retrieves all the users that are banned from the guild as a [`list`](https://docs.python.org/3/library/stdtypes.html#list "(in Python v3.9)") of [`BanEntry`](https://discordpy.readthedocs.io/en/master/api.html#discord.BanEntry "discord.BanEntry").
You must have the [`ban_members`](https://discordpy.readthedocs.io/en/master/api.html#discord.Permissions.ban_members "discord.Permissions.ban_members") permission to get this information.
Can someone explain to me what Guild.chunk does?
oh sorry 
user_banned = [id in [x.user.id for x in bans]]
oh that
iterate through it
!d discord.Guild.chunk , getting members ig
await chunk(*, cache=True)```
This function is a [*coroutine*](https://docs.python.org/3/library/asyncio-task.html#coroutine).
Requests all members that belong to this guild. In order to use this, [`Intents.members()`](https://discordpy.readthedocs.io/en/master/api.html#discord.Intents.members "discord.Intents.members") must be enabled.
This is a websocket operation and can be slow.
New in version 1.5.
Banned users = [ban_entry.user for ban_entry in bans()]
i know..
yeah all the members in te guild
Yes. It means, filling the cache with all the members in all the guilds
if i use the cache kwarg does that cache all the members in a guild?
Yea
But doesn't the bot already does the same for u itself
If you set cache to true it will cache all members
o
o
🤔does not the bot cache members itself?..
Does it cache all members?
it does, but sometimes get_member fails since a member is not in the cache
im sure this question has been asked a bunch already but - what's the best alternative library to discord.py rn?
Oh I see
I remember using guild.get_members and I didnt get every member
U gotta chunk it. The only thing is, dpy chunks automatically at startup (this is the reason sometimes startup is slow)
Different opinions
Popular ones : disnake , nextcord , pycord
My suggestion : disnake
Ahh understandable
My suggestion: Don't use any fork and make your own private wrapper
appreciate the answer. will do my own research on the differences between them all
so basically the method is used inside the on_ready too
is there a reason in particular that you prefer disnake over the others?
No
Before on_ready
Sure , also if you want a non-discord.py forms -> https://PyPi.org/project/hikari
Like in on_connect or something?
It's triggered when the cache is completed and the bot is connected
Could be shit ton of work just to make a bot
!d discord.on_ready
discord.on_ready()```
Called when the client is done preparing the data received from Discord. Usually after login is successful and the [`Client.guilds`](https://discordpy.readthedocs.io/en/master/api.html#discord.Client.guilds "discord.Client.guilds") and co. are filled up.
Warning
This function is not guaranteed to be the first event called. Likewise, this function is **not** guaranteed to only be called once. This library implements reconnection logic and thus will end up calling this event whenever a RESUME request fails.
Nope.
@slate swan ^^^
It's well maintained , has latest features
And we love equenos
gotcha, thanks!
I see, thanks
I have made a private wrapper for revolt (discord alike) and it took me hardly a day (a day cz I was new to all the websockets and stuff and didn't know anything about those)
Equenos*
:DDD
I mixed it with Equinox ig
Lmao facts
Here
Did u handle ratelimiting and caching etc.
I did cache, but there ain't any ratelimits for now, since the API and Client are still in beta or smth
I like revolt , but it's kinda slow atm
Facts
Ohh okok
Ill take a look at dpy source code
So yea, for now, its (the wrapper) sort of completed... Tho the API is HEAVILY incomplete, like the member join and stuff events don't return the whole User object and just the User ID, soooo
can i ask someting?
how to create python discord command
all script that i use wasn't work
can you show your script , and the issue u faced
Facts
{ctx.author.mention} doesnt work anymore can someone tell me why
it does , show code
k
import os
from discord.ext import commands
bot = commands.Bot(command_prefix='!') #bot's prefix
@bot.event
async def on_ready():
print('We have logged in as {0.user}'.format(bot)) #tells us that our bot is online
@bot.event #responding to messages
async def on_message(message):
message.content = (message.content.lower()) #makes all messages lowercase, from the bot's perspective
if message.author == bot.user: #to not respond to bots
return
if "quit" in message.content:
await message.channel.send("{ctx.author.mention} hello mf") #response
bot.run
@slate swan
wait
i think i have to import right?
hello, I am new to discord.py
o
i would like to code a bot
what type
which bot type?
ya
hmm, should have some moderation commands, utility
bot.run("token")
thank you
Where's ctx
{ctx.author.mention} doesnt work
It's not defined anywhere
Use f
im stupid LOL
And CTX.is not defined
It would be message.author.mention
i forgot to define im dumb asf
because you are getting message not ctx
message.author.mention
Indeed
also just do
if message.author.bot:
return None #to not respond to bots```
it returns a bool if message.author is a bot
where True = a bot, and false isnt
hey I know you from TCR
is there any good yt tutorial of discord.py
whats tcr ?
🤔
TCR , the coding realm?
Read github examples
Right
oh my brother loves to talk there ig
docs > yt
thats cool ! 
https://vcokltfre.dev @pseudo notch
A tutorial on how to use discord.py to create your own Discord bot in Python, written to fix the flaws of many other popular tutorials.
ty
all of them are outdated or just bad tbh
from what I've seen
is vco's tutorial updated with 2.x?
do you know any python ?
The Resources page on our website contains a list of hand-selected learning resources that we regularly recommend to both beginners and experts.
id recommend to do some other simple projects and learn python first
coding a discord bot is not a beginner friendly project
oh
More like a trap you would like to fall into
Tic tac toe is
Never ask in the discord.py server about dpy questions if your still a beginner :^)
Ye
yeah they'll flame you badly 
Ye I’m not best at python so I would know XD
based d.py server
Fr
message.author.mention , where message.author is the author object and .mention is the property
Kk
it gets tiring real quick seeing so many people not know how to define a variable
🗿
i've seen people who dont know how to create a .py file
everyone starts somewhere 
True
I try to help them but sometimes the error is so easy I just feel the need to do resources like syntax error or variable
on that case try teaching them the meaning of the error. but lets keep it on topic
Ye
Worst are those that refuse to read the docs after you give them a link and they send something completely off afterwards
"discord.py docs are too hard"
"its not in my language"
are the best excuses existing
if you find the docs hard, maybe learn how to read them before trying to make a bot
async def kick(ctx...
discord.Member.kick
``` :troll:
💀
Yes, and afterwards they send some code that doesn’t make sense and ask if it will work
in my opinion , discord.py's docs are clean and well categorised like you can just lookup for a object u want and you get a list of all the object's attributes and methods on the go
They are best docs I ever read
async def import(member, ctx
ctx send "hello"
)
import
will this work
my reply to them : im not an interpreter 
LMFAOOO
!code
Here's how to format Python code on Discord:
```py
print('Hello world!')
```
These are backticks, not quotes. Check this out if you can't find the backtick key.
HAHAHA
How to make slash command accept list of arguments (eg. list of roles) in disnake?
@bot.slash_command()
async def addroles(inter, user: disnake.Member, *roles: disnake.Role)```
doesn't work
make multiple options
How
what library is that?
Make them pass a string and split the string
disnake
Disnake yes
I think there's a better method than this
You can get role mentions from a message
I know that
Then do that
async def give(ctx, member, amount):
with open('users.json', 'r') as f:
users = json.load(f)
await add_points(users, member, amount)
with open('users.json', 'w') as f:
json.dump('users', 'f')
await ctx.send(f'given {member} {amount} programming points')``` this command dosent working i need to re run my bot to show the error cuz my friend made a lot of spam
old code
i dont quite remember the new way to do that , but in the old method ( dont know if it still works ) py @slash_command( name = 'prefix' , description='Change prefix for the server', options = [ Option(name='newprefix' , description='The new prefix for the server',type=OptionType.string , required=True) ] ) is how you could add options
I need the discord to do like this that's why I am searching for a better method
d! usermetion
Custom converter ig
!d discord.User.mention
property mention: str```
Returns a string that allows you to mention the given user.
Why wouldnt u use a custom converter?
Because I need discord to hint roles
Traceback (most recent call last):
File "/home/container/.local/lib/python3.8/site-packages/discord/ext/commands/core.py", line 85, in wrapped
ret = await coro(*args, **kwargs)
File "bot.py", line 270, in give
users = json.load(f)
File "/usr/local/lib/python3.8/json/__init__.py", line 293, in load
return loads(fp.read(),
File "/usr/local/lib/python3.8/json/__init__.py", line 357, in loads
return _default_decoder.decode(s)
File "/usr/local/lib/python3.8/json/decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/local/lib/python3.8/json/decoder.py", line 355, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/container/.local/lib/python3.8/site-packages/discord/ext/commands/bot.py", line 939, in invoke
await ctx.command.invoke(ctx)
File "/home/container/.local/lib/python3.8/site-packages/discord/ext/commands/core.py", line 863, in invoke
await injected(*ctx.args, **ctx.kwargs)
File "/home/container/.local/lib/python3.8/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: JSONDecodeError: Expecting value: line 1 column 1 (char 0)```
add {} to your JSON file
Would f’<@{author.user.id}>’ work
('users.json', 'r') change it to {'users.json', 'r'}
author.mention
author.user is not a thing
Kk
why.....
members are mention through ids with
<@member_id>
well i suggest using arrays and append dicts inside them.
afterall dont use json as a database 🤷♂️
temporary variables
i wanna mention user who did command so wouldnt work
hmm yeah, mongo or SQL's
ctx.author.mention ;-;
you got the author so why are you trying .user ?
whatever that fits your needs.
o ye XD
but why
didnt see that
because its easier to append data into.
thats if your willing to use json to store temp data. which isnt suggested
You can store it on disk
hmm...yeah that's another issue
Why not store it in ram
well if you store it in ram then the bot crashes or gets into a restart or even goes offline. all of those data would be gone forever
mabe
Yes but It’ s temporary data, isnt it?
well in most cases you want to add stuff to the json file while the program is running. like user leveling up and etc, if you did that in ram you'd need some sort of dict that stores stuff into ram. therefore if anything happens that causes the bot to restart the dict would go back to whats it original value was. which is most likely an empty dict
If you are hosting a bot on a site that makes a docker image from ur code and creates new docker container every time u restart the process json wouldn’t be too useful
Best bet is to use a db
🏃♂️ mongodb /pgsql would be great choice in that case
Mongo is probably cheaper
my host can save data , but its a small bot so i simply use sqlite3
ill move to pgsql later
How do i get user from reactions?
!d discord.Message
class discord.Message```
Represents a message from Discord.
x == y Checks if two messages are equal.
x != y Checks if two messages are not equal.
hash(x) Returns the message’s hash.
raw event or on_reaction_add?
num 2
well thats what i suggest
!d discord.on_reaction_add , the 2nd arg
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/master/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/master/api.html#discord.on_raw_reaction_add "discord.on_raw_reaction_add") instead.
Note
To get the [`Message`](https://discordpy.readthedocs.io/en/master/api.html#discord.Message "discord.Message") being reacted, access it via [`Reaction.message`](https://discordpy.readthedocs.io/en/master/api.html#discord.Reaction.message "discord.Reaction.message").
This requires [`Intents.reactions`](https://discordpy.readthedocs.io/en/master/api.html#discord.Intents.reactions "discord.Intents.reactions") to be enabled.
Note
This doesn’t require [`Intents.members`](https://discordpy.readthedocs.io/en/master/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/master/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.
!d discord.Reaction.users
async for ... in users(*, limit=None, after=None)```
Returns an [`AsyncIterator`](https://discordpy.readthedocs.io/en/master/api.html#discord.AsyncIterator "discord.AsyncIterator") representing the users that have reacted to the message.
The `after` parameter must represent a member and meet the [`abc.Snowflake`](https://discordpy.readthedocs.io/en/master/api.html#discord.abc.Snowflake "discord.abc.Snowflake") abc.
Examples
Usage
```py
# I do not actually recommend doing this.
async for user in reaction.users():
await channel.send(f'{user} has reacted with {reaction.emoji}!')
```...
thats pretty hard to maintain and a bit, useless
I agree with that
Yes, but I saw the site he hosts his bot on does uses containerisation
I might sound stupid but how do you define = f”{ctx.author.mention}
@eager trail see if that is appropriate for ur use case
@cedar stream see im doing test ping command but i want to ping user doing command
oh okay and what should i do?
ctx.author.mention doesnt seem to work
um okie
can we see the command ?
Send the whole function
With decorators
how to delete this bot-main
well. that isnt a command
right click on it and delete
use the command decorator, not using on_message
theres no option to delete
!d discord.ext.commands.Bot
class discord.ext.commands.Bot(command_prefix, help_command=<default-help-command>, description=None, **options)```
Represents a discord bot.
This class is a subclass of [`discord.Client`](https://discordpy.readthedocs.io/en/master/api.html#discord.Client "discord.Client") and as a result anything that you can do with a [`discord.Client`](https://discordpy.readthedocs.io/en/master/api.html#discord.Client "discord.Client") you can do with this bot.
This class also subclasses [`GroupMixin`](https://discordpy.readthedocs.io/en/master/ext/commands/api.html#discord.ext.commands.GroupMixin "discord.ext.commands.GroupMixin") to provide the functionality to manage commands.
again you are using ctx.author.mention, use message.author.mention if your on an on_message event
!d discord.ext.commands.Command and this
class discord.ext.commands.Command(*args, **kwargs)```
A class that implements the protocol for a bot text command.
These are not created manually, instead they are created via the decorator or functional interface.
ok
Replace ctx with message
i suggest showing the full coroutine
ok
how to install py
bot replys f'{message.author.mention}, and not @slate swan
remove the f string
Cus u sent “f’{mention}’, pong”
just have message.author.mention 🤷♂️
do you have something like .send("f"{message.member.mention}"
What os are u using
windows
Yes they have exactly that
I think u have to do it in Microsoft store
!d str.format
oh
I’ m not sure tho, I dont use windows
Creating a Python string with your variables using the + operator can be difficult to write and read. F-strings (format-strings) make it easy to insert values into a string. If you put an f in front of the first quote, you can then put Python expressions between curly braces in the string.
>>> snake = "pythons"
>>> number = 21
>>> f"There are {number * 2} {snake} on the plane."
"There are 42 pythons on the plane."
Note that even when you include an expression that isn't a string, like number * 2, Python will convert it to a string for you.
i have created discord bot and invited to my server
should i use vsc for coding?
It’ s personal preference
Still the same
ok
its a great choice , if you want to use something meant for python specifically you can go for pycharm
just show us the full Coroutine please.
how to delete this bot-main
@pseudo lake ig best thing to do is <@{message.author.id}>
Bruh
right click on bot-main , delete file
Ctr + delete 🤷🏼♂️
this channel is for questions related to discord bots 
Right click > delete
that would work but still. can we see the coroutine
or if you are on linux , you can use ctrl +q to delete the file ( dont)
the function or the event you have that code on
you can see the windows button on the bottom left side
Lmfao
Idk
…
uh not exactly what i'm looking for
should i create a folder for my bot?
Yes every project should be in It’ s own directory
a coroutine is a function that has async before it like wise
async def coroutine(arguements):
"""
this right here is a coroutine and needs to be awaited
"""
...```
that isnt the correct shortcut either , its used for closing windows
import os
from discord.ext import commands
bot = commands.Bot(command_prefix='!') #bot's prefix
@bot.event
async def on_ready():
print('We have logged in as {0.user}'.format(bot)) #tells us that our bot is online
@bot.event #responding to messages
async def on_message(message):
message.content = (message.content.lower()) #makes all messages lowercase, from the bot's perspective
if message.author == bot.user: #to not respond to bots
return
if "ping" in message.content:
await message.channel.send(" <@{message.author.id}> pong")```
we said start with something simple not a discord bot
oh lmao use f strings
!e ```py
how to use f strings
a = 'apple'
print(f"i ate an {a}")```
@slate swan :white_check_mark: Your eval job has completed with return code 0.
i ate an apple
lol k

so what should i start?
i know what strings are
import discord
import os
from discord.ext import commands
bot = commands.Bot(command_prefix='!') #bot's prefix
@bot.event
async def on_ready():
print('We have logged in as {0.user}'.format(bot)) #tells us that our bot is online
@bot.event #responding to messages
async def on_message(message):
message.content = message.content.lower() #not sure why you needed to make it a tuple
if message.author == bot.user: #to not respond to bots
return
if "ping" in message.content:
await message.channel.send(f"{message.author.mention} pong")```
then why dont you use them
There is a f missing
o
so , why dont use add the f there?
also if you really wanted to be a bit fancy
I don’t like fancy lol
LMFAOOO
Leave me alone doggy
By fancy they probably meant cleaner
its more readable and a bit faster
Like higher level
yeah
number : int = 1
string : str = "heh"
``` ```
number = 1
string = 'heh'``` the first one is fancier yet faster
Yes
cause the interpreter wont need to identify the data type of those variables itself
I don’t wanna start my 2022 by getting laughed at a dog
Yes It’ s alr defined in compile time
Anyone on vs code how do you keep your project on 24:7
import discord
import os
from discord.ext import commands
bot = commands.Bot(command_prefix='!') #bot's prefix
@bot.event
async def on_ready():
"""
A listner that waits for the bot to be online
---
Arguments -> None
"""
print('We have logged in as {0.user}'.format(bot))
@bot.event
async def on_message(message):
"""
A listner that listens for messages
---
Arguments -> None
"""
if "ping" in message.content.lower() and not message.author.bot:
await message.channel.send(f"{message.author.mention} pong")
# mentioning the user by using the class method message.author and the propterty .mention```
use a hosting site 🤷♂️
What one you Recommended
Nvm, python cant do that
are you looking for a free one ?
main.py 1
theres epikhost and railway app
Yea ok
any error?
you didnt install discord
.
Bruh
Kinda hard ti find
pip install discord.py
He means you didn’t install discord.py
i found some decent ones
ok
Fr?
please learn some python before dealing with packages like discord.py
Not heroku or repl?
@pseudo lake also I normally use repl but with vs do you need to use .env to private token
nope. i use railway.app for my database hosting and epikhost for my bot hosting its a vps btw
Free vps?
Ye
you can do whatever you want , you can link your github account with epik host and have it auto pull aswell
For how much time
yeah 
forever lmao
Do u need a credit card?
but railway has some rules
nope
Dumb ones?
@pseudo lake https://epikhost.vercel.app/ ?
Free hosting on EpikHost! Quickly get your code hosted.
not really. your total stuff worked should cost less than 5 dollars a month which is a bit of a high limit for bots that arent in much servers
yeah. altho you would need to join there server to make an account
i dont mind
Ohh, that is cool
i am not able to install discord.py pip install discord.py
I hosted a bot on gcp and it cost me less than 1€ per month
are u in a virtual environment
U should learn python b4 making bots
@pseudo lake when I click start host it says login no sign up
Do you know the power shell?
Paste in there and tap enter
yeah lets just wait for the mods to whitelist the server 
ok
what about cmd?
`pip : The term 'pip' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the
spelling of the name, or if a path was included, verify that the path is correct and try again.
At line:1 char:1
- pip install discord.py
-
+ CategoryInfo : ObjectNotFound: (pip:String) [], CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException`
What if everyone starts using that and they start charging for it
well i've got no clue 
Hiw do those sites make profit?
by stealing your data
they do a little trolling
?
?
Yo wtf
Trolling?
ads
and afk pages from where you earn points to host your bot
not sure tbh
!d discord.Status
class discord.Status```
Specifies a [`Member`](https://discordpy.readthedocs.io/en/master/api.html#discord.Member "discord.Member") ‘s status.
what host is that?
epikhost i think
ic
@pseudo lake hwo to host vs code with it
you use github. thats what i currently have
i got bot token ttho
ok
i know the owner personally.
i'm using it myself for hosting
they dont ask for any data btw
beside an email
without a password btw 🤷♂️
they make the password for you
you can use envs
and get the env using os module
!d os.getenv
os.getenv(key, default=None)```
Return the value of the environment variable *key* if it exists, or *default* if it doesn’t. *key*, *default* and the result are str.
On Unix, keys and values are decoded with [`sys.getfilesystemencoding()`](https://docs.python.org/3/library/sys.html#sys.getfilesystemencoding "sys.getfilesystemencoding") and `'surrogateescape'` error handler. Use [`os.getenvb()`](https://docs.python.org/3/library/os.html#os.getenvb "os.getenvb") if you would like to use a different encoding.
[Availability](https://docs.python.org/3/library/intro.html#availability): most flavors of Unix, Windows.
@slate swan can u make quick vid how to setup
setup your bot on a host ?
its easy , just make a python server and upload your files there
read the docs alex
if you need help with a certain point you can just tell us
i suggest github.
github ofcourse is better but if you want to like change something in the code , which u dont want to reflect on the repo..
ok
lmao you dont autocommit and push you know that ?
well i never tried using a git repo for hosting , just uploaded the files instead
so no idea
fair enough, you can choose if u want to push or not, before that u can test it locally aswell
i find it pretty useful
Is there anything wrong about this? ```py
limit = 3
await ctx.channel.purge(limit=limit, check=lambda m: m.author==self.bot.user)
https://youtu.be/2qh3oa-6tbA @pseudo lake
Epikhost - https://epikhost.xyz/
Epikhost Panel - https://panel.epikhost.xyz/
Epikhost Server - https://discord.gg/ShkQBkzUND
Hey!
Thanks for watching todays video, todays video I really hope you enjoyed and join my discorddd :)
LINKS -
Join my Discord - https://discord.gg/twHW4UUJGq
Nextcord Server - https://discord.gg/Ucmae5Kbwb
----------...
its because only 1 out of 3 messages were from the bot
how can I get a list of all nitro users in the server?
you cant
sus
you can get number of boosters in the server
like can I check how many people have animated pfp
!d discord.Asset.is_animated
is_animated()```
[`bool`](https://docs.python.org/3/library/functions.html#bool "(in Python v3.9)"): Returns whether the asset is animated.
i think i know what hes up to
!d discord.Guild.premium_subscribers
property premium_subscribers: List[discord.member.Member]```
A list of members who have “boosted” this guild.
?
O
Oh wait yea
its only for boosters
Misread the question
which is the latest version of python
im not doing anything like that
3.10 has been released recently
ty
!d discord.Member.premium_since
An aware datetime object that specifies the date and time in UTC when the member used their “Nitro boost” on the guild, if available. This could be None.
3.11 is in beta
This (:
how can I check all members to see who has animated pfp
U can loop through guild.members
iterate thru guild.members , and check if member.avatar.is_animated
what version of dpy are u using?
is it possible to make a music bot without using youtube-dl , i cant seem to find any methods
lavalink
Is it neutral?
python 3.8.2
could you tell me how to do that?
discord.py version
It's not possible, since slash commands UI doesn't support arrays yet. We should wait for further API updates
print(discord.__version__)
its 1.5.1
Requirement already satisfied: discord.py in c:\users\sreekumar\appdata\local\programs\python\python310\lib\site-packages (1.7.3)
Requirement already satisfied: aiohttp<3.8.0,>=3.6.0 in c:\users\sreekumar\appdata\local\programs\python\python310\lib\site-packages (from discord.py) (3.7.4.post0)
Requirement already satisfied: async-timeout<4.0,>=3.0 in c:\users\sreekumar\appdata\local\programs\python\python310\lib\site-packages (from aiohttp<3.8.0,>=3.6.0->discord.py) (3.0.1)
Requirement already satisfied: attrs>=17.3.0 in c:\users\sreekumar\appdata\local\programs\python\python310\lib\site-packages (from aiohttp<3.8.0,>=3.6.0->discord.py) (21.4.0)
Requirement already satisfied: typing-extensions>=3.6.5 in c:\users\sreekumar\appdata\local\programs\python\python310\lib\site-packages (from aiohttp<3.8.0,>=3.6.0->discord.py) (4.0.1)
Requirement already satisfied: yarl<2.0,>=1.0 in c:\users\sreekumar\appdata\local\programs\python\python310\lib\site-packages (from aiohttp<3.8.0,>=3.6.0->discord.py) (1.7.2)
Requirement already satisfied: multidict<7.0,>=4.5 in c:\users\sreekumar\appdata\local\programs\python\python310\lib\site-packages (from aiohttp<3.8.0,>=3.6.0->discord.py) (5.2.0)
Requirement already satisfied: chardet<5.0,>=2.0 in c:\users\sreekumar\appdata\local\programs\python\python310\lib\site-packages (from aiohttp<3.8.0,>=3.6.0->discord.py) (4.0.0)
Requirement already satisfied: idna>=2.0 in c:\users\sreekumar\appdata\local\programs\python\python310\lib\site-packages (from yarl<2.0,>=1.0->aiohttp<3.8.0,>=3.6.0->discord.py) (3.3)
is discord.py installed?
yes?
.
.
you should update that...
Will do
Can anyone tell how to do this?
no idea about old version of dpy , in v2.x it works with member.avatar.is_animated
bot.run(os.getenv[TOKEN]; sytax error why tho
you should actually upgrade or shift to a fork
for loop
its getenv('TOKEN')
or , environ['TOKEN'] , dont mix em
im using replit
free host
my answer remains same
u didnt close the brackets too
@slate swan whats unexpected eof
whats the command to make bot online
are you talking about bot.run()?
run the file
ig
show code
The TOKEN in bot.run needs to be a string
im using env repl
Does {ctx.guild.boosts_level} exist?
try it
If not, what is it?
Does someone know?
!d discord.Guild.premium_tier
The premium tier for this guild. Corresponds to “Nitro Server” in the official UI. The number goes from 0 to 3 inclusive.
free host
indeed , replit is too bad to use
but u can avoid the ratelimit
kill 1 in the shell gives u a new ip adress
@glacial bridge what do you use?
normally i use vs code
I use PyCharm to write the code, the I connect to my Raspberry Pi through ssh and host my bots on there
Though I had a Rpi laying around, so a cheap host might be better
If you really need a free one, I heard heroku is free (but no free host will be without its downsides)
I also have 2 raspberry pi's
You can use them to host
But do you keep them on 24/7?
Just transfer necessary files to them, then use screen to run them 24/7
I can tell you more in DMs
Use Epikhost
Its free and there is always help available
host them on the raspberry pi insead.
Free host?
Can anyone tell how to make an afk command in discord.py
@slate swan @pseudo lake @silk mauve @knotty gazelle @glacial bridge
!mute 783910297785335808 6h You were told to stop spamming.
:incoming_envelope: :ok_hand: applied mute to @pure plover until <t:1641064823:f> (5 hours and 59 minutes).
wtf
Yep I’m showing him how 👍
Bruh lmfao
Epikhost is good? The free tier?

explain
