#discord-bots

1 messages Β· Page 1025 of 1

unkempt canyonBOT
#

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

The callback associated with this UI item.

This can be overridden by subclasses.
slate swan
#

!d discord.ui.Button.disabled

unkempt canyonBOT
keen mural
#

Thx also do you know a in depth guide for buttons in general

slate swan
#

use an unix timestamp

#

how can i get a direct link to a command that has just been sent?

#

wdym by direct link? the message which invoked the command?

#

so i type $ban, in my audit longs it sends a link which i can tap to take me to that particular command

#

ctx.message.jump_url will get you the link of the command message

#

ok ty

#

!d discord.utils.format_dt

unkempt canyonBOT
#

discord.utils.format_dt(dt, /, style=None)```
A helper function to format a [`datetime.datetime`](https://docs.python.org/3/library/datetime.html#datetime.datetime "(in Python v3.10)") for presentation within Discord.

This allows for a locale-independent way of presenting data using Discord specific Markdown...
slate swan
#

i want to make a quiz with discord-ext-forms and idk how it should check answers

I want it to check them so it can say something like this: You have answered 3 out of 5 right

Or check if 2 out of 5 are right say: You are ...

In the screenshot is my current code

slate swan
#

do i have to import humanfriendly from something?

brave forge
#

as when using the send two messages command. the first message is to the chat where the command was written, and the second message is to a specific chat. That is , how to send a message to a specific chat ??

slate swan
#

@brave forge so u basically want to know how to send a message to x channel?

dire folio
slate swan
brave forge
dire folio
brave forge
slate swan
#

also, don't spoonfeed

dire folio
#

Kk

slate swan
#

because then they learn nothing xD

#

yo

dire folio
#

I was trying to find the docs but I have like no clue how to use the bot

dire folio
slate swan
#

just do something like, on message if message author id == bla bla, then do this bla bla

brave forge
brave forge
slate swan
#

hint:

user: disnake.Member=None
dire folio
#

Also iirc you can't have a digit starting the function name

stark geyser
#

having issues with my loop command and dont know what to do
any1 can help ?

@commands.command
async def loop(self, ctx):

    if not ctx.voice_state.is_playing:
        return await ctx.send('Nothing being played at the moment.')

    ctx.voice_state.loop = not ctx.voice_state.loop
    await ctx.message.add_reaction('βœ…')
slate swan
#

it's a syntax error, and i litterally told u to look at it

pallid meadow
#

Can you give an error or something?

slate swan
#

How to say if message not "yes":? Till now it just sends it after the command has been finished! Even tho the answer was "yes"

dire folio
#

Why does it say commands.get_channel

slate swan
dire folio
#

^

slate swan
#

i found ban-unban but i can't find kick event

brave forge
slate swan
slate swan
dire folio
brave forge
#

@dire folio to delete a message with a reaction when clicking on the reaction, you need to write "await self.bot.message.delete()" ??

dire folio
#

Ye

fading marlin
#

to delete the message itself (I'm guessing you mean the invoking message), ctx.message.delete. However to remove reactions (guessing you also mean the invoking message), do ctx.message.clear_reactions() if you want to remove all reactions, or clear_reaction(emoji) to remove a specific emoji reaction

brave forge
#

@fading marlin and where should I enter "ctx.message.clear_reactions()" ??

fading marlin
#

whenever you want the reactions to be cleared

brave forge
#

@fading marlin after pressing and when the pressing has worked and what is put on it, the reaction is removed

odd mango
#

i use replit for my bot and want "all red stuff in console to be dumped in a .txt file"
anyone got a block of help?

fading marlin
fading marlin
odd mango
#

i am trying to get it right since past day now, nothing seemed to work right

tiny ibex
#

there is a delete_after kwarg to send() which deletes the message after a specific time

fading marlin
fading marlin
#

!d logging

unkempt canyonBOT
#

Source code: Lib/logging/__init__.py...

brave forge
#

@tiny ibex
I don't need it to be deleted after a certain time. The question is not how to delete a message after a certain time. And how to delete a message after clicking on the reaction

odd mango
#

error and warning args arent logging them

tiny ibex
tiny ibex
brave forge
tiny ibex
#

with the definition of ctx

#

Moreover pass a message object to it

brave forge
#

I don't know. I was once told to make reactions like this, and I do them like this, although it turns out with mistakes, but still@tiny ibex

tiny ibex
#

BRUH

#

Well just pass msg to rep() and delete msg whenever you wanna

#

??

brave forge
#

@tiny ibex
just answer the question I asked. I already know that the code is bad!!

tiny ibex
#

bro the answer is above...

#

What you talking about?

#

ig your wifi pooped

slate swan
#

how do i make so u cant give money to bots?

#

or i dumb

brave forge
#

@tiny ibexCommand raised an exception: AttributeError: 'function' object has no attribute 'clear_reaction'
ERROR

tiny ibex
slate swan
#

wdym it cant

tiny ibex
slate swan
#

user is not defined πŸ’€

slate swan
slate swan
#

but u still can give money to bots

tiny ibex
#

rep = await ctx.send(embed=embed)

tiny ibex
torn sail
velvet compass
slate swan
tiny ibex
brave forge
#

@tiny ibex @fading marlin don't reply to my messages for help anymore. I just might as well not have asked

slate swan
#

In that case the check is pretty much overcomplicated

tiny ibex
#

!d discord.Member.guild

unkempt canyonBOT
slate swan
#

You can simply do

if member.bot:
    # Member is bot
tiny ibex
#

yes prolly can

#

wait what is user

#

user.bot?

slate swan
#

It's undefined, hence their error

tiny ibex
#

i didn't see that

slate swan
#

Not needed to define, just use member

velvet compass
# brave forge yes

Then I think you would do this with:

        if str(reaction.emoji) in ":white_check_mark:":
            embed = discord.Embed(description= f'Π’Π°ΡˆΠ΅ΠΉ ΠΆΠ°Π»ΠΎΠ±ΠΎΠΉ занялся {user}', colour=0xF1C40F)
            embed.clear_reaction(":white_check_mark:")

But I'm not super knowledgeable about d.py

slate swan
#

ok cool thanks

#

That wouldn't really work

#

You need to define a message variable when you send the embed, then use on that variable the function

torn sail
#

Only messages

slate swan
#

i thought i need to do member == member.bot πŸ’€

#
m = await ctx.send(embed=...)
m.clear_reaction(...)
tiny ibex
slate swan
velvet compass
slate swan
#

Or you need to get_message/fetch_message if you have its ID/channel ID and save that in a variable, and use that variable to clear the reaction

brave forge
#

@velvet compass Command raised an exception: AttributeError: 'Embed' object has no attribute 'clear_reaction'

slate swan
torn sail
velvet compass
slate swan
#

Use on your msg variable that you have already defined

heady sluice
#

I am curious

#

😭

torn sail
#

message.embeds

heady sluice
#

what does that have to do with anything

brave forge
#

@velvet compass I don't understand. Why was only one out of 3 people adequate ?? Well, that is, he didn't tell me about the code

slate swan
#

Here at the bottom you did correctly

#

Where do people vote for your bot?

velvet compass
heady sluice
#

await for sure on the last line

slate swan
#

Then I recommend to join their server and ask in their development channel :)

heady sluice
#

!d discord.Message.clear_reaction

unkempt canyonBOT
#

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

Clears a specific reaction from 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 need the [`manage_messages`](https://discordpy.readthedocs.io/en/master/api.html#discord.Permissions.manage_messages "discord.Permissions.manage_messages") permission to use this...
slate swan
#

hellooo :>

#

It's really easy to set up, they will provide better help

heady sluice
#

hi Eito now Eito

slate swan
#

yes i'm Eito :>

#

Backwards counting?

heady sluice
#

reaction.users is a list so reverse the list

slate swan
#

explain a lil bit.. pls Nakime

heady sluice
#

I think it's users

slate swan
#

Backwards such as?

heady sluice
#

!d discord.Reaction

unkempt canyonBOT
#

class discord.Reaction```
Represents a reaction to a message.

