#development

1 messages · Page 1636 of 1

wanton prism
#

im thinking more minimalistically maybe for now

ancient grove
#

Can soemone help me make my bot online??

#

i cnat get any apps

wanton prism
#

anyway thank you all

tired panther
ancient grove
viscid gale
#

0_0

tired panther
ancient grove
#

thank you 🌸

vivid fulcrum
#

here's a pro tip, make a template in photoshop that has circles cut out, then create an image layer in your code that places square avatars in their places and just put your template on top of that

#

ezpz

#

less processing and less struggle

#

i did that when i had my bot

#

the only thing generated here is the avatar, text, amount of coins and the coin image

#

the rest is just a template image

quartz kindle
#

You can just clip it on canvas

pale vessel
#

CRY'S BALANCE

tired panther
vivid fulcrum
#

excuse the horrid design this was 3 years ago 😔

pale vessel
#

weeb

eternal osprey
#

hey, how do i make certain commands not workable on certain servers?

#

would this work?

sudden geyser
#

Yeah, but you should make sure message.guild is not null and prefer === over ==

#

If it's going to be a collection of servers, you can have the server IDs in a collection (like an array) then see if the current server ID is in that collection (e.g. [1, 2, 3, 4, 5].includes(guild.id))

eternal osprey
#

No it's only 1 certain server that needs to be excluded of command usage

tired panther
sudden geyser
#

Then the if condition is suitable

eternal osprey
#

aha thank you guys!

viscid gale
#

uh.. not sure if anyone remembers.. so i'll start from the top.. with the constructive criticism of (100% of u when i talked about this first), i think i am AT LEAST closer to being able to hide client side script
if u doubt, https://hidejs-example.paultaylor2.repl.co/ it's still in a sketchy phase where you have to ALLOW POPUP

quartz kindle
#

Youre gonna hide the code in a popup? Xd

sterile lantern
#

why does my db save it as

#

"true"

#

instead of

#

true

#
db.set(`premium_${user.id}`, true)```
#

it saved as "true"

#

which results in errors

vivid fulcrum
#

probably because quickdb stringifies everything

sterile lantern
#

but

#

all my other stuff

#

saved as true

#

not "true"

vivid fulcrum
#

witchery i guess

stoic dock
#

Weird

sterile lantern
vivid fulcrum
#

you should probably take a more OOP approach with your database

#

instead of doing that

sterile lantern
#

wym

#

also btw if i detected true as:

#

if(thing === "true")

#

would booleans suffice

#

or otherway around

#

if(thing === true)

#

would "true" suffice

vivid fulcrum
#

instead of having an entry for every single property of a user, have a user id linked to an object. this will grant you type safety

db.set(user.id, {
  isPremium: true,
  coins: 6548949,
  gay: true
});

db.get(user.id);
/* 
returned:
{
  isPremium: true,
  coins: 6548949,
  gay: true
}
*/

quickdb was built for this kind of structure, it even allows you to access object properties via dot notation

db.get(user.id);
/* 
returned:
{
  isPremium: true,
  coins: 6548949,
  gay: true
}
*/

db.set(`${user.id}.isPremium`, false);

db.get(user.id);
/* 
returned:
{
  isPremium: false,
  coins: 6548949,
  gay: true
}
*/
#

people really need to start taking cs classes

stoic dock
#

Yep

vivid fulcrum
#

yall need to learn to structure your databases

sterile lantern
#

i mean

#

why would i do that tho

#

i dont save it all together

vivid fulcrum
#

"why would i drink out of a cup when i can just put my mouth on the tap??"

sterile lantern
#
db.set(user.id, {
  money: 1
});```
#

would this work

#

cuz if not then its essentially the same thing as

#

oh wait

#

nvm

#

i see

vivid fulcrum
#

such examples are even shown on quickdb's README

#

it's how to properly use it

sterile lantern
#

alr ill switch to this

#

but

#

is there a way to like transfer all the values

#

or do i have to manually write

vivid fulcrum
#

i don't think so, you'll have to either manually transfer it all or write a piece of code that gets all the values from your db and sorts them accordingly

sterile lantern
#

ill just manually do it

#

cuz

#

all of it is

#

like

#

money_userid, value
item_userid, true

#

so itd take ages regardless

vivid fulcrum
#

i mean

#

quickdb literally has an all() method

slender wagon
#

what's the limit of messages i can fetch in a channel?

vivid fulcrum
#

100 per request

slender wagon
#

so i have to make lots of requests if there is more than 100?

sterile lantern
#

wait but

