#development

1 messages ยท Page 1567 of 1

lyric mountain
#

Bots aren't easy projects

#

Not for a beginner

glacial pagoda
#

Ik

lyric mountain
#

About your question, guildMember doesn't exist

glacial pagoda
#

How Do i make It Exist

modest smelt
#

I want to get someone's bank balance in dank memer through a bot. The embed with the user's info is the last message, but how do I read the embed and get the actual bank balance? discord.py

earnest phoenix
#

problem: something is not defined
solve: define something lol

lyric mountain
glacial pagoda
#

ye

lyric mountain
#

Unless you have some global vars file, that's all you have to work with

glacial pagoda
#

Oh

lyric mountain
#

Read the docs for the lang/lib you're using, that's all the reference you'll ever need

glacial pagoda
#

Ok

drifting wedge
#

with open(".cogs.games.easy.txt", "r") as dictionary: is this correct?

earnest phoenix
drifting wedge
#

it keeps saying file not found

earnest phoenix
#

how the file structure looks like?

modest smelt
#

I want to get someone's bank balance in dank memer through a bot. The embed with the user's info is the last message, but how do I read the embed and get the actual bank balance? discord.py

drifting wedge
#

well its cogs > games > the file

drifting wedge
#

the file the code is in is in the games

#

folder

modest smelt
earnest phoenix
#

try cogs/games/easy.txt

modest smelt
#

oh i didnt get the ping

regal inlet
#

how do i upvote mafia bot

lyric mountain
#

Click vote on its page

drifting wedge
#

worked ty

earnest phoenix
#

Well, a message can have multiple embeds, so you get the first one

regal inlet
#

how

modest smelt
#

like not the description

#

but the second element

earnest phoenix
#

second field?

modest smelt
#

yeah that

#

the second field

lyric mountain
modest smelt
#

how would i do that?

regal inlet
#

k

earnest phoenix
#

then just embed.fields[1], embed is the first embed I was talking about

modest smelt
#

ok

lyric mountain
#

Ok, nvm

regal inlet
#

huh

earnest phoenix
#

It'll return an EmbedProxy that has name and value attributes btw.

#

bro i correct it and now the error is :

#

code is :-

`def get_prefix(client, message):

with open("prefixes.json", "r") as f:
    prefixes = json.load(f)

    return prefixes[str(message.guild.id)]

client = commands.Bot(command_prefix = get_prefix, help_command=None)`

#

if someone invited your bot while it's offline, the key will not exist

#

i am now doing rial only

#

assuming you're dumping it in on_guild_join

#

my bot is in my trial server

earnest phoenix
earnest phoenix
solemn leaf
#

okay time to talk to people who dont know what switch statements are

#

wassup

earnest phoenix
#

Why on earth is it jsno

#

well doesn't matter anyway

#

๐Ÿ˜†

#

i have to re invite my bot ?

solemn leaf
#

wait json db?

earnest phoenix
#

then will it work ?

#

ya

#

That's the unlike option I'd choose

#

๐Ÿ˜•

#

if it was a public bot, why would you let people to re-invite it just to make it work? Instead, handle the error. You could do either:

  1. try and except, then dump it on exception
  2. if statement to see if the key exists, if not dump it
  3. use dict.get which can return a default value if the key doesn't exist
#

ok

earnest phoenix
#

should i use mango db ?

#

postgresql

sage bobcat
#

One message removed from a suspended account.

#

One message removed from a suspended account.

#

One message removed from a suspended account.

earnest phoenix
sage bobcat
#

One message removed from a suspended account.

#

One message removed from a suspended account.

trim saddle
#

do you have a vps?

sage bobcat
#

One message removed from a suspended account.

#

One message removed from a suspended account.

#

One message removed from a suspended account.

#

One message removed from a suspended account.

earnest phoenix
#

What should I use as a database

#

Pick what suits your project, I found relational DB convenient

#

Ok

#

I have do many more like

#

Timed mute

#

Warning

#

And more ....

hardy vector
#

if you just need something basic use mongo i guess

#

and self host your own instance on a vps

earnest phoenix
#

There are services that provide that, but I do self-host it on the same machine

sage bobcat
#

One message removed from a suspended account.

#

One message removed from a suspended account.

earnest phoenix
#

yeah i snatched that flowchart from dnet

sage bobcat
#

One message removed from a suspended account.

#

One message removed from a suspended account.

#

One message removed from a suspended account.

long marsh
#

Anyone here successfully implemented sharding with discord.js?

#

For some reason, my sharding manager hasn't actually spawned any new shards ... it's up to about 1.4k servers on a single shard. Unless that's by some default higher number than 1,000?

solemn latch
#

i thought default was 2500

long marsh
#

Good to know

solemn latch
#

i dont actually know, lemme see if i can find it in the docs

long marsh
#

Is 2,500 recommended? I've seen 1,000 recommended in various places.

solemn latch
#

1500 is recommended to start sharding, the number you use is as much as a single thread can handle.

#

many bots use over 2500 with internal sharding.

limpid moth
#

I'm trying to make an embedded message and I keep getting this warning "UnhandledPromiseRejectionWarning: DiscordAPIError: Cannot send an empty message"

long marsh
#

How can I set that defined number? I tried setting it ... but it ended up spawning multiple shards over and over again ๐Ÿ˜„

long marsh
limpid moth
#

I don't know how to fix it though

long marsh
#

Send content in your messages ๐Ÿ˜„

limpid moth
#

I tried looking up solutions but none work

long marsh
#

Can't be clear on that without the code ๐Ÿคทโ€โ™‚๏ธ

solemn latch
#

op its 1000 by default

limpid moth
#
            const embed = new Discord.MessageEmbed()
            .setColor('#f1fab9')
            .setDescription(`${message.author}'s avatar!`)
            .setImage(message.author.displayAvatarURL({ dynamic: true }))
            .setTimestamp()
            .setFooter('Wanted someone else\'s avatar? Tag them in the command!');
long marsh
limpid moth
#

That is the code for the creation of the embed

long marsh
limpid moth
#

I have discord defined as discord.js

long marsh
#

Where is the setTitle()?

limpid moth
#

Are titles necessary?

long marsh
#

I thought so ๐Ÿคทโ€โ™‚๏ธ - could be wrong

limpid moth
#

It gave me the same message when I changed the description to title.

long marsh
earnest phoenix
#

no

long marsh
long marsh
#

How is it sending the embed?

earnest phoenix
#

