#development

1 messages · Page 1949 of 1

earnest phoenix
#

So you can use the in keyword

surreal sage
#

I'm uhh, reading the file 1000 times a second

boreal iron
#

Wtf

sudden geyser
#

why are you reading a file 1000 times again

earnest phoenix
surreal sage
#

Proxy list..

#

Was just thinking

#

I should just read it once

#

And store it lmao

boreal iron
#

Cache it for a specific time at least

earnest phoenix
surreal sage
#

bout 1200 lines

#

I'm just scrolling thru it

#

so no problem

earnest phoenix
#

I hope you weren't reading the same file 1000 times

surreal sage
#

uhh

#

couldnt be me flushded

earnest phoenix
#

I will take that as a yes

surreal sage
#

lol

#

fixing that

#

lol

#

double lol

boreal iron
#

Huh?! I can’t follow anymore

surreal sage
#

lol

earnest phoenix
#

They were reading the same file 1000 times

surreal sage
#

He*

earnest phoenix
#

dont be one of those people rn please

surreal sage
#

kk

earnest phoenix
#

im too tired to care about your pronouns

surreal sage
earnest phoenix
#

I assume they were reading it 1000 times to get each item in the list in that file

surreal sage
#

Mhm

#

cfdcfd there's 2 of me now

earnest phoenix
#

Well may I say that is dumb when you get everything on the first read

surreal sage
#

mhm

#

im making it once now lol

earnest phoenix
#

good

#

Depending on the format of the contents of the list you can always just loop through the returned stuff by turning it into an array some how.

surreal sage
#

I'm splitting it up yeah

#

Counting indexes and when indexRightNow is high then length then back to 0

analog tinsel
#

@earnest phoenixnot worked

earnest phoenix
#

does it exist a npm that opens all the files one by one every certain amount of time?

sudden geyser
#

confused

earnest phoenix
#

like the npm will open all the files every 5 mins

#

but not all the files at once, it'll take it's time and open 1 by 1

sudden geyser
#

You could write a script that runs every 5 minutes (e.g. with setInterval)

#

And just set a rate limit to do it sequentially.

earnest phoenix
#

example?

#

how will it open the files

sudden geyser
#

You'll use the fs module built-in to Node.js

#

You should do research on it so you know how to use it.

#

Since you can read and modify files and directories with it

earnest phoenix
#

yeah I know a bit how it works

#

thx

#

I heard/read that replit doesn't save the files if you're not there but it's possible to skip with this function

compact pier
#

what

#

u write so confusing

compact pier
#

and replit will skip the write function

#

?

earnest phoenix
#

I meant discord doesn't save files that change by commands when you're not in the repl, and that includes file based databases like .sqlite so I read that with that function it can be bypassed somehow

#

sorry for being confusing, it's because it's late here and I don't wanna get caught

#

I'm awake

boreal iron
#

[…] it's late here and I don't wanna get caught

simple stump
#

How would I set the VC channel of the bot on startup?

boreal iron
#

If you don’t create a channel for your bot, you may need to find a(ny) voice channel and join it

#

e.g. channel cache > find channel by type

earnest phoenix
sudden geyser
#

You're not supposed to use the one provided by npm.

#

It's built into Node.js.

earnest phoenix
#

then?

sudden geyser
#

You can require("fs") like a regular module.

earnest phoenix
#

const fs = require("fs") will work just normal?

modest maple
#

tias

wheat mesa
#

Or you can use ES6 imports as well

spark flint
#

ok so

#

how the fuck do i use redis with mongodb

#

with nodejs

split hazel
#

I used it with nodejs before in an app

#

it gets quite messy ngl

#

you need to know if you really need it first

#

most of the time a simple object/map cache is enough

spark flint
#

its for an api

split hazel
#
  • you get no overhead
spark flint
#

where the data will never likely change

#

only new database entries, not edited

split hazel
#

you don't really need it unless you'd for example have many different clusters where it would be useful to have a shared cache and if you want to take advantage of long-term storage, events or data compression it offers

#

or you want it for the cool points

spark flint
#

its more to prevent too many unneccesary db checks

split hazel
#

you can just use a local cache for that

spark flint
#

oh ok

#

its purpose is for bots to check user id's on join, which means there will be lots of api calls

split hazel
#

literally something as simple as

const cache = {};
cache["12345"] = { user_id: "12345" };
#

don't think there's too much of a difference between a map and an object as a cache in js other than interface methods

#

though tim did say objects are a bit more complicated behind the scenes so maps will probably be better

earnest phoenix
#

fs.read("filepath") will open the file, read it and then close it?

boreal iron
#

Node has nice docs, too

#

just to say

earnest phoenix
#

ok

#

ty

hollow prawn
#

hello, I have trouble with something I find weird(?)
im using djs v13.2.0 for my bot's code
the issue at hand is:
guildMemberRemove does not fire/execute after a fresh start or restart of the bot until I manually trigger the event with a emitting it or the same member leaves/gets kicked twice in a row (in the time span of up to 5 minutes)
what would be the cause of this?

earnest phoenix
#

do you have the guild intent @hollow prawn

#

?

quartz kindle
#

you need to enable guild member partials

hollow prawn
hollow prawn
lyric mountain
#

Enable debug log level maybe?

hollow prawn
#

what's that exactly?
as i've done console logs in before and after specific parts of the code

#

literally on the first line of the module exports and it doesn't log even that lmao
do keep @ me for further answers, i'll see when i wake up, but yeah intent is enabled, the thing is enabled on the developer portal for the unverified bot and it works as intended after manual emit of the event with eval or kicking twice the same user in succession (time frame of up to 5 mins but it is unconfirmed)

boreal iron
#

Can the intents actually be an array of strings?

#

Not flags or simply their numeric values?

hollow prawn
#

yes, as it works as you see it on the image

lyric mountain
#

Idk if node has that tho

#

At least in java all loggers have at least 5 levels

#

Trace, debug, info, warn, error

#

In debug pretty much all operations get logged

hollow prawn
#

oh that, yeah i have debug enabled

#

however even then nothing happens, its as if the event literally doesn't exist lmao

lyric mountain
#

Then enable trace and try again

#

See if any error appears

hollow prawn
#

aight

lyric mountain
#

Do note, be quick since trace will spam the console