Depending on the way this object was created, some of the attributes can
have a value of `None`...
heady sluice
slate swan
#

u mean countdown before the giveaway ends?

#

that backward counting?

#

Simply use await asyncio.sleep(seconds) to wait until the end of the giveaway, then you can draw a winner based on the link above

heady sluice
#

oh

slate swan
#

owo

sick birch
slate swan
#

no it's for the part where bot will pick the winner after the time has passed

heady sluice
#

just ending the sleep() 10 seconds before then sending a message every second or editing

slate swan
#

alright

slate swan
#

@slate swan use his suggestion

slate swan
#

use @heady sluice 's suggestion that he suggested above

#

sorry for ping btw lmao ||in case u mind ||

heady sluice
#

atleast somebody pings me

slate swan
#

πŸ’€ πŸ˜‚

heady sluice
#

I'm sitting on discord the whole time I'm not in school but nothing

#

😭

slate swan
#

🀨

slate swan
#

πŸ’€ then.. use button instead of reaction?

heady sluice
#

makes things harder

slate swan
#

but wait.. can we use button insetad of reaction?

heady sluice
#

you can't just count the reactions at the end

slate swan
#

πŸ€” i see..

heady sluice
slate swan
heady sluice
#

no need for that

#

the hard thing is registering when someone pressed the button

slate swan
#

.. πŸ’€ my bro Nakime

#

he just suggested that thing above

heady sluice
#

your bro Nakime

#

wtf

slate swan
#

just use a unix timestamp which updates itself with change in time automatically.

heady sluice
#

I'm frightened by the name of the guy that was typing

slate swan
#

i told you a few hrs ago.

#

yeah i pointed towards it like 3 times already

#

lmao

heady sluice
#

stop

slate swan
#

nakime, are you aware what an unix timestamp is?

#

i can explain if you want me to

heady sluice
#

please

slate swan
#

see this thing? the highlighted time..?

#

its a timestamp, which updates itself with time.

#

animated? 😐

brave forge
#

@slate swanhow do I remove a reaction after it has worked ??

slate swan
#

get ready for ratetlimits.

#

how often do you want it to update?

slate swan
#

Hi i'm using requests.get to send a reques to my API in my discord bot and my bot sometimes freezes does anybody know why?

slate swan
#

using requests in async flow... results in blocking

slate swan
#

Could you please give me an example