#
let money = db.all().filter(data => data.ID.startsWith(`bank`)).sort((a, b) => b.data - a.data)```
#

how would i change this

sterile lantern
#

to fit the new structure

#
let money = db.all().filter(data => data.ID.startsWith(`bank`)).sort((a, b) => b.data - a.data)
       money.length = 25;
        let finallb = "";
        for (var i in money) {
          finallb += `**${money.indexOf(money[i])+1}.** <@${money[i].ID.slice(5)}> - \`${money[i].data}\`\n`;
        }```
#

a leaderboard

#

that displays values

#

from top to least

slender wagon
#

aight thanks

sterile lantern
#

top 25

quaint rampart
#

hey

sterile lantern
#

but im unsure how exactly to fetch each user id's balance and then order it like i did there

sterile lantern
#

no

#

quick db

vivid fulcrum
#

same like you did there, except data is going to be your user object

if you log data you'll get

{
  money: some number,
  ...
}
sterile lantern
#

hm

#

so would i just get startsWith(money)

#

and that would work?

vivid fulcrum
#

no

#

play around with your code

#

you'll figure it out

sterile lantern
#

i

#

hm

#

well then just fetch

vivid fulcrum
#

i'm going to take a shower lol sorry

sterile lantern
#

money

#

alr

vivid fulcrum
#

but anyway, don't be afraid to play around and experiment with your code

sterile lantern
#

im gonna transfer it tmrw and see if it works then

vivid fulcrum
#

i don't get what is up with so many people being afraid to try code and gradually fix it if it's buggy

#

i mean, welcome to development honey, that's what it is

#

trial and error

tame kestrel
#

people thinking that failure is bad LOL

boreal iron
#

May they are worried about it may explode or if CTRL + Z isn’t working anymore

solemn latch
#

failure is great. some of the days i learned the most i failed the most

tame kestrel
#

:)

viscid gale
quaint wasp
#

😐

#

one sec

dull terrace
#

Hi, I recently tried to change the preview of my bot page. The problem is that when I saved the new code, the page wasn't completely displayed as it should have been when I looked at the preview, the whole page was displayed correctly.

quaint wasp
#

I get an error saying "Cannot read property "send" or undefined."

solemn latch
#

log your message in the command

#

or like we talked about yesterday, make sure the order in index, and the commands execute function are in the same order

#

the order of the passed values

eternal osprey
#

uhhm whatt happened?

#
iscordAPIError: Missing Permissions
3|index  |     at /root/AwsomeModeration/node_modules/discord.js/src/client/rest                                                                                                                               /RequestHandlers/Sequential.js:85:15
3|index  |     at /root/AwsomeModeration/node_modules/snekfetch/src/index.js:215                                                                                                                               :21
3|index  |     at runMicrotasks (<anonymous>)
3|index  |     at processTicksAndRejections (internal/process/task_queues.js:97:                                                                                                                               5) {
3|index  |   path: '/api/v7/channels/722352240203137081/messages',
3|index  |   code: 50013,
#

it has no post messages permissions?

#

It just happened after restart the bot

unreal kiln
#

umm how do i fix this

vivid fulcrum
#

don't copypaste code and actually understand what you're writing

solemn latch
#

the error says lock.js not unlock.js

pale vessel
#

god damn

#

glitch + mac

#

for some reason it's a weird combination

misty sigil
pale vessel
#

ah

#

but still

misty sigil
#

god i hate that combo

pale vessel
#

you would expect mac users to be rich or at least can afford a proper hosting

misty sigil
#

i just don't like it

lyric mountain
#

white theme

earnest phoenix
#

Anyone got any idea why my bot says there's 56 members in a server while there's 53?

sharp ledge
#
[link text]([#support message](/guild/264445053596991498/channel/714045415707770900/))

btw how to make this work?

vivid fulcrum
#

put it in an embed description/embed field value

sharp ledge
#

must use bot?

vivid fulcrum
#

yes

#

or a webhook

sharp ledge
#

i see, thanks

analog garnet
#

Hey

solemn latch
#

and in the index 👀

quaint wasp
solemn latch
#

alright, try logging message in the command itself

quaint wasp
#

what do u mean in command again?

earnest phoenix
#

congrats on trial mod

solemn latch
#

ty

earnest phoenix
#

console.log(message);

#

in the help command exec

solemn latch
quaint wasp
#

WOW..

#

it worked..

#

Do I have to have it again?

solemn latch
#

👀

quaint wasp
#

it kinda..

#

fills up the terminal

earnest phoenix
#

it's meant to do that

distant temple
#

quick question, I'm trying to make a bot that detects nsfw messages is there any way to detect them?
im trying to use if message.is_nsfw():
but thats not working
im using discord.py

distant temple
#

yeah

slender wagon
#

U have to make a list of blacklisted words

earnest phoenix
#

^ and check them in the message event

distant temple
#

i was thinking that but i thought i would just check if this server has any answers

slender wagon
#

Thats the way through

vivid fulcrum
#

tldr there is no easy way

gilded olive
#

You can search them up on pypi youll find one

earnest phoenix
distant temple
vivid fulcrum
#

it depends what you classify as nsfw, if you're aiming at profanity you should just give up now before you rip your hair out - any profanity filter can be easily bypassed on discord because discord allows the full unicode charset

slender wagon
slender wagon
#

And u dont have to check for that if discord automatically detects that so yeah

quaint wasp
earnest phoenix
#

ok great 👍

slender wagon
vivid fulcrum
#

generally, no

#

such filters are only effective where services allow characters like a-z and shit

slender wagon
#

Yeah i see

vivid fulcrum
#

discord allows the full unicode charset which has around 143k characters

slender wagon
#

Dang

vivid fulcrum
#

so you're looking at 1900^143000 minimum possible combinations to bypass the filter

slender wagon
#

Damn crazy

vivid fulcrum
#

yeah, but when you think about it, a profanity filter isn't really... needed per se

#

discord is a 13+ service

slender wagon
#

True

torpid crown
#

Is this allowed?

vivid fulcrum
#

sure

#

if that's yours god you need to clear that up

#

the wording is messy and unprofessional

#

takes a while to understand

torpid crown
vivid fulcrum
#

penis?

#

there aren't 18+ words

#

in fact, there aren't any... age rated words

#

words are words

torpid crown
vivid fulcrum
#

pussy?

#

words aren't age rated

torpid crown
# vivid fulcrum pussy?

Don't you understand those 18+ (horny) who sents a 18+ videos link or that website that you will never go to it

vivid fulcrum
#

porn? lol

torpid crown
vivid fulcrum
#

again, words aren't age rated

torpid crown
#

Horny websites

vivid fulcrum
#

links are a whole different story

#

sending porn links is straight up NSFW content

torpid crown
#

Ahm

torpid crown
vivid fulcrum
#

i did

slender wagon
#

U could try and bypass slurs

#

And bypass links too the same way

torpid crown
#

I am taking about this

#

Is this allowed?

slender wagon
#

He said yeah

vivid fulcrum
vivid fulcrum
slender wagon
#

I meant block

vivid fulcrum
#

if you attempt to bypass link detection, you'll transform the link in one way or another, it won't be clickable anymore

slender wagon
#

My bad

#

I didnt mean bypass ee sorry

vivid fulcrum
#

got you

#

but again, links are a different story

slender wagon
#

Yeah ik

vivid fulcrum
#

links don't have context, it's just a simple structure that a computer can understand

understanding language and detecting bad words is a lot different

#

so if you ask me, link filter + optional api for nsfw image detection

#

the rest is useless

slender wagon
#

Yup

#

Doesnt image api check take a bit to be done?

vivid fulcrum
#

good point

#

it probably does

slender wagon
#

Yep

earnest phoenix
#

how can i show users that match the query.

#
m.bot.guilds.cache.forEach(x => x.members.fetch({
    query: metin
}))

kullanıcı = m.bot.users.cache.filter(x => x.bot &&
        x.username.toLowerCase().includes(metin.toLowerCase()))
    .map(o => o)
    .slice(0, 10)

im doing something like but it doesn't work

unreal estuary
#

what is m?

pale vessel
#

message

unreal estuary
#

ah

#

i dont think u can do message.bot

pale vessel
#

message.bot? isn't it message.client

#

unless he added that property manually

earnest phoenix
#

no

pale vessel
#

message.bot = message.client 🧠

earnest phoenix
pale vessel
#

oh

#

like context?

earnest phoenix
#

yeah

#

it is caching but the command does not work. The command works on my second try.

crimson vapor
#

why lol

#

why not use client

dusk scarab
#

hey, so I have this blacklist and im working with databases. My blacklist/antiswear is working perfectly well, but waht isnt working is my database. its not recording how many bonks (swears) have been given, any reason why? Please ping me if you know whats up! https://sourceb.in/4jCoHhf4ct

#

and i do have const BonkData = require(./models/BonkSchema.js)

sacred tangle
#

@slender thistle curious about when this will be released

fickle anchor
#

how do i make my bot online 24/7?

flat fog
#

Host it

fickle anchor
#

how tho

flat fog
#

I use heroku

fickle anchor
#

and then its on 24/7

flat fog
#

Yeah

fickle anchor
#

@flat fog do u have to pay for it?

flat fog
#

Not with heroku

dusk scarab
#

POG

#

THANKS

ripe prairie
#

well

#

heroku isn't the most reliable

#

but it is free

flat fog
#

Yeah

dusk scarab
#

free is all that matters at this pt

ripe prairie
#

it also has limited hours per month

#

so technically not even 24/7

dusk scarab
#

f

#

nvm then

flat fog
#

Add a credit or debit card and it's 24/7

dusk scarab
#

ill do what I do rn

ripe prairie
#

if you have a credit or debit card

dusk scarab
ripe prairie
#

at that point you might as well be using it

#

honestly

#

sites like vultr have a really cheap vps option

#

like $5 a month

#

or even less

flat fog
#

Ig

dusk scarab
#

anyone here experienced with databases tho?

#

because im having some trouble w/ mine

fickle anchor
#

@flat fog can u help me

ripe prairie
#

yeah good luck doing literally anything extensive on heroku

fickle anchor
#

ifk how to do it

ripe prairie
#

have you tried googling it

fickle anchor
#

yes

ripe prairie
fickle anchor
#

heroku was no help

ripe prairie
#

are you sure

sacred tangle
#

LOL

fickle anchor
#

i couldn't find out how to use it

sacred tangle
#

just mute him bruh

solemn latch
#

it takes time to learn how to use heroku.

sacred tangle
#

only then will he go and actually read stuff online

flat fog
#

Watch the videos

ripe prairie
#

it's really hard to tell you how to do this without literally spoonfeeding you everything

fickle anchor
#

would i have to do it from github?

ripe prairie
#

How to host your discord bot for free using heroku. This tutorial shows you how to host your python bot for free using heroku services. We simply need to setup a few things to heroku, upload our code and turn the bot on!

Text-Based Tutorial: http://techwithtim.net/tutorials/discord-py/hosting-a-discord-bot-for-free

Heroku: https://heroku.com
...

▶ Play video
#

bruv

solemn latch
#

tim? 👀

#

fake tim

ripe prairie
#

idk that was the first result

solemn latch
#

unsubscribed disliked

misty sigil
#

is that the real tim

pale vessel
#

is that the free replit hacker plan code guy

solemn latch
#

its budget tim

quartz kindle
#

Lmao

#

Or maybe i am the budget one

misty sigil
#

no

#

no way

#

impossible

quartz kindle
#

Well im not the one with a youtube channel xd

misty sigil
#

but you’re the better one

quartz kindle
#

xD

jolly mortar
#

rate limit go brrr

quartz kindle
#

Rip

solemn latch
#

!rename tim budget tim

sage bobcat
#

One message removed from a suspended account.

earnest phoenix
#

g

#

can someone help me to stop duplicating money whenever im trying to withdraw or deposit
https://cdn.obamabot.ml/u/DqOtVLn.png

if(isNaN(args[0])) return msg.reply('This is not a number');
            if(args[0] <= user.moneyBank) {
                user.moneyBank -= args[0];
                user.money += args[0];
                user.save();
                return msg.reply(`$${args[0]} Has been withdrawn to wallet, now u have $${user.moneyBank} on Bank`);
            }
            else {
                return msg.reply('Don\'t input more money than u have');
            }

this is the withdraw command

quartz kindle
quaint wasp
#

Why can it not define 0 again?

sudden geyser
#

args is undefined

quaint wasp
#

..

#

One sec I think I know how to fix it..

sudden geyser
#

Check how you called the function

quaint wasp
#

guys

#

The bot sends me THIS:

#

when the code is THIS

#

Why does it not add thoe fields?

craggy pine
#

Too many I would assume

quaint wasp
#

😦

#

y

craggy pine
quaint wasp
#

so

ripe prairie
#

you probably need to make a paging system

quaint wasp
#

I just add onather addFields( )

#

pagging?

#

like ++help fun?

#

I tryed

#

didnt succed..

craggy pine
#

That's more categorizing than pagination.

#

But sure.

#

Probably too advanced.

ripe prairie
#

^

#

maybe

quaint wasp
#

then whats pagination?

ripe prairie
#

like you have 10 commands on page one

#

10 on page 2

craggy pine
#
Example

(Wait for reactions to appear)

ripe prairie
#

and like, 5 on page 3 cuz you only have 35 commands

#

etc.

quaint wasp
#

o

craggy pine
#

like so

quaint wasp
#

Idk how to do that tho

#

its pretty hard..

long crow
#

I press on the reactions, no response

ripe prairie
#

yea it is

craggy pine
#

obviously.

long crow
#

Kekw

quaint wasp
#

lol

#

if he was a bot there would be

#

lol sometimes bots respond to giveaway

ripe prairie
#

that'd be the like

#

confetti

craggy pine
#

If I was self botting I wouldn't be here.

quaint wasp
#

same..

craggy pine
#

But regardless.

quaint wasp
#

I already got banned ones so I dont even wanna try cuz.. there will be no way back.

craggy pine
#

Related to the issue above. You really need to study discord.js docs and in general JS. I'm prettttttty certain things like the amount you're allowed to have is easy to find. Even a quick google would specify that.

long crow
#

Iirc, limit for addfield is 26

quaint wasp
#

😦

ripe prairie
#

25

long crow
#

Ah 25

ripe prairie
#

but yeah close

#

so you might either wanna look into categorization

quaint wasp
#

d.js didnt even gave a shit about it and just got rid of them on message without even like... telling me

ripe prairie
#

or pagination

quaint wasp
craggy pine
#

He said look into it

#

not that discord.js talks about it

quaint wasp
craggy pine
#

Also another option is what we do

ripe prairie
#

^ categorization (of a different form)

quaint wasp
#

But I dont wanna do ++help [command], and I WILL need to do that if I do that..

craggy pine
#

Wat

#

Well

ripe prairie
#

it's not ++help [command], more like ++help [category]

craggy pine
#

If u want the descriptions of the commands yes u will need to do that.

ripe prairie
#

^

craggy pine
#

But in general.

#

Here's a thing

#

Since I see you ask alot in here about things that seem out of your reach.

nimble kiln
#

Just attach a commands.txt on your ++help command and nothing else

craggy pine
#

Not everything is made using discord.js

quaint wasp
craggy pine
#

categorizing and paginations will use some bits of it, but in general it's a JS thing

#

so learning JS is a plus

quaint wasp
#

wait

ripe prairie
#

learning d.js != learning js tbh

craggy pine
#

^^^^^^^^^^^^^^^^^^^^^

quaint wasp
#

I kinda do know some of JS it self

craggy pine
#

You know tutorials

#

and some like copy pasta things

quaint wasp
#

yes

craggy pine
#

that's not learning

quaint wasp
#

like 10h vds...

#

ya

#

ik those

#

I dont wanna go back into watching those really..

craggy pine
#

Then stop watching videos

ripe prairie
#

no one said you have to

craggy pine
#

LEARN the langfuage

ripe prairie
#

best way to learn coding is just doing stuff

craggy pine
#

^

ripe prairie
#

e.g. pagination

quaint wasp
ripe prairie
#

ok, then don't be unhappy that you can't do something

#

because that's what learning is about lol

quaint wasp
#

im not lol

craggy pine
#

Learning a language like JS and coding

quaint wasp
craggy pine
#

is not asking why a thing doesn't work every time it doesn't.

#

it's figuring it out yourself

#

and learning from the mistakes

quaint wasp
#

I did..

#

thats why u see me here ones a day

#

and not 25 times an hour like it was a month or so ago

craggy pine
#

I do recall someone mentioning your passed name doing the exact same thing for quite a while.

quaint wasp
#

😐

#

hey, thats the ban command.

#

Those are hard

latent heron
#

not really.

craggy pine
#

Ban is like

#

Incredibly ezpz

#

like sooo easy.

quaint wasp
#

...

latent heron
#

so

craggy pine
#

I don't know JS and can make it np with JS

latent heron
#

i think instead of us bashing on someone here

quaint wasp
#

Im doing it for months now and u telling me this?

latent heron
#

let's be constructive instead

ripe prairie
#

now, if you had to code the actual ban thing without discord.js, then it'd be hard

#

but that does sound fun

latent heron
#

I think to put it blunt,

earnest phoenix
#

So im having trouble depositing a specific amount to my bank
as shown here
https://cdn.obamabot.ml/u/68joLnX.png

if(isNaN(args[0])) return msg.reply('This is not a number');
            console.log(user.moneyBankSpace - user.moneyBank);
            if(args[0] <= user.moneyBankSpace - user.moneyBank) {
                user.money -= parseInt(args[0]);
                user.moneyBank += parseInt(args[0]);
                user.save();
                return msg.reply(`$${parseInt(args[0])} Has been transfer to bank, now u have $${user.moneyBank}`);
            }
            else {
                return msg.reply('U dont have money that kind of money to store at your bank');
            }

has u see one of the lines that console.log ive gotten this
3005

craggy pine
#

Sirius, havent seen that name in a minute.

#

unless name change.

latent heron
#

i'm fl0w.

craggy pine
#

Ah hi fl0w

quaint wasp
#

me?

latent heron
#

So Smug

#

If I may ask you a question

#

How long have you been tinkering with d.js?

quaint wasp
#

uhhhhhhhh

quaint wasp
earnest phoenix
latent heron
#

I'm being serious

#

how long have you messed around with the library?

ripe prairie
#
if(args[0] <= user.moneyBankSpace - user.moneyBank)```
quaint wasp
#