#

Easily 1m lines in a few minutes

hollow prawn
#

if i know what are gonna be the spammy messages i can ignore them

#

for debug i've excluded heartbeats

quartz kindle
hollow prawn
#

oh yeah those are nonexistent

#

so i'll need only guild member partial?

quartz kindle
#

yes

green kestrel
#

oh dear

#

a contributor figured out how to run a D++ bot on repl.it

#

so its the beginning of the end lol

lyric mountain
#

He figured how to run D++

green kestrel
#

it isnt simple to do 🙂

#

we made it simple, though

#

you have to extract the content of a prebuilt deb to your home dir, and reference it in the g++ commandline

#

because they dont give root to install the deb properly 😦

hollow prawn
#

partial should be enabled now

#

oh wait its member not memberS

#

ok enabling the partial did it, it works now after the first time

green kestrel
#

yay i got half your token, brb gonna half hack your bot /s kekek

hollow prawn
#

oh fk

green kestrel
#

nah its ok

hollow prawn
#

i actually should make it exclude that

green kestrel
#

your code obsured the last half

hollow prawn
green kestrel
#

cant do anything with it hence the /s

#

but i found it interesting it'd show anything at all

hollow prawn
#

uh yeah

green kestrel
#

by any chance can you run it again but make it hide the first half instead?

hollow prawn
#

thats because of the debug logging

#

perhaps 1 sec lemme just make it display it in the bot's status real quick

green kestrel
#

lol dont

#

i was joking

#

😄

hollow prawn
#

ik ik, i'll make it ignore the message with the token

boreal iron
#

required = true

#

Or using the method for some reason

#

setRequired(true)

sudden geyser
#

which comes from client.application.commands.set

#

oh it's there

#

most class instances have some client property

#

e.g. a message

hollow prawn
boreal iron
#

If not that would require a second login (instance)

sudden geyser
#

ew

#

builder pattern

boreal iron
#

Thanks for saying it, Klay

#

Damn writing the objects by hand is so much shorter and looks way better

#

And let’s you understand what you actually do

hollow prawn
#

aren't you able to pass the client from the main index file to this command file?

#

right

boreal iron
sudden geyser
#

all the pattern is good for imo is validation

boreal iron
#

interaction.client

#

Magic

#

The client who has initiated shit is attached anywhere in djs, messages, interactions, etc.

#

That doesn’t always be the solution

#

I’m also passing client to my modules

#

But in your case it’s not required

#

If you pass the client as argument since you defined it as parameter in your execute function anyways why don’t you use it there?

sudden geyser
#

it's also just more flexible to get it from the property

#

if, for some reason, you wanted multiple clients, a property would make that work vs. a global variable

boreal iron
#

In his case it is but the structure not always includes the client which makes it sometimes required to pass it

#

But as I said in his case it is already accessible

#

You handle the options by their unique IDs you better define

