#discord-bots

1 messages · Page 825 of 1

serene mantle
#

are you looking to code a bot yourself ?

serene lynx
maiden fable
serene lynx
maiden fable
#

......?

slate swan
#

Is that manjaro?

serene lynx
serene lynx
serene lynx
serene lynx
#

okey

steady berry
serene lynx
small igloo
#
ModuleNotFoundError: No module named 'dungeon'

and dungeon is da naem of file

small igloo
cloud bison
#

my bot wont be online on the discord but the Consol says its online

Why does this happen?

slate swan
#

those your on_ready event get triggered?

boreal ravine
#

those

boreal ravine
small igloo
boreal ravine
#

ok

cloud bison
slate swan
#

lol

tacit token
#

Guys, this code jst send "pepe", anybody idea?

@client.command()
async def emoji(ctx):
    await ctx.send(str(":pepe:"))
tacit token
slate swan
tacit token
#

idk i found it in stackowerflow

#

but if i delete its not work again

#

and send :pepe:

slate swan
#

well is pepe an emoji?

tacit token
#

yeah pepe emoji in my server

slate swan
#

!d discord.Client.get_emoji

unkempt canyonBOT
slate swan
#

just get the emoji with the id and send it

tacit token
#

ok i try it

tacit token
#

This command send:None

slate swan
#

guess it couldnt found it and no need for that f string

tacit token
#

so its work if the bot in the server where from the emoji, but if i try it in another server print None

nimble plume
#

!d

unkempt canyonBOT
boreal ravine
#

#bot-commands

cedar talon
#

!resources

unkempt canyonBOT
#
Resources

The Resources page on our website contains a list of hand-selected learning resources that we regularly recommend to both beginners and experts.

boreal ravine
#

go to #bot-commands please

cedar talon
#

Oopsie ya I better go

tardy atlas
#

Please help me with my code.
Why the command does not work, it worked for several days, now it doesn’t, there are no errors in the console

@bot.event
async def on_member_update(before, after):
    entry = list(await after.guild.audit_logs(limit=1).flatten())[0]
    user = entry.user
    if after.bot:
        return 
    if before.display_name != after.display_name:
        channel = bot.get_channel(935160414965211179)
        emb=discord.Embed(title="Изменение ника", description="**__Информация:__**", color=discord.Color.from_rgb(255, 128, 0))  
        emb.set_footer(text="© Все права защищены The Greatest", icon_url=before.avatar_url)
        emb.set_thumbnail(url = before.avatar_url)
        emb.add_field(name="**Пользователь ника:**", value=f"**{before.name}**", inline=False)
        emb.add_field(name="**Ник до Изменений:**", value=f"`{before.display_name}`", inline=False)
        emb.add_field(name="**Ник после Изменений:**", value=f"`{after.display_name}`", inline=False)
        emb.add_field(name="**Сменил:**", value=f"**{user}**", inline=False)
        await channel.send(embed=emb) 
pliant gulch
tardy atlas
#

Intents enabled

nimble plume
#

im confuse how to create help command

#

dont give !d help command it didnt help

placid skiff
oblique adder
#

How do I check if the bot is in the same voice channel as the ctx.author ?

slim ibex
#

author of what

oblique adder
hoary cargo
slim ibex
stray solar
#

Hello im back for dumb question bcs im dumb ???

slim ibex
#

doesn't seem like this is an easy one to do. maybe it is but i have never done anything with voice channels

stray solar
#

So how can i process a on_message by a command ?

oblique adder
pliant gulch
#

!d discord.VoiceChannel.members

unkempt canyonBOT
pliant gulch
#

Check if ctx.author is in this list

stray solar
#

I mean when i do a specific command, a specific on_message are working

oblique adder
#

can't I compare if ctx.author.voice_channel == self.bot.voice_channel something ?

#

I just dont remember how to write the self.bot.voice_channel

#

.me.voice.

pliant gulch
#

There is no such thing as Member.voice_channel

oblique adder
#

ctx.author.voice.channel

pliant gulch
#

Yea, that would be it

#

Then for the bot, as you said earlier you'd use Guild.me

oblique adder
#

I think i got it now if ctx.author.voice.channel == ctx.guild.me.voice.channel

#

right ?

pliant gulch
#

is not ==

oblique adder
#

if not ctx.author.voice.channel is None and ctx.author.voice.channel is ctx.guild.me.voice.channel:
like this ?

pliant gulch
#

Well, sure. But the better option would be ensuring ctx.author.voice is not None

#

As it can be None when the user doesn't have a voice state

#

E.g when they aren't in a channel, etc for voice

oblique adder
#

if not ctx.author.voice.channel is None doesn't this check if ctx.author.voice is None or not ?

pliant gulch
#

Well, no

#

You're checking an attribute of it

#

If ctx.author.voice is None you'd get an error

oblique adder
#

oh ok

pliant gulch
#

Also try to use if ctx.author.voice is not None to be a bit more conventional

#

Rather than if not ctx.author.voice is None

oblique adder
#

if not interaction.user.voice is None and interaction.user.voice.channel is interaction.guild.me.voice.channel:

pliant gulch
#

Yea, getting closer. But also guild.me.voice can be None as well

oblique adder
#

its ok I check it before this

#

I check if bot is connected first then this

pliant gulch
#

Ok then you're pretty much set

oblique adder
#

thank you. you are very helpful !

stray solar
#

So i maked a on_message but i wanted he start after this: if message.content.startswith('çvoid'):

stray solar
#

So its work, but only for 'çvoid'

slate swan
stray solar
#

SO, its just trigger 'çvoid'

#

And thats it idk why

slate swan
#

Yeah, it should work

stray solar
#

And other command not working

#

'-'

slate swan
#

Did you add the process_commands coroutine in on_messagd?

stray solar
#

Yep

#

At the end

slate swan
#

I see, can you show your on_message event

stray solar
#

Uhhhh

#

Come DM its confidential xddd

#

I mean, i dont want to show some things..

#

Wait imma add u, on my main account imma show u first the command

#

(my name is void)

#

Ah u didnt open ur request..

maiden fable
#

👀

#

@pliant gulch added modals or procrastinating?

stray solar
#

ok nvm i got an idea

pliant gulch
#

Rewriting all models I had

#

Here’s the user rewrite

maiden fable
#

breaking changes, huh

pliant gulch
#

Also did message model

#

Looking beefy as hell

maiden fable
#