for a... while?

ripe prairie
#

i think this is the issue @earnest phoenix

latent heron
#

alright

#

and how long have you known JS?

ripe prairie
#

if you're depositing user balance to bank, you should check args[0] to user balance

#

not bank balance

quaint wasp
latent heron
#

so

#

I think as a common practice among programmers

#

It's rather a mutual sentiment that you test things on not your own, and not only this, but regularly refer to docs before coming to a development channel, correct?

earnest phoenix
latent heron
#

I think people are a little more irritated about how you've opted to this channel instead of trying to necessarily tackle things on your own if that's the right way to word it

#

Hence why some may seem riled up about you talking in here

craggy pine
#

Another thing if I may add.

#

There were passed things about ignoring actual help and avoiding questions sorta like the cat thing

quaint wasp
latent heron
#

Are you a beginner to d.js?

ripe prairie
#

^ admitting that you're new is not a bad thing btw

#

so don't be afraid to

craggy pine
#

Indeed.

#

I'm incredibly new.

latent heron
#

I'm still new to d.py BTW

#

Don't feel bad if you are

craggy pine
#

But I do want to point out.

quartz kindle
#

Sirius Black

latent heron
quaint wasp
ripe prairie
#

well, the thing is

#

just because you spent months on something

#

doesn't always mean you're good at it