can someone tell how i can send an array into a text file, does i need fs ? or i can do something without it

limpid moth
#
        if (!message.mentions.users.size) {

            try {
            const embed = new Discord.MessageEmbed()
            .setColor('#f1fab9')
            .setTitle(`${message.author}'s avatar!`)
            .setImage(message.author.displayAvatarURL({ dynamic: true }))
            .setTimestamp()
            .setFooter('Wanted someone else\'s avatar? Tag them in the command!');

            message.channel.send({ embed });
            }
            catch(error) {
                message.reply('there was an error');
                console.log(error);
            }
        }
earnest phoenix
#

@earnest phoenix export a list of user with a certain badge

long marsh
mellow kelp
solemn latch
#

i dont even have any bots anymore, never got to the point i needed sharding

earnest phoenix
#

json?? no i mean i want to send the userlist into a .txt file

mellow kelp
#

well k then

#

you need fs in any case

earnest phoenix
#

and i don't want a lot a text files on my vps so i can send a txt file without fs?

earnest phoenix
mellow kelp
#

writing a txt file?

earnest phoenix
#

upload to discord and yes you can

earnest phoenix
#

i can without fs?

mellow kelp
#

o

#

yea

#

use the MessageAttachment class, providing the file path

long marsh
earnest phoenix
#

i have no idea how to do it with node but you need to generate the string, convert it to a buffer and then just send that buffer as a file

#

@mellow kelp but i need a file??

mellow kelp
#

um

#

what do you want to send again?

limpid moth
#

If you are storing data you should use sql databases

earnest phoenix
earnest phoenix
long marsh
earnest phoenix
#

oh no it's okay, i saw MessageAttachments on the docs and that's actually what i search i think

long marsh
#

I just used the options object and it works for me ๐Ÿคทโ€โ™‚๏ธ

#

I can additionally do message.channel.send('text here')

limpid moth
#

It sends an embed just gives an error

long marsh
#

Does anyone have a successful implementation of the sharding manager for Discordjs?

limpid moth
#

This is the embed it gives me an error in the terminal but still sends ๐Ÿคท

#

I also want the avatar to be larger like how dyno has it, but I couldn't find a solution

mellow kelp
#

for the size, use the size option on the avatar url method

limpid moth
#

Ok

earnest phoenix
#

are you sure the error is coming from there

limpid moth
#

All of the guides I found used 256 which didn't change the avatar's size but using 2048 is a good size in my opinion

#
const Discord = require('discord.js');
module.exports = {
    name: 'avatar',
    description: 'Gets your avatar or the avatar of the tagged user!',
    execute(message) {

        if (!message.mentions.users.size) {

            try {
            const embed = new Discord.MessageEmbed()
            .setColor('#f1fab9')
            .setDescription(`${message.author}'s avatar!`)
            .setImage(message.author.displayAvatarURL({ dynamic: true, size: 2048 }))
            .setTimestamp()
            .setFooter('Wanted someone else\'s avatar? Tag them in the command!');

            message.channel.send(embed);
            }
            catch(error) {
                message.reply('there was an error');
                console.log(error);
            }
        }

        const avatarList = message.mentions.users.map(user => {
            return `${user.username}'s avatar: <${user.displayAvatarURL({ dynamic: true })}> \n Wanted your avatar? Don't tag a user in the command`;
        });

        message.channel.send(avatarList);
    },
};
earnest phoenix
#

actually it could be, you're not awaiting send so that try catch won't work

limpid moth
#

Full command file

crimson vapor
#

1024 is big enough

limpid moth
#

I don't get any errors with my ping command

crimson vapor
#

most people don't have a big pfp

mellow kelp
#

imagine misspelling that

earnest phoenix
#

i presume it's the last few lines that are causing your problem

mellow kelp
earnest phoenix
#

you can't send an array

#

you have to join it to a string

crimson vapor
#

@slim heart are you still alive? I need help

limpid moth
#

Ok

#

So its the other part

#

Ok

#

Ty

slim heart
#

currently dead but sure what's up

limpid moth
#

I need to make an embeed for that

#

L8er

#

But ty

earnest phoenix
#

โœจ and it was an xyproblem all along โœจ

limpid moth
#

ty

#

:)

slim heart
#

don't define intents or only define the few that you want

#

in master options

crimson vapor
#

I thought you had defaults

slim heart
#

it does

crimson vapor
#

thats why its intents?

slim heart
#

don't define it

crimson vapor
#

I didn't

#

kekw

slim heart
#

it should default to all intents but privileged ones

#

pain

#

uh

#

just sent intents to the array of intents u want

crimson vapor
#

I grabbed the basic intents from the intents calc

slim heart
#

u can make it an array

earnest phoenix
#

i used Buffer.from() function

crimson vapor
mellow kelp
slim heart
#

or try settings intents to false

crimson vapor
#

shouldn't it default to standard intents?

#

why does irt error

slim heart
#

yeah idk

#

try and log master.options.intents after new Master

crimson vapor
#

could you dm me that

#

so ill do it tomorrow

#

im getting more error

slim heart
#

intents: Array.isArray(options.intents)
? options.intents.reduce((a, b) => a | Intents[b], 0)
: options.intents === true
? Object.values(Intents).reduce((a, b) => a | b, 0)
: options.intents
? options.intents
: Object.values(Intents).reduce((a, b) => a | b) &~ Intents['GUILD_MEMBERS'] &~ Intents['GUILD_PRESENCES'],

crimson vapor
#

sadly it worked before I pulled

slim heart
#

idk what could be wrong

crimson vapor
#

whatever

#

still what is up with that error?

#

how do I fix?

slim heart
#

that means the worker is failing to start

#

check code

crimson vapor
#

fuck intents

slim heart
#

just use an array of intents

pale vessel
#

Intents good

slim heart
#

should be typed

crimson vapor
#

fixed

#

I had bad intents

slim heart
#

oe

crimson vapor
#

I think

long marsh
#

I have this,

const manager = new ShardingManager('./src/bot.js', { token: Config.Bot.token });

manager.on('shardCreate', (shard) => console.log(`Launched shard ${shard.id}`));
manager.spawn();

My discord bot hasn't actually spawned any new shards even though it's been placed in over 1k servers? Am I doing something wrong?

crimson vapor
#

how many shards does it spawn?

#

none or just 1?

long marsh
#

Just 1

slim heart
#

the recommended is 1k per shard

crimson vapor
#

likely because discord thinks it only needs 1

slim heart
#

if you want more shards u have to set it manually