earnest phoenix
#
setInterval(() => {
  fs.open('json.sqlite', 'r', function (err, f) {
  console.log('Readed!');
});
}, 5000);
``` will this work to make replit save the database even when i'm not in it? As i've read, this saves the file in the memory after reading
#

¯_(ツ)_/¯

#

how do you know? maybe you tried yourself

#

so any solution or anything?

#

Heroku is shit so i'm trying to solve this...

#

yeah

#

yeah

#

will it work?

#

ok

#

it's 3 AM rn so i'm going to check it fast

#

oh thx

#

i won't judge

#

railway looks amazing and the bot is just what I needed, same type of code as mine I thought you were using the class things

lyric mountain
#

What's the drawback?

#

Free with no drawbacks?

earnest phoenix
#

but what happens with the db tho?

#

it won't restart like heroku?

#

and if we change the github repo, it will change too or we have to re-deploy?

#

oof

#

oooh

#

you're genius

sudden geyser
#

wait you're trying to use fs for sqlite?

#

yeah don't do that

#

use some package for sqlite databases

#

if repl.it doesn't allow it for some reason you don't have many good options

#

and uploading the database to github isn't a good option either

#

still not a good option

#

you've version controlled a database

sudden geyser
#

committing the database file to your project is to version control a database

#

which is github

#

that being the problem

boreal iron
#

I’m actually sure it does, maybe the method has a different name

sudden geyser
#

Version control systems like git are meant for source code/files about the project. There's data that will be generated by the run project that shouldn't be committed, and one of those are databases, as those are meant to be locale. It's often worse for version control to handle them since they're not optimized for the format they're written as.

Like, imagine a dev committing your account settings in a version control system they'd retrieve and download along with your project. You can't delete any of that data as well (history).

#

I get why you want to do it, but it's not a recommended use case.

boreal iron
#

I mean you can simply add required = true to the object manually

#

@earnest phoenix do you actually speak about slash command options?

#

Or did I miss something

earnest phoenix
#

Oh then maybe i version controlled it @sudden geyser. Is it harmful?

boreal iron
#

Well it is

#

Notice how .setRequired(true) is specified within the options builder. Setting this will prevent the user from sending the command without specifying a value for this option!

sudden geyser
#

Generally you shouldn't do it

boreal iron
#

You may didn’t use it on the option but on the slash command

#

I don’t know I’m not using the builders

#

But adding setRequired here causes an error?

#

Just show me what you did

earnest phoenix
#

nah better I make a new repo and do what wass said

#

or it's still version control?

sudden geyser
#

still version controled

earnest phoenix
#

oh

sudden geyser
#

having repositories just store data is generally not a good thing, but it doesn't mean you can't do it

#

for example, jetbrains allows users to set up github repositories to store user settings across IDEs

#

and I use that

earnest phoenix
#

i'll search a bit for npms to fix replit thing if there isn't any i'll do this

boreal iron
#

You added required OUTSIDE your useroption method

#

No wonder there’s an error

earnest phoenix
#

roblox dying sound

#

this should work

boreal iron
#

Ok that’s 1 min support out of 1 hour
That means my invoice includes 1 hour of work

earnest phoenix
boreal iron
#

you better let topgg send you your paycheck

earnest phoenix
#

Are .db files good for js?

sudden geyser
#

so a db file could be anything. what do you expect in that file? an sqlite database?

#

a key value database?

pale vessel
#

It's just JSON renamed to .db

earnest phoenix
pale vessel
#

Not okay

low tendon
#

@round cove

#

I want to report a bot

earnest phoenix
#

You can always dm them and not do it in development

low tendon
#

Ok lol sorry

pale vessel
#

Or use the report feature on the site

earnest phoenix
#

yea

#

forgot that existed

low tendon
#

Oh yea

round cove
#

🧐

glacial ravine
#

hi

delicate shore
#

how to solve this error

earnest phoenix
#

java moment

delicate shore
#

But

#

how do I solve the issue

#

Read time out

solemn latch
silver sail
eternal osprey
#

how do i see if i already have requested intents access?

#

Because i did it yesterday, but i haven't received any confirmation in my mail or something and it is again asking for verification:

earnest phoenix
eternal osprey
#

sure

earnest phoenix
#

Pretty sure it says apply no matter if you already ahve or not

eternal osprey
#

ah okay. Thank you! How long does it usually take?

earnest phoenix
#

No idea i've never applied

#

I dont know if they have a set time frame

pulsar bone
oak matrix
#

So

#

Why it happened (the one who pinged me)?

dry imp
#

got blocked

pulsar bone
dry imp
#

too bad mobile replit doesnt have terminal

pulsar bone
#

it must be discord issue now its fine

dry imp
pulsar bone
dry imp
#

if you have a laptop , go to your repl terminal and kill 1 (not always work)

oak matrix
#

@earnest phoenix

#

Ok. Thx

pulsar bone
#

how to get msg link in discord.py
answer please 🥺

dry imp
#

wdym

pulsar bone
#

link to message which triggered event

dry imp
#

wut?

pulsar bone
pulsar bone
#

i mean the keyword whats the keyword for getting msg link

oak matrix
#

This is the url*

pulsar bone
#

he didn't understand what msg link even is

#

explain him not me

oak matrix
#

Link has components

#

That 🦇xWass#0001 said you @dry imp

dry imp
#

why me

pulsar bone
#

he further asked which link you are talking About

pulsar bone
dry imp
pulsar bone
#

just leave it

dry imp
#

nvm idk either

pulsar bone
#

leave it we are getting misunderstood

#

just leave it

dry imp
slender thistle
#

Huh

earnest phoenix
#

the english programming language

pulsar bone
#

what is the limit of creating invite links

earnest phoenix
#
0
1
2
3
4
worldly nebula
#

How fast can you edit a message with it still being allowed?

#

As probably changing a message every 2s is not allowed? :p

quartz kindle
#

edits count towards the same limits as sending messages

#

so, 5 messages per 5 seconds per channel

#

so if you edit it twice every 5 seconds, you can only send 3 other messages in the same channel at any moment

worldly nebula
#

mhm

#

Okay

split hazel
#

but libraries will throttle those edit calls for you

#

but for some reason despite this topgg still declines bots that trigger this automatic throttle

#

dont ask me i dont make the rules

slender thistle
#

"Just because you can do it doesn't mean you should" ftw

modest maple
#

wut

split hazel
#

wut

#

actually idk I just woke up

#

I haven't developed bots in a while now

quartz kindle
#

go back to OS dev

split hazel
#

I will:(

quartz kindle
#

jk that was harsh, go grab a beer

#

nobody deserves OS dev

split hazel
pulsar bone
split hazel
#

embedded system developers/windows devs better be getting paid a fucking million every year

#

otherwise it's not worth it

quartz kindle
#

the ban usually lasts 1 hour

quartz kindle
#

for exceeding the rate limits

pulsar bone
#

rate limit of what

quartz kindle
#

idk

pulsar bone
#

what should I do

quartz kindle
#

everything has a limit on how fast you can do things

#

how many times you can try to login every 5 seconds, how many messages you can send every 5 seconds, etc

#

you did something wrong which caused your bot to try to send stuff to discord way too fast

#

the only thing you can do is to wait 1 hour for the ban to be lifted

pulsar bone
#

i am sending code wait a min

quartz kindle
#

then double check your code to avoid doing such things

pulsar bone
#
if "blah" in message.content:
      if message.author.id == 294882584201003009:
        link = await message.channel.create_invite(max_age = 0)
        msglink = "https://discord.com/channels/"+str(message.guild.id)+"/"+ str(message.channel.id)+"/"+ str(message.id)
        GaTimeone= message.embeds[0].description.split("Ends:")
        GaTime = GaTimeone[1].split("Hosted")
        for guild in client.guilds: 
          channel = discord.utils.get(guild.text_channels, name='specific channel') 
          if channel:
              GA_msg= discord.Embed(
                title="title",
                url="url" ,
                description=
                  "\n---------------------- \nbah==>" + message.embeds[0].author.name + "\n---------------------- \nblah==>" + str(GaTime[0]))
              GA_msg.set_image(url=message.guild.url)
              GA_msg.add_field(
                name="join link", 
                value="[" + message.guild.name + "]("+ str(link)+")",
                inline= False)
              GA_msg.add_field(
                name="message link", 
                value="[msg link]("+ str(msglink)+")",
                inline= True)
              await channel.send(embed=GA_msg)
#

@quartz kindle

slender thistle
#

Use f-strings please

pulsar bone
slender thistle
#

One way of doing it is adding an interval with asyncio.sleep

dry imp
#

another way is using cooldown

slender thistle
#

Make it wait a second or two before sending a message

#

^ Cooldown sounds good too

pulsar bone
slender thistle
#

A manual cooldown system isn't that hard to make

dry imp
#

why would people torture themselves with event

split hazel
slender thistle
#

Break your fingers please

boreal iron
split hazel
#

ok:(

pulsar bone
slender thistle
#

Eh, cooldown is optional and none of my business

slender thistle
#

I hope your pillow is warm tonight

split hazel
#

no its ok tim told me to go back to os development

#

that's even worse

slender thistle
#

Ooooof Tim

boreal iron
#

evil Tim = good Tim

split hazel
#

you would have to be beaten as a child every day and bullied on a regular basis to be able to mentally handle os development

earnest phoenix
#

did i enter chat at the wrong time

split hazel
#

yeah come back in 20 minutes

boreal iron
#

be careful, you never know what happens next in here

earnest phoenix
#

@spark flint add this to topdotgeegeeoutofcontext

spark flint
#

Lol

earnest phoenix
#

what is the url for the site

spark flint
#

I think

modest maple
#

@remote chasm omg thanks!

earnest phoenix
#

@remote chasm stinky

split hazel
#

lmao air drop nitro

#

these things get more stupid each iteration

neat ingot
#

😂

boreal iron
#

wut? that russian domain is a fake me?

slender thistle
#

Pun intended

earnest phoenix
#

russian domain

neat ingot
#

someone in here was talking about canvas yesterday. it inspired me to go and finish working on a concept I had. Basically, my bot runs ina docker container, and there is a netdata container that runs alongside it to track system metrics. I was able to write a little module to autodetect the container id, then communicate with netdata via a hidden network to poll it for system data, which I then used chart.js and canvas.js to make all pretty before sending back. I'm mentioning it here in the hope it inspires others! ❤️

boreal iron
#

my gosh... English very good today

spark flint
#

@rose warren

neat ingot
spark flint
#
app.get("/generate/:id", async function(req, res) {
    const userid = req.params.id
    const data = await users.find({userid:userid}).toArray()
    if (data) {
        
        const json = { "Name": "Capy.host", "DestinationType": "ImageUploader, TextUploader, FileUploader", "RequestMethod": "POST", "RequestURL": "https://static.capy.host/upload", "Headers": {"Authorization": data[0].apikey}, "Body": "MultipartFormData", "FileFormName": "file" };
        
        jsonfile.writeFile(`${userid}.sxcu`, json, async function (err) {
            if (err) console.log(err);
            res.download(`${userid}.sxcu`);
            fs.unlink(`${userid}.sxcu`);
        })   
    }
    else {
        res.send("Unknown user!")
    }
})```
#
C:\Users\Churt\Desktop\Projects\capy.host>node app.js
http://localhost:5000
node:internal/errors:464
    ErrorCaptureStackTrace(err);
    ^