quaint wasp
#

tho I took a break between ..... big one,, so kinda forgot smt stuff

ripe prairie
#

so it definitely varies

craggy pine
#

Indeed.

quaint wasp
#

true

ripe prairie
#

like i've been doing python for about 5 years but i still use .json as a big-scale database

craggy pine
#

.json dbs POGSLIDE

latent heron
#

Well,

#

Being a JS programmer for months and working with the d.JS API wrapper for "a while" are two distinctively different things.

quartz kindle
#

When i started with discord.js it took me several days to figure out how to send a message to a different channel

quaint wasp
quaint wasp
#

and still use it sometimes today

quartz kindle
#

The guide was not as good back then

latent heron
#

I've known Python for over 6 years, but that doesn't make me good at it

quaint wasp
quartz kindle
#

And quite honestly i sucked at js back then

ripe prairie
#

i think that's why you're getting that error

latent heron
#

What I have currently gathered as a consensus Smug

#

is that you've been given help numerous times and recommended to check out docs and debug things on your own accord

#

but supposedly you go against that advice?

quaint wasp
#

bro

#

Were you here a week ago or smth?

#

I was here like every hour

#

now im here rarly

latent heron
#

Smug

#

I was banned for almost 4 years in this server

quaint wasp
#

and I do go to dos..