long marsh
#

It's in 1.4k right now ๐Ÿค”

#

Shouldn't it have spawned another automatically?

#

Making it 2 shards?

slim heart
#

once you hit 2k it will

trim saddle
#

berry

long marsh
#

Wait ... what?

#

OH

slim heart
#

it's 1k per shard

#

so if u have 1k it's still 1 shard

#

2k = 2 shards etc

long marsh
#

So the first 1,999 servers are all on 1 shard?

slim heart
#

u can lower it to like 700 servers per shard or something

long marsh
#

That's technically almost 2k servers to 1 shard

slim heart
#

yeah

long marsh
# slim heart yeah

Thanks for filling me in. I thought I was doing something wrong. Thank you.

slim heart
#

a shard can reliably handle more than the max, which is 2.5k it's not debilitating to have 2k on one shard

long marsh
#

Yeah, def. I'm not worried about it.

#

I was just concerned thinking I wasn't doing something correctly.

slim heart
#

i mean u can forcefully shard

#

not terrible

#

depends on your workload

long marsh
old cliff
#

1.4k shards ?

long marsh
#

oops - 1.4k servers ๐Ÿ˜„

trim saddle
#

how exactly do you make sharding in a lib

slim heart
#

shards aren't really for lag preventation but yeah

long marsh
#

Damn, they aren't?

slim heart
#

you just spawn multiple connections skull lol

#

not for the bot no

long marsh
#

I know Discord forces you to shard

#

For auth?

slim heart
#

for discord it's useful

trim saddle
#

it doesn't force you to do anything

slim heart
#

and less load on them

long marsh
#

I thought discord did force you to shard?

slim heart
#

at 2.5k yeah

trim saddle
#

but discord recommends sharding for ease on them

long marsh
#

Yeah, that's what I thought.

slim heart
#

discord has a shard count calculate endpoint that is used by default

#

so if u leave it undefined discord decides how many shards to spawn

long marsh
#

Which library do you work on?

slim heart
#

i have lib dev for the top.gg js library

long marsh
#

๐Ÿ‘

#

Good stuff, I use it.

slim heart
#

pog

long marsh
#

@top.gg/sdk ?

slim heart
#

yessir

long marsh
#

Perfect! 0 problems. Thanks for your contribution on that!

slim heart
#

ye lol

crimson vapor
#

yeah im still having issues with intents

#

can you send me the intents you test with?

long marsh
#

Thank god I don't use them ๐Ÿ˜„

crimson vapor
#

lol

#

@slim heart

slim heart
#
const config = require('./config')

const Master = require('../master')


const master = new Master(require('path').resolve(__dirname, './worker.js'), {
  token: config.token,
  cache: {
    members: true
  }
})

