#discord-bots

1 messages Β· Page 764 of 1

spring flax
#

You mean send the " ".join(list)

maiden fable
#

But then, it depends on the cache

potent spear
spring flax
#

When i use the purge command it gets all messages that were purged and puts in txt

potent spear
#

that's not the question xd

#

why / what's the use?

spring flax
#

I store the messages so mods can view what was deleted

potent spear
#

how can mods read from a txt you locally stored?

#

you .read that file again?

spring flax
#

I'll send the file in a logging channel..

potent spear
#

ah, ig that kinda makes sense

#

you don't have to store the file locally btw, you can generate it and send it straight away without ever needing to store it locally
that's the best practice I'd say

slate swan
#

!e import discord

unkempt canyonBOT
#

@slate swan :x: Your eval job has completed with return code 1.

001 | Traceback (most recent call last):
002 |   File "<string>", line 1, in <module>
003 | ModuleNotFoundError: No module named 'discord'
slate swan
#

why

north whale
#

because letting someone run a discord bot with an eval command is a great idea

slate swan
#

dont need import discord its a dc bot

#

!e if message.content == 'hi':
message.channel.send('hi')

unkempt canyonBOT
#

@slate swan :x: Your eval job has completed with return code 1.

001 |   File "<string>", line 2
002 |     message.channel.send('hi')
003 |     ^
004 | IndentationError: expected an indented block after 'if' statement on line 1
slate swan
#

nothing like that would work.

#

ahhh

#

its a sandboxed eval

#

no its just i cant do it here on phone on discord

#

cant do intendet block on phone on dc

#

only visual studio mobile or smth lien that

#

it only runs things a basic python installation does..

#

!e if message.content == 'hi': await message.channel.send('hi')

unkempt canyonBOT
#

@slate swan :x: Your eval job has completed with return code 1.

001 |   File "<string>", line 1
002 | SyntaxError: 'await' outside function
slate swan
#

was await needed or no?

#

it is , but once again
thats not what the bot is meant for

#

!e if message.content == 'hi': message.channel.send('hi')

unkempt canyonBOT
#

@slate swan :x: Your eval job has completed with return code 1.

001 | Traceback (most recent call last):
002 |   File "<string>", line 1, in <module>
003 | NameError: name 'message' is not defined
north whale
#

at least do it in a different channel

slate swan
#

wher

#

#bot-commands

north whale
#

a bot command channel

slate swan
#

thanks

#

i thought its this cuz discord bots yk

slate swan
north whale
#

it's in a help category

quick gust
north whale
#

use eyes

quick gust
slate swan
slate swan
north whale
slate swan
#

also where? there r tons of channels like i care where i write aslong as i see a bot name in a channel i take my turn

quick gust
slate swan
#

#bot-commands

echo wasp
#

!paste

slate swan
slate swan
#

!d random.choice

unkempt canyonBOT
#

random.choice(seq)```
Return a random element from the non-empty sequence *seq*. If *seq* is empty, raises [`IndexError`](https://docs.python.org/3/library/exceptions.html#IndexError "IndexError").
slate swan
#

woah

slate swan
slate swan
#

oof, fair enough

echo wasp
#

i don't really play zround with random choice

slate swan
#

;-;

slate swan
#

this is how random.choice works

#

!e ```py
import random ;
l = [1,2,3]
print(random.choice(l))

here i choosed numbers as the list , you may use embed objects```

#

lmao

unkempt canyonBOT
#

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

2
echo wasp
slate swan
#

so , in the same way you can have ```py
my_list = [em1 , em2 , em3 ....]
the_random_embed = random.choice(my_list)

slate swan
#

this was the input

echo wasp
boreal ravine
#

hm

boreal ravine
echo wasp
#

so i did do it right

slate swan
echo wasp
slate swan
#

smh

#