latent heron
#

I just got unbanned 2 weeks ago.

quaint wasp
#

o

latent heron
#

Xignotic was the one who appealed me,

#

Tafina accepted it.

quaint wasp
#

well I mean.. I was banned for few months as well...

craggy pine
#

oops

latent heron
#

I'm curious of why

quaint wasp
#

almost a year

ripe prairie
#

LMAO

earnest phoenix
quartz kindle
#

Xd

craggy pine
#

u saw noithing

quaint wasp
craggy pine
latent heron
#

oh dear

craggy pine
#

That's where it kinda became a thing.

ripe prairie
#

it's a 2 parter

#

but you only have one part of it

latent heron
#

Okay

ripe prairie
#

good luck

latent heron
#

Let's say that's just an isolated incident

#

Brains do go brr at times

craggy pine
#

Well it's the first but just come to mind.

quaint wasp
#

u looked it up..

#

😐

craggy pine
#

Bec I was there mexShrug

latent heron
#

Is there a way we can accurately prove "growth" by how they ask questions instead of the amount asked?

#

Messages over time is not an accurate method of determining progression of grwoth.

quaint wasp
ripe prairie
#

accurate?

#

no

#

subjectively?

#

yes

quaint wasp
#

doesnt that mean. Im solving some stuff?

#

I mean

latent heron
quaint wasp
#

today I solved like 40 errors..

latent heron
#

Did you actually count that many errors you fixed

ripe prairie
#

possibly

latent heron
#

Or did you just pull that number off the top of your head

quaint wasp
#

no

ripe prairie
#

¯_(ツ)_/¯

quaint wasp
#

I was fixing them for like past 2 hours..

quartz kindle
#

How many of those errors did you also create? xD

latent heron
#

Did you actually watch the time that passed

#

Or did you just pull that time off the top of your head

ripe prairie
quartz kindle
#

Wasnt it 127 bugs in the code

ripe prairie
#

im not sure, im pretty sure it literally overflowed

quartz kindle
#

Or some stupid number

ripe prairie
#

create so many bugs that it just becomes 0

quaint wasp
#

lol

quartz kindle
#

bug overflow

quartz kindle
#

xD

solemn latch
#

just have a 2 bit number for your bug counter

ripe prairie
#

im surprised stackoverflow hasnt just rebranded to that yet

solemn latch
#

👀

quaint wasp
quartz kindle
#

Is there an npm lib for arbitrary length numbers?

#

Could be a fun thing to do

latent heron
#

so this is what i'm getting:

  • you used to be very ignorant about d.js at first and opted to only here after watching some YT tutorials
  • you were given advice and help on numerous occasions to help with said problems and made steps to grow but kept coming to here
  • you now have some disputable "experience" under your belt with d.js and JS respectively, but come to #development asking questions arguably answered by using common sense. (ie. createObject needing an obj/creates one.)
quartz kindle
#

ie create a 4 bit number

latent heron
#

I'm going to then say that you are in some way growing and/or progressing in the right direction, however, most if not all of that growth is being fueled by... #development .

solemn latch
#

for js?

#

how would you do something like that 👀

quaint wasp
quartz kindle
latent heron
#

hm

quaint wasp
#

guys one sec, ill be back later.

solemn latch
#

stupid method i know, but could you map numbers inside a js number?
ie first 4 bits are x
next 8 bits are y
next 8 bits are z 👀
almost like managing memory at that point, and totally terrible but 🤷‍♂️

quartz kindle
#

Sure you can

#

Thats basically what bitwise does

solemn latch
#

bit wise of course!

lament rock
#

bitwise logic is nice. Discord does a pretty good job at providing an example, but it's starting to get to the point where they'll overflow the JS max safe integer which is why they're switching to strings which would require BigInt logic

quartz kindle
#

Bigint would kinda be better for bitwise

#

Bitwising bigints is 500x slower than bitwising numbers

#

But strings are 2000x slower

lament rock
#

Does bitwise logic against strings coerce the strings into numbers first?

quartz kindle
#

Ye

#

You need to go back and forth

#

You need to string split before converting to number

#

To avoid overflow

lament rock
#

yikes

quartz kindle
#

Bitwise only supports 32 bits

#

Not even the full js 52 bits

#

Any number bigger than 32bit will be truncated when bitwising

#

But bigint bitwise has no limits

#

Its just slower

lament rock
#

The time consumption is negligible

quaint wasp
#

back

#

🙂

solemn latch
#

wb

quaint wasp
#

?

lyric mountain
#

Did I hear...

#

PAGINATION??1? zoomeyes zoomeyes

#

(sweats aggressively)

solemn latch
#

AngryDoggo no pagation

latent heron
#

i got it to work with my bot and never again am i touching it

solemn latch
#

angeryBOYE I hate it from the using perspective

lyric mountain
#

Pagination

#

It is nice, but requires one hell of mind computing to make it work properly

craggy pine
#

Icarus KuuHaku pagination system when Kappa

lyric mountain
craggy pine
#

Working with it myself, not a fan KEKW

lyric mountain
#

I mean, we can try to migrate to p-utils

craggy pine
#

I think Dwight had "some" issue with it conflicting. Idk what tbh but something

#

But certainly an idea I'd be down for.

lyric mountain
#

Will talk with him later to see if it's viable

craggy pine
#

Tbh I was joking but tbh we don't have a "system" i don't belive since our stuff is different for the task at hand

lyric mountain
craggy pine
#

Tho ur stuff likely will resolve our reaction issue

#

We did try to do more work on it yesterday poking around with commenting things out, trying it differently.

#

Icarus really really hates emojis appearntly.

earnest phoenix
#

can u chat here for help about discord.js etc?

#

cause just incase anyone needs help

#

ill try my best

#

wait nvm sorry my bad