master.start()```
#

lmao

long marsh
#

"Make your bot into a moderation bot", they said. Screw that.

slim heart
#

i dont define the intents

long marsh
#

Is that your own client, Stinky?

slim heart
#

wip

crimson vapor
#

new pfp

#

I like it

slim heart
#

tyty

crimson vapor
#

for discord when?

slim heart
#

i used to lmao

crimson vapor
#

idk man you actually look like spiderman

slim heart
#

but i like frog

long marsh
slim heart
#

try setting intents to true

crimson vapor
#

if you had different glasses

long marsh
#

Exactly

slim heart
#

the caching is just toggleable lol

long marsh
#

It seems fully customizable.

#

Yeah, I'm using Tim's library.

slim heart
#

and built in clustering mmLol

long marsh
#

light-discord.js

#

No issues so far ๐Ÿ‘

#

Worst comes to worst, Tim gets hit by a bus and if no one maintains it ... I'll just interchange it out with Discord.js again.

slim heart
#

@crimson vapor just realized im having the same issue

crimson vapor
#

bro your lib is trashhhhhhhhhhhhh

slim heart
#

ill fix it 1s

crimson vapor
#

jk

long marsh
#

Imagine having a lib.

crimson vapor
#

but actually

#

please fix this

slim heart
#

lmfao the loop of reconnects

crimson vapor
#

no loops

#

just errors

slim heart
#

well if u have disallowed intents what do u expect smh

crimson vapor
#

bro just fix

slim heart
#

errors right there just fix it 9head

crimson vapor
#

default to 32509

#

since thats all but shitty ones

slim heart
#

yeah it does

#

the warnings are just borked some how

#

intents: true
enables all intents

crimson vapor
#

hmm

#

but it enables intents most people don't have

slim heart
#

omfg

#

i figured it out

crimson vapor
#

lol what

slim heart
#

i fuckin compared to options.intents rather than this.options.intents

#

๐Ÿ˜ฉ

crimson vapor
#

LOL

slim heart
#

ok i pushed

crimson vapor
#

I fuckin deleted the this.initMongo() and was confused why my db wouldn't connect

solemn leaf
#

How are you

crimson vapor
#

and my cache is working well

#

now im doing way less requests

#

~1/2 of the normal requests

solemn leaf
#

nice

long marsh
#

Another quick question - is there any referenced documentation for catching DiscordAPIErrors?

crimson vapor
#

@slim heart add ctx.content which is message.content minus the prefix shit

long marsh
#

'Cannot execute action on a DM channel' would be something I'd want to avoid in the future by just filtering those out all together

cinder patio
#

don't log the error depending on it's error code

long marsh
solemn leaf
#

well

#

disableDM

#

isnt it?

long marsh
#

Is it that simple ๐Ÿ˜„

crimson vapor
#

I would just if !message.guild?.id return

#

ez

long marsh
#

Is that a client parameter?

solemn leaf
#

message.channel.type === "dm"

pale vessel
#

message.guild will be null on DMs

long marsh
#

Ah!

#

message.channel.type == 'dm' or !message.guild

pale vessel
#

Yes

long marsh
#

Got it.

#

Thanks! I'll add that to my filter.

solemn leaf
#

well we all just gave working ways

#

flaze

#

give me canvas help

pale vessel
long marsh
#

Is it custom for most bots to allow dm's? Or do most popular bots not allow them?

#

Not that it matters, just curious.

solemn leaf
#

I dont allow mine

pale vessel
#

My bot doesn't allow it

solemn leaf
#

bcs I dont need them

pale vessel
#

It breaks my prefix stuff

solemn leaf
#

^^

pale vessel
#

and people would just spam it

crimson vapor
#

I don't do anything about it

long marsh
#

True

solemn leaf
#

well you can do like

pale vessel
#

Most bots are meant to be used inside guilds anyway

long marsh
#

I just added error reporting to actually notify me of uncaught errors lmao.

solemn leaf
#

message.channel.type === "dm" && message.content === ${prefix}help {...}

long marsh
#

That Discord webhook about to be SPAMMED

#

Kidding, lol

crystal wigeon
#

hey guys so i have a question

solemn leaf
#

Thomas legit the only reason you would need dms would be for like help commands

crimson vapor
#

fuck dm helps

#

fuck them

#

fuck anyone that does that

solemn leaf
#

they arent a object

pale vessel
#

Yeah it's annoying

long marsh
solemn leaf
#

flazee

#

give me cavnas code

pale vessel
#

Some people disable their DMs

long marsh
#

Not only is it annoying to navigate to dms - but it may also pose another problem of lack of permissions to be able to send dm's.

pale vessel
long marsh
#

Exactly

crystal wigeon
#

lets say i have a queue that is put in a promise.all that would finish executing any element in the queue array, how do i remove the finished item from the queue? queue.shift() would remove the first one, but it whouldn't if its not rfinished

solemn leaf
#

queue.shift makes [0] be gone

#

and [1] be [0]

crystal wigeon
#

var userQueue = [user1, user2];

function initUpdateQueue() {
setInterval(() => {
Promise.all(userQueue.map(async (u) => {
await updateUser({ id: u.id }, u);
var temp = clone(userQueue);
temp.shift();
userQueue = temp;
}));
}, 1000 * 5);
}

#

yeah ik

#

but if user2 finishes and user1 is still executing

#

it shouldnt remove that from the queue

solemn leaf
#

what?

crystal wigeon
#

i mean

solemn leaf
#

check length of the array

pale vessel
#

You can't use async inside methods like map() and forEach()

solemn leaf
#

idk what you mean exactly

pale vessel
#

They ignore it

crystal wigeon
#

i need to remove the item that finishes first

#

if [0] has not finished but [3] has finished

#

i need to remove 3

#

not 0

solemn leaf
#

well remove it

#

use its index

crystal wigeon
#

ah splice

solemn leaf
#

flaze give canvas code for lego @pale vessel

earnest phoenix
#

Asking for code multiple times despite being ignored, funni

crimson vapor
#

Give canvas code for Tom Scott @pale vessel

#

Pls bro

solemn leaf
#

yeah pls

agile lance
#

Any idea why m.createdTimestamp returns NaN?

#

Code: message.reply('Pinging...').then(m=> { m.edit('Pong! '+Date.now() - m.createdTimestamp+'ms')

crimson vapor
#

Because math and numbers

agile lance
#

Lol

crimson vapor
#

Put date and time stamp in ()

agile lance
#

I did

pale vessel
#

Surround your calculations with parentheses

agile lance
#

Then got m.createdTimestamp is not a function

pale vessel
#

I-

agile lance
#

Lmao

pale vessel
#

"Pong" + (now - timestamp) + "ms"

agile lance
#

Ok

crimson vapor
#

Iโ€™ll show my code

agile lance
#

It worked, Youโ€™re a life saver

crimson vapor
#

module.exports = {
name: 'ping',
requiredPermissions: undefined,
owner: false,
description: 'Get the bot's ping',
run: async (message, args) => {
await message.client.responses.smallEmbed(message, 'Pong!')
await message.client.responses.smallEmbed(message, Pong! (${Math.round(Math.random() * 100)}ms))
}
}

#

Poggers code? @pale vessel

pale vessel
crimson vapor
#

Kekw itโ€™s so I can copy and paste the command

#

and have all the shit

pale vessel
#

Ok 8/10

crimson vapor
#

Why 8?

pale vessel
#

~~Because two space indent, no double quotes, and no semicolons ~~

crimson vapor
#

Lol

#

2 > 4

pale vessel
#

It's based

crimson vapor
#

single > double

#

semi > none

#

My bad on that one

pale vessel
#

Interesting

agile lance
#
const DC = require("discord.js");
module.exports = {
name:"serverinfo",
run: async(client, message, args) => {
    var memberCount = message.guild.members.cache.filter(u => u.user.bot == false).size 
let TOMATO = new DC.MessageEmbed()
.setTitle("**Server info**")
.setColor("RANDOM")
.addField("Member Count",""+message.guild.memberCount+"")
.addField("๐ŸงHumans๐Ÿง" , memberCount)
.addField("๐Ÿค–Bots๐Ÿค–" , message.guild.members.cache.filter(u => u.user.bot == true).size)
.addField("Channels Count" , ""+message.guild.channels.cache.size+"")
message.channel.send(TOMATO)
}
}
#

Why is the bots and humans returning 1?

#

Before my bot got verified it worked. Now itโ€™s verified on discord and doesnโ€™t work.

pale vessel
#

You need to cache members

agile lance
#

It worked fine before verification though

pale vessel
#

Did you request for the guild members intent?

#

You need that in order to fetch all guild members

agile lance
#

I did and I got asked to provided screenshots of it, So I did and a week later and it was verified

pale vessel
#

Try adding await message.guild.members.fetch() to the first line of your code

#

That makes sure that all members are cached

icy skiff
#

Hello, I'm developing a bot with the discord.py package and using python's built-in SQLite3 to store users/guilds settings. Eventually I want to host my bot on Heroku, but since it loads the database from github and SQLite3 is a local database, restarting the bot would result in losing everything after the bot started running. Is there a way to solve this without having to move the database to something like Postgresql? Thanks :)

pale vessel
#

I'm afraid not

#

You'd have to use remote database

#

Heroku offers free PostgreSQL database, maybe use that?

icy skiff
#

Ye, I knew about that, I was Just too lazy to change the whole code database system pandasad

#

But ok seems like ill have to do It anyways, thanks :]

agile lance
#

.cache and without both return without a function

pale vessel
#

Are you on Discord.js v11?

agile lance
#

Discord v12.5

#

also sorry for the reply ping

long marsh
#

What is the best way to create a blacklist of users? Load ids into a map and call it day? Before each command, check to see if the user is in the map? O(1) complexity?

long marsh
# tired panther yes, thats the easiest way

I appreciate it! Do you have any recommended ways for storing a huge list of user ids like that? I wouldn't want to throw it in my NoSQL database since I'm charged per every kb pulled from it ๐Ÿ˜ฌ

#

I guess most people just use a database table for that ๐Ÿคทโ€โ™‚๏ธ

tired panther
#

@long marsh Which language are you using?

long marsh
#

Yeah, that should work. I appreciate it. I may just store it in my database for now; however, I'll look into that.

#

Thanks!

tired panther
normal sage
floral creek
#

any C# devs?

tribal siren
pale vessel
#

You don't need that intent for that

agile lance
#

Ok so

#

now i have another issue

#

client.guilds.cache.size returns Cannot read property of 'cache' of undefined

pale vessel
#

client.guilds is undefined

#

Are you sure you passed the client correctly?

#

Log client

agile lance
#

Ok

#

It logged slot

#

alot*

#

logged aloooottttt

pale vessel
#

Think It shouldn't be undefined then

agile lance
#

yeah lemme ss the errornfor i

#

for u*

agile lance
#

quite unusual

tired panther
#
FetchError: invalid json response body at https://hastebin.com/documents reason: Unexpected token < in JSON at position 0
    at C:\Users\shahn\3D Objects\Botcode\rewritten br\node_modules\node-fetch\lib\index.js:272:32
    at processTicksAndRejections (internal/process/task_queues.js:97:5)
    at async C:\Users\shahn\3D Objects\Botcode\rewritten br\commands\Dev\ex.js:153:36
    at async C:\Users\shahn\3D Objects\Botcode\rewritten br\commands\Dev\ex.js:149:26 {
  type: 'invalid-json'
``` I was trying to post something, but its not working
agile lance
#