unkempt canyonBOT
#
class aiohttp.ClientSession(base_url=None, *, connector=None, cookies=None, headers=None, skip_auto_headers=None, auth=None, json_serialize=json.dumps, ...)```
The class for creating client sessions and making requests.
slate swan
#

on how i would send a simple request

#

use this, use this

slate swan
slate swan
#

^ +1

brave forge
slate swan
#

as its a API, i don't need a response.

slate swan
#

it's the best

slate swan
#

Okay so if i add this it should just work right?

#

yep.

#

Alright thank you so much

#

i can send more than 1 request?

#

use a task to update that message after every minute then..

slate swan
slate swan
#

!d discord.ext.tasks.loop

unkempt canyonBOT
#

discord.ext.tasks.loop(*, seconds=..., minutes=..., hours=..., time=..., count=None, reconnect=True)```
A decorator that schedules a task in the background for you with
optional reconnect logic. The decorator returns a [`Loop`](https://discordpy.readthedocs.io/en/master/ext/tasks/index.html#discord.ext.tasks.Loop "discord.ext.tasks.Loop").
slate swan
#

oh, thats a disnake thing

#

i said that it's prolly a message object method

#

!d discord.Message.remove_reaction @brave forge

unkempt canyonBOT
#

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

Remove a reaction by the member from 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")...
slate swan
#

!d discord.Message.clear_reaction u can use this too @brave forge depending on your use

unkempt canyonBOT
#

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

Clears a specific reaction from 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 need the [`manage_messages`](https://discordpy.readthedocs.io/en/master/api.html#discord.Permissions.manage_messages "discord.Permissions.manage_messages") permission to use this...
slate swan
#

there is also clear_reactions

#

hm ```py
from discord.ext import tasks

@tasks.loop(minutes=1)
async def my_task():
channel = bot.get_channel(...)
message = await channel.fetch_message(...)
embed = message.embeds[0]

do stuff to update time by 1 minute in the embed

await message.edit(embed=embed)


this is the best i can provide. and its a bit spoonfeed-ish already so dont expect more
#

πŸ’€ man u were literally writing the code?

#

im bored, so yea

slate swan
#

it works same for all

#

pycord is just a bad forked version of discord.py
so it stays the same.

#

...

#

the urge of including bad

brave forge
#

@slate swandocumentation in discord.py it is written disgustingly, it is impossible for a beginner to understand it!!!!!!!

slate swan
#

i'm getting a error at async with aiohttp....

slate swan
slate swan
#

Oh alright.

torn sail
slate swan
#

i made a custom paginator, just to realise that hikari-lightbulb already provides you an inbuilt one

slate swan
#

discord bots itself are intermediate level stuff imo

brave forge
#

@slate swanmost likely I will throw a brick into the head of the one who wrote such documentation. It would be better to take an example from the discord documentation.js it's perfect, you can use it to write a bot without knowing the language itself

slate swan
slate swan
slate swan
#

+1 ^ lmao

torn sail
brave forge
slate swan
slate swan
#

its just classes/methods and attributes, no code to copy and use

torn sail
slate swan
#

ooo.. i see :>

brave forge
slate swan
heady sluice
#

doesn't it

slate swan
#

yeye

slate swan
heady sluice
#

await

#

and this isn't the error

#

it's a warning

torn sail
slate swan
#

well it's not sending a request i want it to

slate swan
heady sluice
heady sluice
#

well

slate swan
brave forge
heady sluice
#

the source code includes the function descriptions which humans write

#

that's what readthedocs uses

slate swan
# heady sluice yes

you just dont need to write the html scripts, docs is something you need to do yourself

torn sail
#

Sphinx uses but yes

brave forge
heady sluice
#

could you PLEASE stop using this kind of language whenever you just write a message here

#

like why would you call the creator a sick bastard

heady sluice
#

just because he did something

slate swan
#

or is that even a thing...

heady sluice
#

discord.ruby probably

brave forge
slate swan
#

i can assume a ruby api wrapper but ruby uses rb extension

heady sluice
#

yeah google translate aswell

slate swan
brave forge
#

@slate swanhe sometimes replaces py with ru

slate swan
#

so translating it would just be bad for you.

heady sluice
#

russian google translate wants discord.py for itself

slate swan
#

lmao wtf is going on lol

#

honestly, discord.py docs are on of the easiest and clearest docs i've used.

#

^ and penguin, english is not my first language either

torn sail
slate swan
#

i can just say.. they seemed easy to me since i got grip of OOP

brave forge
#

@slate swan you have no idea how infuriating the creator of python is to me as the creator of the product

heady sluice
#

I started programming with Java so oop was a piece of cake

slate swan
#

otherwise i used to write bot.py all commands in the same file .. when i ws a beginner lmfao

slate swan
#

yep yep

slate swan
slate swan
#

πŸ‘ you wont blame it then.

#

all fun and games until your stick of ram goes boom

#

enters a user with 512mb ram

#

16gb of ramyert

#

.... don't talk to me anymore shuu

#

πŸšΆβ€β™‚οΈ

slate swan
#

in case that was not a joke

#

πŸ˜‚ ||it is a joke lmao||

#

i mean, i have seen people doing that so yeah

#

he probably can only use only 16mb of ram because of windowsπŸ—Ώ

#

ooo yeah my first pc ws 512mb one :>

brave forge
slate swan
#

and many os like ubuntu have only 1gb minimum ram reqs

#

if Category.id == 970833097249652737: dont seem to recgonise cateorie id

unkempt canyonBOT
slate swan
#

should work...

slate swan
slate swan
slate swan
heady sluice
#

how's Category defined

heady sluice
#

I got that

#

what's Category

slate swan
heady sluice
#

what's Category? 😭

brave forge
#

@slate swan I am 100% sure that most of this server will not be able to learn it. Since I noticed that for an American to learn Russian is just something impossible

slate swan
heady sluice
#

Category = what

slate swan
#

i didnt define it

heady sluice
#

😭

slate swan
#

bc i didnt think i needed too

#

finally u got his point lmao

#

:)

heady sluice
#

oh okay well then ctx.channel.category

#

!d discord.TextChannel.category

unkempt canyonBOT
slate swan
#

so you wanna check if <i dont know what it is>'s ID is 970833097249652737, fair.

heady sluice
#

cuz you didn't define category

#

and you probably define channel

slate swan
#

well you didnt define category, how is you code supposed to know what you're talking about

slate swan
#

πŸ˜‚ my bro meh literally...

slate swan
heady sluice
#

it does

#

I'm crying

slate swan
#

u must have defined channel somewhere @slate swan

slate swan
heady sluice
#

we want full code

slate swan
#

oml i know what i did

#

that's still okay, we all are lmao

heady sluice
#

we love code

heady sluice
slate swan
#

i need to do bot.get

slate swan
rare saddle
#

How to display a list of servers on which a people is an administrator, as in JuniperBot or MEE6

heady sluice
#

is this a selfbot

slate swan
#

!d discord.Member.guild_permissions

unkempt canyonBOT
#

property guild_permissions```
Returns the member’s guild permissions.

This only takes into consideration the guild permissions
and not most of the implied permissions or any of the
channel permission overwrites. For 100% accurate permission
calculation, please use [`abc.GuildChannel.permissions_for()`](https://discordpy.readthedocs.io/en/master/api.html#discord.abc.GuildChannel.permissions_for "discord.abc.GuildChannel.permissions_for")...
slate swan
#

!d discord.Permissions.administrator

unkempt canyonBOT
#

Returns True if a user is an administrator. This role overrides all other permissions.

This also bypasses all channel-specific overrides.

slate swan
#

i dont think so

heady sluice
#

ok cuz I don't think I ever saw anything like this

slate swan
heady sluice
#

so that's why

heady sluice
#

cuz that's a category too

languid jungle
#

hey, please do not use ableist terms

heady sluice
#

cuz if you do bot.get_category or anything like that that actually exists, it's always gonna be that id

slate swan
heady sluice
#

Steak bot changed names

slate swan
#

its bot.get_channel

heady sluice
#

category

slate swan
#

ye

#

the method still remains same

heady sluice
#

mhm

slate swan
#

!d discord.Client.get_channel

unkempt canyonBOT
#

get_channel(id, /)```
Returns a channel or thread with the given ID.

Changed in version 2.0: `id` parameter is now positional-only.
heady sluice
#

and it makes sense to get a category with get_channel in the perspective of dpy because ....

languid jungle
heady sluice
#

I learned a word

slate swan
heady sluice
#

so if there are two of the same channels in a category?

#

I didn't quite understand

slate swan
heady sluice
#

but categories aren't channels

#

it was probably just easier

slate swan
#

in terms of discord API, they are

heady sluice
#

CategoryChannel sounds so bad

#

πŸ˜”

slate swan
#

when you realise DMs are channel too

heady sluice
#

makes more sense

slate swan
#

and dms calls in dms are yet another channel

heady sluice
#

that doesn't make sense

slate swan
heady sluice
#

who tf calls a bot

slate swan
slate swan
heady sluice
#

right it's not there

#

what happens if I call my bot

#

does it get some sh from the api

slate swan
#

it will ask you to send a friend request first

#

as it does for a normal user, with privacy settings turned on

heady sluice
#

does my bot get a request from the api for that

#

or like an event

#

anything I could handle

slate swan
#

nope~

heady sluice
#

what's the point

slate swan
#

u simply cant make a call

heady sluice
#

😭

slate swan
#

that button is just useless

heady sluice
#

and you can't implement it

#

cuz the API doesn't send you anything

#

nice

cloud dawn
#

u_simply_cant_make_a_call()

slate swan
heady sluice
slate swan
#

you pay him, but not the bots

#

:c

heady sluice
#

cuz in 20 minutes my breadboard will appear in front of my door in the night and I'm gonna implement voice receiving in my new API wrapper I'll make and I'll buy lights my breadboard will be able to use, also I'm gonna connect it to the TV so when I call my bot and tell it to turn off my lights and TV my raspberry's gonna trigger and explode the house using the breadboard

#

but I need friend requests

#

discord hurry

slate swan
#

just do the same in a VoiceChannel

heady sluice
#

how lame can you be

slate swan
#

🀑 is that even practical?

heady sluice
#

yes

rare saddle
#

How to display a list of servers on which a people is an administrator, as in JuniperBot or MEE6

slate swan
flint isle
#
@bot.command(name='allmsg')
async def msg(ctx, num = None):
    # below is a debug output to show when command is recieved.
    print('Running Search')
    if num == None:
    	num = 10
    	# fallback settings incase commanding user dosen't specify a number of messages'
    	print(Fore.CYAN  + '[DEBUG]' + Fore.YELLOW + 'Num Fallback Active')
    else:
        print(num)
        # debug output to show if custom number of messages is used
        print(Fore.CYAN + '[DEBUG]' + Fore.YELLOW + f'Custom Message Number Active {num}' + Fore.WHITE)
    
    msgs = [message async for message in ctx.channel.history(limit=num)]
    # ^ messages is now a list of Messages
    # below line runs checks for each message as described / laid out beloq
    for msg in msgs:
        # below print statment is for debugging.
        print(Fore.CYAN + '[MSG CONTENT]-' + Fore.YELLOW + msg.content + Fore.WHITE)
        #checks if message had any reactions
        if msg.reactions:
            # scans message for specific reactions
            for reaction in msg.reactions:
                if reaction.emoji ==  'βœ…':
                    print(Fore.green +  '[βœ“] Checkmark Detected')
                    # message sent is for debuging
                    await ctx.send(f'checkmark detected! it is in {msg.id}', delete_after=5)
                    #it then adds the reaction to the message with a checkmark reaction
                    await msg.add_reaction('<furheart:802746458088013864>')
                    # We break since we already found the check, heading to next message
                    break
#
Waiting For Commands
Running Search
11
[DEBUG]Custom Message Number Active 11
Ignoring exception in command allmsg:
Traceback (most recent call last):
  File "/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.9/site-packages/disnake/ext/commands/core.py", line 169, in wrapped
    ret = await coro(*args, **kwargs)
  File "<string>", line 62, in msg
  File "<string>", line 62, in <listcomp>
  File "/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.9/site-packages/disnake/iterators.py", line 123, in __anext__
    return await self.next()
  File "/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.9/site-packages/disnake/iterators.py", line 329, in next
    await self.fill_messages()
  File "/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.9/site-packages/disnake/iterators.py", line 351, in fill_messages
    if self._get_retrieve():
  File "/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.9/site-packages/disnake/iterators.py", line 338, in _get_retrieve
    if l is None or l > 100:
TypeError: '>' not supported between instances of 'str' and 'int'
The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.9/site-packages/disnake/ext/commands/bot_base.py", line 570, in invoke
    await ctx.command.invoke(ctx)
  File "/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.9/site-packages/disnake/ext/commands/core.py", line 920, in invoke
    await injected(*ctx.args, **ctx.kwargs)
  File "/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.9/site-packages/disnake/ext/commands/core.py", line 178, in wrapped
    raise CommandInvokeError(exc) from exc
disnake.ext.commands.errors.CommandInvokeError: Command raised an exception: TypeError: '>' not supported between instances of 'str' and 'int'
#

Like the fallback number works but when I use a custom number it breaks

slate swan
#

how do i print my dpy version in repl

#

can someone give me an template of a simple bot that contains multiple / commands?

cloud dawn
slate swan
flint isle
slate swan
#

if l is None or l > 100 l is a string here

flint isle
slate swan
#

yes

#

you compared an int with a string

#

!e if 1 > "a": ...

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 | TypeError: '>' not supported between instances of 'int' and 'str'
slate swan
#

this is what you did ^

flint isle
#

Wait where did I > it?

#

Or am I understanding this wrong

slate swan
#

wait thats an internal error

#

reinstall disnake

flint isle
#

Ok

flint isle
slate swan
slate swan
flint isle
sage otter
#

Why don’t you look into the logging module or something

flint isle
sage otter
#

Equally as good and doesn’t require effort likes yours does

slate swan
#

Hello

#

Could I have some help right here?

#

I'm kinda stuck

thorn leaf
#

How can I internally respond to a view so that I don't get an error after clicking a response and getting a message back?

scarlet aurora
#

I made a bot and I want to be able to use commands without people knowing I used the commands, how can I make it so I can run commands from the terminal instead of typing them out ?

thorn leaf
#

No

slate swan
scarlet aurora
thorn leaf
#

yes

scarlet aurora
#

r u sure

thorn leaf
#

Yes

cloud dawn
slate swan
scarlet aurora
cloud dawn
#

If you use slash commands you can use ephemeral.

slate swan
#

Dm commands😳

scarlet aurora
#

k

feral lichen
#

does anyone know why > isnt working with text in embeds

slate swan
#

No space
Space

#

Hello

#

I'm kinda stuck here

#

I wanted to create a bot which could be able to run a battle pass inside it. Like, the entire bot is a battle pass that updates every single month (but that info isn't usefull). What I really wanna know is: How can I create a bot? :D

inland bane
inland bane
#

and that

#

both of those

slate swan
#

i'd suggest looking up some tutorial on youtube

inland bane
#

eh, tutorials are iffy

slate swan
inland bane
#

just read the docs, there's examples there i believe !

slate swan
#

Thank you 😁

inland bane
#
import discord

client = discord.Client()

@client.event
async def on_ready():
    print('We have logged in as {0.user}'.format(client))

@client.event
async def on_message(message):
    if message.author == client.user:
        return

    if message.content.startswith('$hello'):
        await message.channel.send('Hello!')

client.run('your token here')```
#

very basic bot, taken from docs

slate swan
#

That's the begining of the bot, right?

#

Okay...

inland bane
#

that is the base bot yea

slate swan
#

I think I'm gonna spend my free time reading docs :D

inland bane
#

have u worked with python before?

slate swan
#

Yes

#

I've created text-based games

inland bane
#

ok then, it shouldn't be too bad

#

if u understand the language u will be alr

slate swan
#

But I can learn it

inland bane
#

it'll be more difficult, but it is for sure doable

#

u got this!!

slate swan
#

is ro.py the best option for roblox discord bots?

#

Thank ya! πŸ˜€

feral lichen
rotund pagoda
#

I am trying to make a discord webhook with python using disccord_webhooks and I cant seem to find a way around rate limiting. The switch that is recommended will delay a few second, however it send in multiple messages

slate swan
olive osprey
#

Hello okimii anime_teasip

thorn leaf
#

Is there a way to get the permission the user is missing from an error?

slate swan
olive osprey
thorn leaf
#

Yes

#

Oh, it's just missing_permissions

olive osprey
#
if isinstance(error, commands.MissingPermissions):
    await ctx.reply("bla bla")

should be like this if i remember right

thorn leaf
#

I got that part

#

I wanted to send what permission is missing

#

Which I found

olive osprey
torn sail
#

!d discord.ext.commands.MissingPermissions.missing_permissions

unkempt canyonBOT
slate swan
olive osprey
# thorn leaf I wanted to send what permission is missing

Hm, well there are multiple ways to do it, but for example here's what I'm using:

In my global error handler I'm just passing through the Missing Permissions

if isinstance("error, Commands.MissingPermissions") :
    pass

Then I'm just specifying the error in the command:

@command.error
async def command_error(ctx, error): 
    if isinstance(error, commands.MissingPermissions):
        await ctx.reply(f"`{error} `\n\nLooks like youre missing some permissions.")

There are probably much better ways to do it, but just as example thats what I use.

thorn leaf
#

I already got it

olive osprey
#

If I'm not wrong they're asynchronus now, which means you need to await them

#

Error?

supple thorn
#

Disnake is

slate swan
#

simple ✨

alpine pewter
#

!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.

torn sail
slate swan
torn sail
#

so theyre very similar

alpine pewter
slate swan
torn sail
#

maybe that

#

does disnake have hybrid commands?

slate swan
#

on dpy u need to use tree somethjng like that

slate swan
torn sail
#

well its only a few extra lines for tree

#

disnake seems pretty good tho

slate swan
slate swan
olive osprey
#

Well, I'm not saying that it is hard, but the docs are quite, uh let's say atleast I don't really understand some stuff

slate swan
#

what dont you understand?

olive osprey
#

For example, I tried to check the user in an interaction, well the docs said "await interaction_check(interaction)" that was literally it I didn't even know interaction.author is an alias for interaction.user like bruh

slate swan
#

its just some stuff is a bit confusing if you dont check source which that is what i do when im confused

olive osprey
#

You could say I'm stupid, and yes I'm sometimes, but compared to the d.py docs I personally think they're a lot more clearer & easier to understand

olive osprey
slate swan
olive osprey
#

Yes, I know you didn't say I'm stupid, but if you would see me sometimes, my brain just dies sometimes lets say it like that

Yeah, well checking the source helps me pretty much, but for some reason I just figured it out & I never got told about it lol

alpine pewter
#

I'm having issues with the code below. If someone can help.
https://paste.pythondiscord.com/ohirutofer

Does anyone know how to create a cooldown when selecting the menu?
Or simply limiting how many channels can be made through the menu?

Looking for the menu to be on cooldown per option, not the command to bring up the menu.

slate swan
sick birch
#

Love how you guys handled a potentially tense situation πŸ‘

slate swan
#

I learned from the best didnt ilemon_smirk

olive osprey
keen mural
#

how do i make a button or select be disabled after clicked

#

like grayed out

slate swan
unkempt canyonBOT
olive osprey
alpine pewter
keen mural
# unkempt canyon

i alr looked there and still dont understand how to make it disabled after click or a certain amount of time

slate swan
olive osprey
alpine pewter
#

So, not too much

slate swan
#

you shouldnt really store data in it

olive osprey
#

For a short period of time it would be okay Ig

slate swan
#

but yes most apis use json to format there payloads with

slate swan
alpine pewter
#

I'd be down to learn how to use an SQL but it's just one of those things where I'd like to get all the other fundamentals down first before diving into that.

sick birch
sick birch
slate swan
olive osprey
sick birch
#

I understand you find JSON daunting, and SQL even more so, but I promise with a little time and effort you'll get it

alpine pewter
#

Do you think it would be a good/bad idea to try to learn while still learning Python?

slate swan
alpine pewter
#

I don't know how deep it goes, I don't wanna be stuck looking into it forever lol

slate swan
olive osprey
sick birch
olive osprey
#

I see

sick birch
#

Count yourself lucky you had no issues with it

slate swan
#

this is all coming from a js dev btw*

#

πŸ™€

alpine pewter
#

Okay, I'll go try that. Any recommendations on which database(s) I should start with?
Am probs still a beginner at coding in Python, don't want anything insane to go into.

sick birch
sick birch
olive osprey
keen mural
#

how advanced would a giveaway cmd with buttons be

slate swan
alpine pewter
slate swan
sick birch
olive osprey
sick birch
#

As long as you're not jumping from, say, a relational to NoSQL database

slate swan
#

typed it myself😳

#

i still remember the domain

olive osprey
alpine pewter
supple thorn
#

hi okimii

slate swan
#

heypithink

sick birch
#

If you want a JS dev's opinion, I prefer not to mess with the Python connectors and write an API middleman using Prisma that sits in between the bot and the database

olive osprey
slate swan
olive osprey
slate swan
#

sql is a structured query language

olive osprey
slate swan
#

Structured Query Language

olive osprey
#

oh

slate swan
olive osprey
#

forgot what i just said

slate swan
#

remember sqlite is a database based on SQL

olive osprey
#

That was my question, ok now in the right format:
SQLite doesn't store the data online, right?

supple thorn
#

no

#

it stores it locally

olive osprey
#

Alright, so it gets stored in a local file?

supple thorn
sick birch
supple thorn
#

aiosqlite is the asynchronous version of sqlite

slate swan
sick birch
#

But it "stores" it on the hard disk of the local machine

olive osprey
#

Alright, alright, thank you guys. I will look into it tomorrow. Thanks for the explshipit :shipit:

slate swan
#

unrequired args with views?

olive osprey
#

what my message is messed up oh god

sick birch
#

explanation

olive osprey
#

I think my discord just died

supple thorn
#

explarabbit?

sick birch
#

It's alright, one of those days

olive osprey
#

Thanks for the explanations, yes lmao

sick birch
#

Friday's a long way off guys, keep at the grind

supple thorn
sick birch
#

wednesday

#

which was tomorrow

supple thorn
#

friday is wednesday for you?

sick birch
#

that is correct

supple thorn
#

what

olive osprey
#

what

supple thorn
#

friday is tomorrow for my timezone

olive osprey
#

3am here

#

thursday

sick birch
olive osprey
supple thorn
olive osprey
#

Why not

slate swan
#

its Wednesday here and i have tomorrow and friday free so ill work on my gateway implementation 😏

supple thorn
sick birch
#

it appears as if so

supple thorn
#

me and bad are in thursday

#

where the hell are you

olive osprey
#

Somewhere in the past

sick birch
# olive osprey 3am here

Also look into SQLAlchemy because once you start writing queries you'll think "surely there's gotta be a better way to do this" and I 100% agree with you

slate swan
#

time travelers for sure

sick birch
sick birch
slate swan
supple thorn
olive osprey
#

a what

supple thorn
olive osprey
#

what

pliant gulch
#

I have a Gateway Interface -> Gateway State then the rest of the events will be based of state as well

slate swan
sick birch
# olive osprey a what

Prisma is one example I use frequently in Typescript, for example, to add a row to a table, you can do this:

await prisma.peoples.create({
  first_name: "John",
  last_name: "Doe",
  age: 42
});

Which, under the hood, gets translated to:

INSERT INTO peoples VALUES ("John", "Doe", 42);
slate swan
pliant gulch
olive osprey
supple thorn
slate swan
sick birch
olive osprey
sick birch
slate swan
olive osprey
olive osprey
olive osprey
#

Hey, atleast I figured it out lmao

slate swan
#

yep

olive osprey
#

Anyways, I will probably go brush my teeth and head to bed afterwards. Thanks for the "Introduction" to SQL, have a nice day/night my fellow friends

sick birch
olive osprey
#

lmao

slate swan
pliant gulch
thorn leaf
#

How can I delete all messages from a specific user?

pliant gulch
thorn leaf
#

I did everything for the normal message delete and the view, but forgot to add the part to remove messages from the mentioned user

#

nevermind

supple thorn
unkempt canyonBOT
#

await purge(*, limit=100, check=..., before=None, after=None, around=None, oldest_first=False, bulk=True, reason=None)```
This function is a [*coroutine*](https://docs.python.org/3/library/asyncio-task.html#coroutine).

Purges a list of messages that meet the criteria given by the predicate
`check`. If a `check` is not provided then all messages are deleted
without discrimination...
boreal ravine
#

if you're using >= 3.10

slate swan
pliant gulch
#

!e ```py
def foo(bar: str, baz: list[str] = []) -> list[str]:
baz.append(bar); return baz

foo("qux")
print(foo("quux"))

unkempt canyonBOT
#

@pliant gulch :white_check_mark: Your eval job has completed with return code 0.

['qux', 'quux']
boreal ravine
#

right

#

whats wrong with that exactly?

pliant gulch
#

it's a common gotcha

#

Most people end up expirencing this at some point without knowing

slate swan
#

ive kinda heard about a problem of this, of setting e.g a list as the default value

supple thorn
pliant gulch
#

Oopsie

pliant gulch
supple thorn
#

lmao was that the mistake?

pliant gulch
#

Python will only evaluate them once

slate swan
#

once after its first call?

pliant gulch
#

It should be evaluating it when the function is defined

slate swan
#

ah so what i said is correct?

pliant gulch
#

Not sure 100% of how it works so I can't say

slate swan
#

!e print(1, print(2))

unkempt canyonBOT
#

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

001 | 2
002 | 1 None
slate swan
#

learned it from this example

slate swan
#

check=lambda message: message.author == ctx.author how would i also check for the channel

loud junco
#

im back

#

error here

#

help

#

huh its working all of sudden @slate swan @heady sluice

#

after i change the bot.change_status thing its working

#

btw new problem

supple thorn
loud junco
#

why is it taking username instead of userid

#
@bot.event
async def on_message(message) :
  if message.channel.id == 970895283250675813 :
    data = message.content.split(" ")
    user = re.sub("\D", "", data[4])
    hehehe = str(bot.get_user(user) or await bot.fetch_user(user))
    db[hehehe + 'cooked_pogchop'] += 50
    db[hehehe + 'voteCount'] += 1
#

should be 757508305256972338cooked_pogchop instead of HydroRICO1209#8868cooked_pogchop

thorn leaf
#

Is there any way to get around the issue of purge counting messages that are filtered?

thorn leaf
#
check=lambda message: (ignore_pinned and message.pinned) or (member is not None and message.author == member)

This counts messages that are filtered out to the total deleted message count

#

It's a pain

loud junco
#

(member is not None and message.author == member) what is this

vapid bramble
#

is there a way to delay an on_message event such as, if message x is sent: do this, but only once every say 1 minute

#

such as commands.cooldown but on an event / listener

loud junco
#

message.author == member then enough edi la

#

if message.author == member then member != None because message.author != None

thorn leaf
#

Or the lambda can not work at all when there's no member specified

slate swan
#

replit ?

thorn leaf
#

Okay, so now that it isn't a mess

loud junco
#

there is no response in Button()

thorn leaf
#

Is there any way to fix this counting messages that aren't deleted because of the check?
check=lambda message: message.author is member and (ignore_pinned and not message.pinned)

torn sail
#

swap button and interaction

#

they got swapped around recently

slate swan
#

πŸ‘‹

thorn leaf
slate swan
#

response is the attribute of interaction not button

#

use interaction

torn sail
#

Are you using the button decorator @discord.ui.button?

slate swan
#

Aka Views

torn sail
slate swan
#

Ye

torn sail
#

They probably upgraded

#

So they’re old code was kurdated

slate swan
#

Ye ig

torn sail
#

(self, button, interaction) is now (self, interaction, button)

slate swan
#

wo

torn sail
loud junco
#
@bot.event
async def on_message(message) :
  if message.channel.id == 970895283250675813 :
    data = message.content.split(" ")
    user = re.sub("\D", "", data[4])
    hehehe = str(bot.get_user(user) or await bot.fetch_user(user))
    db[hehehe + 'cooked_pogchop'] += 50
    db[hehehe + 'voteCount'] += 1
```should be `757508305256972338cooked_pogchop` instead of `HydroRICO1209#8868cooked_pogchop`
loud junco
slate swan
boreal ravine
#

also use f-strings

#

stop using concatenation

loud junco
#

can la

slate swan
#

Ye

loud junco
#

kekw

ebon island
#

Does a bot being dragged and dropped into another voice channel trigger an event listenable via dpy?

#

Looks like it must be this

slate swan
#

Ye

slate swan
thorn leaf
#

yeah

#

and it won't be fast

#

Should have said that before

alpine pewter
#

Does anyone know of a somewhat easy project to try once you learn some sqlite - Something for a Discord bot.

slate swan
alpine pewter
thorn leaf
#

Can also help engrain SQLite into your memory lol

slate swan
alpine pewter
#

I will attempt, it's my first day learning it.
Wanted to see if I can put it into something possibly.

slate swan
#

hm, interesting
good luck with it!

last mica
#

!d discord .json

pallid meadow
alpine pewter
#

I heard you should use a db over json for most things.
What would a json actually be used for that's good with discord bots?

pallid meadow
#

json is not a db

#

don't let anyone tell you differently

#

it should never be used as a database as there's a lot of underlying problems with it.

alpine pewter
#

I know, I'm asking what a json would be used for though

pallid meadow
#

Like a config file

alpine pewter
#

I worded that wrong lol

pallid meadow
#

but even that I would use something like yaml for configs

#

just a lot cleaner and takes a way a lot of the extra syntax json requires

slate swan
#

json is not db but we can use it as a db

#

Β―\_(ツ)_/Β―

pallid meadow
#

: (

#

as soon as you receive any sort of significant traffic it will break so no you can't use it

slate swan
#

significant traffic?

#

A lot of req?

pallid meadow
#

consistent reads and writes

#

to the json file

slate swan
#

..

supple thorn
alpine pewter
supple thorn
#

it's the asynchronous version of it so it's just sqlite

pallid meadow
#

Do you have a decent understanding of asyncio @alpine pewter ?

pallid meadow
alpine pewter
#

I'd say I have a very basic understanding of most things. I was just told to always use a database, so, I was wondering what a json would be used for on Discord.
I'm currently just learned basic aiosqlite and was wondering projects to attempt with it

supple thorn
#

also damn 10$-15$/month for a discord bot

slate swan
sly hamlet
#

idk what i am doing worng ```py
Ignoring exception in command 'giveaway_start2':
Traceback (most recent call last):
File "C:\Users\culan\AppData\Local\Programs\Python\Python39\lib\site-packages\discord\app_commands\commands.py", line 639, in _do_call
return await self._callback(self.binding, interaction, **params) # type: ignore
File "C:\Users\culan\OneDrive\Desktop\3.0.0 echo\cogs\giveaway.py", line 126, in giveaway_start
c_id = int(answers[0][2:-1])
IndexError: list index out of range

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "C:\Users\culan\AppData\Local\Programs\Python\Python39\lib\site-packages\discord\app_commands\tree.py", line 1094, in call
await command._invoke_with_namespace(interaction, namespace)
File "C:\Users\culan\AppData\Local\Programs\Python\Python39\lib\site-packages\discord\app_commands\commands.py", line 665, in _invoke_with_namespace
return await self._do_call(interaction, transformed_values)
File "C:\Users\culan\AppData\Local\Programs\Python\Python39\lib\site-packages\discord\app_commands\commands.py", line 658, in _do_call
raise CommandInvokeError(self, e) from e
discord.app_commands.errors.CommandInvokeError: Command 'giveaway_start2' raised an exception: IndexError: list index out of range```

slate swan
#

Index out of range

#

Read the error bro

sly hamlet
#

i did idk what is out of range

slate swan
#

ur list is not long enough

boreal ravine
#

!e print([1, 2][3])

unkempt canyonBOT
#

@boreal ravine :x: Your eval job has completed with return code 1.

001 | Traceback (most recent call last):
002 |   File "<string>", line 1, in <module>
003 | IndexError: list index out of range
slate swan
sly hamlet
#

so this? (answers[0][2:-1])

slate swan
#

Ye

sly hamlet
#

so i need to change the 2?

boreal ravine
#

can u print answers?

sly hamlet
#

[]

boreal ravine
#

yeah it's empty

visual brook
#
import discord

client = discord.Client()
#

can anyone explain to me more about this client thing?

#

I read the docs but it's still quite unclear

boreal ravine
visual brook
#

wdym by the answer here?

#

this class represents our connection to the Discord's api right

#

what does this mean

keen mural
#

i keep getting rate limited does anyone know why

boreal ravine
#

Are you using replit?

keen mural
#

idk how to use

boreal ravine
keen mural
#

can i use the same crappy method of hosting on visual studio too?

#

or how does that work

keen mural
boreal ravine
keen mural
boreal ravine
keen mural
#

self host meaning leave pc on? (prob not) but ill do vps i just dont know what that means

keen mural
visual brook
#

virtual private server

keen mural
#

and im guessing thats the best i could get

hearty glacier
#

Even cheaper if you're a student

keen mural
hearty glacier
#

Hosting a discord bot?

#

Literally takes like 20 seconds to setup if you've got it down

keen mural
#

is there a yt tutorial anywhere

hearty glacier
#

For setting up a vps?

keen mural
#

idk my bot is hosted via replit and i need smth better so im just wondering

hearty glacier
#

It depends on how your bot is set up

keen mural
#

wdym

hearty glacier
#

For example, my bot is all on github, so for me it's basically just cloning the repo, installing my requirements.txt, tweaking my settings and running the file

slate swan
#

Consider a VPS like a 'second' computer, so it's pretty easy to set it up - just do everything you did on your computer to start your bot, on the VPS

keen mural
#

for me the only place my bot exists is on my 1k line main.py replit file

hearty glacier
#

Jeez

keen mural
#

im guessing its different

hearty glacier
#

I must say I'm probably biased since I've never used replit

keen mural
#

how replit hosting works is u type ur code in the replit then you get a web server like uptimerobot to ping it every 5 mins so it doesnt shut off

#

so i kinda wanna learn how to import that code into visual studio or whatever and go from there hosting

visual brook
#

what does discord.Client.user represent

hearty glacier
hearty glacier
#

Do you have python installed?

pallid meadow
visual brook
#

ah ok

loud junco
visual brook
#

thanks

keen mural
#

if its smth i have to manually install

#

on my computer

hearty glacier
#

It's likely the first step

sly hamlet
#
    def start_loop(self):
        await self.api.start_loop()
        print("Post Count")


async def setup(bot):
    cog = DiscordListsPost(bot)
    await bot.add_cog(cog)
    await cog.start_loop()``` ```py
Traceback (most recent call last):
  File "C:\Users\culan\AppData\Local\Programs\Python\Python39\lib\site-packages\discord\ext\commands\bot.py", line 912, in _load_from_module_spec
    spec.loader.exec_module(lib)  # type: ignore
  File "<frozen importlib._bootstrap_external>", line 846, in exec_module
  File "<frozen importlib._bootstrap_external>", line 983, in get_code
  File "<frozen importlib._bootstrap_external>", line 913, in source_to_code
  File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
  File "C:\Users\culan\OneDrive\Desktop\3.0.0 echo\cogs\api.py", line 26
    await self.api.start_loop()
    ^
SyntaxError: 'await' outside async function

Extension 'cogs.api' raised an error: SyntaxError: 'await' outside async function (api.py, line 26)``` I seem to still be having an issue with my API can someone help me please
keen mural
loud junco
#

alright one moment

#

lemme send u the tutorial

slate swan
loud junco
slate swan
#

Please no

#

These are the worst tutorials ever

#

Just like many others

keen mural
#

y bad

loud junco
#

πŸ’€

#

start from here @keen mural

sly hamlet
# slate swan As the error says, `start_loop` needs to be `async`
Extension 'cogs.api' raised an error: AttributeError: loop attribute cannot be accessed in non-async contexts. Consider using either an asynchronous main function and passing it to asyncio.run or using asynchronous initialisation hooks such as Client.setup_hook```I must have accidentally taken that out last night sorry but this is the one I've really been
I've really been trying to figure out
keen mural
slate swan
#

no

loud junco
#

i would rather buy a vps with that money

#

spending money on vps has more value

visual brook
# hearty glacier A User version of your bot
import discord

client = discord.Client()

@client.event
async def on_ready():
    print('We have logged in as {0.user}'.format(client))

@client.event
async def on_message(message):
    if message.author == client.user:
        return

    if message.content.startswith('$hello'):
        await message.channel.send('Hello!')

client.run('your token here')
loud junco
keen mural
#

if i were to buy replit hacker would it randomly restart still and go down

visual brook
#

so it means this will ignore whatever the bot sends right

keen mural
hearty glacier
#

Iirc

loud junco
#

bot is much more better

hearty glacier
#

I never actually got using Bot instead of Client

#

I've never really ran into anything I'd need Bot for

slate swan
#

hm

loud junco
#

u will, someday :D

hearty glacier
#

Unless you're doing some cache level shenanigans

loud junco
#

cache level

slate swan
#

shipit i don't use dpy anylonger so

slate swan
loud junco
visual brook
slate swan
loud junco
#

hunter and sarth insist me to change from client to bot back then

#

🀣

visual brook
#

thanks

loud junco
slate swan
#

Another point is the use of making 'commands' with on_message

slate swan
slate swan
#

And a third would be the non use of f-strings

loud junco
visual brook
#

wait but it's literally the doc

slate swan
loud junco
keen mural
#

how

loud junco
#

πŸ’³

visual brook
#

so doc's examples are bad?

slate swan
#

you'll see that option after you get hacker plqn

loud junco