errant perch
#
bot.roles.fetch('811732497472684032').then(role => {
  console.log(role)
})```
#

anyway to fetch a role by its id directly like this?

solemn latch
#

guild.roles.fetch works, not sure if you can do all roles though

slender thistle
sacred tangle
#

ight

drifting wedge
#

why use =>?

errant perch
#

because it doesnt require you to cache the role as it pings discord's api for the information

#

or like javascript in general?

drifting wedge
#

wot

unique shore
#

hi everyone, I made an npm package that generates the basic structure of a discord bot using discordjs library, I based it on the discordjs.guide website, please let me know if this is something you'd use, what could be improved, bugs, anything at all, it's my first npm package
https://www.npmjs.com/package/create-discordjs-app

#

feel free to ping me or dm with any feedback you may have

lethal trout
#

wdym it is called log.js

solemn latch
dark crest
#

y its not warking?

earnest phoenix
#

i want to increase members in my server

#

how can i do this ?

tall flame
#

@solemn latch is that on developer portal?

solemn latch
#

yeah

craggy pine
craggy pine
dark crest
tall flame
#

@solemn latch and 1 more question, how can i verify my private bot?

solemn latch
#

private bots dont need verification

craggy pine
#

i don't see by id

dark crest
#

after the ||

craggy pine
#

gotcha i see it now

tall flame
#

private means only i can add but we need to verify coz people's think verified bot are safer

solemn latch
#

well, verification isnt possible for private bots.

dark crest
tall flame
#

like u want to add in ur server for test right

solemn latch
#

we dont handle discord verifications, which is what im guessing your asking for.

craggy pine
dark crest
#

oh

#

ok

tall flame
#

Ohh lol i thought this is discord verification, Im dumbest

dark crest
#

thx anyways

proven lantern
solemn latch
#

or the link i posted above

proven lantern
#

is args[0] !m or the user id?

unique shore
# dark crest

I think that'll just give you an error like "cannot get X of undefined"

dark crest
proven lantern
#

is that user online?

#

i think they need to be online to get them from the cache

solemn latch
#

users are not guaranteed to be in cache

#

even if online

sacred trout
#

hey I want to make an anime search command in discord.py can anyone help?

#

;-;

stark abyss
#

what exactly is anime search

sacred trout
#

Like .search death note

stark abyss
#

like looking up anime info from name?

sacred trout
#

Yes

stark abyss
#

you can use an api or some npm package

sacred trout
#

Which api

stark abyss
#

explore man 😔

proven lantern
#

wikipedia might have a good api

stark abyss
#

literally looked up mal api and i see a good one for python

solemn latch
#

be careful with some anime api's. lots of animes have nsfw cover photos, easily can start sending nsfw stuff in sfw channels if your not careful.

stark abyss
sacred trout
#

Idk how to use it doe

#

Can I take the wiki api as a reference?

stark abyss
#

(hm idk python sorry maybe someone else might help)

sacred trout
#

Np

unique shore
#

@dark crest

 try {
      let tomute = message.client.users.fetch(
        message.mentions.users.first().id ||
          message.guild.members.cache.get(args[0])
      );
    } catch (error) {
      message.reply("please mention a user");
    }

this will get the user mentioned or by ID, but absolutely put it in a try catch

lethal trout
#
const client = require('../index')
const Discord = require('discord.js')
const logs = require('../models/logs')

client.on("messageUpdate", async (oldMessage, newMessage) => {
const channel = oldMessage.channel
    if (oldMessage.content === newMessage.content) return;
    const data = await logs.findOne({
        guildID: newMessage.guild.id,
        channelID: newMessage.channel.id,
        MessageUpdate: true
    });
console.log(data)
    if (data) {
//const targetchannel = client.channels.fetch(data.channelID)
//console.log(targetchannel)
        const embed = new Discord.MessageEmbed()
            .setAuthor('A message has been edited!')
            .setThumbnail(oldMessage.author.displayAvatarURL({ dynamic: true }))
            .setColor('#FF0000')
            .addField("Edited by:", oldMessage.author.tag)
            .addField("Edited in:", oldMessage.channel)
            .addField("Edited at:", oldMessage.createdAt)
            .addField("Before:", oldMessage.content)
            .addField("After:", newMessage.content)
            .addField("URL:", `[Click Me](${oldMessage.url})`)
            .setTitle('Message Edited!')
            .setTimestamp()
        client.channels.fetch(data.channelID).then(c=>c.send(embed))
    } else {
        return
    }
})```
#

um..

#

there is a id in the db and i need to get the channel id

#

but i always get null

#

that means nothing

#

but there is smth

#

wow

#

no wonder

#

i did console.log(data.guildID) and it sent that^^

#

how to fix it?

opal plank
#

first, each message can only have a total of 6000 characters, and each field can only have 2000

#

second to that, addFields() is a thing

#

you arent checking for any of that

#

also by default discord.js has channels cached

#

no need to fetch it with requests

#

that wont scale at all

slender thistle
#

Description is 2000, right?

#

Footer is what, 2048?

opal plank
#

also you're checking if data was returned, but you are not checking for anything inside of it

opal plank
opal plank
slender thistle
#

Time to dig up the good ol' R.Danny tag

opal plank
#

the general rule is 2000 per field, with a total no longer than 6000

opal plank
slender thistle
#

kekw

opal plank
#

even less for the other fields it seems

#

so yeah, that wouldnt work at all

#

it'd break easily on large messages

#

that command is full of holes

#

you also arent even checking if the fetch was successfull

lament rock
# unique shore hi everyone, I made an npm package that generates the basic structure of a disco...

Was looking through this and I'm confused why this is an npm package and not just something hosted on GitHub where people clone. npm is usually only for peer dependencies; Not a module with no exports or interface.

Next, I read the index and I liked the usage env vars.

What I didn't like was the fact that you assign client.commands to an instance of import("discord.js").Client instead of extending the Client class and using that. Arbitrarily assigning values to instantiated Objects is not type safe. Users who use TypeScript or VSCode's implicit project type checking (CheckJS) or any other editor which has TypeScript based static type checking will run into errors where there will be an error stating that client.commands does not exist. This is almost non-negotiable as static type checking is something a lot of people use/should use.

I then checked the commands folder and was immediately gravitated towards the reload command. I don't think you were effective when it comes to memory management, since simply dropping the require cache and re-requiring the file is not good enough. Timers which are instantiated from a reloaded file will keep ticking. Chances are that users won't provide references outside of that file either. listeners may also stack. Adding an EventEmitter which emits dirs to reloaded files so that users can unreference timers and listeners is crucial.

That's all I bothered to look at

slender thistle
#

Woohoo I'm doing weird stuff with guild data

opal plank
#

trying to deal with fame now

#

3k guilds

#

mom im famous, grab the camera

slender thistle
opal plank
opal plank
#

commandClient handles everything for you

lament rock
#

I like lower level interfaces