Did you use a POST request instead of a GET request?

tired panther
#

yes

pale vessel
abstract iron
#

do you guys know how to run asyncio.gather() outside an async function?

summer acorn
#

can I use vs code to just search some specific code and then a part is a any, like for example yes = "*"

#

I tried with an asterisks but it did not do the thing

crystal wigeon
#

hey guys

#

umm so

#

when there are 100 users concurrently making calls to DB the response time keeps increasing

#

it went from 20ms to 130ms for 100 calls wtf

#

16gb ram and a 4cpu db

rustic nova
#

I'd suggest to start caching then imo

jovial nexus
#

what does it mean when a shard is ready but the bot didnt restart?

signal summit
#

Anyone knows what's the current Ratelimit for DMing a user or users globally ?

earnest phoenix
#

hi guys

#

how can i get number of members in a voice channel?

#

if i have channel id and guild id

#

i could get the snowflake of .members

summer torrent
#

what lib

#

.members.size in discord.js

earnest phoenix
#

bruh

#

it works

#

=)))

#

i tried members.length

#

thanks @summer torrent

summer torrent
#

members is not array

crystal wigeon
#

and in the get call there are like 200k+ rows which i obv cant cache

brazen violet
#

can i know that my code is right or not for posting votes?

const DBL = require('dblapi.js');
const dbl = new DBL(`mytoken`, { webhookPort: 5000, webhookAuth: 'kristabisop' });

dbl.webhook.on('vote', vote => {
  console.log(`User with ID ${vote.user} just voted!`);
  
  const webhook = new Discord.WebhookClient("806564380589293568" , "xEuuucsqFPdJ5JsOTONgGzGP-sHmSCaqdY_gBc8TNAVse11C8H3-TO-QwlTVvIpV3oi5")
  
  webhook.send(`<@!${vote.user}>, Just voted the Order It!! \n\nThanks for you great support mate :)`)

});
#

it should work yes?

earnest phoenix
#

redact your webhook token

#

someone's going to spam it

brazen violet
#

ik

crystal wigeon
#

time to fire up my bot nets

brazen violet
#

its old one

crystal wigeon
#

xd

#

idk waht to do

#

TwT

#

if it takes like 1.2kms per call

#

its non scalable

crystal wigeon
#

also dblapi is depricated i thnk

#

they moved to node-sdk

brazen violet
#

umm?

earnest phoenix
#

dblapi.js is deprecated

#

use @top-gg/sdk

crystal wigeon
#

@top-gg/sdk

#

ye that

earnest phoenix
brazen violet
earnest phoenix
#

new library for js

brazen violet
#

oh

#

@earnest phoenix can u help me how to setup it ?

#

or anyone ?

fluid basin
#

just read the docs?

#

there is an example if you go to the npm page

brazen violet
#

can i get the link?

fluid basin
brazen violet
#

thx

modest maple
#

webhooks dont no

brazen violet
#

ok

fluid basin
#

do you need webhooks?

#

if not follow the other example

brazen violet
#

which other example?
i only see the autoposting example and webhook

fluid basin
#

yes, the autoposting one

brazen violet
#
app.post('/dblwebhook', webhook.middleware(), (req, res) => {
  // req.vote is your vote object e.g
  console.log(req.vote.user) // 221221226561929217
})

I dont use express so what should i put in app?

earnest phoenix
#

you need to use it

#

webhooks are reverse APIs, top.gg makes a request to your ip/domain instead of you making a request to their domain

brazen violet
#

oh

earnest phoenix
#

this could've been easily avoided if top.gg just hosted a WS server

fluid basin
#

oh oops misread what you need

#

lol maintaining a WS server costs more than just making http requests

brazen violet
#

umm

earnest phoenix
#

it really doesn't

#

especially when you compress your data stream

fluid basin
#

its not about compressing

#

you need to maintain an active connection

earnest phoenix
#

yes

fluid basin
#

which takes resources

#

like heartbeating/pinging

earnest phoenix
#

and those resources are cut down by compressing

#

less data to send

fluid basin
#

bruh the CPU still needs to make heartbeat

#

lets say there is 10k bots connected

#

every min or so

#

it needs to send out 10k pings to the connected clients

earnest phoenix
#

i'm aware

#

it's not as tasking as you think it is

#

if not gameOver: mark = "" if turn = ctx.author: if turn = player1: mark = "๐Ÿ‡ฝ" elif turn = player2: mark = "๐Ÿ…พ๏ธ"
got an error :-

if turn = ctx.author: ^ SyntaxError: invalid syntax

fluid basin
#

thats true, ask veld/team ppl then

earnest phoenix
#

compare that to people who are actively making REST requests

#

a ws is just another type of protocol

#

in both cases you still need to have a listener

fluid basin
#

well true

#

but processing on-demand is quite different than being actively sending

earnest phoenix
#

= =/= ==

brazen violet
#

i use glitch for hosting so what is my ip address?

fluid basin
brazen violet
#

thx

fluid basin
earnest phoenix
#

ironic, i thought about making that like half a year ago

#

just a simple WSS server

fluid basin
#

O.o

#

and?

earnest phoenix
fluid basin
#