Oh cool

pliant gulch
maiden fable
#

Okay thanks I don't understand shit

pliant gulch
#

The base model is at least more understandable now compared to the old one

#

I still need to fix the property annotation

#

They don’t work with union pipes

final iron
#

When are you going to create docs?

#

👀

pliant gulch
#

I have them up already

maiden fable
#

People can easily figure out stuff from docstrings and their IDE hehe

final iron
#

Not all the time

maiden fable
#

Docs are overrated

final iron
#

No

#

😔

maiden fable
#

Ayo BTW Gazes

#

u didn't go out today?

final iron
#

I only woke up an hour ago

maiden fable
#

Lmao

final iron
#

I have school soon

maiden fable
#

Okay

next snow
final iron
#

Read your code over

#

Do you see anything wrong with it?

next snow
#

What are those?

final iron
#

Specifically the line that's erroring

next snow
#

@final iron

final iron
#

What are what

slate swan
#

discord_slash....

slate swan
# next snow

You need to install libraries, they arent gonna pop out from air

pliant gulch
#

Right, speech

next snow
#

how the hell do i?

slate swan
#

!pypi discord

unkempt canyonBOT
slate swan
#

Look at pypi

#

Use pip install *library name mentioned in docs*

#

that's not the problem xd

slate swan
#

m discord.ext import commands

slate swan
slate swan
slate swan
maiden fable
#

Lmao

#

u back already?

slate swan
unkempt canyonBOT
slate swan
#

I didn't go anywhere

slate swan
maiden fable
#

Lmao

next snow
#

@slate swan

slate swan
#

@next snow

next snow
#

how do i?

slate swan
#

Ask God, aka @slate swan

#

uh

maiden fable
#

And u r fine lmao

#

and yes, learn basic Python

slate swan
next snow
#

done.

slim ibex
#

the amount of people doing discord bots before learning python haunts me

slate swan
#

discord_slash

next snow
#

now what?

slate swan
#

and install discord_slash if already didnt now, or Ash will kill me

maiden fable
slate swan
maiden fable
#

!ot

unkempt canyonBOT
slate swan
maiden fable
#

Anyways

slate swan
#

hunter the saviour

maiden fable
slate swan
#

Hrh

maiden fable
#

Rip, cooldown goes brrr

slate swan
#

even the bot ignores u hunter, get some help.

#

Lol

maiden fable
slate swan
unkempt canyonBOT
maiden fable
slate swan
#

hey can anyone see whats wrongs in this code

next snow
#

so what should i do?

fast vortex
slate swan
#

f i totally missed that

maiden fable
#

@client.command

#

Rip my internet ;-;

slate swan
next snow
#

where?

maiden fable
#

Lmao

slate swan
#

Command prompt

next snow
#

in terminal?

#

what is vsc?

maiden fable
#

Yea

#

🤣

slate swan
#

Lol

#

!pypi discord-py-slash-command

unkempt canyonBOT
slate swan
#

Who in the world names a library like that

#

Meee

maiden fable
slim ibex
bold helm
#

discord-py-slash-command

slate swan
next snow
#

@slate swan

#

i am too dumb

maiden fable
#

I totally haven't named a lib of mine as hunter's-totally-not-useless-lib-which-never-works

slate swan
#

Just don't use the library tbh, use a fork.

maiden fable
#

He in demand 👀

#

Use rin

slate swan
#

or my nickname is cool already

maiden fable
#

!pypi rin

unkempt canyonBOT
slate swan
#

!pip hikari

unkempt canyonBOT
slate swan
next snow
#

where do i do pip install discord_slash?

maiden fable
#

I'm out

slate swan
slate swan
shut axle
#

How should I find member's voice name?

next snow
#

Okay.

slate swan
shut axle
#

The name of the voice.

slate swan
slate swan
next snow
#

done.

#

now what?

slate swan
next snow
#

Okay.

slate swan
#

.

slim ibex
#

hey @next snow, i would prolly learn more python and about pip before continuing with the bot. it will do you good

next snow
#

i did not do the bot.

#

someone did.

slim ibex
#

are you like forking it or something?

next snow
#

he made the bot for me.

slate swan
slim ibex
#

oh

slim ibex
#

@slate swan give me a simple program to make in python. maybe computing some stuff

#

i already did a program that generates a random list of ints and computes the mean, median, mode and range

shut axle
#

For example there is a voice channel called: Voice ch #1
and I joined it. How can I find the voice name ?
For example:
!voice --> The member found in: Voice ch #1.

slate swan
slim ibex
#

🗿

slate swan
slim ibex
#

yes

#

heres my little program btw

slate swan
slim ibex
unkempt canyonBOT
slate swan
#

Without learning python I directly jumped on a pre made discord bot and tried to understand the function of each line and in one week, I got the basics of python cleared!

slim ibex
#

🗿

#

how dare you OT the moai

shut axle
slate swan
#

will return the name

#

of the voice channel

maiden fable
#

!d statistics

unkempt canyonBOT
#

New in version 3.4.

Source code: Lib/statistics.py

This module provides functions for calculating mathematical statistics of numeric (Real-valued) data.

The module is not intended to be a competitor to third-party libraries such as NumPy, SciPy, or proprietary full-featured statistics packages aimed at professional statisticians such as Minitab, SAS and Matlab. It is aimed at the level of graphing and scientific calculators.

slim ibex
#

but thats boring having premade functions

#

wanted to do it myself

maiden fable
#

Then I got a program for u

slate swan
maiden fable
#

Make a script to find the largest and the second largest number from the list WITHOUT using the max function

maiden fable
slate swan
#

how do i add slash commands in cogs

maiden fable
#

Which lib

slim ibex
unkempt canyonBOT
#

computing_statistics.py line 93

for integer in int_list:```
maiden fable
maiden fable
slate swan
#

!ot

unkempt canyonBOT
slate swan
maiden fable
#

Now I regret coming here

final iron
#

What happened

#

😔

maiden fable
#

Ezzz

slate swan
#

`msg' is undefined.

maiden fable
#

Just saw lol

slate swan
final iron
slate swan
#

It's a constant 😌

maiden fable
#

@maiden fable is undefined

final iron
#

What is a constant

slate swan
maiden fable
#

U know that he's trolling, right?

slate swan
slate swan
#

thats why I replied stupid pithink

#

btw

#

!ot

unkempt canyonBOT
final iron
#

😔

