#discord-bots

1 messages · Page 820 of 1

balmy ivy
#

@bot.command()
async def waitlistin(ctx):

#

do i put it under there?

left crater
#

ye

balmy ivy
slate swan
balmy ivy
#

or admin perms can only

#

i am new to this

left crater
balmy ivy
#

where would i put that?

left crater
#

put it below bot.command

slate swan
slim ibex
balmy ivy
slim ibex
#

with the name sax lol

slate swan
balmy ivy
#

Thank you

slate swan
#

bro im not asking about that

#

im asking how did it get in my computer

left crater
slate swan
#

i never coded or known a thing such as "sax"

slim ibex
#

If you didn’t make it be weary

slate swan
slim ibex
#

could be a Trojan horse lmfao

final iron
#

Actually

#

!ot

unkempt canyonBOT
verbal cairn
#

Anyone know how to fix discord.ext import commands not working

final iron
#

It's off topic

slim ibex
#

I doubt it’s like a Python source file or whatever

final iron
slim ibex
#

But ye ot

verbal cairn
#

But import disnake works fine

slate swan
final iron
slate swan
#

i got a virus from vscode?

final iron
verbal cairn
#

It’s no error

#

Pycharm says it’s not imported

final iron
#

Then import it?

echo wasp
#

How would I make it so my bot capture s a live video feed from my then stream it to a voice channel?

#

Audio and video

verbal cairn
#

I have from disnake.ext import commands

#

But it like doesn’t realize that file exists or smth, and won’t load it

balmy ivy
#

wait whats the code to like whats the current member count

final iron
unkempt canyonBOT
#

property members: List[discord.member.Member]```
A list of members that belong to this guild.
heavy folio
unkempt canyonBOT
#

property member_count: int```
Returns the true member count regardless of it being loaded fully or not.

Warning