= is not ==

#

if you want to check equal, use the latter

earnest phoenix
#

Ok

#

Not = I have to use == right ?

fluid basin
#

try it and see

#

but yes

earnest phoenix
#

K

fluid basin
#

there isn't = there

brazen violet
#

btw can we use discord.js client and express at once?

earnest phoenix
#

yes

#

your app is not just your discord client nor is it just your express server

#

your app is an... app

#

you choose what to do inside of it

brazen violet
#

bruh i cannot make it work

#

its doing nothing

fluid basin
#

then you didn't set it up properly

#

make sure the port and ip is correct

#

and the auth password is the same as the one you put in your bot edit page

brazen violet
#

i have

#

i make app and make it listen to 5000 and i got the ip and puted in bot edit page

quartz kindle
#

Is it on a vps or your own pc?

modest maple
quartz kindle
#

ex dee

quartz kindle
#

It doesnt use ip

quiet topaz
#

How can I connect to mariaDB in java (maven)

crystal wigeon
#

any solutions?

brazen violet
#

it gave me ip

fluid basin
quiet topaz
#

ok

quartz kindle
#

The correct url is not an ip

#

also they dont allow you to use port 5000

brazen violet
#

bruh then what can i do ?

quartz kindle
#

The correct url is https://YOURPROJECTNAME.glitch.me/WEBHOOKPATH

#

And the correct port is process.env.PORT

brazen violet
#

oh

#

thx let em try

earnest phoenix
#

needing assistance with the bot

crystal wigeon
#

anyone know postgres?

earnest phoenix
#

how can i get it to start registering chats to my ark survival ps4 servers?

brazen violet
quartz kindle
#

.listen(process.env.PORT)

earnest phoenix
#

help

#
/home/runner/Maimy-Bot-V2/index.js:29
        delete require.cache[require.resolve(`./commands/${fileName}.js`)];
                                     ^

TypeError: require.resolve is not a function```
tired panther
#

probably you copied the code from somewhere and did not copied all of them 1037_hehepepe

tired panther
earnest phoenix
tired panther
earnest phoenix
tired panther
earnest phoenix
quartz kindle
#

you pc? a vps? glitch/heroku/replit?

earnest phoenix
tired panther
#

tim, I have a problem with my reload command, it does not reload commands ๐Ÿ˜ฆ , Let me send the code

quartz kindle
#

repl.it uses ES modules instead of CommonJS

#

ES modules do not support require.cache and require.resolve

tired panther
#
const resolveFolder = folderName => path.resolve(__dirname, "..", "..", folderName);
        const commandsFolder = resolveFolder("commands");
        fs.readdirSync(commandsFolder).map(async(dir) => {
            if (dir.endsWith(".txt")) return;
            fs.readdirSync(path.join(commandsFolder, dir)).map((cmd) => {
                const pull = require(path.join(commandsFolder, dir, cmd));
                delete require.cache[pull];
                client.commands.delete(pull.name);
                client.commands.set(pull.name, pull);
                if (pull.aliases) {
                    pull.aliases.map((p) => client.aliases.delete(p));
                    pull.aliases.map((p) => client.aliases.set(p, pull));
                }
            });
        });
        console.log("All Commands Have been reloaded.");
#

Is not working lol and it does not give any error

quartz kindle
#

deleting from the cache requires the module path, not the module itself

#

also, deleting it after requiring it is dumb

#

and dont use .map if youre not returning anything

grizzled raven
#

i hate using forEach just because it looks dumb (and because it returns undefined and thats boring) lmao

#

i'm just

quartz kindle
#

but... if you're not returning anything anyway, you want to return undefined lmao

#

also yikes, async map

outer perch
#

Is this right?

oldBoolean == true ? newBoolean = false : true;
newBoolean == true ? toggle = 'on' : 'off';
slender thistle
#

== for comparison

#

I'm... not smart

pale vessel
#

huh

slender thistle
#

I'm rather curious why you would do that

pale vessel
#

why not just newBoolean = !oldBoolean?

earnest phoenix
#

You can assign something inside ternary?

pale vessel
#

yes

#

can you do something = True if True else something = False

earnest phoenix
#

nah

#

discord.ext.commands.errors.CommandInvokeError: Command raised an exception: TypeError: unsupported operand type(s) for +: 'int' and 'str'

#

something = False is a statement sadly

#

how will i know in which line the error is ?

slender thistle
#
>>> something = True if True else x = False
  File "<stdin>", line 1
    something = True if True else x = False
                ^
SyntaxError: cannot assign to conditional expression
earnest phoenix
slender thistle
#

Print the traceback

outer perch
earnest phoenix
#

which line how i will know

slender thistle
#

How are you handling your errors?

crimson vapor
#

how should I properly replace all occurances of say {{guild.name}} and {{user.name}} in a string without doing many different replace functions?

earnest phoenix
slender thistle
#

Yes

earnest phoenix
#

If you don't handle it, you should be able to see the traceback ig

earnest phoenix
#

@tictactoe.error
async def tictactoe_error(ctx, error):
if isinstance(error,commands.MissingRequiredArgument):
await ctx.send("Please mention two person for this commmand :watching_you:")
elif isinstance(error,commands.BadArgument):
await ctx.send("Please make sure to mention players :alert:")
else:
raise error

crimson vapor
#

@pale vessel you alive?

pale vessel
#

Did some experiment

#

That works good

crimson vapor
#

yo

#

you're actually smart

#

wtf

#

can you send the code

pale vessel
#

Instead of a string, you can provide a function

#

The code?

crimson vapor
#

ye

#

copy paste

pale vessel
#
"{{name}} {{owner}}".replace(/{{(.+?)}}/g, match => {
    switch (match.slice(2, -2)) {
        case "name": return "Name";
        case "owner": return "Owner";
    }
});```
crimson vapor
#

ty

earnest phoenix
#

just retype it smh lol

crimson vapor
#

no thanks

slender thistle
#

yo norizon

earnest phoenix
#

sup qt?

slender thistle
#

Do command-specific raises move on to global error handlers?

#

like the one above

pale vessel
#

BigBrain js let str = "{{guild}} {{guild}}"; while (str.includes("{{guild}}")) str = str.replace("{{guild}}", "Guild"); str; // "Guild Guild";

crimson vapor
#

bruh

pale vessel
#

joke

crimson vapor
#

why would anyone want that

slender thistle
earnest phoenix
crimson vapor
#

wtf is this is not shit

earnest phoenix
slender thistle
#