opal plank
#

ratelimits, parsing, custom prefixes, literally everything you need

#

just take a single look at what detritus offers

#

this is just per command, everything is optional

#

you have more options on the handler itself

#

its all neatly done

#

and its hard for me to praise something

delicate zephyr
#

Hey Erwin,
You used eris before?

opal plank
#

nope

delicate zephyr
#

oof

opal plank
#

only d.js and now detritus

lament rock
#

Seems rather bloated for my use case

opal plank
#

and after detritus, i dont plan on moving

delicate zephyr
#

Was wondering if you would know if I could change whats store in presences in eris to lower ram usage

opal plank
#

its an all in one lib

delicate zephyr
#

Just took over shiro so am handling 20k guilds now

opal plank
#

i would recommend not caching it at all tbh

#

detritus has cusomizable caching, not sure about eris

delicate zephyr
#

I might look to see what might require presences

#

if it doesnt need it I'll disable the intent

opal plank
#

im not even kidding luke

#

take a look at porting to detritus

unique shore
# lament rock Was looking through this and I'm confused why this is an npm package and not jus...

um, not sure about your 1st point, I decided to do it there because that's what create-express-app and create-react-app do
about the client.commands, that's what the official discordjs guide uses that's why I went for that, as I never use typescript I was unaware of it, I refuse to use it but I don't mind fixing it so typescript users don't find issues there, tho I'm not sure what the fix would be for that
as far as the reload command goes, I did not understand a word you said, again, that's what the guide uses, but as I am including pm2 there the reload command is just not even necessary so I think I'll simply remove it
thanks for the feedback

opal plank
#

im not even kidding

#

detritus puts d.js to shame

#

it cant even put up a fight

delicate zephyr
#

I havent used d.js in fucking forever

#

because eris-sharder took over my life for like 3 days

#

running shiro on a devOnly instance rn

#

and even with everything cached

#

its using like 2.5GB ram

#

for 20.3K guilds that aint bad

opal plank
#

speaking of cache

#

look at this

lethal trout
opal plank
#

i told tim about it

#

@lethal trout read everything i sent after

#

both me and shiv

lethal trout
#

i did not understand

opal plank
#

and whatc exactly did you not understand?

delicate zephyr
#

eris-sharder is near the same btw

#

detritus would probably save a little bit more

#

but tbh we dont need it

#

Shiro used to use 16GB of ram

#

so 16GB -> 2.5GB is uh

#

yes

lethal trout
#

like nothing was related

opal plank
lethal trout
#

i felt

opal plank
#

what we explained what quite simple

lethal trout
#

sooo yea......

opal plank
#

you are lacking basic js knownledged

lament rock
#

Like I mentioned previously, I like lower level libs. I moved to modular interfaces for gateway, rest and caching is almost finished being handled in Postgres as soon as I can bring myself to write an event processor.

I'm all for libs which do insanely good memory management out the box, but I like the granular control I have currently.

Working on finding out how to make less of a memory footprint in my apps.

I've learned a lot. Suffered a lot. Perhaps I enjoyed the suffering.

opal plank
#

like thats anything to brag about

#

if you're pride is that arrogant that you're willing to refuse help based on oh my bot is verified, you shouldnt be asking for help

normal sage
opal plank
#

LMAO

#

not remotely close

#

eris usually is compared to d.js

#

if thats the case, it doesnt come nowhere near detritus

normal sage
#

fixed it

opal plank
#

there we go lmao

#

accurate meme

lament rock
#

Also, I'm trying to make a lib which handles JSModule/npm module reloading and methods to add temporary listeners/NodeJS.Timeouts

Object.assign is stronk.
Manually managing references and ensuring results are synced with peers is frustrating.

lament rock
#

uptime is very important

opal plank
#

if you wish to use file changes i would say to use nodemon

#

even though i particularly despise it

#

im personally using a custom forever script

#

and my monitor is via my dashboard

lament rock
#

I wouldn't even want a module to trigger my app to restart if a file changes. I have no use for it since I already have something that manages module changes

unique shore
#

so what then? any actually good package that does the same than pm2?

lament rock
#

fs.watchFile is good

opal plank
#

oh yeah i forgot

#

@earnest phoenix more data

unique shore
#

so is pm2 good enough or what else can I do instead of that

lament rock
#

How long is a user in that stage, though? What happens when general user base becomes more knowledgable? Would you want them to regard your software as useless down the line

delicate zephyr
# opal plank accurate meme

not really, eris doesnt have an issue thats been open for a year and 8 months to fix a bug causing ratelimits

opal plank
#

legit tho, take a look at detritus if you're worried about scaling

delicate zephyr
#

Nah, not worried about scaling at all

opal plank
#

detritus pog

delicate zephyr
#

considering rn ram is stable and thats will caching everything

opal plank
#

not only for caching, but for future proofing as well

#

see all the reload commands they are talking about?

delicate zephyr
#

yea

#

I built that myself already

#

i've build rolling restart and a load more too

#

so

opal plank
#

detritus is this

commandClient.clear(); //clears all commands
commandClient.load('./commands/',{subfolders:true})
#

this is it

#

it handles everything internally

#

including subfolders

#

and categories

#

show it the path it needs to load the commands from

#

and it'll import it

unique shore
normal sage
#

was wondering why chat is all about api wrappers and found out this was in development lul

opal plank
#

one line

#

instead of lenghty command loaders with require() and cache deleting

#

cleaner, better and lighter

lament rock
#

I wonder if NodeJS.Module has peer deps listed

opal plank
#

this is the reload command i have

#
import { BaseCommand } from '../commandBase';
import { Command, CommandClient } from 'detritus-client';
import { Permissions } from 'detritus-client/lib/constants';
import { config } from '../../index';

export const COMMAND_NAME = 'reload';

export default class MainCommand extends BaseCommand {
  constructor(client: CommandClient) {
    super(client, {
      name: COMMAND_NAME,
      permissionsClient: [
        Permissions.SEND_MESSAGES,
        Permissions.ADD_REACTIONS,
        Permissions.EMBED_LINKS,
      ],
      metadata: {
        description: 'Admin reload',
        examples: [COMMAND_NAME],
        type: 'admin',
        usage: `${COMMAND_NAME}`,
      },
    });
  }