maiden fable
#

!ot

slate swan
#

rushes behind God Hunter

slim ibex
#

ok ill go to another channel for further discussion about computation

slate swan
#

the commands work but this worming message shows up
im using simple slash command

maiden fable
#

Weird

slate swan
#

i get the same problem, is not only you, discord made a new update i think

lament mesa
# slate swan

Looks like you haven't supplied a description for your dropdown option

slate swan
lament mesa
#

maybe a dropdown from another command

slate swan
#

it don't give error when i use full on option

#

like this

cedar stream
cedar stream
slate swan
#

pip install -U disnake

#

i was already on 2.3

#

Do it.

#

i did that

#

now 2.3.2

#

And now it works :)

#

^^^

#

ohh

shut axle
#
@client.command()
async def voice(ctx, *, member: discord.Member): 
    if ctx.member.mention is None:
        await ctx.reply("**❌ You have to mention a member!**")
    if ctx.member.voice is None:
        await ctx.reply("**❌ The user has not connected to VoiceChannel!**")
    vc = ctx.member.voice.channel.name
    await ctx.send(f"User is in: `{vc}`.")

❌ Member is a required argument that is missing.

quick gust
#

u need to give a member while invoking the command

#

you forgot your own code

shut axle
#

what do you mean? @quick gust

buoyant quail
#

you must invoke it like !voice @xZap

shut axle
#

discord.ext.commands.errors.CommandInvokeError: Command raised an exception: AttributeError: 'Context' object has no attribute 'member'

#

@buoyant quail look

final iron
#

It doesn't have a member attribute

#

!d discord.ext.commands.Context