TypeError [ERR_INVALID_CALLBACK]: Callback must be a function. Received undefined
    at makeCallback (node:fs:186:3)
    at Object.unlink (node:fs:1702:14)
    at C:\Users\Churt\Desktop\Projects\capy.host\app.js:24:16
    at C:\Users\Churt\Desktop\Projects\capy.host\node_modules\universalify\index.js:22:54 {
  code: 'ERR_INVALID_CALLBACK'
}
pale vessel
#

You might want to give a callback to fs.unlink() or use fs.unlinkSync

delicate zephyr
#

^

#

thats it

#

cc @spark flint

#

fs.unlink requires a callback

spark flint
#

getting a new error now angery

delicate zephyr
#

or use the Sync version

spark flint
#

its not actually saving the file so its returning an error

clear marlin
#

just use synchronous

#

yes

spark flint
#

i did

#

i just changed it

delicate zephyr
#

hm

clear marlin
#

okay good boy

spark flint
#
 await jsonfile.writeFile(`${userid}.sxcu`, json, async function (err) {
            if (err) console.log(err);
            res.download(`${userid}.sxcu`);
            fs.unlinkSync(`${userid}.sxcu`);
        })  ```
delicate zephyr
#

whats the error now

clear marlin
#

is that a sharex

#

file thingy

spark flint
#

yes

#

Error: ENOENT: no such file or directory, open 'C:\Users\Churt\Desktop\Projects\capy.host\471409054594498561.sxcu'

delicate zephyr
#

Oh

spark flint
#

making a file generator angery

delicate zephyr
#

you need to JSON.stringify the object

spark flint
#

ohhh

clear marlin
#

i dont understand why you're saving it to the disk tho

spark flint
#

how do i return the file without saving then

delicate zephyr
spark flint
#

yeah

delicate zephyr
#

so he can throw a pre-generated config for sharex stuff

spark flint
#

yep

#

its still not saving tho

#
await jsonfile.writeFile(`${userid}.sxcu`, JSON.stringify(json), async function (err) {```
delicate zephyr
#

Dont do it there

spark flint
#

ah

delicate zephyr
#

it wont work like that

pale vessel
#

Because you're mixing callbacks and sync

delicate zephyr
#

never has for me

#
        const json = JSON.stringify({ "Name": "Capy.host", "DestinationType": "ImageUploader, TextUploader, FileUploader", "RequestMethod": "POST", "RequestURL": "https://static.capy.host/upload", "Headers": {"Authorization": data[0].apikey}, "Body": "MultipartFormData", "FileFormName": "file" });
#

should work

spark flint
#

ohhh

pale vessel
#

That makes zero difference

delicate zephyr
#

it has for me

#

in the past

#

legit

spark flint
#

now the issue is the file not saving

#

oop no fixed that

#

moved from the jsonfile module to fs

#

fs.writeFileSync

#

but its not sending the file

pale vessel
#

You could always just not save the file and use buffers instead js res.writeHead(200, { "content-disposition": `attachment; filename="${userid}.sxcu"`, "content-type": "application/json" }).end(Buffer.from(JSON.stringify(json)))

spark flint
#

oh that works

#

epic

#

ty

#

wait no

#

because that makes the file then not work

#
"{\"Name\":\"Capy.host Uploader\",\"DestinationType\":\"ImageUploader, TextUploader, FileUploader\",\"RequestMethod\":\"POST\",\"RequestURL\":\"https://static.capy.host/upload\",\"Headers\":{\"Authorization\":\"f2fec1455875c99fed5db44424ae919c6c1549d9a95f6048e0ca2d5e\"},\"Body\":\"MultipartFormData\",\"FileFormName\":\"file\"}"```
#

it saves like that

clear marlin
spark flint
#

fixed it

pale vessel
#

You just stringified the stringified JSON lul

spark flint
#
res.writeHead(200, {
            "content-disposition": `attachment; filename="${userid}.sxcu"`,
            "content-type": "application/json"
        })
        
        res.end(Buffer.from(json))```
clear marlin
#

you could literally send file data for download

#

without saving it to the disk

#

and then deleting it

spark flint
#

it doesn't save it anymore

clear marlin
spark flint
#

yep that all worked thanks

earnest phoenix
#

this works? or console.log?

#

console.error(error);

#

And... Why it's not coloured anymore?

#

when I installed it, it was more colourful

#

now it's like replit

#