  async run(context: Command.Context) {
    if (
      !((config.WHITELIST as unknown) as string[]).includes(
        context.message.author.id
      )
    )
      return;
    context.commandClient.clear();
    context.commandClient
      .addMultipleIn('../src/commands', { subdirectories: true })
      .catch((...e) => console.log(e))
      .then(() => {
        context.message.reply('Reloaded');
      });
  }
}

lament rock
#

Now I'm inspired to get back to work on Reloader

opal plank
#

the only important part is this

#
 context.commandClient.clear();
    context.commandClient
      .addMultipleIn('../src/commands', { subdirectories: true })
      .catch((...e) => console.log(e))
      .then(() => {
        context.message.reply('Reloaded');
      });```
lament rock
#

tfw system has a user ID
"643945264868098049"

opal plank
#

probably got it during a system message

#

i think d.js lazily loads users

lament rock
#

It does

#

Also, bots can't message bots

opal plank
#

never said it could

lament rock
#

I want #0000 tho

opal plank
#

cant, thats system reserved

#

theres a ton of reserved discrimnators

lament rock
#

Ik. I went for next best thing. 0110 is 6 in binary

opal plank
#

if i recall

#

lets see if i can find a source

#

i recall some idiot that legit made thousands of accounts to test discord's generator for discriminators

#

and there were hundreads of them that couldnt eb generated

lament rock
#

That defeats the purpose of 0-9999

opal plank
#

you cant get repeated numbers n a lot of shit after a major update

lament rock
#

I couldn't think of any reason why they'd reserve them

opal plank
#

1111, 2222, 6969, 3333, 9999

#

they ARE reserved

#

its been confirmed

#

im not sure where the data sheet was

lament rock
#

for Nitro? Because you can definitely change your discrim to those

opal plank
#

no, for normal generated accounts

#

no matter how many you gen, you'll never get reserved tags

#

some of the ones i posted above are examples

#

i was a huge talk a couple years back, someone made thousands of account and got data based on all the rolls

lament rock
#

Never heard of this experiment before

drifting wedge
#

Makes sense

#

To sell nitro

opal plank
#

yeah

#

i'll try to ask on dapi

#

thats where i got the source from

#

but its been a few years

drifting wedge
#

I've seen some people with nice discrim tho

#

Without nitro

opal plank
#

like the old 1337 discriminator

drifting wedge
#

Like some fancy ones

opal plank
#

i dont think you can get that anymore

drifting wedge
#

I've seen 0001 without nitro

#

1000

sage bobcat
#

One message removed from a suspended account.

drifting wedge
#

Prob og accounts

opal plank
#

@sage bobcat do you have the source? ive been looking but i cant find it

delicate zephyr
opal plank
#

yeah, but tis real old accounts

#

they cant be generated anymore

drifting wedge
#

Why is 1337 important?

sage bobcat
#

One message removed from a suspended account.

opal plank
#

1337 is before we had discriminators

unique shore
#

ok so I'll extend the class for the client.commands part, and removed the reload command, and I'll also remove pm2 and instead I can use the one you sent "Reloader" to watch all the files and reload like that right? @lament rock

opal plank
#

so they all were default to 1337

drifting wedge
#

Oh so it's the defsuot one

#

Oh cool

#

That's a cool reference

#

If ur tag is 1337

opal plank
#

that means you're basically 5 yo account

drifting wedge
#

Can't u get it with nitro?

opal plank
#

i barely caught it, i think i was 6 months too old

#

you can with nitro

drifting wedge
#

Not default?

opal plank
#

but im talking about normal generation

drifting wedge
#

It's impossible?

lament rock
drifting wedge
#

Why use MIT when u can use no license?

#

Like MIT is just do whatever u want

lament rock
#

UNLICENSED is usually for non-permissive proprietary software. That's not what I'm trying to distribute.

autumn dust
#

when i start the bot it looks fine but if i dm him i get this error

PS C:\Users\justi\Downloads\modmailbot-master\modmailbot-master> node src/index.js
Starting Modmail v3.3.0 (1047528) on Node.js 14.15.4 (x64)
Loading configuration from config.ini...
Configuration ok!
Using an SQLite database:
  C:\Users\justi\Downloads\modmailbot-master\modmailbot-master\db\data.sqlite
Preparing plugins...
Connecting to Discord...
Connected! Waiting for servers to become available...
Initializing...
Loading plugins...
Loaded 16 plugins (16 built-in plugins, 0 external plugins)

Done! Now listening to DMs.

Error 50001: DiscordRESTError [50001]: Missing Access
    at RequestHandler.request (C:\Users\justi\Downloads\modmailbot-master\modmailbot-master\node_modules\eris\lib\rest\RequestHandler.js:61:15)
    at Client.createMessage (C:\Users\justi\Downloads\modmailbot-master\modmailbot-master\node_modules\eris\lib\Client.js:550:36)
    at Thread._postToThreadChannel (C:\Users\justi\Downloads\modmailbot-master\modmailbot-master\src\data\Thread.js:101:25)
    at Thread.receiveUserReply (C:\Users\justi\Downloads\modmailbot-master\modmailbot-master\src\data\Thread.js:405:37)
    at async C:\Users\justi\Downloads\modmailbot-master\modmailbot-master\src\main.js:168:9
    at async C:\Users\justi\Downloads\modmailbot-master\modmailbot-master\src\queue.js:10:9
PS C:\Users\justi\Downloads\modmailbot-master\modmailbot-master> 
unique shore
#

ok so what do I do? all I want is to have the option to reload the bot whenever there's a change, so that I don't have to kill the process and restart it

#

or I guess I'm fine with that in dev enviroment but I'd like to have something that restarts the bot on push to my github

#

for when I put it in a vps

scarlet furnace
#

good night, does anyone know how to make a vote checker for me to give prizes to whoever votes for my bot on the site?

unique shore
#

so I guess I can just use github actions and do some shit there

lament rock
#

if you want to require a file at a later time and then sync the result to a reference on change,
you'd use reloader.watch(path)
then require the module normally,
then reloader.sync(path, referenceObject)

if you wanted to just watch a file and have it auto get required and don't care about casting to a reference, reloader.watchAndLoad(path)

also, for future reference, VSCode (which is what you use) tells you suggested methods/properties and also gives you type info and comments made on the methods/properties. VSCode uses TypeScript internally

lusty quest
#

on your dev enviroment you could use nodemon (if you use node.js) this will restart your bot if you save a file,
for automatic github stuff there is probably a way but idk how

unique shore
#

wait how do you know I use vscode?
yeah I know of nodemon but I want something that can be used in production