you dont define values inside the random.choice ```py
random.choice(em1 = ...)

#

it means you are providing a value for em1 in the choice method

#

another sidenote , dont use on_message events for making commands!

boreal ravine
boreal ravine
#

method*

slate swan
boreal ravine
slate swan
#

nvm

echo wasp
boreal ravine
#

don't redo it

#

ask them to do it themselves

echo wasp
#

my point

slate swan
slate swan
#

i feel you

slate swan
#

welp

boreal ravine
slate swan
#

lmao

echo wasp
slate swan
#

if you wish to use random.choice directly for the embed kwarg , you wont use the random_embed var

echo wasp
crystal cliff
#

How do i add emojis, to a poll command in d.py?

boreal ravine
unkempt canyonBOT
#

await add_reaction(emoji)```
This function is a [*coroutine*](https://docs.python.org/3/library/asyncio-task.html#coroutine).

Add a reaction to the message.

The emoji may be a unicode emoji or a custom guild [`Emoji`](https://discordpy.readthedocs.io/en/master/api.html#discord.Emoji "discord.Emoji").

You must have the [`read_message_history`](https://discordpy.readthedocs.io/en/master/api.html#discord.Permissions.read_message_history "discord.Permissions.read_message_history") permission to use this. If nobody else has reacted to the message using this emoji, the [`add_reactions`](https://discordpy.readthedocs.io/en/master/api.html#discord.Permissions.add_reactions "discord.Permissions.add_reactions") permission is required.
slate swan
#

^

boreal ravine
#

no idea, try asking in the disnake server

slate swan
#

oof

crystal cliff
crystal cliff
shadow wraith
#

hello

boreal ravine
#

be patient, and it looks like all of disnake's good contributors are all offline

boreal ravine
slate swan
#

show menu_callback

crystal cliff
boreal ravine
boreal ravine
crystal cliff
slate swan
#

confirm?

crystal cliff
boreal ravine
crystal cliff
# boreal ravine show your code

@Bot.command()
async def Poll(ctx, *, message, ):
embed=discord.Embed(title="Poll",description=f"{message}")
msg=await ctx.channel.send(embed=embed)
await msg.add_reaction('πŸ‘')
await msg.add_reaction('πŸ‘Ž')

shadow wraith
#

hey how the fuck is discord.ChannelType.news and a disnake error possible

boreal ravine
#

language

slate swan
unkempt canyonBOT
boreal ravine
shadow wraith
#

uh...

slate swan
#

ow

crystal cliff
slate swan
#

default discord emojis are unicode emojis

#

welp

boreal ravine
#

they are strings, discord probably uses some markdown feature to make strings look like emojis

shadow wraith
#

i havent been coding bots for like a day or something but im here because some people usually have python errors

#

for some reason-

shadow wraith
#

no like usually people get a python issue, not a discord.py/disnake issue and i know basic python so im here to be here

#

and most people making discord bots encounter them

slate swan
#

is the server a community one?

slate swan
boreal ravine
slate swan
#

lmao

shadow wraith
#

yeah i used to be super active here though and i realized some people usually have errors but discord.py/disnake doesn't cause them, and i still thought that still happening so im here for some reason.

#

like for example SyntaxError is not what discord.py/disnake causes because i think they have custom errors i forgor

slate swan
#

I lost 2 brain cells trying to read it and 4 to understand this
pithink

boreal ravine
crystal cliff
slate swan
boreal ravine
crystal cliff
slate swan
#

well then you can do that part at the last , and please dont use import disnake as discord instead you can install disnake with discord namespace in your venv

$python -m pip install disnake[discord]
boreal ravine
slate swan
boreal ravine
slate swan
crystal cliff
boreal ravine
#

and paste it to where you used add_reaction

crystal cliff
honest vessel
#

not true

#

@slate swanYTDL isnt supported here duo ToS

#

!YTDL

unkempt canyonBOT
#

Per Python Discord's Rule 5, we are unable to assist with questions related to youtube-dl, pytube, or other YouTube video downloaders, as their usage violates YouTube's Terms of Service.

For reference, this usage is covered by the following clauses in YouTube's TOS, as of 2021-03-17:

The following restrictions apply to your use of the Service. You are not allowed to:

1. access, reproduce, download, distribute, transmit, broadcast, display, sell, license, alter, modify or otherwise use any part of the Service or any Content except: (a) as specifically permitted by the Service;  (b) with prior written permission from YouTube and, if applicable, the respective rights holders; or (c) as permitted by applicable law;

3. access the Service using any automated means (such as robots, botnets or scrapers) except: (a) in the case of public search engines, in accordance with YouTube’s robots.txt file; (b) with YouTube’s prior written permission; or (c) as permitted by applicable law;

9. use the Service to view or listen to Content other than for personal, non-commercial use (for example, you may not publicly screen videos or stream music from the Service)
slate swan
#

oh sorry/

#
   #            voice.play(discord.FFmpegPCMAudio({song_id}.mp3))
    voice.play(discord.FFmpegPCMAudio(f"/home/container/songs/{song_id}.mp3"))

    with open("./downloaded_songs.json", "w") as f:
        json.dump(downloaded, f)

    voice = discord.utils.get(client.voice_clients, guild=ctx.guild)

    if voice.is_connected():
        await voice.disconnect()
    else:
        await ctx.send("I am not connected to a voice channel")

it dosent play the audio.

#

nothing in console

tiny ibex
#

What's the issue

crystal cliff
tiny ibex
#

??

slate swan
#

bot just jois and leaves

tiny ibex
slate swan
#
if voice.is_connected():
        await voice.disconnect()```
#

but, why

#

this makes the bot disconnect

tiny ibex
#
    if voice.is_connected():
        await voice.disconnect()```
slate swan
#

oh my god.

#

thank you.

tiny ibex
#

You are skidding -,-

honest vessel
#

kek

tiny ibex
#

Most prolly

slate swan
#

;-;

potent spear
#

also

voice = discord.utils.get(client.voice_clients, guild=ctx.guild)```
is basically
`voice = ctx.voice_client`
slate swan
#

oh k ty

boreal ravine
crystal cliff
# boreal ravine show screenshot of code

@Bot.command()
async def Poll(ctx, *, message, ):
embed=discord.Embed(title="Poll",description=f"{message}")
msg=await ctx.channel.send(embed=embed)
await msg.add_reaction('πŸ‘')
await msg.add_reaction('πŸ‘Ž ') {second emoji doesnt work}

boreal ravine
#

can you send it in a pastebin

potent spear
#

don't use emojis characters in your code, this is why:

boreal ravine
#

!paste

unkempt canyonBOT
#

Pasting large amounts of code

If your code is too long to fit in a codeblock in discord, you can paste your code here:
https://paste.pythondiscord.com/

After pasting your code, save it by clicking the floppy disk icon in the top right, or by typing ctrl + S. After doing that, the URL should change. Copy the URL and post it here so others can see it.

boreal ravine
#

^^

potent spear
echo wasp
tiny ibex
potent spear
tiny ibex
#

!code

unkempt canyonBOT
#

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.

slate swan
#

i mean , just msg.add_reaction(':+1:') will do the job

potent spear
echo wasp
#

i think so i am helping someone and it confuses me

boreal ravine
#

doesn't look like you are using tuples anywhere

echo wasp
potent spear
potent spear
boreal ravine
echo wasp
boreal ravine
#

it isn't

potent spear
#

read the first line of the error

boreal ravine
#

show error above the error you sent

echo wasp
potent spear
#

there we go

slate swan
#

kayle , is pincer bad?

crystal cliff
quick gust
#

!code

unkempt canyonBOT
#

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.

slate swan
# echo wasp

you have something similar to embed = ( em1 , em2 )?

boreal ravine
potent spear
# echo wasp

do you realize your beg command will always show the same embed? it won't "shuffle" every time you use the command

boreal ravine
potent spear
boreal ravine
#

idk if he saw it or not

echo wasp
potent spear
#

why am I here? just to suffer?

slate swan
echo wasp
slate swan
potent spear
#

what's your native language?

echo wasp
potent spear
boreal ravine
vale cedar
#
    @commands.command()
    async def send_dm(ctx,member: discord.Member, *, content):
        me = await member.create_dm()
        await me.send(content)```

**Error:** 'Context' object has no attribute 'create_dm'

**How to fix it?**
slate swan
slate swan
potent spear
vale cedar
boreal ravine
#

useless method call

slate swan
#

!e ```py
var = 1,
print(type(var))

this is what u did

unkempt canyonBOT
#

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

<class 'tuple'>
slate swan
#

basically it becomes an tuple instead of embed

mental kraken
potent spear
slate swan
boreal ravine
#

an -> a

slate swan
#

can someone tell me why some tutorials say (ctx, *,

slate swan
#

why is this star there this *?

slate swan
potent spear
boreal ravine
potent spear
vale cedar
potent spear
vale cedar
slate swan
#

how do i make this exeute after the song has finished playing

   
  if voice.is_connected():
        await voice.disconnect()
    else:
        await ctx.send("I am not connected to a voice channel")
potent spear
mental kraken
# slate swan oh , may i know any reasons for that?

Shim is less stable and less predictable
It emulates the package using different hacky techniques and that's not guaranteed to work as intended in each possible use case
In addition to that, it may incorrectly overwrite the discord.py library and cause some serious troubles

slate swan
vale cedar
#

thanks @potent spear and @slate swan

potent spear
#

5 bucks and we won't shame you

slate swan
echo wasp
#

no shuffle

slate swan
potent spear
boreal ravine
potent spear
#

I learned quickscoping, same thing

boreal ravine
#

ok

echo wasp
potent spear
#

another brain cell lost for me

boreal ravine
#

ok

echo wasp
boreal ravine
mental kraken
echo wasp
#

and i did define it above the command

boreal ravine
boreal ravine
#

do you know what scope that is where you defined the variable?

potent spear
#

pls start reading advice

echo wasp
boreal ravine
#

yes and no

#

put the method inside the embed kwarg

slate swan
potent spear
boreal ravine
slate swan
#

you cant randomize parameters ;-;

#

even if that was possible

potent spear
echo wasp
#

is what i have

mental kraken
#

Really? If I remember correctly, yesterday I spent at least 30 minutes explaining views
Even though I have a final exam soon and other things to do

slate swan
#

and the random amount of coins , how will you succeed with that thing if the embed variables are global?

boreal ravine
slate swan
potent spear
#

that's eye damage, I get (t)it

slate swan
boreal ravine
#

are we helping or teaching? cause this feels like teaching someone python basics πŸ™‚

slate swan
#

doesnt seem so

echo wasp
#

I just hate these ()

slate swan
tiny ibex
#

Can anyone give an example of emoji buttons with text?

slate swan
potent spear
potent spear
#

can't help you, I'm on v1.7.3

tiny ibex
slate swan
unkempt canyonBOT
#

discord.ui.button(*, label=None, custom_id=None, disabled=False, style=<ButtonStyle.secondary: 2>, emoji=None, row=None)```
A decorator that attaches a button to a component.

The function being decorated should have three parameters, `self` representing the [`discord.ui.View`](https://discordpy.readthedocs.io/en/master/api.html#discord.ui.View "discord.ui.View"), the [`discord.ui.Button`](https://discordpy.readthedocs.io/en/master/api.html#discord.ui.Button "discord.ui.Button") being pressed and the [`discord.Interaction`](https://discordpy.readthedocs.io/en/master/api.html#discord.Interaction "discord.Interaction") you receive.

Note

Buttons with a URL cannot be created with this function. Consider creating a [`Button`](https://discordpy.readthedocs.io/en/master/api.html#discord.ui.Button "discord.ui.Button") manually instead. This is because buttons with a URL do not have a callback associated with them since Discord does not do any processing with it.
slate swan
potent spear
#

others will

tiny ibex
slate swan
slate swan
tiny ibex
slate swan
#

other than the decorator method πŸ™‚

tiny ibex
unkempt canyonBOT
#

examples/views/button/link.py lines 18 to 28

class Google(disnake.ui.View):
    def __init__(self, query: str):
        super().__init__()
        # we need to quote the query string to make a valid url. Discord will raise an error if it isn't valid.
        query = quote_plus(query)
        url = f"https://www.google.com/search?q={query}"

        # Link buttons cannot be made with the decorator
        # Therefore we have to manually create one.
        # We add the quoted url to the button, and add the button to the view.
        self.add_item(disnake.ui.Button(label="Click Here", url=url))```
tiny ibex
#

Cool

crystal cliff
slate swan
#

and no need to create_dm , just send the msg directly

mental kraken
#

Unfortunately there're only like 5 people that regularly help in disnake support server

#

Disnake isn't very popular (compared to pycord for example) so we have lack of support
Pycord was heavily advertised though

heavy folio
unkempt canyonBOT
#

await create_dm()```
This function is a [*coroutine*](https://docs.python.org/3/library/asyncio-task.html#coroutine).

Creates a [`DMChannel`](https://discordpy.readthedocs.io/en/master/api.html#discord.DMChannel "discord.DMChannel") with this user.

This should be rarely called, as this is done transparently for most people.
heavy folio
#

should rarely be called

slate swan
#

File "/home/container/main.py", line 359
return
TabError: inconsistent use of tabs and spaces in indentation


if voice.is_connected():
    await voice.disconnect()
    return <- line 359

whats wrong

mental kraken
#

That issue with popularity really affects a lot of stuff
Disnake is definitely not worse than pycord, at many aspects it's even better, but pycord was promoted by a youtuber so now it's way more popular than it should be

#

Very true

#

If they're outside of top-5 then probably yes

crystal cliff
#

How to add a second emoji, to a poll Command in d.py?

slate swan
#

another add_reaction

crystal cliff
slate swan
#

loooli what do you think , will 3.1k of them survive

slate swan
crystal cliff
#

@Bot.command()
async def Poll(ctx, *, message, ):
embed=discord.Embed(title="Poll",description=f"{message}")
msg=await ctx.channel.send(embed=embed)
await msg.add_reaction('πŸ‘')
await msg.add_reaction('πŸ‘Ž') the second doesn’t show

slate swan
#

um like there are around 10 promising forks

#

atleast thats what i saw ppl using here

#

disnake , nextcord , pycord , e-dpy etc

crystal cliff
slate swan
#

there's no way to determine that since thats completely opinion based
i personally prefer disnake and nextcord over others
and as we just talked about libs like disnake didnt focus too much on promotions

#

so you cant actually make a top 5

slate swan
#

File "/home/container/main.py", line 358
await voice.disconnect()

hot cobalt
#

From what I've heard, disnake is quite good

slate swan
#

here , disnake is preferred by most people
in discord.py server they'll just ask you to use no forks and hikari instead

crystal cliff
slate swan
#

yea , its a library built from scratch

slate swan
crystal cliff
slate swan
slate swan
#

by command handler i mean , thing similar to discord.ext.commands

crystal cliff
#

πŸ˜†

#

actual server? its annoying, when replit says package operation failed 😦

#

im cheap, i cant afford a vpn 😦

slate swan
#

local host the bot until its ready to use

crystal cliff
#

flask

#

whats a frontend?

slate swan
crystal cliff
#

how do i make a website bot & link it?

#

That’s what I mean, the second part is hard πŸ™ˆ

#

πŸ€”

lost vine
#

How can we disable all buttons by 1 click on 1 button?

slate swan
#

if you're using dpy master/any fork

cloud dawn
#

To connect your bot to a website you need to make your own api.

#

But flask is sync code ;-;

#

tbf if you are looking to make a Discord bot with dashboard then just code your bot in node.js

#

Saves a lot of trouble.

dreamy sluice
#

anyone know how I can set up paginations for discord embeds?

final iron
#

If y'all could tell someone who was just starting out with coding discord bots something, what would you tell them?

slate swan
#

ill ask them something instead πŸ˜”

#

did you learn python before falling into this trap?

dreamy sluice
shadow wraith
dreamy sluice
#

People jump into discord.py before actually learning python-

#

πŸ’€

shadow wraith
#

yes that is true

#

ive seen new people try discord.py (haven't seen new people use forks yet) when they dk python 😭

slim ibex
#

It’s sickening to see people still use dpy and discord components

shadow wraith
#

i use disnake

#

do you guys have any command ideas

slate swan
dreamy sluice
unkempt canyonBOT
slate swan
#

not that

#

actual node js code

shadow wraith
#

oh

dreamy sluice
#

Btw, do any of you know how to do paging with embeds?

slate swan
shadow wraith
final iron
cloud dawn
shadow wraith
#

😭

dreamy sluice
#

Do you guys know what discord libraries I should use with discord.py? (I am curious cause, I have seen a lot of people talk about other python libraries)

slate swan
#

loooli i love hikari for solving all these issues
1 . doesnt run on replit
2 . is comparetively harder than dpy so no beginner would love that

dreamy sluice
lost vine
slate swan
slim ibex
shadow wraith
# dreamy sluice Ye

i recommend disnake, it's still being updated and it doesn't require you to use 3rd party libraries like discord components, discord slash or something like that

#

ive seen 1 person say it has best support for slash commands

slim ibex
#

Other non forks like pincer and hikari are promising and have many extra features, so I would also look into those

lost vine
slate swan
#

pincer looks like a dpy clone to me

cloud dawn
slim ibex
slim ibex
#

!pypi pincer

unkempt canyonBOT
slate swan
#

in examples

slim ibex
dreamy sluice
slate swan
slim ibex
#

but it has other things like customizable middleware and static typing

cloud dawn
#

Let's all go to hikari.

slate swan
#

😳 tru

slim ibex
#

hikari docs are hard to read lmao

lost vine
dreamy sluice
slate swan
slim ibex
#

Yeah ik

dreamy sluice
#

btw, do any of you guys know how to add paginations in embeds?

slim ibex
#

yes

#

With nextcord

dreamy sluice
#

how many forks of dpy are there-

slim ibex
#

!d nextcord.ext.commands.Paginator

unkempt canyonBOT
#

class nextcord.ext.commands.Paginator(prefix='```', suffix='```', max_size=2000, linesep='\n')```
A class that aids in paginating code blocks for Discord messages.

len(x) Returns the total number of characters in the paginator.
slate swan
#

how do you construct those buttons ```py
class Button(pycord.ui.Button):
...

or the decorator method ?

@pycord.ui.button(*args)


@lost vine
slim ibex
#

In nextcord?

dreamy sluice
cloud dawn
slim ibex
#

You can’t lmao that’s why don’t use dpy

dreamy sluice
slim ibex
#

well you might be able to but you miss out on tons of other features

shadow wraith
#

i wanna try hikari ngl

dreamy sluice
cloud dawn
#

hikari only channel now :3

slate swan
#

um

cloud dawn
slate swan
shadow wraith
#

what knowledge does hikari need in pyton

slim ibex
#

You have to uninstall discord to use nextcord

dreamy sluice
slim ibex
#

!d discord.ext.commands.Paginator

unkempt canyonBOT
#

class discord.ext.commands.Paginator(prefix='```', suffix='```', max_size=2000, linesep='\n')```
A class that aids in paginating code blocks for Discord messages.

len(x) Returns the total number of characters in the paginator.
slim ibex
cloud dawn
slim ibex
#

Just change all the imports to nextcord lmao

dreamy sluice
slim ibex
dreamy sluice
#

It's that simple to change?-

slim ibex
#

all you need is to change the importa

shadow wraith
#

just search replace it

slim ibex
#

and don’t use β€œas discord”

dreamy sluice
#

okeh

slim ibex
#

How to migrate from discord.py to the maintained fork, Nextcord

❀ Subscribe: http://bit.ly/SubscribeDPT

In this tutorial, I will be discussing the closure of discord.py, the alternatives, and how to migrate your Python Discord bot from discord.py to nextcord.

πŸ‘¨β€πŸ’» Source Code
https://github.com/DenverCoder1/Tutorial-Discord-Bot/tree/nextcord-m...

β–Ά Play video
cloud dawn
#

Just use CTRL + SHIFT + H

shadow wraith
#

i have a chicken bone in my hand so i sucj at pselling

dreamy sluice
#

Thanks for the help

shadow wraith
#

guys is hikari better than disnake btw

cloud dawn
#

It got less support so you do need to code more.

boreal ravine
shadow wraith
#

eh

heavy radish
#

What's the thing for the image top right

shadow wraith
#

ill stick to disnake

shadow wraith
boreal ravine
unkempt canyonBOT
#

property author: _EmbedAuthorProxy```
Returns an `EmbedProxy` denoting the author contents.

See [`set_author()`](https://discordpy.readthedocs.io/en/master/api.html#discord.Embed.set_author "discord.Embed.set_author") for possible values you can access.

If the attribute has no value then [`Empty`](https://discordpy.readthedocs.io/en/master/api.html#discord.Embed.Empty "discord.Embed.Empty") is returned.
heavy radish
#

embed....

boreal ravine
#

!d discord.Embed.thumbnail <==

unkempt canyonBOT
#

property thumbnail: _EmbedMediaProxy```
Returns an `EmbedProxy` denoting the thumbnail contents.

Possible attributes you can access are...
shadow wraith
#

uh idk

boreal ravine
slate swan
# lost vine I use def, not class
class MyView(View):
   async def disable_buttons(self):
       for child in self.children:
           child.disabled=True
           # this disables all the buttons
           # and then you can edit that message
           # get the message using MyView().message = (the message view is used on)
       await self.message.edit(view=self)
shadow wraith
boreal ravine
#

they haven't changed the folder name

shadow wraith
#

i think putting long stuff into a function makes code readable

boreal ravine
shadow wraith
#

i use a formatter 😭

#

i dont follow pep's, formatter does that for me 😭

cloud dawn
slim ibex
#

hikari & pincer > any fork

slate swan
#

file names must be always lower cased

shadow wraith
#

its for the help command tho

slate swan
#

you can do str.title()

slim ibex
#

uh guys i think i broke JetBrains system. my Rider trial was set to expire yesterday and i still have access LMAO

heavy radish
slim ibex
#

now it says it expires today

shadow wraith
boreal ravine
shadow wraith
#

idk what str.title() is

boreal ravine
#

!d discord.Embed.set_thumbnail

unkempt canyonBOT
#

set_thumbnail(*, url)```
Sets the thumbnail for the embed content.

This function returns the class instance to allow for fluent-style chaining.

Changed in version 1.4: Passing [`Empty`](https://discordpy.readthedocs.io/en/master/api.html#discord.Embed.Empty "discord.Embed.Empty") removes the thumbnail.
heavy radish
#

ok

boreal ravine
slate swan
# shadow wraith 😭

and the cog name is derived from the class name or the name arg inside the cog class , not the file name

cloud dawn
# shadow wraith h
def load_extensions() -> None:
    extensions = ["Moderation", "Customization", "Fun", "Other", "Image", "Staff"]
    for ext in extensions:
        bot.load_extension(ext)
cloud dawn
boreal ravine
slate swan
vale cedar
#

How to get DMs of people in channel

shadow wraith
#

oh yeah and does this do the same as the for loop you did

slim ibex
#

it took me so long to get cogs to work when I first discovered them

slate swan
#

but why use a variable for it

boreal ravine
slim ibex
#

!d discord.DMChannel

unkempt canyonBOT
#

class discord.DMChannel```
Represents a Discord direct message channel.

x == y Checks if two channels are equal.

x != y Checks if two channels are not equal.

hash(x) Returns the channel’s hash.

str(x) Returns a string representation of the channel
boreal ravine
boreal ravine
slim ibex
slate swan
heavy radish
#

I want to set duration, how do i make it with m, h, d

slim ibex
cloud dawn
boreal ravine
slate swan
heavy radish
boreal ravine
shadow wraith
#

idk list comprehension

slim ibex
#

it’s mostly custom

heavy radish
#

Ok

#

I'll do some research. Can anyone help with that?

slim ibex
#

!d discord.ext.commands.Converter

unkempt canyonBOT
#

class discord.ext.commands.Converter(*args, **kwargs)```
The base class of custom converters that require the [`Context`](https://discordpy.readthedocs.io/en/master/ext/commands/api.html#discord.ext.commands.Context "discord.ext.commands.Context") to be passed to be useful.

This allows you to implement converters that function similar to the special cased `discord` classes.

Classes that derive from this should override the [`convert()`](https://discordpy.readthedocs.io/en/master/ext/commands/api.html#discord.ext.commands.Converter.convert "discord.ext.commands.Converter.convert") method to do its conversion logic. This method must be a [coroutine](https://docs.python.org/3/library/asyncio-task.html#coroutine "(in Python v3.9)").
heavy folio
slim ibex
slate swan
#

the argument provided for command ig

slim ibex
#

Time argument

cloud dawn
unkempt canyonBOT
#

datetime.strftime(format)```
Return a string representing the date and time, controlled by an explicit format string. For a complete list of formatting directives, see [strftime() and strptime() Behavior](https://docs.python.org/3/library/datetime.html#strftime-strptime-behavior).
heavy folio
#

in their case "duration"?

slate swan
#

i saw lucas doing that πŸ˜”

heavy radish
#

Hmmm

heavy folio
#

why are your parameters starting with capital letters

heavy radish
#

idk

boreal ravine
#

@heavy folio bro, don't expect that if you subclass a class, and typehint something as the class it'll work

heavy radish
#

looks nice?

slim ibex
#

no ir doesn’t

heavy folio
boreal ravine
#

of course

heavy folio
#

so it'll work?

boreal ravine
#

but TimeConverter isn't even a thing in d.py

shadow wraith
#

holy shit the name parameter/argument/i forgor actually works no fuckign way

boreal ravine
#

???

slim ibex
cloud dawn
# shadow wraith aw thats hella complicatd
(bot:=(commands:=__import__("importlib").import_module(".commands", "discord.ext")).Bot(command_prefix="!")) and (hi:=bot.command(name="hi")(__import__("asyncio").coroutine(lambda ctx:(await ctx.send("hello") for _ in '_').__anext__()))) and bot.run("")
boreal ravine
heavy folio
#

which is why i said subclass commands.Converter, typehint to that

slate swan
heavy folio
#

that's what he needs

slim ibex
#

^

heavy folio
#

yeah

shadow wraith
boreal ravine
shadow wraith
#

but the readability is fucking like 0.5

slim ibex
boreal ravine
#

I meant that if you do this ```py
class Class(commands.Converter):
...

async def func(ctx, param: Class)
``` and you do !func 5h it'll work. you'd actually need code to make this to work

slim ibex
#

That’s what I do lmao

boreal ravine
#

blatantly subclassing something wont get what you want

slim ibex
#

But with code in the class

heavy folio
#

yeah? you can't expect it to appear out of no where lol

boreal ravine
#

thats my point

slate swan
#

ofcourse

heavy folio
#

i didn't say it will get him what he wants

cloud dawn
#

!source mute

unkempt canyonBOT
#
Command: tempmute

Temporarily mute a user for the given reason and duration.

Source Code
heavy folio
#

i said typehinting the arg to the subclassed converter will work, a reason being converts typehinted args, another reason being the subclassed converter is an instance of commands.Converter

#

i did not say by subclassing Converter it will get you what you want

shadow wraith
#

!source pypi

unkempt canyonBOT
#
Command: pypi

Provide information about a specific package from PyPI.

Source Code
maiden fable
#

You know that #bot-commands exists, right?

cloud dawn
#

!paste

cloud dawn
dreamy sluice
#

Ok, I finished migrating to nextcord

pine crown
#

how to make embed with buttons?

heavy folio
#

you cant do that, you can send a message with embed and buttons

#

anyways, are you on dpy?

#

or which lib

pine crown
#

i want that

heavy folio
#

which lib

pine crown
heavy folio
#

!d disnake.ui.View

unkempt canyonBOT
#

class disnake.ui.View(*, timeout=180.0)```
Represents a UI view.

This object must be inherited to create a UI within Discord.

New in version 2.0.
heavy folio
#

and in the view, add a button iem

#

item*

pine crown
#

wat

heavy folio
#

!d disnake.ui.Button

unkempt canyonBOT
#

class disnake.ui.Button(*, style=<ButtonStyle.secondary: 2>, label=None, disabled=False, custom_id=None, url=None, emoji=None, row=None)```
Represents a UI button.

New in version 2.0.
heavy folio
#

embed like how you normally do

#

!d disnake.ext.commands.Context.send

unkempt canyonBOT
#
await send(content=None, *, tts=None, embed=None, embeds=None, file=None, files=None, stickers=None, delete_after=None, nonce=None, allowed_mentions=None, reference=None, ...)```
This function is a [*coroutine*](https://docs.python.org/3/library/asyncio-task.html#coroutine).

Sends a message to the destination with the content given.

The content must be a type that can convert to a string through `str(content)`. If the content is set to `None` (the default), then the `embed` parameter must be provided.

To upload a single file, the `file` parameter should be used with a single [`File`](https://docs.disnake.dev/en/latest/api.html#disnake.File "disnake.File") object. To upload multiple files, the `files` parameter should be used with a [`list`](https://docs.python.org/3/library/stdtypes.html#list "(in Python v3.10)") of [`File`](https://docs.disnake.dev/en/latest/api.html#disnake.File "disnake.File") objects. **Specifying both parameters will lead to an exception**.

To upload a single embed, the `embed` parameter should be used with a single [`Embed`](https://docs.disnake.dev/en/latest/api.html#disnake.Embed "disnake.Embed") object. To upload multiple embeds, the `embeds` parameter should be used with a [`list`](https://docs.python.org/3/library/stdtypes.html#list "(in Python v3.10)") of [`Embed`](https://docs.disnake.dev/en/latest/api.html#disnake.Embed "disnake.Embed") objects. **Specifying both parameters will lead to an exception**.
heavy folio
#

and pass in a disnake.ui.View object into the view kwarg in send()

#

too much for you? check out examples in the github repo

junior terrace
#

hey i'm struggling to add a reaction to a message, but i can't, i need to add this original emoji πŸ‘‹ and i can't find the ID

heavy folio
#

!d discord.Message.add_reaction

unkempt canyonBOT
#

await add_reaction(emoji)```
This function is a [*coroutine*](https://docs.python.org/3/library/asyncio-task.html#coroutine).

Add a reaction to the message.

The emoji may be a unicode emoji or a custom guild [`Emoji`](https://discordpy.readthedocs.io/en/master/api.html#discord.Emoji "discord.Emoji").

You must have the [`read_message_history`](https://discordpy.readthedocs.io/en/master/api.html#discord.Permissions.read_message_history "discord.Permissions.read_message_history") permission to use this. If nobody else has reacted to the message using this emoji, the [`add_reactions`](https://discordpy.readthedocs.io/en/master/api.html#discord.Permissions.add_reactions "discord.Permissions.add_reactions") permission is required.
vale cedar
#

Hey how to get messages from user in DM channel of bot?

junior terrace
#

i can insert just the emoji?

heavy folio
#

!d discord.DMChannel.history

unkempt canyonBOT
#

async for ... in history(*, limit=100, before=None, after=None, around=None, oldest_first=None)```
Returns an [`AsyncIterator`](https://discordpy.readthedocs.io/en/master/api.html#discord.AsyncIterator "discord.AsyncIterator") that enables receiving the destination’s message history.

You must have [`read_message_history`](https://discordpy.readthedocs.io/en/master/api.html#discord.Permissions.read_message_history "discord.Permissions.read_message_history") permissions to use this.

Examples

Usage...
heavy folio
vale cedar
maiden fable
cloud dawn
heavy folio
#

correct me if im wrong

slate swan
unkempt canyonBOT
#

property dm_channel: Optional[DMChannel]```
Returns the channel associated with this user if it exists.

If this returns `None`, you can create a DM channel by calling the [`create_dm()`](https://discordpy.readthedocs.io/en/master/api.html#discord.User.create_dm "discord.User.create_dm") coroutine function.
heavy folio
cloud dawn
#

May i ask why you even need to previous sended messages from a dm?

heavy folio
#

why not

vale cedar
#

can u give me a github for an example :( I'm just start learn py

heavy folio
slim ibex
vale cedar
slim ibex
#

something not a discord bot

cloud dawn
#

tic tac toe in console

slim ibex
#

yea some consople app

cloud dawn
#

But.. discord bot is also a console app ;-;

slim ibex
cloud dawn
slim ibex
#

clever

cloud dawn
#

:3

slim ibex
#

gotta abandon rider for vs 2022 ):

cloud dawn
#

@slim ibex sooo... dsharp huh

slim ibex
#

dsharp++

#

idk about discord bot in c# LOL

cloud dawn
#

Imagine dsharp+++ coming out

slim ibex
#

imagine c+++

cloud dawn
#

😳

#

intel be like

#

i won

slim ibex
#

amd > intel

#

new intel CPUs cant even handle 4k DVD LMAO

cloud dawn
#

Can't deny the 7nm+++++++++++ though

slim ibex
#

each plus adds 1 nm

cloud dawn
#

πŸ˜‚

slim ibex
#

cuz they can't seem to get under 14nm

cloud dawn
#

I got amd dw

#

2600x still going strong :3

slim ibex
#

i got 3700x

maiden fable
#

!ot exists

unkempt canyonBOT
slim ibex
#

was tryna get a 5600x when building but yk how that goes

#

ok on topic

maiden fable
#

Okay lets go there and I'll brag about my super computer

cloud dawn
#

I run my Discord bot in 1440p so it doesn't really matter.

slim ibex
#

so uh who wants to make a discord api wrapper

cloud dawn
waxen granite
#
    def getPlayerListEmbed(self):
        try:
            embed = discord.Embed(
            title=self.name, description=f"**Server IP:** {self.address}:{self.port}\n**Total Players:** {self.players}", color=0xfbb92c, url=self.url)
        except HTTPException:
            embed = discord.Embed(
            title=self.name, description=f"**Server IP:** {self.address}:{self.port}\n**Total Players:** {self.players}", color=0xfbb92c)   
        for index, playerList in enumerate(self.getFormattedPlayerList()):
            embed.add_field(
                name=f"Player List {index+1}", value=playerList, inline=False)
        embed.set_footer(text="Note: Only 10 names are supported per list.")
        return embed```
```py
    @commands.command(help="List players in the servers.", aliases=['lp'])
    async def listplayers(self, ctx: commands.Context, index: int):
        try:
            server = self.serverList[str(ctx.guild.id)][index-1]
        except IndexError:
            return await ctx.send(f"There is no index `{index}` in my storage.")
        except KeyError:
            return await ctx.send("`No servers have been added for this guild.`")
        sampinfo = SAMPInfo(server['address'], server['port'])
        if not(sampinfo.connected):
            return await ctx.send(f"Looks like the server is not online right now.\nIf the server is online on your side, please use `{self.bot.command_prefix}reportissue` for us to fix the issue.")
        playerlist_embed = sampinfo.getPlayerListEmbed()
        playerlist_embed.set_author(
            name="MecHaNiC SA-MP Info", icon_url=self.bot.user.avatar_url)
        await ctx.send(embed=playerlist_embed)```
#
In embed.url: Not a well formed URL.
#

whats wrong?

#

i did gave it an exception response

vale cedar
#

Can discord bot.py create a temporary server?

waxen granite
#

nope

cloud dawn
cloud dawn
#

!d disnake.ext.commands.Bot.create_guild

unkempt canyonBOT
#

await create_guild(*, name, region=<VoiceRegion.us_west: 'us-west'>, icon=..., code=...)```
This function is a [*coroutine*](https://docs.python.org/3/library/asyncio-task.html#coroutine).

Creates a [`Guild`](https://docs.disnake.dev/en/latest/api.html#disnake.Guild "disnake.Guild").

Bot accounts in more than 10 guilds are not allowed to create guilds.
waxen granite
# cloud dawn You got the full traceback?
  File "C:\Users\Endomorph\AppData\Local\Programs\Python\Python39\lib\site-packages\discord\ext\commands\core.py", line 85, in wrapped
    ret = await coro(*args, **kwargs)
  File "D:\Discord Bot\GitHub\asdf\cogs\samp.py", line 197, in listplayers
    await ctx.send(embed=playerlist_embed)
  File "C:\Users\Endomorph\AppData\Local\Programs\Python\Python39\lib\site-packages\discord\abc.py", line 1065, in send
    data = await state.http.send_message(channel.id, content, tts=tts, embed=embed,
  File "C:\Users\Endomorph\AppData\Local\Programs\Python\Python39\lib\site-packages\discord\http.py", line 254, in request
    raise HTTPException(r, data)
discord.errors.HTTPException: 400 Bad Request (error code: 50035): Invalid Form Body
In embed.url: Not a well formed URL.
slim ibex
#

You are excepting HTTPException in the try except block and it raises the http error and stops the program

cloud dawn
slim ibex
#

oh

cloud dawn
#
  File "D:\Discord Bot\GitHub\asdf\cogs\samp.py", line 197, in listplayers
    await ctx.send(embed=playerlist_embed)`
slim ibex
#

can you set an embed to a function like he did?

waxen granite
slim ibex
#

what

#

oh ok LMAO

obsidian ledge
#

can u ping someone in like a embed title

slim ibex
#

yes

spring flax
#

it'll show as <@userID>; it won't be embedded/show as pinged

cloud dawn
waxen granite
cloud dawn
waxen granite
#

yes

cloud dawn
#

Cause as for as i see there aren't any other URL's

honest vessel
#

show playerlist_embed

cloud dawn
waxen granite
#

it doe

#

doesbut for not that one server since the url is invaild one

cloud dawn
#

Yeah prob self.url dunno what that is.

waxen granite
#

yea

#

that why i added an except

cloud dawn
#

Best to check if it is defined or not than an exception.

#

Since it doesn't raise the exception there, it only gives an error when you try to send it.

waxen granite
#

yeah

honest vessel
#

invalid form body

waxen granite
honest vessel
#

means usaly ur embed is fucked

#

like if u try put url for icon or stuffs but url not found i think

cloud dawn
cloud dawn
honest vessel
#

@waxen granite show the embed itself

#

ye n put if statement

honest vessel
#

nvrm just check url with if statement

waxen granite
#

how do we write for invalid formats?

cloud dawn
#

Check if it is true

honest vessel
#

if url:
...

waxen granite
#
    def getPlayerListEmbed(self):
        if self.url is True:
            embed = discord.Embed(
                title=self.name, description=f"**Server IP:** {self.address}:{self.port}\n**Total Players:** {self.players}", color=0xfbb92c, url=self.url)
        else:
            embed = discord.Embed(
            title=self.name, description=f"**Server IP:** {self.address}:{self.port}\n**Total Players:** {self.players}", color=0xfbb92c)  ```
okay?
honest vessel
#

ye

waxen granite
#

now it doesnt enbed the url for any server

honest vessel
#

if self.url:

slate swan
honest vessel
#

format i think

quick gust
waxen granite
# honest vessel if self.url:

the error is back
discord.ext.commands.errors.CommandInvokeError: Command raised an exception: HTTPException: 400 Bad Request (error code: 50035): Invalid Form Body In embed.url: Not a well formed URL.

quick gust
honest vessel
#

its so u can use variable in {} brackets

slate swan
#

hmm

honest vessel
#

ah fstrings

quick gust
#

aka format-strings

honest vessel
#

@quick gust try .. if self.url != "":

cloud dawn
#

!f-strings

unkempt canyonBOT
#

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.

honest vessel
#

it will check if url is empty string

waxen granite
#

@honest vesseldid you meant me to try it?

honest vessel
#

ye

waxen granite
#

well same error still occurs

honest vessel
#

print(self.url) n look at it

quick gust
waxen granite
honest vessel
#

well there u have issue

waxen granite
#

that i already told :3

honest vessel
#

it makes u think an url is always set

#

then u might need to have regexp to check if valid url aka domain.tdl

waxen granite
#

how do i do that?

honest vessel
#

stuff like this

cloud dawn
honest vessel
#

@cloud dawn urls does but not domains

waxen granite
cloud dawn
waxen granite
#

since that is an invalid url it should just not send the url in the title

honest vessel
#

@cloud dawn they do but they are in hex

#

%20

honest vessel
#

@waxen granite anotherway can be grab the error n respond with telling em they need a valid url or blank

waxen granite
#

i could but what i want to remove the url if its a n invalid one and dont embed it.

honest vessel
#

or u remove url=

#

and just add link in embed

#

description

potent spear
#

also, the only thing you have to add if it's a valid URL is embed.url = self.url
you don't have to recreate the whole embed again lol

honest vessel
#

^

potent spear
#

you have 2 things to do when checking a url

  1. if it's valid (can be done via regex)
  2. try a simple request to it, if the response code is something in 2xx (like 204 or whatever), then you know the url is actually accessible
honest vessel
#

just check if 200

#

then it responded

potent spear
#

Successful responses go from ( 200 – 299 )

waxen granite
potent spear
honest vessel
#

@potent spear if use requests it can be used to fish his bot ip

#

so regex prob best

#

just find someones regex pattern to use

potent spear
#

this is the regex for a VALID link
URL_REG = re.compile(r'https?://(?:www\.)?.+')
if you know how to work with regex, you know what to do with this info

honest vessel
#

thats prob enough for him

#

not optimal for better accurate

cloud dawn
potent spear
#

that's not a link

cloud dawn
#

My browser says it's pretty valid.

honest vessel
#

kek

#

but he can google n find more complex regex

potent spear
#

anyways, which websites would anyone link that aren't secure?

honest vessel
#

that would allow more shapes, http https or only www. or only google.com

cloud dawn
#
url_regex = re.compile("http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+")
potent spear
#

like, if it's http:// I'd think it could be sus

honest vessel
#

@potent spear its samp servers prob old or run by noobs

cloud dawn
#

get vaccinated nice one google

potent spear
potent spear
#

no-one types a link lol

cloud dawn
#

:(

honest vessel
#

old websites can still use http

potent spear
#

yeah, we don't know why he needs it, so idk what to do with http or https

honest vessel
#

or small community pages like gameserver n admin not so technical in setup https

cloud dawn
#

Some sites don't even need an https connection it's just marketing.

slate swan
#

yo how do i add a category and description to my command @bot.command(aliases=["es"])

honest vessel
#

well thats wat https was made for

cloud dawn
slate swan
#

kk

#

ty

honest vessel
#

nword

slate swan
#

?

#

im black

cloud dawn
#

Let's keep it appropriate here.

honest vessel
#

in ur ctx.reply

slate swan
#

sorry

#

so how can i add the category

#

@cloud dawn

#

its group

honest vessel
#

you mean group?

slate swan
#

its not cogs

slate swan
#

i think so

honest vessel
#

!d discord.ext.commands.group

unkempt canyonBOT
#

@discord.ext.commands.group(name=..., cls=..., **attrs)```
A decorator that transforms a function into a [`Group`](https://discordpy.readthedocs.io/en/master/ext/commands/api.html#discord.ext.commands.Group "discord.ext.commands.Group").

This is similar to the [`command()`](https://discordpy.readthedocs.io/en/master/ext/commands/api.html#discord.ext.commands.command "discord.ext.commands.command") decorator but the `cls` parameter is set to [`Group`](https://discordpy.readthedocs.io/en/master/ext/commands/api.html#discord.ext.commands.Group "discord.ext.commands.Group") by default.

Changed in version 1.1: The `cls` parameter can now be passed.
slate swan
#

oh mt lordy lord

#

ty so much

#

uhh which one do i choose

#

...

cloud dawn
slate swan
#

.

honest vessel
#

u mostly want name, description, aliases

slate swan
#

kk

#

wht about category

#

brb

honest vessel
#

the group is a category

slate swan
#

ok im back

honest vessel
#

u can add sub commands to it

slate swan
pine crown
#

why cant i use discord_buttons import?

cloud dawn
slate swan
#

..

cloud dawn
cloud dawn
pine crown
slate swan
waxen granite
#

do i need to use .format to compare the self.url and regex?

pine crown
honest vessel
#

no

slate swan
#
@bot.command(aliases=["es"], description="Edit Snipes a message", usage=f"{prefix}editsnipe", group="General")
cloud dawn
slate swan
#

bruh

cloud dawn
slate swan
cloud dawn
waxen granite
#

confusing :3

slate swan
#

how do i make it not display that es

@bot.command(aliases=["es"], description="Edit Snipes a message", usage="editsnipe", group="General")
#

?how do i make it not show es .. ?

cloud dawn
#

!d discord.ext.commands.Command.aliases

unkempt canyonBOT
cloud dawn
#

Is this the default help cmd?

pine crown
#

how to create embeds that has buttons on the bottom

cloud dawn
#

!d disnake.ui.View

unkempt canyonBOT
#

class disnake.ui.View(*, timeout=180.0)```
Represents a UI view.

This object must be inherited to create a UI within Discord.

New in version 2.0.
fluid spindle
#

Um... I think Discord just temporarily banned my bot. Does anyone know how long this lasts?

waxen granite
#

@cloud dawn
url_regex = re.compile("http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+") url1 = url_regex.search(self.url)
like this?

maiden fable
#

replit

fluid spindle
#

I had written a purge command recently. Could this have been the reason?

slate swan
#

ok im back

slate swan
potent spear
waxen granite
# cloud dawn Yep.

discord.ext.commands.errors.CommandInvokeError: Command raised an exception: HTTPException: 400 Bad Request (error code: 50035): Invalid Form Body In embed.url: Scheme "<re.match object; span=(0, 19), match='https" is not supported. Scheme must be one of ('http', 'https').

fluid spindle
cloud dawn
maiden fable
#

@cloud dawn did u know there's a cooldown kwarg in command deco now?

waxen granite
slate swan
fluid spindle
cloud dawn
cloud dawn
#

!d disnake.ext.commands.Command

unkempt canyonBOT
#

class disnake.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.
slate swan
fluid spindle
maiden fable
# cloud dawn In disnake?

So now we can do

basic_cd = commands.CooldownMapping... 
@bot.command(cooldown=basic_cd) 
async def cmd(ctx):
    . . . 
@bot.command(cooldown=basic_cd) 
async def cmd2(ctx):
    . . . 
slate swan
#
- They use a shared IP for everything running on the service.
This one is important - if someone is running a user bot on their service and gets banned, everyone on that IP will be banned. Including you.
waxen granite
potent spear
maiden fable
#

Sarthak betrayed me AP_catCrying

slate swan
maiden fable
cloud dawn
maiden fable
#

Like https://google.com, not google.com

slate swan
cloud dawn
#

||so are you||

maiden fable
slate swan
#

i mean , check the cache impl

fluid spindle
potent spear
maiden fable
potent spear
#

that's why people have cooldowns etc

maiden fable
cloud dawn
maiden fable
#

Nou

slate swan
#

more like im being codefeeded by lucas' hikari tutorials

#

so am moving to it

sage otter
#

why are you watching Lucas

fluid spindle
slate swan
#

cause loops are cool

cloud dawn
#

Isn't hikari bascially almost the same layout.

sage otter
#

No

potent spear
sage otter
#

It’s definitely not

slate swan
sage otter
#

Hikari lacks all the abstractions that dpy has..

waxen granite
cloud dawn
fluid spindle
cloud dawn
spring flax
#

What's good about hikari?

potent spear
cloud dawn
#

I'm implying to printing data.

maiden fable
waxen granite
maiden fable
fluid spindle
slate swan
sage otter
slate swan
#

can someone help me!!

potent spear
spring flax
#

He was joking lol