I changed the theme from dark to monokai and it looks better

neat ingot
#

yall need more synthwave84 in your life ❤️

quartz kindle
#

y'all need more of this guy in your life

earnest phoenix
earnest phoenix
#

But he looks like the kind of guy who sits in the ally way behind stores trying to sell drugs to kids

quartz kindle
#

he's the less known cousin of this girl

earnest phoenix
#

I see

#

I only know her as the lofi girl

#

yeah me too

quartz kindle
#

thats exactly my point

earnest phoenix
#

13h

#

i'm going to sleep now

#

26h awake

#

oof

spark flint
#

6.8k bots

earnest phoenix
boreal iron
#

Lemme guess... guild ID 925571069539131422

#

Same as 924190330604113980 922525849050300446 903880326475051028 etc.

#

All bot test/spam guilds

quartz kindle
#

anyone has a list of those? i need to check my bots as well

boreal iron
#

huh... don't u filter them out when joining?

quartz kindle
#

no

cinder patio
#

What's the point of those servers anyways? To break bots & make them use more resources?

quartz kindle
#

i dont have members intent

spark flint
#

i'm working on a module for it

#

a server blacklist

boreal iron
quartz kindle
#

nah too much work

#

xD

spark flint
#

903880326475051028 was deleted

#

but 924190330604113980 still exists

#

my bots in it

quartz kindle
#

anyway it wont really matter once i move to slash commands

boreal iron
#

A few more you can sort out

#

893235932336095272 872038092264058941 902348231567106049 529023183391555594 804009231845163018

spark flint
#

thakns

#

thanks

boreal iron
#

all got flagged for spamming or inviting random bots the whole day long

quartz kindle
#

👍

earnest phoenix
#

i've changed from replit to railway and vsc and git so here what do I put?

#

in URL, it's replit project's http url

#

I put railway's url?

#

railway.app/project/TOP-SECRET

#

discord webhook url?

boreal iron
#

wtf

#

no

#

you can't

earnest phoenix
boreal iron
#

He's speaking which URL to put on topgg

boreal iron
earnest phoenix
#

oh

#

website?

boreal iron
#

You create a webhook listener and put it's URL onto topgg

#

Which will most likely is your IP or domain

earnest phoenix
#

how

boreal iron
#

Look at the API docs, they show examples

#

In the language u wanna use

earnest phoenix
#

I've read

boreal iron
#

for rplt I remember people say it's the project URL you can see in your dashboard

earnest phoenix
#

I used to but I changed so I came here to know what to put there instead of repl http server url

boreal iron
#

hmm dunno both platforms anyway...

slender wagon
#

is there a way i could make my bot post emojis in embeds

sudden geyser
#

Yeah

#

Depends on the emoji you want though.

slender wagon
#

not the normal ones

#

ofc

sudden geyser
#

Discord emojis only work in certain fields

slender wagon
#

hmmm

sudden geyser
#

You can send them like normal: <:name:id> or <a:name:id>

slender wagon
#

can that work on embed description?

sudden geyser
#

yes

spark flint
#

Yes

slender wagon
#

okay so next thing i gotta do is make the bot recognize emojis and add their name and id on them

quaint rampart
#

anyone know how to get what line the error is on without logging in the console? (im trying to make an error logging system that would log errors + their lines in json) also this is in JS

slender wagon
#

can the bot get an emojis name

lyric mountain
#

you can just get the emote mention

sudden geyser
#

You could expend your code into multiple lines

#

And hope the stacktrace references the line

slender wagon
#

the usecase in this is basically the bot will get a entire message sent from someone (it may or may not include emojis) and it will repost it as a embed

lyric mountain
#

but be advised, generally it'll NOT end in the actual code

#

like

#

sometimes it goes into internal code

#

or class functions

#

so you'll get a pretty useless line of code instead of the actual error

#

for example

quaint rampart
#

how can i achieve this? currently i have a process.on that catches uncaughtException and when i log the error to the console it shows the lines but when i log it into a json as a string it logs TypeError: blah blah blah blah

quaint rampart
#

so

#

no point?

#

i already have it where it logs the command that they tried to execute so it should be easy to find the error but i wanted that just in case

lyric mountain
#
class Blabla {
  const shit = [1, 2, 3];

  function doShit(value) {
    return shit[value];
  }
}
...
let bla = new Blabla();
console.log(bla.doShit(5));
#

it'll error cuz 5 is out of range

#

if you get the error line tho it'll return return shit[value];

#

but the error isn't there

quaint rampart
#

i c

lyric mountain
#

the actual error is here console.log(bla.doShit(5));

quaint rampart
#

so useless

lyric mountain
#

pretty much

earnest phoenix
#

unless you handle the error in doShit no?

lyric mountain
#

error logs contain so much info, if you try to abstract it you lose so much debugging data

lyric mountain
earnest phoenix
#

I know its an example

#

I am asking for my own benefit

lyric mountain
#

you could yeah handle it, but not always it'll be handled

#

esp inside libs

earnest phoenix
#

In what ways will it not be handled?

lyric mountain
earnest phoenix
#

ic

quaint rampart
#

i c

#

2

quartz kindle
lyric mountain
#

fckin js

#

I couldn't think of a quick example, and js doesn't help being too lenient

quartz kindle
#

the class itself will error tho, because you dont use the function keyword for class methods

earnest phoenix
#

yea I dont think js has out of range errors

#

they are dummb

quartz kindle
#

huehuehue

#

it does actually

#

RangeError is a built in error object

earnest phoenix
#

I haven't encountered it ever

#

🤔

#

So in what situations would you encounter this range error

quartz kindle
#

try working with typed arrays and buffers

earnest phoenix
#

Mmmm

#

Sounds like too much work to test out

#

:^)

quartz kindle
#

lmao

sudden geyser
#

people actually use those kind of arrays?

quartz kindle
#

yes

earnest phoenix
#

I mean

#

That isn't what I mean though

#

Actually nvm

#

I am reading it wrong due to my tired brain

earnest phoenix
# quartz kindle

or wait no, doesn't that create an array that can only have 10 elements in it?

#

or just an array that has 10 elements already

quaint rampart
#

clean?

JSON file:

{
    "guild": {
        "name": "ch$rry network",
        "ID": "775604768675463178"
    },
    "user": {
        "name": "clap#0007",
        "id": "773630440606138408"
    },
    "command": {
        "name": "eval",
        "arguments": "1+1",
        "type": "Message"
    },
    "error": "TypeError: Cannot read properties of undefined (reading 'username')"
}
```||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||||​||‎‎||‎||‎‎||‎‎||‎‎||‎‎|| https://embed.rauf.wtf/?title=clapclap&color=2f3136&image=https://cdn.clap.wtf/0wx.png&redirect=https://cdn.clap.wtf/0wx.png
quartz kindle
earnest phoenix
#

Okay

#

So you can't go past 10

#

Then yea okay that makes sense for a RangeError to occur

#

I was thinking more along the lines of trying to index something that isn't there

#
let arr = [1,2,3]
console.log(arr[3])
lyric mountain
quartz kindle
#

js doesnt usually throw for that, because by default arrays behave like objects, ie, they have unlimited size, and the indexes are like keys in an object or hash table

lyric mountain
#

that way I always get the reason + where

quartz kindle
#

so the natural behavior is to always return undefined on out of bounds

earnest phoenix
#

mmmm

#

I guess that makes somewhat sense

#

But i still think if it is out of bounds it should say so

#

It would fix a lot more problems

quartz kindle
#

it cant, because arrays are not fixed length

lyric mountain
#

if it is, I return it

earnest phoenix
#

mmm yea

lyric mountain
#

if it isn't I go to the next line

quartz kindle
#

also sparse arrays exist

earnest phoenix
#

Sparse arrays?

#

what is that

quartz kindle
#

arrays with holes in them

earnest phoenix
#

🤔

quaint rampart
quaint rampart
quartz kindle
earnest phoenix
#

🤔

#

That is a weird concept to me

quaint rampart
#

me too

#

whats the point

quartz kindle
earnest phoenix
#

I don't see the value in using a sparse array as well

#

but tim probably knows several reasons

#

tim big brain

quartz kindle
#

i mean, there arent many reasons to purposefully use them, unless you're adding/removing items from random indexes without resizing the array

#

but the way the language is designed makes them exist

#

ie: arrays should fill all possible requirements and merge the abilities of all different array types from lower languages

#

c/c++ does have a sparse_array class

#

to purposefully create arrays with holes

earnest phoenix
#

Do google chrome developer dashboards refresh every 24 hours?

#

I dont see the point of an array with holes

quartz kindle
#

its the same as a hashtable

#

but you use indexes as keys

earnest phoenix
#

Ima be hoenst no idea what a hash table is

#

I can google it later

quartz kindle
#

a hash table is what powers most key-value structures behind the scenes

#

its one of the methods to achieve constant time lookups

sudden geyser
#

it's what makes getting values from maps fast

quartz kindle
#

ie no matter how many keys you have, 10 or 10 billion, the time it takes to get an item is always the same

modest maple
#

cuz collisions™️

quartz kindle
#

well yeah

lyric mountain
#

if u manage to collide in a hash map you need to rethink ur code

quartz kindle
#

collisions happen regardless of your code

#

if the table is nearly full

lyric mountain
#

I mean, you're not supposed to even get near the cap

quartz kindle
#

depends on the table

modest maple
#

depends on le table and hashing algorithm used

quartz kindle
#

some tables have up to 95% memory efficiency, like robin hood tables

modest maple
#

the faster the hasher is the more prone it is to collisions in most cases

quartz kindle
#

others have less than 70%

modest maple
#

Really fast hashers produce 32 bit hashes where you dont care about collisions too much because its a really small table but you care about the hash speed

#

Also collisions generally are pretty common to worry about with performance situations because it quickly leads to a slow down of the access times which isnt always ideal

#

useful for doing pigeon hole principles though

quartz kindle
#

thats where all these different hash tables have been competing all these years, who can get the most memory efficiency while maintaining good performance

modest maple
#

Personally the Google Swissmap + aHash hasher is the best combo i've used

quartz kindle
#

because as soon as you start getting collisions, it is going to slow down, how efficiently can you manage the speed reduction and keep it at the minimum is a very interesting topic

quartz kindle
modest maple
#

although python's hashmaps are just insanely fast with a tiny collision rate

#

the current state of rust hashing algos:

quartz kindle
#

intersting, fnv is the fastest one i've ever seen in pure js

#

xxhash advertises itself so much as being the fastest, but i never got good results with it

modest maple
#

JS optimisations though wont come close to what LLVM can do with some added architecture optimisations for archv etc..

quartz kindle
#

also wheres the good old djb2

modest maple
#

shrug dont exist in the rust world

quartz kindle
#

rip

#

ah i see why ahash is so fast

#

its like 99% hardware AES instructions

#

i've never used rust, but in cpp the most memory-efficient table i've seen was tsl::sparse_map

#

used about 3-4x less memory than std::unordered_map in my use cases

modest maple
#

Only time I've really cared about memory usage is on my implementation of SymSpell

#

Where containing a bunch of pointers cost too much so used a load of 32 bit ints acting as virtual pointers instead

#

Cuz yay 64 bit points on 64 bit machines

quartz kindle
#

xD

#

thats basically what people do when they say "pointer compression"

compact pier
#

what is the most effiecent way to convert array of arrays to array?

quartz kindle
#

array.flat()

compact pier
#

thanks

#

didn't even know that fuction exist

#

lol

quartz kindle
#

its relatively new

#

node 11+

compact pier
#

oh

earnest phoenix
#

How can I close the current tab in js for a chrome extension?

spark flint
#

window.close();

#

or just close()

earnest phoenix
#

oh okay

#

ty

earnest phoenix
compact pier
#

I never felt so happy until today

spark flint
earnest phoenix
#

yeah

#

But like justification as in permission

#

Like

        "storage",
        "unlimitedStorage",
        "tabs",
        "https://ajax.googleapis.com/"
     ],```
spark flint
#

oh

#

idk

earnest phoenix
#

Is there another thing I'll have to include?

#

Oh okay

#

Can certain websites not work with js code an extension is trying to add?

compact pier
#

ig not

#

only if the browser blocked js from that site

modest maple
#

Plugins take priority over the site itself

earnest phoenix
#

oh okay

slender wagon
#