Do you have an on_command_error event?

drifting axle
#

how can i make a flying avatar on top.gg

#

^-^

earnest phoenix
crimson vapor
#

@slim heart I evaled process.exit() and got Segmentation fault (core dumped)

earnest phoenix
slender thistle
#

show

earnest phoenix
#

k

earnest phoenix
# slender thistle show

@client.event async def on_command_error(ctx, error): if isinstance(error, commands.CommandNotFound): await ctx.send(f"Can't find that command, send ]help to view a list of commands")

slender thistle
#

is that all

earnest phoenix
#

ya

#

๐Ÿ˜“

slender thistle
#

Do you not get a full traceback when an error occurs?

earnest phoenix
#

ya i get

#

ah wait @slender thistle

#

i had forgot to scroll down

#

the error line was shown

#

๐Ÿ˜†

tired panther
forest drift
#
message.guild.roles.cache.forEach(role => console.log(role.name + " | " + role.id))

im trying to list all roles in a server which ive managed to do above, but now i want to make it so itll only list the roles thats name starts with args(0)

forest drift
#

ok ill try that

#

thanks

quartz kindle
#

like this

crimson vapor
#

I would have done if(role.name.startsWith(args[0]))

quartz kindle
#
require.cache = {
  "C:/users/USERNAME/desktop/bot/node_modules/somemodule/index.js": module
}
forest drift
#

i tried adding an if function but it outputed a ton of errors

quartz kindle
#

so to access or delete it from the cache, you need to obtain the full module path

#

for this you can use require.resolve("module") to get the full path, then run:

#

delete require.cache[FULL PATH OF THE FILE]

forest drift
#
message.guild.roles.cache.forEach(role => if(role.name.startsWith(args[0])){console.log(role.name + " | " + role.id)})

would that work?

crimson vapor
#

perhaps

#

try it

forest drift
#

k

cinder patio
#

it won't

crimson vapor
#

shh

forest drift
#

SyntaxError: Unexpected token 'if'

crimson vapor
#

how do you think you should fix this?

forest drift
#

by finding an alternative to 'if'?

crimson vapor
#

thats 1 solution

forest drift
#

or by having almost no understanding on the whole forEach function and its rules

crimson vapor
#
message.guild.roles.cache.forEach(role => { if(role.name.startsWith(args[0])) {console.log(role.name + " | " + role.id)} })```
or 
```js
message.guild.roles.cache.forEach(role => role.name.startsWith(args[0]) ? console.log(role.name + " | " + role.id) : null)
forest drift
#

oooooooooooooooh ok

#

i remember seeing something like thgat in a document for .forEach but it made it a lot harder to understand

crimson vapor
#

foreach takes a function

#

role => role.name.startsWith(args[0]) ? console.log(role.name + " | " + role.id) : null is a function

#

so is role => { if(role.name.startsWith(args[0])) {console.log(role.name + " | " + role.id)} }

cinder patio
#

for each just loops over an array / map and calls the provided function on each iteration

#

you can achieve the same thing with a for loop

#

or any loop

earnest phoenix
forest drift
#

ok

cinder patio
#