unkempt canyonBOT
#
class discord.ext.commands.Context(*, message, bot, view, args=..., kwargs=..., prefix=None, command=None, invoked_with=None, invoked_parents=..., invoked_subcommand=None, ...)```
Represents the context in which a command is being invoked under.

This class contains a lot of meta data to help you understand more about the invocation context. This class is not created manually and is instead passed around to commands as the first parameter.

This class implements the [`Messageable`](https://discordpy.readthedocs.io/en/master/api.html#discord.abc.Messageable "discord.abc.Messageable") ABC.
final iron
#

You can check all the available attributes here

#

Just post what you need here

#

Sure?

shut axle
#

@final ironI did ctx.author.voice.channel.name but what if I want to do it on other members? not only me..

final iron
#

Then you would do the same thing?

#

You just need a member object

quaint epoch
#

lmao

final iron
#

It's camelCase

quaint epoch
#

i know that isn't camelCase

#

lol imagine normal non-programmer people with actual lives, reading this chat about us arguing over camelCase and CamelCase, when the correct punctuation is Camel case

final iron
#

CamelCase is actually PascalCase when written in this form

quaint epoch
#

well, they wouldn't be able to spell it as Camel case bc they are not pro-grammers

final iron
quaint epoch
#

get it? pro and grammer?

sick birch
#

Please leave 😂

hoary cargo
final iron
#

Slash commands are these very weird but powerful things

slate swan
shut axle
#

@final iron Like that: ctx.member.voice.channel.name

#

?

final iron
maiden fable
#

U mean ctx.author

shut axle
#

ctx.author is for the author. I want it for the member that i'll mention.

nimble plume
#

How to get voice channel by name

hoary cargo
nimble plume
slate swan
slate swan
#

getting a channel named something?

nimble plume
#

Yes

slate swan
#

!d discord.utils.get use this with Guild.voice_channels

unkempt canyonBOT
#

discord.utils.get(iterable, **attrs)```
A helper that returns the first element in the iterable that meets all the traits passed in `attrs`. This is an alternative for [`find()`](https://discordpy.readthedocs.io/en/master/api.html#discord.utils.find "discord.utils.find").

When multiple attributes are specified, they are checked using logical AND, not logical OR. Meaning they have to meet every attribute passed in and not one of them.

To have a nested attribute search (i.e. search by `x.y`) then pass in `x__y` as the keyword argument.

If nothing is found that matches the attributes passed, then `None` is returned.

Examples

Basic usage...
nimble plume
#

iterable

#

Nvmd find it

final iron
#

Maybe I actually do know but just don't know it's called a constant

#

¯\_(ツ)_/¯

slate swan
final iron
#

Oh

#

Aight

#

They're named in SCREAMING_SNAKE_CASE correct?

hoary cargo
#

a constant it's pretty self explanatory imo, does have a constant value, means it remains the same all time

final iron
#

Aight

#

I should go and change my code then

next snow
#

what is this?

final iron
#

Can you take a higher quality screenshot?

#

It's in like 480p

next snow
#

Okay

boreal ravine
#

async is a keyword now

next snow
#

What do you mean?

hoary cargo
#

what dpy ver you use

next snow
#

3.10.2

pine crypt
#

How would you find the description of a command in every cog?

quick gust
#

dpy version, not python

next snow
#

i dont know.

quick gust
pine crypt
#

ah okay

next snow
#

i dont know.

#

i dont anything.,

final iron
#

Then you shouldn't be making a discord bot. It's not even close to a good beginner project

quick gust
next snow
#

not me.

quick gust
#

ask them to fix the error

next snow
#

he is telling me to do it.

final iron
hoary cargo
final iron
#

Whoever you got to make a bot doesn't really know what they're doing

quick gust
next snow
#

Thank you.

#

i will beat him

quick gust
#

u can do cog = bot.get_cog("name")

final iron
#

!d discord.ext.commands.Bot.cogs

unkempt canyonBOT
pine crypt
slate swan
#

!d discord.ext.commands.Cog.walk_commands returns a list of all commands in the cog

unkempt canyonBOT
hoary cargo
#

why would you want to have the same description to all of your commands though

quick gust
pine crypt
#

i want to add all command descriptions to a value in an embed field

slate swan
#

you said command's description, and now cog descriptions?

hoary cargo
#

StareW it's one or another

quick gust
#

and also that was just an example to show u how it works

final iron
#

How do I make a cog description?

quick gust
#

u can use it however u want

pine crypt
slate swan
#

anyways Cog.description or Cog.__doc__ is the thing

#

eee

final iron
#

So is the only way to do it is to use doc strings?

slate swan
final iron
#

Yeah, so a doc string

hoary cargo
#

docstrings are nice

final iron
#

Somebody should make docs for their discord bot

#

On readthedocs

pine crypt
#

Would it be like:

for cog in walk_commands():
    #Find the cog description
slate swan
#
cog : Cog 
for command in cog.walk_commands():
  # do your stuff
``` this is the max i can tell.
pine crypt
#

ok

quick gust
#

firstly, async for. second it shouldcommand not cog, third it should be cog.walk_commands

slate swan
pine crypt
#

what does cog: Cog do?

slate swan
#

since cog.walk_commands() returns an iterable

quick gust
quick gust
slate swan
pine crypt
#

Cog is not defined

maiden fable
#

command.cog.walk_commands

pine crypt
#

ty

slate swan
#

is that a normal command?

#

not in cogs i mean.

#

yes

slate swan
#

also, you need to await ctx.send()

slate swan
slate swan
hoary cargo
slate swan
#

ah, you didnt provided an extension while using the command, <prefix>load <extension>

slate swan
# slate swan may i see the full code?
import disnake
from disnake.ext import commands


class Admin(commands.Cog):

    def __init__(self, client):
        self.client = client

    # load extension command
    @commands.command()
    async def load(self , ctx, extension):
        self.load_extension(f'cogs.{extension}')
        await ctx.send('Cogs loaded')

    # unload extension command
    @commands.command()
    async def unload(self, ctx, extension):
        self.unload_extension(f'cogs.{extension}')
        await ctx.send('Cogs unloaded')

    # reload extensions command
    @commands.command()
    async def reload(self, ctx, extension):
        self.unload_extension(f'cogs.{extension}')
        self.load_extension(f'cogs.{extension}')
        await ctx.send('Cogs reloaded')

def setup(client):
    client.add_cog(Admin(client))
#

will be the syntax

slate swan
#

while using the cmd on discord

hoary cargo
#

tbh, i would recommend using these commands in the main file not a cog

slate swan
#

i'd just use jishaku

#

and even if i made these commands, would use is_owner check

slate swan
slate swan
hoary cargo
slate swan
#

and same for all other load/unload

#
        self.unload_extension(f'cogs.{extension}')
        self.load_extension(f'cogs.{extension}')

#relace this with
self.client.reload_extension(...```
slate swan
hoary cargo
#
@client.slash_command(description='', guild_ids=[])
@commands.is_owner()
async def reload(inter, extension: str = commands.Param(choices=[''])):
    client.reload_extension(f'cogs.{extension}')
    await inter.response.send_message(f'Cog reloaded ! and can be used. ', ephemeral=True)

for me it's easier to use it like this Kek adding choices i save time from typing the cog name

shut axle
#

How do I check if the member is in the voice?

slate swan
#

🏃‍♂️ BotApp.load_extensions_from()

slate swan
unkempt canyonBOT
#

property voice: Optional[discord.member.VoiceState]```
Returns the member’s current voice state.
pine crypt
#
contents = [self.client.cogs]
pages = len(contents) / 4

This works but why the extra numbers / text and how to remove it?

#

I want contents to shall all names of my cogs

hoary cargo
#

extra numbers Kek

slate swan
# slate swan 🏃‍♂️ `BotApp.load_extensions_from()`
class Kakashi(BotApp):
    def __init__(self, token):
        super().__init__(
            token=token,
            intents=Intents.ALL,
            prefix=when_mentioned_or(PrefixHandler.prefix_getter),
            help_slash_command=True,
        )
        tasks.load(self)
        initialise_databases()
        self.boot_datetime = datetime.now()
        self.load_extensions("lightbulb.ext.filament.exts.superuser")
        self.load_extensions_from("kakashi/plugins")
``` totally not ez stuff
slate swan
pine crypt
#

didnt understand

slate swan
#

what part did you not understand? what a variable means? what a list means? or what a cog name means?

hoary cargo
pine crypt
#

would this work?

slate swan
#

the filament extension does the same stuff as the Admin cog there

#

why len?

hoary cargo
#

fair

pine crypt
#

because i want 4 commands per page

slate swan
#

you would have to use list slicing and stuff for that

#

not len

quaint epoch
#

so i keep getting this error ```Ignoring exception in on_command_error
Traceback (most recent call last):
File "C:\Users\shake\AppData\Local\Programs\Python\Python310\Lib\site-packages\disnake\client.py", line 515, in _run_event
await coro(*args, **kwargs)
File "C:\Users\shake\AppData\Local\Programs\Python\bot.py", line 1760, in on_command_error
await ctx.send(embed=embed)
File "C:\Users\shake\AppData\Local\Programs\Python\Python310\Lib\site-packages\disnake\abc.py", line 1438, in send
data = await state.http.send_message(
File "C:\Users\shake\AppData\Local\Programs\Python\Python310\Lib\site-packages\disnake\http.py", line 297, in request
kwargs["data"] = utils._to_json(kwargs.pop("json"))
File "C:\Users\shake\AppData\Local\Programs\Python\Python310\Lib\site-packages\disnake\utils.py", line 536, in to_json
return json.dumps(obj, separators=(",", ":"), ensure_ascii=True)
File "C:\Users\shake\AppData\Local\Programs\Python\Python310\Lib\json_init
.py", line 238, in dumps
**kw).encode(obj)
File "C:\Users\shake\AppData\Local\Programs\Python\Python310\Lib\json\encoder.py", line 199, in encode
chunks = self.iterencode(o, _one_shot=True)
File "C:\Users\shake\AppData\Local\Programs\Python\Python310\Lib\json\encoder.py", line 257, in iterencode
return _iterencode(o, 0)
File "C:\Users\shake\AppData\Local\Programs\Python\Python310\Lib\json\encoder.py", line 179, in default
raise TypeError(f'Object of type {o.class.name} '
TypeError: Object of type CommandInvokeError is not JSON serializable

pine crypt
quaint epoch
#

it says i tried to write an Error object into .json?

buoyant quail
quaint epoch
#

in fact, i was actually pulling data, not putting it

slate swan
#

and the json structure

hoary cargo
#

FeelsOldMan jsons are quite bad for storing stuff ngl

quaint epoch
#
@bot.command(aliases=('get_warns', 'pull_warns', 'warns'))
@commands.has_permissions(view_audit_log=True)
async def fetch_warns(ctx, member_id: int = None):
    with open('warns.json', 'r') as json_file:
        data = json.load(json_file)
    try:
        dictionary = data[str(ctx.guild.id)]
    except KeyError:
        await ctx.send(f'{ctx.author.mention} no warns from this server.')
        return
    else:
        if member_id is None:
            for member in dictionary.keys():
                with open('Warns.txt', 'a') as file:
                    file.writelines(f'{(await ctx.guild.fetch_member(int(member)))} has {dictionary[member]} warns.')
            file = discord.File(
            r'C:\Users\shake\AppData\Local\Programs\Python\Warns.txt')
            await ctx.author.send(content=f'{ctx.author.mention} warns from current bot session in **{ctx.guild}**:', file=file)
        else:
            try:
                await ctx.send(f'{ctx.author.mention}, {(await ctx.guild.fetch_member(dictionary[str(member_id)])).mention} has **{dictionary[str(member_id)]}** warns.')
            except KeyError:
                await ctx.send(f'{ctx.author.mention} there are no warns in this server for  {(await ctx.guild.fetch_member(int(member_id))).mention}.')``` json structure is ```json
{"guild_id": {"member_id": "number of warns for this member", "member_id": "number of warns for this member"}, "guild_id": {"member_id": "number of warns for this member", "member_id": "number of warns for this member"}}```
boreal ravine
#

ew json

hoary cargo
#

weirdkekw i used to store the guild ids and custom prefixes in a json, good now i switched to slash, i don't need to do that shit anymore

final iron
#

Just don't use json?

#

Json isn't meant to be used as a database, that's why it's so unfriendly for that purpose

#

Now if you used something like sqlite3, your life would of been much easier

#

Even with slash commands you would have to use a database

shut axle
unkempt canyonBOT
frozen elk
#

how to get a member with userID

final iron
#

!d discord.Guild.fetch_member

unkempt canyonBOT
#

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

Retrieves a [`Member`](https://discordpy.readthedocs.io/en/master/api.html#discord.Member "discord.Member") from a guild ID, and a member ID.

Note

This method is an API call. If you have [`Intents.members`](https://discordpy.readthedocs.io/en/master/api.html#discord.Intents.members "discord.Intents.members") and member cache enabled, consider [`get_member()`](https://discordpy.readthedocs.io/en/master/api.html#discord.Guild.get_member "discord.Guild.get_member") instead.
final iron
#

@frozen elk

shut axle
#

I do I get the member's category channel?
for example im in: Voice ch #1 in a category called: HANGOUT
and when I press the command I want to see: User in HANGOUT category!

hardy wing
#

is there like a list of websites you can use for bot API

hoary cargo
hardy wing
#

like a website that shows dog pictures for example

final iron
#

Prefix is not the only thing that gets stored

#

If it is, your bot is very small and has very little commands

hoary cargo
quaint epoch
#

wow, i just checked, my bot has 73 commands, not too shabby

final iron
unkempt canyonBOT
#

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.
final iron
#

Use len() on it to see how many you have

quaint epoch
#

print(len(bot.commands))

final iron
#

See, things like that makes dpy really interesting to me

#

Imo it's a really interesting and well developed library

#

But I've never dived in to the internals

#

So for all I know it's an absolute mess

quaint epoch
#

no

#

!d discord.Guild.get_channel

unkempt canyonBOT
#

get_channel(channel_id, /)```
Returns a channel with the given ID.

Note

This does *not* search for threads.
quaint epoch
#

how would you find a user in a category?

#

i mean you might be able to do that for a channel

shut axle
#

What do you mean?

timber crag
shut axle
#

to find member's voice i did: member.voice.channel.name what about category?

quaint epoch
#

what are you trying to find when you say category

shut axle
#

category name

quaint epoch
quaint epoch
timber crag
#

async def mute(self, ctx, member: discord.Member, time: int=0, *, reason="No reason given."):
im trying to convert the time based on what letter is that the end, (e.g d = days, m = mins, h = hours)

if "m" in time:
      time * 60
elif "h" in time:
      time * 3600
elif "d" in time:
      time * 86400
await asyncio.sleep(time)
quaint epoch
buoyant quail
rocky hornet
buoyant quail
#

time * 60, where is =

quaint epoch
#

send the whole command

timber crag
#

but thanks for trying to help, dick.

quaint epoch
#

did you try to use discord builtins timeout?

timber crag
# quaint epoch send the whole command
@commands.cooldown(1, 5, commands.BucketType.user)
  @commands.has_permissions(manage_messages=True, administrator=True, kick_members=True, ban_members=True)
  async def mute(self, ctx, member: discord.Member, time: int=0, *, reason="No reason given."):
    guild = ctx.guild
    mutedRole = discord.utils.get(guild.roles, name="Muted")

    if not mutedRole:
      mutedRole = await guild.create_role(name="Muted")

      for channel in guild.channels:
        await channel.set_permissions(mutedRole, speak=False, send_messages=False, read_message_history=True, read_messages=True)
    try:
      embed = discord.Embed(description=f"{member.mention} was muted.", colour=0xEC9D75)
      await ctx.send(embed=embed)
    except:
      await ctx.send("The member was muted. But please give me the embed links permission.")
    try:
      await member.add_roles(mutedRole, reason=reason)
    except:
      await ctx.send("I do not have the required permission to mute this member!")
    try:
      await member.send(f" You have been muted from: {guild.name} For: {reason}")
    except:
      await ctx.send("Member muted, I could NOT dm them the reason..")
    if "m" in time:
      time * 60
    elif "h" in time:
      time * 3600
    elif "d" in time:
      time * 86400
    await asyncio.sleep(time)
    await member.remove_roles(mutedRole, reason="User was unmuted | (Time finished)")
    embed = discord.Embed(description=f"Unmuted: {member.mention}",colour=discord.Color.random())
    embed.set_footer(text=f"Muted by {ctx.message.author}")
    await ctx.send(embed=embed)
rocky hornet
#

"5m" * 60 what will this produce?

quick gust
#

5m (string) 60 times

timber crag
timber crag
rocky hornet
quick gust
#

yeah

quaint epoch
rocky hornet
#

are you ok buddy?

quick gust
#

thats whats happening, u need to give it an int

quaint epoch
#

!d asyncio.sleep

unkempt canyonBOT
#

coroutine asyncio.sleep(delay, result=None)```
Block for *delay* seconds.

If *result* is provided, it is returned to the caller when the coroutine completes.

`sleep()` always suspends the current task, allowing other tasks to run.

Setting the delay to 0 provides an optimized path to allow other tasks to run. This can be used by long-running functions to avoid blocking the event loop for the full duration of the function call.

Deprecated since version 3.8, removed in version 3.10: The `loop` parameter. This function has been implicitly getting the current running loop since 3.7. See [What’s New in 3.10’s Removed section](https://docs.python.org/3/whatsnew/3.10.html#whatsnew310-removed) for more information.

Example of coroutine displaying the current date every second for 5 seconds:
quick gust
timber crag
quaint epoch
#

btw, the delay is in seconds

quaint epoch
quick gust
#

are you okay?

timber crag
rocky hornet
#

and then u proceed to multiply string

quaint epoch
quick gust
#

are u okay?

buoyant quail
timber crag
rocky hornet
quaint epoch
quick gust
#

"Enthusiast"

stone moon
#

how do i get the message link of a message like

"[see original message](#message link goes here)"

quaint epoch
#

so it won't work, you have to strip the string and convert it to an int

rocky hornet
#

oh i confused your names

timber crag
quick gust
#

thats literally not even my code for fucks sake

shut axle
#

HANGOUT
|
Voice Ch #1
|
xZap

!in_voice @xZap
Now it will show: The user is in: (HANGOUT) - Voice Ch #1
@quaint epoch

hasty axle
#

i had a question. So my friend made a custom gif and i want my bot to send it in an embed. can i use embed.set_image() here or am i supposed to do it some other way?

stone moon
quaint epoch
quaint epoch
rocky hornet
#

i dont think ints have such attribute

timber crag
shut axle
hasty axle
slate swan
#

\👍

quaint epoch
rocky hornet
#

my man didnt even try do debug

quaint epoch
#

!d discord.TextChannel.category

unkempt canyonBOT
#

property category: Optional[CategoryChannel]```
The category this channel belongs to.

If there is no category then this is `None`.
quaint epoch
#

same for discord.VoiceChannel

timber crag
quaint epoch
#

just check if it's NoneType and your good to go

shut axle
#

!d discord.VoiceChannel.category

unkempt canyonBOT
#

property category: Optional[CategoryChannel]```
The category this channel belongs to.

If there is no category then this is `None`.
rocky hornet
#

you seem ignorant

timber crag
buoyant quail
#

xd

timber crag
#

didnt seem like you saw it and immediately jumped to conclusion

slate swan
#

!d discord.ext.commands.command

rocky hornet
#

if you fail to spot this error immediately, this whole code is probably someone else's

slate swan
#

!d disnake.ext.commands.slash_command

rocky hornet
#

no other explanation

quaint epoch
#

!d disnake.ext.commands.slash_command

unkempt canyonBOT
#

@disnake.ext.commands.slash_command(*, name=None, description=None, options=None, default_permission=True, guild_ids=None, connectors=None, auto_sync=True, **kwargs)```
A decorator that builds a slash command.
quaint epoch
#

tf

#

btw dpy doesn't support slash commands

slate swan
#

disnake does

rocky hornet
slate swan
#

I was just checking if it contain dpy 2.0's data

rocky hornet
#

but yeah just use disnake or pycord

quaint epoch
timber crag
# rocky hornet

and..?

  1. you make assumptions that im stealing code
  2. you make assumptions about my experience
  3. you are assuming that im always looking at chat and not mentioning me so i can see it.
  4. you are calling me ignorant when i know it duplicates the string and you are telling me exactly what my question was.
  5. you gave no clear answers and confused me on what i was to do, while others just helped me and moved on
rocky hornet
#

pycord are the quickest to implement new features

quaint epoch
timber crag
#
  1. you literally gave me 1 - 2 answer sentences and you mention the wrong person who didnt even have a question then proceed to get mad at me calling me ignorant.
quaint epoch
timber crag
#
  1. you gave no clear answers.
slate swan
rocky hornet
quaint epoch
timber crag
slate swan
rocky hornet
desert badger
#

how do i set a letter limit for strings lol

@client.command()
async def thingy(ctx, lol : str = None [anything with a limit lol]):
quaint epoch
rocky hornet
slate swan
#

!d disnake.ui.Modal

unkempt canyonBOT
#

class disnake.ui.Modal(*, title, components, custom_id=..., timeout=600)```
Represents a UI Modal.

New in version 2.4.
timber crag
rocky hornet
quaint epoch
quaint epoch
rocky hornet
#

pycord have modals yes

slate swan
quaint epoch
#

woah, pycord beat disnake at one column

rocky hornet
quaint epoch
#

still not switching over though

slate swan
#

I'm not a fan of forks but I prefer Disnake

timber crag
#

aswell as immediately being toxic towards me after i was stuck on one error that i could not figure out (documentation did not have any answers, searched google, and came here completely last.) aswell as not giving me the easier approach of int(time) which i just figured out.

nimble plume
#

Dissnake == js??

quaint epoch
slate swan
#

!pip Disnake

unkempt canyonBOT
quaint epoch
nimble plume
#

I mean functionslity

timber crag
#

there is like 8 million different discord.py forks now

slate swan
#

No

pliant gulch
#

Oh yea I remember seeing one of the maintainers asking a discord developer for early access to modals and getting it

rocky hornet
#

not a fan of forks in general?

slate swan
#

yes.

pliant gulch
#

Yep

rocky hornet
slate swan
#

As any nickname suggests

timber crag
#

damn

nimble plume
slate swan
#

Why the command does not work, it worked for several days, now it doesn’t, there are no errors in the console

@bot.event
async def on_member_update(before, after):
    entry = list(await after.guild.audit_logs(limit=1).flatten())[0]
    user = entry.user
    if after.bot:
        return 
    if before.display_name != after.display_name:
        channel = bot.get_channel(935160414965211179)
        emb=discord.Embed(title="Изменение ника", description="**__Информация:__**", color=discord.Color.from_rgb(255, 128, 0))  
        emb.set_footer(text="© Все права защищены The Greatest", icon_url=before.avatar_url)
        emb.set_thumbnail(url = before.avatar_url)
        emb.add_field(name="**Пользователь ника:**", value=f"**{before.name}**", inline=False)
        emb.add_field(name="**Ник до Изменений:**", value=f"`{before.display_name}`", inline=False)
        emb.add_field(name="**Ник после Изменений:**", value=f"`{after.display_name}`", inline=False)
        emb.add_field(name="**Сменил:**", value=f"**{user}**", inline=False)
        await channel.send(embed=emb)  
quaint epoch
#

nice, i made a mod bot for my server with 1 person

#

:)

slate swan
#

Imma write a "why not use pycord" gist soon

quaint epoch
#

cough cough slash commands cough

timber crag
rocky hornet
#

damn what a miserable life you're living if you dont like forks

slate swan
#

Help

quaint epoch
#

and how did it change, and when

rocky hornet
#

for literally 0 reason probably

nimble plume
#

Is pycord has totally different from discord py

slate swan
timber crag
rocky hornet
quaint epoch
timber crag
rocky hornet
#

you dont even need to change your imports

timber crag
slate swan
#

What?

rocky hornet
#

but this is dpy's change not pycord's

slate swan
timber crag
#

im sticking with discord.py 2.0 until it doesnt work

nimble plume
#

Who

quaint epoch
#

k gotta get off my pc, it's break time

rocky hornet
quick gust
#

he was talking about dpy forks

rocky hornet
#

he said yes

quick gust
#

misunderstanding

#

probably

rocky hornet
slate swan
rocky hornet
#

yep

#

i agree on that

#

but why so against pycord in particular?

slate swan
#

Another thing I don't like about pycord is having so many devs but too slow in implementing stuff

rocky hornet
#

did disnake make dpy's master branch stable?

slate swan
#

A long time ago.

pliant gulch
#

Probably my main reason

rocky hornet
#

thats good

haughty quartz
#

how can I give a feedback when user input args are missing? What is the exeption

rocky hornet
#

what about nextcord

pliant gulch
#

I thought nextcord was from scratch, they changed to being a fork?

slate swan
#

Disnake on the other hand is maintained by our lovely Equenos , who developed dislash.py ( yes the library you used with discord.py to make slash commands)

quick gust
rocky hornet
#

i think it was

pliant gulch
#

Weird I have a specific memory of it being from scratch

slate swan
#

nextcord is a fork, I love their voice recieve feature ( which is still in beta ig?)

rocky hornet
#

wat

gaunt ice
#

i wanna make a starboard cmd but it aint working

rocky hornet
#

voice receive?

#

as in capture audio packets?

slate swan
#

voice packets from discord to the bot

quick gust
gaunt ice
#

okk waitt

rocky hornet
#

wow thats actually great

#

disnake dont have that?

pliant gulch
#

Capturing the UDP packets are easy, the hard part is decoding them

slate swan
#

not yet

gaunt ice
pliant gulch
#

Pycord also has voice receive, although they just stole the PR of voice receive from discord.py

quick gust
#

payLoad

gaunt ice
#

no error nothing

rocky hornet
#

pycord stole pr from discord.py RemThonk
isnt that what fork literally means KEKW

slate swan
pliant gulch
#

The PR wasn’t even pushed yet though, it would make sense if it was actually finalized

pliant gulch
gaunt ice
pliant gulch
#

Well, mostly I think?

#

I’ll be doing more of the models today later

slate swan
#

mhm I'll assume that for someone who typehint a lot of stuff yes , me

pliant gulch
#

Oh right, the base models property decorator isn’t typehinted correctly

#

It won’t work for complex types like Generics, Union pipes

#

Well, some generics are supported. Only the builtins

gaunt ice
#

cmon

#

someone help me

#

am a newbie

rocky hornet
#

message was deleted when the event arrived to u

gaunt ice
#

it wasnt deleted

#

how tho

rocky hornet
#

404 Not Found - Unknown Message

#

check messageID

gaunt ice
#

hmm

desert badger
#
async def languagelist(ctx):
    lan_list = ["german", "english"]
    await ctx.send(f"The current available languages are ")
``` how can i get every language in lan_list into the ctx.send seperated with a comma ?
slate swan
#

Do !join and ! f-string in #bot-commands

desert badger
#

wait where do i put that in lol

buoyant quail
desert badger
#

ahhhhh

slate swan
#

!e ```py
lan_list = ["german", "english"]
print(f"The current available languages are {", ".join(lan_list)}")

unkempt canyonBOT
#

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

001 |   File "<string>", line 2
002 |     print(f"The current available languages are {", ".join(lan_list)}")
003 |                                                   ^
004 | SyntaxError: f-string: expecting '}'
slate swan
#

bad choice of quotes

buoyant quail
#

oh

#

yes

#

changed

desert badger
#

uh what do i do lol

slate swan
#

use single quotes inside the {}

hallow tangle
#

is it possible making a command like delete add <user> and the bot will keep deleting the messages of the user when they send them untill we do delete remove <user> its like a mute or something but annoying.

rocky hornet
#

yes

#

just add member to a list and check against that list

quick gust
rocky hornet
#

on_message:
if msg.author in deletion_list:
msg.delete

rocky hornet
quick gust
#

yeah

rocky hornet
#

or text file 🙂

#

if file system isnt ephemeral

hallow tangle
rocky hornet
#

yeah

slate swan
#

Sqlite3 exists

rocky hornet
#

just make MVP and then change things as u need them like adding a database

desert badger
#
        if 'color' in data[str(user.id)]:
            color = data[str(user.id)]['color']
        if 'color' not in data[str(user.id)]:
            color = "light_grey"
        embed = disnake.Embed(
        title = f"{user.name}'s Profile",
        color = disnake.Color.color()
        )
```will this work lol
#

like the embed color part

gaunt ice
final iron
gaunt ice
rocky hornet
gaunt ice
#

halp

rocky hornet
#

quit being so over-the-top "professional"

rocky hornet
gaunt ice
#

how

#

it isnt working

rocky hornet
gaunt ice
rocky hornet
#

idk maybe the bot just fails to fetch the message for some reason

gaunt ice
#

ohh

rocky hornet
#

which generally shouldnt happen

rocky hornet
# gaunt ice

it only works if reaction was added to a message in that channel

desert badger
#
  File "C:\Users\Niclas\Desktop\Other\Python\NcZ Discord Bots\Disnake\NcZ\main.py", line 558, in <module>
    async def language(ctx, mode : str = None, language : str = None):
  File "C:\Users\Niclas\AppData\Local\Programs\Python\Python39\lib\site-packages\disnake\ext\commands\core.py", line 1377, in decorator
    self.add_command(result)
  File "C:\Users\Niclas\AppData\Local\Programs\Python\Python39\lib\site-packages\disnake\ext\commands\core.py", line 1228, in add_command
    raise CommandRegistrationError(command.name)
disnake.ext.commands.errors.CommandRegistrationError: The command language is already an existing command or alias.``` the thing is: i dont have any other command called language, what do i do ?
rocky hornet
#

use channel = bot.get_channel(payload.channel_id)

#

if you want it to work in general

#

@gaunt ice

desert badger
desert badger
unique tendon
#
@commands.has_permissions(manage_roles=True)
async def embed(ctx):
    if ctx.message.author.id == 800287056940236821:
      def check(message):
        return message.author == ctx.author and message.channel == ctx.channel

    await ctx.send('What should be the title?')
    title = await client.wait_for('message', check=check)
  
    await ctx.send('What should be the description?')
    desc = await client.wait_for('message', check=check)

    embed = discord.Embed(title=title.content, description=desc.content, color=0x72d345)
    await ctx.send(embed=embed)
    else:
    await ctx.send('**Command not Found**')```
gaunt ice
#

no i want it ina specific channel for it to send

unique tendon
#

there is an error of syntax in the second last line

#

Can someone help?

desert badger
unique tendon
desert badger
#
@client.command()
@commands.has_permissions(manage_roles=True)
async def embed(ctx):
    if ctx.message.author.id == 800287056940236821:
      def check(message):
        return message.author == ctx.author and message.channel == ctx.channel

    await ctx.send('What should be the title?')
    title = await client.wait_for('message', check=check)
  
    await ctx.send('What should be the description?')
    desc = await client.wait_for('message', check=check)

    embed = discord.Embed(title=title.content, description=desc.content, color=0x72d345)
    await ctx.send(embed=embed)
    else:
      await ctx.send('**Command not Found**')
sick birch
#

There

buoyant quail
#

omg, how can you code when you don't know about indenting?

shadow wraith
#

what happens if you cythonize this code 🧐

import disnake
from disnake.ext import commands

bot = commands.Bot(...)

@bot.command()
async def ping(ctx):
  await ctx.reply("Pong!")

bot.run(...)
desert badger
hoary cargo
unique tendon
desert badger
buoyant quail
# unique tendon Didnt work either
@client.command()
@commands.has_permissions(manage_roles=True)
async def embed(ctx):
    if ctx.message.author.id == 800287056940236821:
        def check(message):
            return message.author == ctx.author and message.channel == ctx.channel

        await ctx.send('What should be the title?')
        title = await client.wait_for('message', check=check)
  
        await ctx.send('What should be the description?')
        desc = await client.wait_for('message', check=check)

        embed = discord.Embed(title=title.content, description=desc.content, color=0x72d345)
        await ctx.send(embed=embed)
    else:
        await ctx.send('**Command not Found**')
gaunt ice
#

if and that else shud be in a same line

desert badger
hallow tangle
rocky hornet
#

delete-add is a mathematical operation

unique tendon
#

Worked thanks g

desert badger
#

AH NVM I FOUND IT

hallow tangle
#

fixed there

buoyant quail
rocky hornet
#

indent await

#

and call the function

slate swan
rocky hornet
#

()

#

it wont work because what is list.add

gaunt ice
#

nothing firing up

rocky hornet
#
>>> [].add
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'list' object has no attribute 'add'
slate swan
#

:/ imagine learning python

desert badger
#
        if 'color' in data[str(user.id)]:
            _color = data[str(user.id)]['color']
        if 'color' not in data[str(user.id)]:
            _color = "light_grey"
        embed = disnake.Embed(
        title = f"{user.name}'s Profile",
        color = disnake.Color._color()
        )
disnake.ext.commands.errors.CommandInvokeError: Command raised an exception: AttributeError: type object 'Colour' has no attribute '_color'
``` i have been struggling with that one... how do i do that ? lol
hallow tangle
#

fixed can you check again please

gaunt ice
#

halp ples

desert badger
#

hmm

sick birch
gaunt ice
gaunt ice
desert badger
rocky hornet
slate swan
#

Oopsie

desert badger
#

hm?

hallow tangle
rocky hornet
#

now should work

slate swan
rocky hornet
#

well u still didnt fix indent issue

hallow tangle
#

where

desert badger
rocky hornet
#

find it yourself

desert badger
slate swan
hallow tangle
#

ummm

desert badger
slate swan
nimble plume
#

Why ppl use replit

desert badger
#

there has to be a way

slate swan
hallow tangle
#

fixed again

shrewd inlet
#

is there a way i can make a command that can show a random instagram post from a specific account?

shrewd inlet
nimble plume
#

Can i use yt api for youtube video notifications??

shrewd inlet
#

is there a video i can use as a guide?

slate swan
hallow tangle
shrewd inlet
slate swan
#

since they can have byte or special characters in their name

#

or emojis

nimble plume
#

I was making prvc aka private voice channel

slate swan
nimble plume
#

Lol

nimble plume
shrewd inlet
#

nah but i need a specific doc that can show me how to do it 😭

slate swan
shrewd inlet
slate swan
nimble plume
#

Search for it in compe programming none will help u

slate swan
#

nextcord

nimble plume
shrewd inlet
hallow tangle
#

why this issue

nimble plume
#

Its in different

#

Where do i swtich

quaint epoch
#

anyone know what's a shard?

#

idk what they do

hallow tangle
nimble plume
#

Best lib in python for dc bots??

wispy spade
quaint epoch
#

!d discord.ShardInfo

unkempt canyonBOT
#

class discord.ShardInfo```
A class that gives information and control over a specific shard.

You can retrieve this object via [`AutoShardedClient.get_shard()`](https://discordpy.readthedocs.io/en/master/api.html#discord.AutoShardedClient.get_shard "discord.AutoShardedClient.get_shard") or [`AutoShardedClient.shards`](https://discordpy.readthedocs.io/en/master/api.html#discord.AutoShardedClient.shards "discord.AutoShardedClient.shards").

New in version 1.4.
gaunt ice
nimble plume
#

Next cord??

slate swan
#

see, if you dont wanna get made fun of, dont use python, even the maintainer of discord.py does not recommend pycord, use nextcord instead, disnake or hikari or lefi are better

nimble plume
hallow tangle
gaunt ice
slate swan
gaunt ice
nimble plume
#

Pls suggest the best lib so i can switch

nimble plume
slate swan
gaunt ice
slate swan
#

disnake is a fork so, it has the same syntax as dpy

#

hikari is a completely made-from-scratch discord api python wrapper

nimble plume
#

I want the BEST

gaunt ice
nimble plume
slate swan