Due to a Discord limitation, in order for this attribute to remain up-to-date and accurate, it requires [`Intents.members`](https://discordpy.readthedocs.io/en/master/api.html#discord.Intents.members "discord.Intents.members") to be specified.
heavy folio
#

oh member intents hmm

#

idk i use this

final iron
#

Shouldn't my method also require member intents?

mortal dove
#

Can anyone help? Bot isn't responding to commands.

@bot.slash_command(guild_ids=[guild.id for guild in bot.guilds])
async def load(
    ctx: discord.ApplicationContext,
    cog: Option(str, "Cog to load", default="all"),
    log: Option(bool, "Whether to log or not", default=True)
):
    """Load / reload bot cogs"""
    await ctx.respond("Received")
heavy folio
#

yeah it does

#
Task was destroyed but it is pending!
task: <Task pending name='discord.py: on_message' coro=<Client._run_event() done, defined at C:\Users\user\AppData\Local\Programs\Python\Python38\lib\site-packages\discord\client.py:349> wait_fod\client.py:349> wait_for=<Future pending cb=[<TaskWakeupMethWrapper object at 0x0000027273AEEF70>()]>>
``` - this logged in the terminal and it said it was the cause of a wait_for but i did not even use it anywhere
slate swan
#

Yo guys ik how to edit a channel's general perms, but how do I overwrite one to add a user be able to.. lets say send messages?

#

something like
perms = discord.Permissions()
channel.edit(member.perms.send_messages=True) 🤷‍♂️

final iron
#

Oh yeah

#

!d discord.TextChannel.edit

unkempt canyonBOT
#

await edit(*, reason=None, **options)```
This function is a [*coroutine*](https://docs.python.org/3/library/asyncio-task.html#coroutine).

Edits the channel.

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

Changed in version 1.3: The `overwrites` keyword-only parameter was added.

Changed in version 1.4: The `type` keyword-only parameter was added.

Changed in version 2.0: Edits are no longer in-place, the newly edited channel is returned instead.
hushed galleon
echo wasp
#

How would I make it so my bot capture s a live video feed from my camera on my computer then stream it to a voice channel? With both audio and video?

rustic stratus
#

I know it was suggested to learn more python, but I do know why my script wouldn't stop crashing.

#

Even though I keep getting told by pip that discord.py is installed. Trying to import the module through the Python command line app doesn't work saying ModuleNotFoundError: No module named 'discord.py'

quasi stag
#

how can i stroe message objects in my db?

quasi stag
rustic stratus
#

I don't believe I have any environments.

quasi stag
#

different python installs?

rustic stratus
#

I do have 3.9, 3.8, and 3.10 installed, should I uninstall some of them.

#

Or just check the console apps for all of them?

quasi stag
final iron
#

i.e import discord

quasi stag
#

yeah that

rustic stratus
#

Oh, that appears to work.

quasi stag
#

bruh

rustic stratus
#

In command line.

final iron
#

Having different versions isn't an issue if you're using virtual environments

rustic stratus
#

I am a moron.

quasi stag
#

how do i stroe message objects in my db?

final iron
#

Why?

quasi stag
final iron
# quasi stag who?

You're asking for help and moderators love keeping this chat peaceful. I suggest you think about what you're going to say before you say it.

quasi stag
#

wdym

#

i didnt even do anything

final iron
#

mhm

quasi stag
#

???

final iron
#

Never said you did anything. Just saying that preemptively

quasi stag
#

i stand correct

final iron
#

?

#

I never said you did anything.

quasi stag
#

i dont know what you mean by this

fallow nebula
#

how do I stop bot after sending msg to specific channel

#

I really don't like using exit()

#

pyhton is the crying in the error log

quasi stag
#

how do i stroe message objects in my de beh

final iron
#

Why do you need to?

quasi stag
#

because why not

final iron
#

You can just store the message id and fetch it later

quasi stag
#

yeah how

fallow nebula
#

Ehm

final iron
#

You can get the message id with:

quasi stag
#

im using post

final iron
unkempt canyonBOT
quasi stag
#

i already know how to get the id

#

how do you fetch the message?

slate swan
#

!d discord.TextChannel.fetch_message

unkempt canyonBOT
#

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

Retrieves a single [`Message`](https://discordpy.readthedocs.io/en/master/api.html#discord.Message "discord.Message") from the destination.
final iron
#

I will see myself out

slate swan
#

bot doesn't have a fetch_message , need to use a messageable

final iron
quasi stag
#

ok lets say i dont have access to the text channel its in

#

what do i do?

balmy ivy
#

how do i fix

final iron
quasi stag
#

theres 2 instances of your bot running

slate swan
quasi stag
slate swan
#

why do you need to fetch a message from the channel you don't have acess of

quasi stag
#

okay what if i only has access to the message id, NOTHING else

slate swan
#

you need a messageable object.

quasi stag
#

and if i dont have it?

slate swan
#

Then you don't get the message

quasi stag
#

why not

final iron
#

Because you need a messageable object?

slate swan
#

can you get inside your school's classroom without going to school?

quasi stag
#

i can

#

online learning?

final iron
#

But that's not your school's classroom

slate swan
#

"get inside" , that's y u attend offline classes.

quasi stag
#

i said online learning

slate swan
#

You're still not inside the classroom

quasi stag
#

i can still see it's contents /shrug

slate swan
#

yea so cache the messages then.

quasi stag
#

okay

slate swan
#

tho it resets everytime the bot restarts

balmy ivy
#

How do i make a command where it goes like $pickup {url} me vs someone

slate swan
#

Idk what does it take to save the channel id along with the message id for u

quasi stag
#

say im on a tight quota over here lel

regal pulsar
#
@bot.command(aliases = ['bday', 'wish'])
async def birthday(message, user: discord.Member):
    embed = discord.Embed(description = 'Happy Birthday {} :)'.format(user.mention), color = 0xFF5733)
    if user.id == str(768393728163053619):
        embed.set_image(url = 'https://cdn.quotesgram.com/small/40/18/770733425-NellaLlamaBD2012.gif')
    else:
        embed.set_image(url = 'https://media.giphy.com/media/SXPwY2Uvhd38Y/giphy.gif')
    await message.channel.send(embed = embed)
#

tryna make it use one gif if a certain person in pinged

#

otherwise use the default one for everyone else

#

i keep getting the default gif tho

slate swan
#

Not the string form of id

regal pulsar
#

hmm

#

but why wont explicitly mentioning the id work

#

oh wait nvm

#

misunderstood

slate swan
#

!e print (1=='1')

unkempt canyonBOT
#

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

False
slate swan
#

that's y

regal pulsar
#

ah

#

thanks

rustic stratus
#

undefined name 'self'

#

print(f'Logged in as {self.user} (ID: {self.user.id})')

slate swan
#

are you subclassing the Bot?

rustic stratus
#

Yeah.

#
    async def on_ready():
        print('------')
        print(f'Logged in as {self.user} (ID: {self.user.id})')
        print('------')
        
    async def on_member_join(self, member):
        guild = member.guild
        if guild.system_channel is not None:
            to_send = f'Welcome {member.mention} to {guild.name}'
            await guild.system_channel.send(to_send)```
#

Any other reason it may not work.

slate swan
#

why subclass client and not use the Bot class which is a subclass of it already?

rustic stratus
#

This is the New_member example script.

#

Just experimenting with it, but this part isn't working.

slate swan
fallow nebula
#

how do I stop bot after sending msg to specific channel

#

I really don't like using exit() since
python is the crying in the error log

rustic stratus
fallow nebula
#

I want to stop the whole python script

#

after the one msg

fallow nebula
#

it's just supposed to be status message after file encryption

rustic stratus
#

Yeah.

echo wasp
#

How would I make it so my bot capture s a live video feed from my camera on my computer then stream it to a voice channel? With both audio and video?

kindred epoch
#

any idea why get_cog is returning none, it was working before i updated the lib

slate swan
rustic stratus
#

I just double click the .py file.

slate swan
#

Make sure it's like py client = MyClient() client.run(token)

rustic stratus
#
    async def on_ready():
        print('------')
        print(f'Logged in as {self.user} (ID: {self.user.id})')
        print('------')
        
    async def on_member_join(self, member):
        guild = member.guild
        if guild.system_channel is not None:
            to_send = f'Welcome {member.mention} to {guild.name}'
            await guild.system_channel.send(to_send)


intents = discord.Intents.default()
intents.members = True

client = MyClient(intents=intents)
client.run('token')``` is my whole script
final iron
#

Why are you subclassing

#

😔

rustic stratus
#

It's an example script.

slate swan
#

its so easy to do it with the Bot class🏃

fallow nebula
#

I think I have tried the one from the docs but it looks like it doesn't actually end the script

#

😦

slate swan
rustic stratus
#

But this part is where it keeps giving an error.
print(f'Logged in as {self.user} (ID: {self.user.id})')
and the error is
undefined name 'self'

rustic stratus
#

Latest.

slate swan
#

Oh nevermind

rustic stratus
#

More specifically 1.7.3

slate swan
#

You don't have self inside on_resdy

fallow nebula
heavy folio
fallow nebula
#

and then possible run exit()

slate swan
#
async def on_ready(self):
   ...```
rustic stratus
#

Ahh.

heavy folio
#

and also you didnt call super().init

heavy folio
#

so self.user won't work

echo wasp
#

Any idea on my question?

rustic stratus
#

Got it.

slate swan
rustic stratus
#

Thanks.

slate swan
grim oar
#

Hey

heavy folio
#

i have no wait_for that's why im asking here...

slate swan
heavy folio
#

and the traceback didnt point towards my file

grim oar
#

when did it start coming

heavy folio
#

like after i added await view.wait()

slate swan
heavy folio
#

ah okay

echo wasp
#

I am assuming you don't have a clue on my question?

grim oar
#

!d discord.ui.View.wait

unkempt canyonBOT
#

await wait()```
Waits until the view has finished interacting.

A view is considered finished when [`stop()`](https://discordpy.readthedocs.io/en/master/api.html#discord.ui.View.stop "discord.ui.View.stop") is called or it times out.
balmy ivy
#

why this no work

pliant gulch
#

You can't have an empty name and empty value for add_field, at least not the way you are doing it. You can either use "\u200b" or ** ** inside of the name and value fields

slate swan
#

Name and value cannot be empty

#

cat_beg And yes, what sir andy said

pliant gulch
#

🙏 started working on voice support for rin

#

we really bouta get voice before I do commands

pliant gulch
#

Yes I am

balmy ivy
#

Oh wait

#

embed=discord.Embed(title="GFFL Assistant", color=0xffffff)
embed.add_field(name="", value="", inline=False)
embed.add_field(name="Status:", value="Bot Is Ready To Help!", inline=True)
embed.add_field(name=" Latest Updates", value="Added More Commands To Our Bot", inline=True)
await ctx.send(embed=embed)

slate swan
#

Uk, hikari has no voice support natively yet, and is still being used

balmy ivy
pliant gulch
#

Brandon is also hopping on core development so we gonna have two core developers!!

#

Maybe that will make things go faster

slate swan
#

brandy?😳

#

ohh , so it's gonna be a big update with the discord Objects later ig?

slate swan
#

And okimii will teach how to use rin

slate swan
pliant gulch
slate swan
#

Rin on top pithink

balmy ivy
pliant gulch
#

Sarthak you should contribute as well 😔

slate swan
#

k_keklol imma add rin to my nickname alongside hikari as my first contribution

#

sarthak is very smort with his stuff ngl

#

dont ask how i know😳

pliant gulch
#

😔

slate swan
pliant gulch
#

no

slate swan
balmy ivy
#

but i am new to coding so

#

also thanks for the help i fixed it

slate swan
#

you need to an invisible character , which is \u200b if you want to do that

pliant gulch
tender estuary
balmy ivy
slim ibex
#

If you are a beginner, a discord bot is not the best project

final iron
final iron
#

You cannot effectively create things with only 2 days of experience

#

This applies to most things in life

slim ibex
#

^

final iron
#

Wow I actually sound smart and like I know what I'm talking about

#

🤓

balmy ivy
# final iron You cannot effectively create things with only 2 days of experience

@bot.command()
@commands.has_permissions(manage_roles=True)
async def mute(ctx, member:discord.Member,*,reason='No reason provided'):
muted_role = ctx.guild.get_role(908917566523731968)
await member.add_roles(muted_role)
embed2 = discord.Embed(title='You got muted',description='You have been muted in the Chill Zone for '+reason,color=discord.Colour.dark_orange())
await member.send(embed=embed2)
string = str(member)+' has been muted for '+reason
embed = discord.Embed(title='Mute 🔇', description = string , color = discord.Colour.green())
await ctx.send(embed=embed)?

#

this is from stack over?

final iron
#

The concepts, probably

#

You cannot make something like this with 2 days of experience

#

I'm not saying you directly copy and pasted

balmy ivy
maiden fable
#

Okay calm down here

final iron
#

But you took the concept, applied it and made your modifications

maiden fable
#

@balmy ivy what's the issue?

balmy ivy
#

of coding

maiden fable
#

Leave that

quick gust
#

chill down, he is asking issue in your code

maiden fable
#

Are you having a problem with yr code?

balmy ivy
final iron
maiden fable
#

Let's just leave it @final iron

quick gust
#

...

final iron
quick gust
#

can u guys stop

balmy ivy
quick gust
#

just dont reply.

maiden fable
#

@final iron @balmy ivy stop or I'll have to ping the mods

quick gust
maiden fable
#

Stop replying to him. Simple

slate swan
#

exactly, dont do anything

balmy ivy
maiden fable
hoary cargo
#

Well yk just by saying calm down no one will actually calm down

maiden fable
#

Smh leave it. Let's drop the topic

balmy ivy
#

lol

slate swan
#

just saying guys that if you can do something it doesnt mean you can do it well

#

¯_(ツ)_/¯

quick gust
#

lets not spark it back up

slate swan
#

just making a suggestion

quick gust
#

sigh

slate swan
#

¯_(ツ)_/¯

final iron
#

First, after a comma in the parameters of a function there should be a space

balmy ivy
#

the code works fine

final iron
#

Doesn't mean it's good

#

!pep8

unkempt canyonBOT
#

PEP 8 is the official style guide for Python. It includes comprehensive guidelines for code formatting, variable naming, and making your code easy to read. Professional Python developers are usually required to follow the guidelines, and will often use code-linters like flake8 to verify that the code they're writing complies with the style guide.

More information:
PEP 8 document
Our PEP 8 song! :notes:

final iron
#

I have a feeling you're just going to ignore pep8 so:

#

Check out f strings

#

!f-strings

unkempt canyonBOT
#

Creating a Python string with your variables using the + operator can be difficult to write and read. F-strings (format-strings) make it easy to insert values into a string. If you put an f in front of the first quote, you can then put Python expressions between curly braces in the string.

>>> snake = "pythons"
>>> number = 21
>>> f"There are {number * 2} {snake} on the plane."
"There are 42 pythons on the plane."

Note that even when you include an expression that isn't a string, like number * 2, Python will convert it to a string for you.

final iron
#

Makes your code a lot easier to write and a lot more readable

balmy ivy
#

wait brb i gotta do sum

final iron
#

Also, consider using the timeout feature or using get() to get the role instead of hard coding it

#

Hard coding is usually bad (when you have the option to dynamically code something) and it is in this situation you should be using dynamic code

pliant gulch
#

The whole command is hardcoded basically, it's safe to assume this bot is only for that specific guild

#

Plus, utils.get is a lot slower than get_role

#

Way, way slower

final iron
#

How much?

pliant gulch
#

Well, don't need to time it to know it's slower

final iron
#

Imo even if it is for 1 guild you should dynamically code it

pliant gulch
#

utils.get() is O(n)

#

get_role looks through a hashmap, it's O(1)

final iron
#

Wait O(n) means the time goes up everytime an element is added, right?

#

Or am I getting them mixed up

pliant gulch
#

Yea O(n) is linear time

#

O(1) is constant time

final iron
#

Are there different time complexities?

#

Or are those the only ones

pliant gulch
#

Yea quite a few

#

you got things such as logarithmic time

#

Exponential time

quick gust
#

damn

pliant gulch
#

If your code is exponential, either you are doing something that requires it, or you did something extremely bad

final iron
#

Why?

grim oar
#

O(n**2)

pliant gulch
#

Exponential time is like, one of the worst time complexities you could have bro

final iron
#

Can you show me an example of something that has an exponential time complexity?

grim oar
#

😩

maiden fable
#

You do know this ain't the correct channel for that right?

grim oar
#

^

final iron
#

Channel is dead rn

grim oar
#

Andy you ain't getting helper this way bro

pliant gulch
#

😔 what

grim oar
#

!ot

unkempt canyonBOT
dreamy sluice
#

Is it possible for me to retrieve a list of all the instances of a certain View class? (Nextcord)

grim oar
#

recursive strategy doesn't even give exponential iirc for fibo

maiden fable
vocal snow
waxen kite
#

I'm getting this error
AttributeError: 'NoneType' object has no attribute 'send'
the code is

@Client.command()
async def wow():
    user = Client.get_user(userid)
    await user.send('👀')

how do I fix it

final iron
slate swan
maiden fable
#

Code

waxen kite
#

user is none ?

maiden fable
#

Oh mb

waxen kite
#

but I've used userid it still didn't work

final iron
#

Is the user in the bots cache?

maiden fable
#

@slate swan u forgot self

waxen kite
#
@Client.command()
async def wow():
    user = Client.get_user(743866731839225958)
    await user.send('👀')

it should work right ?

maiden fable
#

No

#

U missing ctx

final iron
#

No. The user might not be in the bots cache

maiden fable
waxen kite
#

but when I use a channel it works

final iron
#

Unless the id was wrong

waxen kite
#

the id is right though

final iron
waxen kite
#
  File "C:\Users\me\AppData\Local\Programs\Python\Python39\lib\site-packages\discord\client.py", line 343, in _run_event
    await coro(*args, **kwargs)                                                     \client.py", line 343, in _run_event
  File "d:\Project learning AI\discordbot1.py", line 22, in on_ready
    await command()
  File "C:\Users\me\AppData\Local\Programs\Python\Python39\lib\site-packages\discord\ext\commands\core.py", line 374, in __call__                                       \ext\commands\core.py", line 374, in __call__
    return await self.callback(*args, **kwargs)
  File "discordbot1.py", line 48, in wow
    await user.send('👀')
AttributeError: 'NoneType' object has no attribute 'send'

here's the full error

final iron
#

camelCase should never be used in python

maiden fable
waxen kite
#

how do I use fetch though..

maiden fable
#

U r specifying a string, not an int

waxen kite
#

any example ?

maiden fable
waxen kite
#

oh thanks

final iron
unkempt canyonBOT
#

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

Retrieves a [`User`](https://discordpy.readthedocs.io/en/master/api.html#discord.User "discord.User") based on their ID. You do not have to share any guilds with the user to get this information, however many operations do require that you do.

Note

This method is an API call. If you have [`discord.Intents.members`](https://discordpy.readthedocs.io/en/master/api.html#discord.Intents.members "discord.Intents.members") and member cache enabled, consider [`get_user()`](https://discordpy.readthedocs.io/en/master/ext/commands/api.html#discord.ext.commands.Bot.get_user "discord.ext.commands.Bot.get_user") instead.
slate swan
#

water gazes what you doing sonpithink

#

going all smort mode herepithink

final iron
#

Use typing.Union so it doesn't throw an error

slate swan
dreamy sluice
final iron
#

Then perform a check. If hostname is a string then do whatever you want i.e return the function

slate swan
boreal ravine
final iron
#

?

final iron
slate swan
#

you cant make a number a word

boreal ravine
maiden fable
#

That's a string

final iron
slate swan
final iron
#

It's there for a reason

maiden fable
#

Can we calm down here yet again?

#

Remove the : int

#

Cool

pliant gulch
# final iron PEP8

pep8 references it, and allows it for style consistency, also bringing to the point that coding style depends on who's repo you are contributing 2

boreal ravine
maiden fable
#

That's a VPS issue

#

Not one within yr code

final iron
dreamy sluice
# dreamy sluice Imma explain more

Ok so, I have a View subclass for controling some embeds. They need a user parameter (not interaction.user), and I wanna find a way to make sure it has the user parameter given properly whenever I reset the bot (persistent view). I thought of just making a .db file with data of users, and loop through while I inserting the data. How do I go about getting a list of all the instances of the subclass I mentioned earlier? (So I can loop through it)

slate swan
boreal ravine
dreamy sluice
#

I said it doesn't need the interaction.user for user

#

It needs a separate user, hm

slate swan
#

ik but why go through the instances of the class? to check the users orrr?????

dreamy sluice
#

Nonono

slate swan
#

ah sorry

dreamy sluice
#

How do I explain this, um

#

Lemme give context, this for a Application command, and the view subclass I mentioned is the Accept Decline Buttons attached to each application.

dreamy sluice
dreamy sluice
dreamy sluice
dreamy sluice
dreamy sluice
#

lemme pull it up rq

#

nvm, afk brb

maiden fable
slate swan
dreamy sluice
#

There's a separate user object for the person who wrote the application

dreamy sluice
slate swan
#

ah for like a role of some sort?

dreamy sluice
slate swan
dreamy sluice
#

There'll be multiple application messages with multiple copies of that view

#

each will definitely be from a different user who wrote the application

maiden fable
#

@dreamy sluice have u looked into modals? If u wanna make an applications submission bot.

maiden fable
#

U making an application submission bot?

dreamy sluice
maiden fable
#

Using disnakw?

dreamy sluice
#

Nope

maiden fable
#

Then?

dreamy sluice
#

Nextcord

maiden fable
#

Ask about the discord modals support

valid perch
#

Tis in a pr

maiden fable
#

Ah

#

U r a dev of nextcord?

valid perch
#

If I had to guess it'd be a week or two

maiden fable
#

Oh ok

valid perch
#

I contrib, but mainly just help out around the dc a lot

maiden fable
#

Ah

spring flax
#

Hunter since you are here how do I get the master branch of disnake?

boreal ravine
#

Directly install it from github

spring flax
dreamy sluice
boreal ravine
slate swan
#
pip install -U git https://github.com/DisnakeDev/disnake
spring flax
maiden fable
#

Yea

#

No need to add @master tho

spring flax
#

Also, if it says git is not a command, all I have to do is add it to PATH right? Excuse my lack of knowledge on this though lol

slate swan
#

i dont use git lol

maiden fable
#

Since that's the default branch

maiden fable
#

Or

#

I got another way

#

Download the repo from the Download code button, then extract it to a folder, and in the root of the repo in yr pc, just run the command python setup.py install

spring flax
valid perch
#

The extracted code basically

spring flax
#

I didn't get where I'm supposed to run that command

#

python setup.py install

slate swan
#

terminal

#

where else?

maiden fable
#

Click on Download Code

sick birch
maiden fable
#

A zip file will start downloading

sick birch
#

makes it easier if you have git tool

#

git clone URL would just make a new folder in that directory without any messing about

spring flax
#

git bash right?

sick birch
#

are you on linux?

#

if so git comes preinstalled with most distros

maiden fable
spring flax
maiden fable
#

Okay so seems like u r getting confused

sick birch
#

then you'll probably have to download it

#

then run git clone URL which will make a directory with all the files from the repo

maiden fable
#

Or if u have git installed, just pip install it directly

spring flax
#

because I recall downloading git and then that coming up

sick birch
#

not sure

#

but download it from the official site

spring flax
#

okay thank you

spring flax
sick birch
#

just the default

spring flax
#

What does this error mean?

  ERROR: Cannot unpack file C:\Users\tenuk\AppData\Local\Temp\pip-unpack-g958kowo\disnake (downloaded from C:\Users\tenuk\AppData\Local\Temp\pip-req-build-8h6lfx89, content-type: text/html; charset=utf-8); cannot detect archive format
ERROR: Cannot determine archive format of C:\Users\tenuk\AppData\Local\Temp\pip-req-build-8h6lfx89
#

I downloaded git and ran pip install -U git https://github.com/DisnakeDev/disnake in the command prompt

slate swan
#

try pip install -U git+https://github.com/DisnakeDev/disnake

#

you missed a +

dreamy sluice
maiden fable
#
Gist

Rough implementation of modal in discord.py 2. GitHub Gist: instantly share code, notes, and snippets.

Discord Developer Portal

Integrate your service with Discord — whether it's a bot or a game or whatever your wildest imagination can come up with.

spring flax
#

2.3.2 is the master branch version right?

maiden fable
#

Yea iirc

dreamy sluice
#

I am not having trouble with making the application command

#

I am having issues with trying to create a persistent view for the Buttons in the view which accept or deny the application.

#

@maiden fable ^

maiden fable
#

Hmm, well what I want to say is, instead of doing this with buttons, u should use modals since they provide a better interface for the same

dreamy sluice
#

I wanna stick with buttons tho

maiden fable
#

Oh, okay. So u want to make the view persistent, but with the user arg in it?

pliant gulch
#

ouuh are modals pushed publicly

maiden fable
#

Yea

pliant gulch
#

Ok welp guess It's time to add

#

😔 but I will procrastinate a bit more

maiden fable
maiden fable
pliant gulch
#

oh

grim oar
pliant gulch
#

this is actually easy as hell

maiden fable
#

Lmaoo

pliant gulch
#

lmaooo, this basically has the same things as select menu

#

Guess I just gotta change the component type

grim oar
#

Yes! Let me do the v recv work you do that!

pliant gulch
#

no lol

dreamy sluice
#

@grim oar @pliant gulch I am curious, but what are y'all upto?

#

O-o

grim oar
#

A dapi wrapper

dreamy sluice
maiden fable
#

!pip rin

unkempt canyonBOT
maiden fable
grim oar
#

@pliant gulch

slate swan
#

how did he got a pic of andy?

grim oar
#

🦅

pliant gulch
dreamy sluice
pliant gulch
#

LOL BRO

grim oar
#

He got bozo's cat

pliant gulch
#

BOZO CAT

grim oar
dreamy sluice
slate swan
pliant gulch
#

I'll add text modals 2morrow

slate swan
#

😠

pliant gulch
#

no it's almost 0000

grim oar
#

I will make a voice recv pr before that

slate swan
#

kids dont be lazy👍

dreamy sluice
grim oar
#

No bitches

slate swan
pliant gulch
slate swan
#

😔

grim oar
#

it's not like your opinion matter anyways, I will make pr before you wake up!

slate swan
#

damn #nova'slifematters😔

maiden fable
#

Then Andy be like: Good work Nova! I love it

slate swan
#

andy would never

#

😭

spring flax
#

Anyone has a modal example for disnake?

slate swan
#

i keep reading it as model and not modal

dreamy sluice
#

🤨

spring flax
pliant gulch
#

Does modals even work properly

#

I get a invalid type error when passing 4, the component type for text modal lmao

maiden fable
#

Lmao

pliant gulch
#

Yep, lmao getting an invalid type when the docs say it is 4

#

holy shit I'm dumb, I wasn't reading the error message right

#

It is supposed to be an interaction response

maiden fable
#

🤣🤣🤣

#

Andy

tender estuary
#

Who pinged me?

maiden fable
#

Seriously?!?

maiden fable
tender estuary
#

Wait what

maiden fable
#

?

dreamy sluice
#

am back

vast gale
slate swan
vast gale
#

hi

slate swan
velvet tinsel
fresh iron
#
import discord 
from discord.ext import commands

client = commands.Bot(command_prefix = prefix)
prefix = "!"
tok = "token"

@client.event
async def on_ready():
    print(f"logged in as {client.user} and everything is ready")

client.run(tok)
#

so whats wrong with this code

slate swan
fresh iron
#

i did

torn sail
#

Bots can’t send friend requests and self bots are not allowed

slate swan
edgy osprey
#

Hello.
I have a question - how to add categories to the help command as in the screenshot?

timid wagon
#

By default, those are categorized as per their cog class

#

I'd suggest going for a custom help command, if you wanna make changes to that

quick gust
heady skiff
#

I have a doubt... Any idea on how to make discord bots verified? Like how you can make others invite it?

quick gust
#

there's an option in the dev portal to make it a Private Bot, just turn it off

#

it's off by default though iirc

heady skiff
#

Nah, it is public

#

Like few of my friends have invited it

#

It is in like 18 servers

#

:(

#

It needs to be in 75 or more servers to get verified

#

And there is another issue where it does not send welcoming messages in dms

#

Idk why

quick gust
quick gust
#

!d discord.on_member_join

unkempt canyonBOT
#

discord.on_member_join(member)``````py

discord.on_member_remove(member)```
Called when a [`Member`](https://discordpy.readthedocs.io/en/master/api.html#discord.Member "discord.Member") leaves or joins a [`Guild`](https://discordpy.readthedocs.io/en/master/api.html#discord.Guild "discord.Guild").

This requires [`Intents.members`](https://discordpy.readthedocs.io/en/master/api.html#discord.Intents.members "discord.Intents.members") to be enabled.
quick gust
#

!d discord.Member.send

unkempt canyonBOT
#

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

Sends a message to the destination with the content given.

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

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

To upload a single embed, the `embed` parameter should be used with a single [`Embed`](https://discordpy.readthedocs.io/en/master/api.html#discord.Embed "discord.Embed") object. To upload multiple embeds, the `embeds` parameter should be used with a [`list`](https://docs.python.org/3/library/stdtypes.html#list "(in Python v3.9)") of [`Embed`](https://discordpy.readthedocs.io/en/master/api.html#discord.Embed "discord.Embed") objects. **Specifying both parameters will lead to an exception**.
dreamy sluice
river flare
#

hey. I have this command but i want to make it into an ephemeral. I tried these two things, but both give errors. ```python
user = ctx.author
emb = nextcord.Embed(title=f"✅ Success", description=f"Άνοιξες με επιτυχία το ticket σου! {user.mention}", color=0x00ff00, timestamp=datetime.now(), ephemeral=True)
emb.set_author(name=j1mk0l.user.name, icon_url=j1mk0l.user.avatar.url)
await ctx.reply(embed=emb, mention_author=True)


```python
        user = ctx.author
        emb = nextcord.Embed(title=f"✅ Success", description=f"Άνοιξες με επιτυχία το ticket σου! {user.mention}", color=0x00ff00, timestamp=datetime.now()) 
        emb.set_author(name=j1mk0l.user.name, icon_url=j1mk0l.user.avatar.url)
        await ctx.reply(embed=emb, mention_author=True, ephemeral=True)
boreal ravine
#

you can't make ephemeral messages like that

#

and that kwarg (ephemeral) is for buttons/slash commands only

storm pebble
#

i am facing an issue with google api v3

river flare
#

ohh okay i see. Thanks

storm pebble
river flare
#

❤️

boreal ravine
storm pebble
scarlet rune
#
embed = discord.Embed(
          title='Media/link Sent!',
          thumbnail= message.author.avatar_url #this
          color= random.choice([0xfc0303, 0x03d3fc, 0x03fc07, 0xd7fc03]),
          description=(f""" 
ID = {message.author.id}
User = {message.author.name}#{message.author.discriminator}
Display Name = {message.author.display_name}
channel = <#{message.channel.id}>
==============================================="""))```

does anyone know how to insert thumbnail in this embed? or just use separate embed.?
slate swan
unkempt canyonBOT
#

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

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

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

"import requests"

storm pebble
slate swan
#

!blocking

unkempt canyonBOT
#

Why do we need asynchronous programming?
Imagine that you're coding a Discord bot and every time somebody uses a command, you need to get some information from a database. But there's a catch: the database servers are acting up today and take a whole 10 seconds to respond. If you do not use asynchronous methods, your whole bot will stop running until it gets a response from the database. How do you fix this? Asynchronous programming.

What is asynchronous programming?
An asynchronous program utilises the async and await keywords. An asynchronous program pauses what it's doing and does something else whilst it waits for some third-party service to complete whatever it's supposed to do. Any code within an async context manager or function marked with the await keyword indicates to Python, that whilst this operation is being completed, it can do something else. For example:

import discord

# Bunch of bot code

async def ping(ctx):
    await ctx.send("Pong!")

What does the term "blocking" mean?
A blocking operation is wherever you do something without awaiting it. This tells Python that this step must be completed before it can do anything else. Common examples of blocking operations, as simple as they may seem, include: outputting text, adding two numbers and appending an item onto a list. Most common Python libraries have an asynchronous version available to use in asynchronous contexts.

async libraries
The standard async library - asyncio
Asynchronous web requests - aiohttp
Talking to PostgreSQL asynchronously - asyncpg
MongoDB interactions asynchronously - motor
Check out this list for even more!

slate swan
#

so use aiohttp

#

!pypi aiohttp

unkempt canyonBOT
river flare
#

hey. I am trying to make a clear {x} slach command using nextcord. This is my current code. How can I make a sub command so i cant type the number of messages to be deleted? ```python
@j1mk0l.slash_command(name="clear", description="Clears {x} messages.", guild_ids=[serverID],)
@commands.has_permissions(administrator=True)
async def clear(interaction : Interaction, amount=2):
await interaction.channel.purge(limit = amount)
user = interaction.user
emb=nextcord.Embed(title="", description=f"O {user.mention} έσβησε {amount} μηνύματα.", color=color, timestamp=datetime.now())
emb.set_author(name=j1mk0l.user.name, icon_url=j1mk0l.user.avatar.url)
await interaction.response.send_message(embed=emb)

quasi stag
#

wow nextcord

slate swan
#

so it wont remove anything by default

river flare
slate swan
#

yeah and?

#

not sure what you mean?

quasi stag
#

Also I don't recommend restricting commands to administrator for clear commands like that

edgy osprey
#

Hello.
How to force a bot to delete a message after sending a command?
For example, you send the command ?hello to the chat, the bot deletes the command message and writes "hello" to the chat

dreamy sluice
#

How do I grey out all the buttons in a view?

slate swan
slate swan
#

ash knows she can help you :))

dreamy sluice
slate swan
dreamy sluice
slate swan
dreamy sluice
slate swan
#

view=self

maiden fable
#

And style to ButtonStyle.disabled

dreamy sluice
#

oh ok

#

That only disables 1 button tho, I wanna disable all the buttons in a view

slate swan
maiden fable
unkempt canyonBOT
maiden fable
#

Use isinstance

slate swan
maiden fable
#

And set the style to ButtonStyle.disabled

slate swan
maiden fable
slate swan
maiden fable
#

Huh? Isn't the default one green?

scarlet rune
maiden fable
dreamy sluice
slate swan
maiden fable
#

Yea, ik

dreamy sluice
#

By greying out, I meant to disable them

slate swan
#

lol

maiden fable
#

confusion

dreamy sluice
#
if isinstance:
      for i in self.children:
        i.button.disabled = True

This?

maiden fable
#

No

slate swan
maiden fable
#

for child in children:
if isinstance(child, ui.Button):
child.disabled = True

dreamy sluice
#

o h

dreamy sluice
maiden fable
#

Disables

slate swan
maiden fable
#

huh?

dreamy sluice
maiden fable
#

😐 Ash, don't tell me u write code like that

scarlet rune
#

lol

slate swan
dreamy sluice
#

@maiden fable AttributeError: type object 'ButtonStyle' has no attribute 'disable'

maiden fable
#

Okay, ig

dreamy sluice
#

oof

maiden fable
#

My bad, sorry ;-;

slate swan
dreamy sluice
#

Wait, I don't think ButtonStyle has a disabled attribute-

slate swan
dreamy sluice
#

Only the button object has that attribute

dreamy sluice
maiden fable
#

Oh hmm

slate swan
#

!d discord.ui.Button.disabled ?idk

unkempt canyonBOT
maiden fable
#

Then disable that. My bad

slate swan
#

ash change to disnakepithink

maiden fable
#

Or whatever. I'm confused

maiden fable
slate swan
#

lol

slate swan
dreamy sluice
#

Uh, it didn't actually disable the buttons-

slate swan
#

You need to edit

maiden fable
slate swan
dreamy sluice
slate swan
#

Huwunter will help

maiden fable
# slate swan Same-

It worked for me. The reason being, I used the things which were common in all of them since they are all forks of dpy 2.0

slate swan
#

like adding a view but it updates it

slate swan
maiden fable
slate swan
maiden fable
#

They have changed the internals too a bit

slate swan
slate swan
slate swan
maiden fable
#

Little things, like, iirc, there's a special method to set local pics in embeds

#

And stuff like that ¯_(ツ)_/¯

slate swan
#

thats cool ig

maiden fable
#

No need to do attachment:// anymore

slate swan
#

lol

#

Am i weird or is it just fine?

disnake.Embed(title="uwu").add_field(name="Hunter", value="uwu").add_field()
maiden fable
#

Well that won't work

#

Since add_field doesn't return anything iirc

slate swan
#

I made all my embeds like that :/

maiden fable
#

Oh, hmm. Could be the behavior changed

cold sonnet
#

uwu

maiden fable
slate swan
#

embed is just an instance so why not use the method in the instance of the class?

slate swan
slate swan
cold sonnet
slate swan
#

i do both ways

cold sonnet
#

sparing variables is good sometimes

slate swan
#

yeah

cold sonnet
#

and I doubt you'd use the same embed in a command twice

maiden fable
#

Ah yes, it allows chaining

slate swan
lament mesa
maiden fable
#

Yea

#

Just saw. Thought it returned None

cold sonnet
#

ey this is a rare moment

slate swan
cold sonnet
#

rush being here

slate swan
maiden fable
slate swan
#

frrrrrrr

maiden fable
lament mesa
#

I've not been doing much discord bot development these days 😅

slate swan
maiden fable
#

U r making a discord ripoff chat app

cold sonnet
#

I can't... my raspberry... it's broken

slate swan
slate swan
lament mesa
maiden fable
#

I haven't even opened its source since 2-3 months

slate swan
slate swan
cold sonnet
maiden fable
cold sonnet
#

identity theft is not a joke

slate swan
#

no need for when_mentioned_or(None) just use when_mentioned

cold sonnet
#

hmm

#

!d discord.ext.commands.when_mentioned

unkempt canyonBOT
#

discord.ext.commands.when_mentioned(bot, msg)```
A callable that implements a command prefix equivalent to being mentioned.

These are meant to be passed into the [`Bot.command_prefix`](https://discordpy.readthedocs.io/en/master/ext/commands/api.html#discord.ext.commands.Bot.command_prefix "discord.ext.commands.Bot.command_prefix") attribute.
slate swan
#

lol

cold sonnet
#

what do I pass in it then

slate swan
#

nothing

cold sonnet
#

great

slate swan
#

lol

cold sonnet
#

I should call it shouldn't I

slate swan
#

yes ofc

cold sonnet
slate swan
#

its not a property

cold sonnet
#

I don't really understand this

#

you don't call get_prefix

maiden fable
#

Yea

#

Because it needs args

#

The bot and the message.

#

So the library automatically calls it in on_message

slate swan
#

it does

hoary cargo
#

sadFumo can't wait for discord to slam a banner for bots too

slate swan
#

why cant you wait its just banners

hoary cargo
velvet tinsel
edgy osprey
#

Need help.
The bot code broke. I don't know why, because before that everything worked correctly.
P.s. I didn't edit the code.

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

        @commands.command()
        async def join(self,ctx):
          if ctx.author.voice is None:
            await ctx.send("Сперва зайди в голосовой канал")
          voice_channel = ctx.author.voice.channel
          if ctx.voice_client is None:
            await voice_channel.connect()
          else: 
            await ctx.voice_client.move_to(voice_channel)```
slate swan
edgy osprey
slate swan
edgy osprey
#

client = commands.Bot(command_prefix = "?", intents=discord.Intents.all())
for i in range(len(cogs)):
        cogs[i].setup(client)```
maiden fable
#

Hmm

#

Wrong tho

#

!d discord.ext.commands.Bot.load_extension

unkempt canyonBOT
#

load_extension(name, *, package=None)```
Loads an extension.

An extension is a python module that contains commands, cogs, or listeners.

An extension must have a global function, `setup` defined as the entry point on what to do when the extension is loaded. This entry point must have a single argument, the `bot`.
maiden fable
#

so u gotta do client.load_extension(cogs[i])

unkempt canyonBOT
#

Hey @shell wing!

You either uploaded a .txt file or entered a message that was too long. Please use our paste bin instead.

vale glen
#

anyone willing to test out my bot and give soem tips and feedback for it?

shell wing
edgy osprey
maiden fable
#

I told u the issue

maiden fable
maiden fable
#

U r using replit?

#

@shell wing

edgy osprey
#

I dumb

shell wing
#

premium version..

maiden fable
#

U got ratelimited

edgy osprey
maiden fable
#

in the for loop

#

instead of cogs[i].setup(client)

shell wing
#

and like only 3 bots of mine are up

maiden fable
shell wing
#

and i got the premium plan so its a feature

maiden fable
#

I don't think u get different IP Addresses, do u?

shell wing
edgy osprey
#

Umm...


client = commands.Bot(command_prefix = "?", intents=discord.Intents.all())
for i in range(len(cogs)):
        client.load_extension(cogs[i])```
maiden fable
shell wing
maiden fable
#

it needs the file name. Do "music"

#

Don't import music

maiden fable
edgy osprey
shell wing
maiden fable
#

Yup. It is like a computer running 24/7

#

Its literally a virtual computer

shell wing
#

i have never used any vps

maiden fable
#

Its easy actually

shell wing
#

can u suggest some vids explaining it ?

quaint scaffold
#

replit is borderline useless for your coding journey and bot

edgy osprey
#

Need to remove cogs = [music] ?

maiden fable
#

If u got a credit card, u can get a free Oracle VPS with Remote Desktop Protocol iirc, and 24 GB RAM

maiden fable
shell wing
maiden fable
#

also, u need to do "music"

maiden fable
shell wing
shell wing
maiden fable
#

Well, u need only 1 USD which will be refunded. Its done to check the authenticity of the card

shell wing
#

ooh

quaint scaffold
#

There will be no free trial a company offers that doesn't require you to put in a credit card to prevent bots and ensure users are humans.

maiden fable
#

Yea

shell wing
#

i can use my dads card...

edgy osprey
# maiden fable U know, ik u r importing youtubedl
from discord.ext import commands
import music

cogs = [music]

client = commands.Bot(command_prefix = "?", intents=discord.Intents.all())
for i in range(len(cogs)):
        client.load_extension(cogs[i])

class music(commands.Cog):
        def __init__(self, client):
          self.client = client```
shell wing
#

it wont be a issue...

maiden fable
maiden fable
#

just do "music"

shell wing
maiden fable
edgy osprey
edgy osprey
maiden fable
shell wing
quaint scaffold
#

Not sure how good it is, I personally use Contabo because it has better value for more powerful VPS', but if you need smaller ones (as a beginner), Hetzner's first option should be way more than enough.

maiden fable
#

Yups

shell wing
#
Oracle Cloud Free Tier
Always Free
2 Autonomous Databases, 20 GB each
Up to 4 instances of Arm Compute
200 GB block volume
10 GB object storage
``` is it good its always free..
maiden fable
#

Wym

#

Well, u know about Microsoft?

shell wing
#

yea

maiden fable
#

Oracle is also almost as popular as Microsoft in other fields

edgy osprey
quick gust
maiden fable
#

Ok I am out

quick gust
#

lmao

velvet tinsel
#

I regret coming here

#

I’m gonna go out as well

quick gust
maiden fable
#

Same with AWS but they keep the 1 dollar since if they start refunding it, then Jeff would start to become poor

quick gust
#

yes

dreamy sluice
#

Wdym?

#

wait I think I get what you mean

dark heron
#

wtf is self_bot=True

#

does it mean that bots can only respond to their own commands

worthy wagon
#

Pretty sure.

#

I've seen people pass "self_bot=True, reconnect=True"

#

I'm not sure what reconnect is though.

dark heron
#

the self thing

#

because i can't see a single point

#

unless ur using a self bot

modern fiber
#

Hey guys. how can I use await ctx.channel.send to sent a message to specific channel?

cerulean olive
dark heron
modern fiber
#

Where should I put this part?

outer parcel
#

guys im trying to make a minigame where the bot sends a random emoji

#

and 4 seconds later the message gets edited and asks you what emojis that was

#

but how would i wait for player input

#

the player needs to type the emoji name

cerulean olive
#

i am very tos

quick gust
#

!d discord.ext.commands.Bot.wait_for

unkempt canyonBOT
#

wait_for(event, *, check=None, timeout=None)```
This function is a [*coroutine*](https://docs.python.org/3/library/asyncio-task.html#coroutine).

Waits for a WebSocket event to be dispatched.

This could be used to wait for a user to reply to a message, or to react to a message, or to edit a message in a self-contained way.

The `timeout` parameter is passed onto [`asyncio.wait_for()`](https://docs.python.org/3/library/asyncio-task.html#asyncio.wait_for "(in Python v3.9)"). By default, it does not timeout. Note that this does propagate the [`asyncio.TimeoutError`](https://docs.python.org/3/library/asyncio-exceptions.html#asyncio.TimeoutError "(in Python v3.9)") for you in case of timeout and is provided for ease of use.

In case the event returns multiple arguments, a [`tuple`](https://docs.python.org/3/library/stdtypes.html#tuple "(in Python v3.9)") containing those arguments is returned instead. Please check the [documentation](https://discordpy.readthedocs.io/en/master/api.html#discord-api-events) for a list of events and their parameters.

This function returns the **first event that meets the requirements**...
hoary cargo
tacit token
#

hello guys. How can i set channels by id with database?

modern fiber
#

My brain is just broken atm

#

So why don't you help? animesigh_piratecord

cold sonnet
#

what does the error say?

tacit token
#

move

slate swan
#

!d discord init

unkempt canyonBOT
#

In order to work with the library and the Discord API in general, we must first create a Discord Bot account.

Creating a Bot account is a pretty straightforward process.

boreal ravine
tight mica
pliant nacelle
#

hi everyone thats a json file
"channel_name_template": "## [@@game_name@@]"
i want to replace game_name with username

boreal ravine
#

why do use JSON as a database?

slate swan
maiden fable
#

Lmao

#

More of, cz he doesn't know that Mongo exists

boreal ravine
#

mongo doesn't suck

maiden fable
#

Yea ik

#

Edited the message. Was talking with someone else, so wrote the wrong message

slate swan
maiden fable
#

An online NoSQL db which stores data in JSON-like format/dicts

#

!pypi pymongo can be used to use the db

unkempt canyonBOT
slate swan
maiden fable
#

Okay

#

Was talking about atlas tho. That's the one I use most of the times, since no need to host a db

maiden fable
#

Yea u can host one yourself

#

Atlas is just a MongoDB provider