(it's even recommended to use a loop over forEach)

earnest phoenix
#

๐Ÿ˜“

#

๐Ÿฅบ

earnest phoenix
#

k

slender thistle
#

Sorry for you

earnest phoenix
#

๐Ÿฅบ

earnest phoenix
#

gone to debug console then ?

crimson vapor
#

ig

#

how do you think you should figure out if the command is running

#

and then do that

slender thistle
#

error come = look at console

earnest phoenix
#

ok

slender thistle
#

careful read

crimson vapor
#

bruh

slender thistle
#

see error traceback = carefuler read

crimson vapor
#

lol

slender thistle
#

see sense-making details = look at code

#

investigate code

#

fix code

earnest phoenix
#

ok

eager grail
#

i want help with node fetch, i need to get property of json nested arrays from an api

cinder patio
#

That's not really node-fetch related but okay

misty sigil
#

thing[0][1][2] etc. innit?

eager grail
#
{
  "tag": "#P2U0GVJP",
  "name": "DYNAMIC FIGHTER",
  "nameColor": "0xff1ba5f5",
  "icon": {
    "id": 28000043
  },
  "trophies": 16395,
  "highestTrophies": 16395,
  "highestPowerPlayPoints": 71,
  "expLevel": 104,
  "expPoints": 57365,
  "isQualifiedFromChampionshipChallenge": false,
  "3vs3Victories": 1677,
  "soloVictories": 206,
  "duoVictories": 722,
  "bestRoboRumbleTime": 6,
  "bestTimeAsBigBrawler": 0,
  "club": {
    "tag": "#RPVU92GC",
    "name": "Royal Lynx"
  },
  "brawlers": [
    {
      "id": 16000000,
      "name": "SHELLY",
      "power": 8,
      "rank": 21,
      "trophies": 511,
      "highestTrophies": 556,
      "starPowers": [],
      "gadgets": [
        {
          "id": 23000255,
          "name": "FAST FORWARD"
        }
      ]
    },
    {
      "id": 16000001,
      "name": "COLT",
      "power": 8,
      "rank": 21,
      "trophies": 549,
      "highestTrophies": 560,
      "starPowers": [],
      "gadgets": [
        {
          "id": 23000273,
          "name": "SPEEDLOADER"
        }
      ]
    }```
#

this is the api

crimson vapor
#

what are you trying to get?

eager grail
#

i can get tag, name, easily

#

cuz they are above

#

im trying to get those brawlers array fully

misty sigil
#

its just .brawlers

#

bro

eager grail
#

how to get each brawlers data and its properties

misty sigil
#

<APIresponse>.brawlers is an array

cinder patio
#

by using Array.map or just looping through it

misty sigil
#

you can loop through it with .forEach / for

eager grail
#

smone says to use this

const res = await fetch('https://api.brawlstars.com/v1/players/%23P2U0GVJP', { method: 'get', headers: { 'Content-Type': 'application/json', 'Authorization': 'Bearer <my token>' } });

const data = await res.json();

async data.brawlers.forEach((b) => {
  console.log(b);
});
cinder patio
#

That async shouldn't be there, other than that, sure

eager grail
#

if i remove tht async, it says await is valid only with async

lyric mountain
eager grail
#

ok....

lyric mountain
#

. gets a file/folder

#

so let's say name of the first brawler

#

it'd be brawlers[0]/name if it was a folder

#

so brawlers[0].name

forest drift
eager grail
#

ohh ok, then?

lyric mountain
#

now you just need to iterate over the contents of brawlers folder, because it doesn't have a single file but many unnamed folders

cinder patio
lyric mountain
#

yeah, that ^

summer acorn
pale vessel
#

nice channel

lyric mountain
#

@drifting axle

drifting axle
#

ye

lyric mountain
#

it cancels because you're stating a fixed transform for the element

drifting axle
#

I removed it but it still does not work

lyric mountain
#

remove .avatar {

drifting axle
#

nothing

#

๐Ÿ˜ฆ

lyric mountain
#

try changing translatey to translateY

dire obsidian
#

Any npm lib to generate qr codes?

pale vessel
#

Yes, qrcode

crimson vapor
#

lol

pale vessel
#

Good lib

#

You could have searched for that

#

But sure

crimson vapor
#

flaze the entire time I had my mic unmuted, I was confused on why my db wasn't saving, turned out I was saving to the wrong collection

lyric mountain
umbral zealot
#

flazepe swooping in with a damaging left "gOoGlE iT" hook.

dire obsidian
#

Thanks

upbeat heron
#

lol i use heroku for bot hosting, the database just sorta died, like whenever i add a database, even an empty one, the whole bot just stops working now and i have no clue why

earnest phoenix
#

heroku isn't meant for bots so ๐Ÿคทโ€โ™‚๏ธ

#

rent a cheap vps

#

it costs you less than a mcdonalds trip

lyric mountain
#

heroku is actively trying to kill bots hosted in it

#

everything is against u

upbeat heron
#

they are?

#

and i have no money for a vps lol

pale vessel
#

How

#

Most people would have the money

#

It's just the payment method that could be a problem

lyric mountain
pale vessel
#

VPSes are SO cheap

agile lance
#

Repl.it offers 24/7 hosting 0 uptime with hacker plan

lyric mountain
#

glitch banned auto-pingers

agile lance
#

Which anyone can get 90 days free

upbeat heron
#

but repl doesnt have built in database

agile lance
#

yes they do

upbeat heron
#

they do?

agile lance
#

yep

umbral zealot
#

Absolutely they do

#

It's basic but it work fine

upbeat heron
#

hm where is it

#

im running a verfied bot on heroku lol

umbral zealot
#

there's a "database" tab on the left when you're in the repl editor

pale vessel
#

Heroku is nice

umbral zealot
#

can't miss it if you look

pale vessel
#

I hosted my bot on Heroku until recently where I moved to a VPS

#

Heroku is actually good if you can use it properly

#

I had Puppeteer working

upbeat heron
#

yeah ik, i might be able to get vps

#

but later

pale vessel
#

yea like a month ago

#

actually I had that forever

crimson vapor
#

which tier from where?

pale vessel
#

ok dms

drifting axle
#

why i have black line above

<html>
<body>
    <style>
    .entity-header__image {
        border-radius: 50% !important;
        /*border: 3px solid gold;*/
        animation: float 5s ease-in-out infinite;
    }
    @keyframes float {
      0% {
        box-shadow: 0 5px 15px 0px rgba(0, 0, 0, 0.6);
        -webkit-transform: translatey(0px);
                transform: translatey(0px);
      }
      50% {
        box-shadow: 0 25px 15px 0px rgba(0, 0, 0, 0.2);
        -webkit-transform: translatey(-30px);
                transform: translatey(-30px);
      }
      100% {
        box-shadow: 0 5px 15px 0px rgba(0, 0, 0, 0.6);
        -webkit-transform: translatey(0px);
                transform: translatey(0px);
      }
    }
    </style>
      <h1>123</h1>
</body>
</html>
crimson vapor
drifting axle
tired panther
#

@drifting axle thats the percentage, when your bot will be approved

drifting axle
#

Ok thanks

tired panther
#

thats like a %bar

#

Is there way to insert a web page in top.gg page?

gilded olive
#

iframes

tired panther
summer acorn
pale vessel
# summer acorn yes

aprix you've been on the development channel ever since you sent that "banned item" screenshot

summer acorn
#

oh

#

wrong channel sowwy

tired panther
#

xD

tired panther
pale vessel
#

You can omit it

summer acorn
pale vessel
#

Only src is needed

tired panther
#
<iframe id="inlineFrameExample"
    title="Inline Frame Example"
         width="300"
    height="200"
    src="https://hackmd.io/@meister03/mpdb">
</iframe>
``` I have this , I want that it fits in the page
tired panther
#

<meta name="viewport" content="width=device-width, initial-scale=1">

#

do i need this?

pale vessel
umbral zealot
#

you can also try a width and height of 100%

pale vessel
#

Height 100% hardly worked for me

#

You have to manually specify

spiral crag
#

guys i have a question, if i apply my bot for verification, will it look fishy that a lot of the servers the bot is in are by the same person?

tired panther
pale vessel
umbral zealot
pale vessel
#

As long as your iframe has content

tired panther
tired panther
pale vessel
#

Just add <!-- aaaaaaaaaaaaaaaa --> or something

tired panther
earnest phoenix
#

quick question

#

how do mac devs live with themselves

fathom slate
#

i need help
hmm does anyone know the autoresponder discord js module

umbral zealot
#

They live the shame by pretending rounded borders are cool

earnest phoenix
#

seriously mac is so unusable

#

it treats you like a baby so much to the point it's unusable

spiral crag
umbral zealot
spiral crag
#

i mean the servers my bot is

#

in

#

aint mine

umbral zealot
#

yes. make the bot leave the servers

spiral crag
#

how do you do that

umbral zealot
#

guild.leave() in discord.js

spiral crag
#

and how do you choose what server to leave

umbral zealot
#

You'll have to figure out how to find the servers owned by the same people and leave them, that's... not trivial and cannot be answered with one line of code

#

something like "search guilds for duplicate owners, sort them by how many servers one owner has, leave the extra ones" or something like htat

spiral crag
umbral zealot
#

inorganic growth = one or more server owners have your bot in multiple of their servers

#

that's all it means.

#

the other is suspicious growth, which basically translates to "oh you poor thing you got to 100 because you're on top.gg, well, deal with no growth for a few weeks"

spiral crag
#

@umbral zealot how many servers per person does not look fishy

umbral zealot
#

Discord has not and will not release the exact numbers on that

#

otherwise it would be too easy to game and get around

spiral crag
#

@umbral zealot the thing is i was spreading word about my bot and one of them really liked it and made a bunch of servers