you could also inject it with a bookmarklet

earnest phoenix
#

got it, ty

spark flint
#

is it worth adding api keys to my api

#

its a user id check api (to check against known raiders)

quartz kindle
#

if you want to require registration, sure

spark flint
#

its more to ensure no abuse

#

and to have rate limiting too

#

as each request will make a database request

modest maple
#

I mean, you would be suprised how much your db can handle if its setup right

#

purely IP based ratelimiting would likely be enough

spark flint
#

true

#

its mongodb

#

not selfhosted

modest maple
#

oh well in that case

#

ratelimit the fuck out of it EYES

spark flint
#

yup

compact pier
#

any have suggestion how to practice rust?

#

like learning the syntax but without practice is useless

sudden geyser
compact pier
#

hmmm

#

lemme have a look

slender wagon
#

U guys helped me alot this year big up to everyone

#

🚀

spark flint
#

same ^^

snow urchin
split hazel
#

pretty sure you covered up a critical part of the error

snow urchin
#

I covered my server ip

split hazel
#

at the end does it say something like econnreset or econntimeout

earnest phoenix
#

Is uninstall a detail reason for a chrome extension?

This is what I mean:


    if(details.reason == "uninstall"){
       chrome.storage.local.set(defaultSettings, function() {
          alert("Extension uninstalled");
    });
    }
});```
#

Hey, is there a NPM Command that would fix this? When I press "Run" it doesn't start the bot.

solemn latch
#

do you have anything to keep the program running?

earnest phoenix
#

It's replit, I have the Hacker plan.

#

So 24/7

#

Sooo, if by that you mean code then no, its just another Discord Bot

#

It'll stay idle like that for hours^ and has

earnest phoenix
solemn latch
#

I mean code wise

earnest phoenix
quartz kindle
#

are you pressing the run button?

earnest phoenix
#

-_- That was rhetorical right?

quartz kindle
#

because you asked about npm commands lol

#

you dont use npm commands on replit, you do everything by pressing buttons and shit

earnest phoenix
#

Yeah, I'm pressing the Run button Laugh

quartz kindle
#

and what exactly is not working?

earnest phoenix
#

It's not running the code.

#

At all.

quartz kindle
#

the logs say it is tho

#

show your index.js

#

and your package.json

earnest phoenix
#

What part?

#

There's a lot.

#
{
  "name": "LPSupport",
  "version": "0.0.1",
  "description": "A simple discord bot, mainly used as a template.",
  "main": "index.js",
  "scripts": {
    "start": "node index.js"
  },
  "dependencies": {
    "@discordjs/builders": "^0.9.0",
    "@discordjs/rest": "0.1.0-canary.0",
    "@mycool/discordjs-slashcommand": "^1.2.1",
    "amethyste-api": "^1.1.4",
    "ascii-table": "0.0.9",
    "canvacord": "^5.1.0",
    "canvas": "^2.6.1",
    "chalk": "^4.1.2",
    "config.json": "0.0.4",
    "cpu-profiler": "^2.1.1",
    "cpu-stat": "^2.0.1",
    "discord-api-types": "^0.25.2",
    "discord-buttons": "^4.0.0",
    "discord-rich-presence": "^0.0.8",
    "discord-rpc": "^3.2.0",
    "discord-slash-commands": "^1.2.4",
    "discord-ytdl-core": "^5.0.1",
    "discord.js": "^13.3.1",
    "discord.js-pagination": "^1.0.1",
    "erit-ytdl": "^0.1.3",
    "express": "^4.17.1",
    "figlet": "^1.5.0",
    "fs": "^0.0.2",
    "fs-extra": "^9.0.1",
    "g-i-s": "^2.1.6",
    "got": "^11.8.1",
    "graceful-fs": "^4.2.4",
    "humanize": "^0.0.9",
    "imageapi.js": "^1.3.2",
    "moment": "^2.29.1",
    "moment-duration-format": "^2.3.2",
    "ms": "^2.1.3",
    "node-fetch": "^2.6.1",
    "opusscript": "^0.0.8",
    "os": "^0.1.1",
    "path": "^0.12.7",
    "quick.db": "^7.1.3",
    "sequelize": "^6.6.0",
    "simple-youtube-api": "^5.2.1",
    "soundcloud-downloader": "^0.2.4",
    "sourcebin_js": "0.0.3-ignore",
    "sqlite3": "^5.0.2",
    "string-progressbar": "^1.0.3",
    "twemoji-parser": "^12.1.2",
    "util": "^0.12.3",
    "uuid": "^8.3.2",
    "ytdl-core": "^4.4.5"
  },
  "engines": {
    "node": "16.x"
  },
  "repository": {
    "type": "git",
    "url": "git+https://github.com/KeemROH-Development/Simple-Discord-Bot.git"
  },
  "license": "MIT",
  "keywords": [
    "node",
    "bot",
    "discord"
  ],
  "devDependencies": {
    "node": "^16.13.1"
  }
}
#

There's a lot of un-needed stuff from my base handler 🤣 this is a handler that I use for everything.

solemn latch
#

why do you have so many packages 👀

#

"fs": "^0.0.2",

#

👀

earnest phoenix
#

So then I don't need to keep adding one by one by one by one

#

Yeah, this is from my very first bot :Rofl:

#

When it needed like 1900501501050150

#

packages

quartz kindle
#

lol

#

you should definitely remove everything you dont use

#

some of those are even bad to have

solemn latch
#

every npm package can be a vulnerability.
as few as possible is always my goal

earnest phoenix
#

o-o

#

Redoes package.json

#

Uh

#

Still not working.

quartz kindle
#

show your index.js

earnest phoenix
#

All of it? o-o

#

There's a lot.

quartz kindle
#

well since you dont have any other leads and dont debug you own code, yeah i guess

boreal iron
#

Oh oh

quartz kindle
#

you have something in your code that is making your bot stuck probably

boreal iron
#

I see myself scrolling for minutes

earnest phoenix
#

Ju-just don't even question the code 🤣

boreal iron
#

if you would have posted it in the channel

earnest phoenix
#

hm?

solemn latch
#

👀

#

if (!914203218416914462) {

earnest phoenix
#

Listennn, I got that of the docs whyjustwhy

#

Should I remove the ! or sumthin?

quartz kindle
#

thats wrong on so many levels lmao

earnest phoenix
#

what?

#

How?

#

o-o

quartz kindle
#

do you know what ! means?

earnest phoenix
#

if false or sumthin

quartz kindle
#

! means NOT

earnest phoenix
#

Tomato turmatur

#

so uh

#

I gotta change that right?

quartz kindle
#

so NOT 37598374598370 makes no sense

earnest phoenix
#

so (yes === 925121254367846460)

#

jk

#

Just remove the !

quartz kindle
#

its a static number, not being compared to anything

#

its always true

#

with ! it makes it always false

#

either way that entire if has no logical meaning

earnest phoenix
#

That still didn't make it come online o-o

earnest phoenix
quartz kindle
#

plus the number is too large for js

#

it will be rounded, making the id invalid

earnest phoenix
#

pfft lol

#

That's not useful

#

so uh, I gotta go find another way to do this or?

#

I mean it usually works tbh

#

It's just all the sudden not coming online

quartz kindle
#

i mean

#

i can see a lot of bad things in there

#

but none of them should be causing this particular issue

#

try adding a few console.logs

#

outside the events, for exemple before the ready event

#

and see if it logs

earnest phoenix
#

Okay.

#

It logged.

#

Not the one inside on ready

#

but the other two above and below it worked.

quartz kindle
#

then add this

#

client.on("debug", console.log)

earnest phoenix
#

I'll regen the token dwdw

quartz kindle
#

you are temp banned lol

#

you have to wait 1 hour

earnest phoenix
#

Whaaaaaaat

#

For what? 🤣

#

I aint dun nun

solemn latch
#

did you get ratelimited? 👀

earnest phoenix
#

Replit always re-checks it like after one hour

#

Ohhhhh

#

Whenever I edit it

#

I gotta re-run it

#

that could be why

#

and when I edit it, I do baby steps, so one by one by one, which involves me to keep re-running it

#

So that could be why.

boreal iron
#

thats wrong on so many levels lmao

earnest phoenix
boreal iron
#

Damn and my phone can’t open txt files

earnest phoenix
#

No way I'm banned for 14 hours right?

quartz kindle
#

yes you are

#

thats a login ban

#

you exceeded the daily 1000 logins

earnest phoenix
#

but this is with another token-

pale vessel
#

o-o is the new ^_^

earnest phoenix
#

It's not the same one

#

o-o

earnest phoenix
quartz kindle
#

discord only lets you login 1000 times per day

earnest phoenix
#

wait

quartz kindle
#

if you exceed that number, you have to wait until the day ends

earnest phoenix
#

but this is with another token

#

a new bot

#

So at 12 am it will go online right?

boreal iron
#

How can you fucking exceed 1000 logins/day?

earnest phoenix
#

Good question

#

I didn't.

quartz kindle
#

crashing in a loop usually does that

earnest phoenix
#

.

#

How would I even do that?

quartz kindle
#

with stuff that autorestarts your bot

boreal iron
#

I somehow think saving and running the code after each added letter in the code might be the reason

#

But who knows

#

*woo knows

earnest phoenix
#

lmfao

#

I'll see tomorrow ig

solemn latch
#

doing that 1000 times in a day sounds like programming for 8 hours kek

earnest phoenix
#

btw

#

Tim.

#

How would I fix that one thingy with rest?

#

In the if statement

quartz kindle
#

what do you want the if to check?

#

if(number) makes no logical sense

earnest phoenix
#

Idk, I got it off the docs.

quartz kindle
#

what docs?

boreal iron
#

I can’t even open the file on mobile but regarding on how Tim reacts, you should throw your code away and start from scratch

quartz kindle
#

lmao

boreal iron
#

Wut 9.2kb took forever?

quartz kindle
#

anyway from the code it looks like you want to decide whether to register the commands globally, or in your guild only for testing

earnest phoenix
#

Well, I wanted to prioritize the guild only one then move to global.

quartz kindle
#

in that case, just remove the number and put something there yourself to control that

earnest phoenix
#

Just leave it blank? 😉 that's a good idea

quartz kindle
#

if you want globals, put true

#

otherwise put false

#

then when you want to reverse it, just reverse the true/false thing

#

or if you want to be more descriptive so its easier to understand, create a variable for it

earnest phoenix
#

I should probably not keep re-running it within the time limit or the time will restart huh?

quartz kindle
#
const testing = true;

if(testing) { guild commands }
else { global commands }
earnest phoenix
#

or why not just put if(true) instead of all that? o-o

quartz kindle
#

thats what i said

earnest phoenix
#

okay 🤣

quartz kindle
#

but you'll have to remember what that if(true) means

solemn latch
#

the variable makes it easier to read

earnest phoenix
#

ahhh

#

makes sense

#

for global commands & guild : true
for non-global commands : false

boreal iron
#

Why not just add a property to your command module?
For example guilds: null or an actual guild ID

#

And handle it in the command handler

quartz kindle
#

it seems like the guild commands are for testing only

#

since they are only being set in his guild

earnest phoenix
#

Yeah

boreal iron
#

Hmm just a suggestion as I can’t see anything

#

I assume there’s no proper command handler anyways?!

#

Fetching, registering, updating or deleting commands

solemn latch
#

I'm going to be real, not sure what the bot does

boreal iron
#

I swear I’m close to start the PC to take a look myself pepowot

earnest phoenix
#

lmfaooooo

#

It's alr, I tried w/another token and it works.

solemn latch
#

probably best to fix the login issue

#

repeatedly getting ratelimited on multiple bots may be bannable

earnest phoenix
#

or I'd get API Banned totally?

solemn latch
#

Account

boreal iron
#

Dude the account bind to your apps is always the same

#

Also your requests are always coming from the same IP address

solemn latch
#

Not on repl

#

Afaik

earnest phoenix
#

...

#

bruhhh

#

I have no way to control how many times replit does it -

#

It always sends heartbeats

#

Does that mean its re-logging in?

boreal iron
earnest phoenix
#

I'm not even trying to ratelimit the project.

#

does this mean that its restarting?

#

Getting 1 by 1 closer to rate limit?

boreal iron
#

Why do I read successfully registered commands?
You’re not supposed to register commands more than one time without running into more issues

earnest phoenix
#

..