#development

1 messages · Page 2068 of 1

feral aspen
#

But when it came to using the methods of Password, it seems to mistake view() being a property and not a method.

lyric mountain
#

what if u call it as a property?

feral aspen
#

It still does not exist.

lyric mountain
#

did u try running even with the editor saying it's an error?

feral aspen
#
index.ts:4:12 - error TS2339: Property 'view' does not exist on type 'object'.

4 a.password.view()
lyric mountain
#

object not Password

#

you have class issues there

#

show how u declared password

feral aspen
#
class Password {
    data: object;

    constructor (data: object) {
        this.data = data;
    };
};
lyric mountain
#

no, where u defined password (not Password)

viscid gale
#

time to return to v12 😔

lyric mountain
#

the property password

#

not the class

lyric mountain
feral aspen
lyric mountain
feral aspen
#

;-;

lyric mountain
#

👏 typing matters 👏

feral aspen
#

Should it be password: Password?

lyric mountain
#

yes

feral aspen
#

LOL.

lyric mountain
#

object doesn't have call(), Password does

feral aspen
#

data: Student.

lyric mountain
#

welcome to the wonderful world of ☀️ typed 🌈 languages ☀️

lyric mountain
#

every single class extends object, that's why it works, but u cant access class-specific methods

feral aspen
#

Nice, it works! 😂

#

Well, that's why I gotta love typescript.

lyric mountain
#

typescript is still more lenient than stronger typed languages

queen basin
viscid gale
#

💀

feral aspen
queen basin
#

bro c only verifies if your syntaxes and types are ok and it continues with its day

feral aspen
#

It'll make sure it screams at you, your editor, and your terminal, too.

queen basin
#

typescript users realizing using the any type defeats the purpose of the language

lyric mountain
viscid gale
#

ok I admit c would warn for some things that typescript would be like hold up

#

but functions in C.. u can't do that graceful dance that javascript has with the variables

lyric mountain
#

in C an egg is an oblate spheroid, in JS an egg can be a car

viscid gale
#

like cmon who doesnt love pulling variables out of nowhere because of what waits on what and what variables get created along the way

queen basin
#

c users calling functions named module1_subcategory_do_this_function() because there arent any namespaces or classes

viscid gale
lyric mountain
#

the car

viscid gale
#

where'd u find that 😂

queen basin
#

lmao

feral aspen
#

What's the type for the array of classes?

viscid gale
#

this isn't your car right?

lyric mountain
#

array

feral aspen
#

const students: something[] = [];

lyric mountain
#

found in google

queen basin
#

what i like about c/c++ is the fact you can actually turn anything into a type that it isnt

feral aspen
#

Usually, for strings it's string[].

queen basin
#

it really allows you to boost performance if you know what you're doing

viscid gale
#

well an array of chars is an array of ints but to say that statement.. PROE 🙏

austere abyss
#

Is it possible to delete my bot from top.gg?

#

I want to reapply with a different bot

lyric mountain
#

there's a delete button on its page

feral aspen
austere abyss
lyric mountain
#

are u logged in?

austere abyss
#

Oh I see it. I was looking the wrong area

#

Thank you

lyric mountain
#

yw

viscid gale
lyric mountain
viscid gale
#

I ask this weird question since if you no longer use the old bot..

#

u can simply change the image and have different code using the same token

feral aspen
#

Still errors.

viscid gale
#

I say THIS cuz ong the application takes forever

austere abyss
#

No so I restarted my bot. They are both the same. So same profile and everything. But I can't change the name of the bot on Top.gg

feral aspen
#

Unless you mean Array not array?

austere abyss
#

So I am deleting it and reappling

lyric mountain
#

first google result

viscid gale
#

ah

lyric mountain
#

if not, just change the name on applications page and press "Refresh data" on top.gg

austere abyss
#

I tried that but it didn't work for me

austere abyss
lyric mountain
#

then try again

#

make sure to clear cache

austere abyss
#

I already deleted it 😞

lyric mountain
#

creating a new bot just for changing name is a terrible option

austere abyss
#

yeah it wasn't the smartest but I didn't know how to get it to work otherwise

#

Oh wait

lyric mountain
#

you could've 🌈 asked 🌈

austere abyss
#

No no I am using the same bot profile. So on Discord it is the same bot. Just with different name

#

But it wasn't updating on Top.gg

#

So I deleted the top.gg profile

#

and am re putting it

lyric mountain
#

I believe that might get flagged as trending abuse tho

viscid gale
#

this wouldn't be an issue if the queue emptied in a day

austere abyss
lyric mountain
#

trending, not queue

viscid gale
#

but.. u might see it back in.. 3 months

lyric mountain
viscid gale
#

imagine calling the police for your missing dog 10 times

austere abyss
lyric mountain
#

that many is like, 10 servers

#

trending new bots, not trending bots

austere abyss
#

Ah okay

viscid gale
#

ah

austere abyss
#

I see the problem

viscid gale
#

I just googled how to see dms on discord.js v13 and apparently it wasn't a missing intent, it was a missing partial

lyric mountain
#

I forgor d.js events depend on partials

queen basin
#

do dms really need a partial

lyric mountain
#

probably anything does

queen basin
#

💀 doesnt that get sent along with the event

#

idk man i havent developed bots in a long time

#

by a long time i mean 2 years

lyric mountain
#

I believe d.js uses the partials to retrieve full data before triggering events

viscid gale
queen basin
#

yea partials are events which dont have all the data necessary

viscid gale
#

must you have every event with some different class and a whole bible on each

lyric mountain
#

imagine having enums

viscid gale
#

yes the devs of discord.js have their own tastes.. although discord api itself seems to have more standardised data.. im simply not going to build my own discord.js interface 😔

queen basin
#

discordjs changed a lot

lyric mountain
#

in JDA we just do (for intents for example) EnumSet.allOf(GatewayIntent.class)

queen basin
#

i used to like it but not anymore

viscid gale
#

i remember a time discord.js was throwing errors when I was sending correct numbers for permissions simply because their function either takes their permission instances, a string or an array of strings

queen basin
#

too convoluted and unknown apis

viscid gale
queen basin
#

does jda have async await?

lyric mountain
#

we don't need

queen basin
#

i remember being confused about the fact you need to execute and queue promises

viscid gale
queen basin
#

is everything blocking?

lyric mountain
#

no, you see, I'm talking abt java

queen basin
#

what if you want to retrieve data?

lyric mountain
#

java handles differently async stuff

viscid gale
#

saw something similar for a repl database with classes and all of that but when reading the docs it was way more simple to interact with

lyric mountain
queen basin
#

is complete blocking?

lyric mountain
#

or u can use .queue(u -> // u is the user)

#

complete yes

queen basin
#

yeah thats what i wanted to know

#

interesting

#

what about concurrency?

lyric mountain
#

there are 3 types: queue (full async), submit (can be both) and complete (full sync)

queen basin
#

i assume theres some kind of thread pool in the background

lyric mountain
#

u are the one making the pools

queen basin
#

like if you're doing .complete wont that block other events

lyric mountain
#

in my case for example

#

I set the events to use 20 threads of the type WorkStealing

queen basin
#

o so it does

#

so each event runs in its own thread

#

until its exhausted

lyric mountain
#

not exactly, but yeah (the thread is freed for other tasks once the current one finishes)

wheat mesa
queen basin
#

i like thread pools

#

just having threads on standby

#

because creating new threads can be costly

lyric mountain
#

for sure it is

queen basin
#

thats how every other language does it

wheat mesa
#

programming language users when they realize that almost every language doesn't have a real enum

queen basin
#

javascript users realizing objects arent enums and will incur performance penalties

wheat mesa
#

Should I bother using redis for a bot that would use a database quite a bit, or just stick with my original idea of using postgresql + typeorm?

queen basin
#

dont be tempted by redis

wheat mesa
#

I've just heard redis is good, I haven't actually looked into it or anything

#

I've used postgres and typeorm together before, pretty good experience and it has a built in cache with optional timer

queen basin
#

i havent used most of its features to understand why people would choose to use it but for regular caches its generally prob overkill

#

i guess if you have a lot of cache you could take advantage of the compression feature

lyric mountain
wheat mesa
#

Why not? I know it's fast, but I don't really see a point to querying that much

lyric mountain
#

postgres already caches data

#

and some libraries add a cache layer too

queen basin
#

oh yea thanks for reminding me

#

it will probably be a better option to raise the cache limit of the database instead

#

dont know about postgres but there are probably a shit ton of tunable settings

wheat mesa
#

I could probably just wing it but I'm trying to minimize the amount of times I need to redesign things lol

queen basin
#

the os also caches a bunch of shit for the database too

#

i made a database called BroDB and without caching it already does a good job

wheat mesa
#

@cinder patio maybe u were right

lyric mountain
#

there's a config guide out there about what settings are good to change

queen basin
#

i know if you have phpmyadmin you can easily tune them

#

hard to know what to tune tho

lyric mountain
#

for postgres there's a config file

queen basin
#

especially if you dont have a deep understanding of databases

lyric mountain
#

postgres.conf iirc

queen basin
#

if the config isnt json dont talk to me

eternal osprey
#

hey guys, why is this only reading the [0]: js characters[args[0][1]].args[0][3]

#

it's not getting the args[0][3] as a whole

wheat mesa
#

holy fuck what is that

queen basin
#

💀

#

i think there might be a better way of doing what youre trying to do

quartz kindle
#

what even is the value?

#

console.log it

eternal osprey
#

speed

#

the thing is that instead of getting the whole args[0][3] (which is speed), it only gets the args[0]

quartz kindle
#

console.log(characters) and console.log(args)

#

otherwise i have no idea what you're talking about

wheat mesa
#

yeah this is gonna need a little more context with how many subscripts you have there

eternal osprey
wheat mesa
#

And that is which thing?

quartz kindle
#

thats args?

eternal osprey
wheat mesa
#

It's a 1d array

quartz kindle
#

and what is characters?

wheat mesa
#

Oh wait

#

Can you access individual chars in js with subscript?

quartz kindle
#

yes

#

but thats a 2d array

eternal osprey
#
{"Miauw":{"name":"Miauw","owner":"345138133429649408","speed":["50"]}}```
wheat mesa
#

Oh I didn't even see the top one

quartz kindle
#

args does not exist inside the Miauw object

#

what you want is characters[args[0][1]][args[0][3]]

#

which is the equivalent of characters["Miauw"]["speed"]

eternal osprey
#

oowh wauw i get it now

#

it's because of the [50] right?

quartz kindle
#

no

#

characters[args[0][1]].args[0][3]
is equivalent to
characters["Miauw"]["args"][0][3]

#

the dot character represents a literal key

#

it cannot read variables

#

characters[args[0][1]] is the same as characters["Miauw"] because the [] reads the args as a variable
characters.args[0][1] is the same as characters["args"][0][1] because the dot reads the word args literally

lament rock
#

multi dimensional arrays are fun

sharp geyser
queen basin
quartz kindle
#

when numbers get way too ridiculous

lyric mountain
#

and why is it a for-loop?

quartz kindle
#

its a way of expressing a stupidly large number with a turing machine function

#

as far as i could understand it, its something akin to the number equal to the amount of operations needed to solve the beaver problem with N states, and the beaver problem is something not much different from bogosort or the game of life

#

these are all ridiculously ridiculous impossible to conceive numbers

#

rayo's number is the smallest number that is bigger than the biggest possible number you can represent with a googol amount of first order mathematical symbols

#

or something like that

sharp geyser
#

Tim stop speaking enchantment table

wheat mesa
#

These all feel like made up numbers

#

I just invented one, it’s called Waffle’s number: the biggest possible number

#

All they are is what you define it as

quartz kindle
#

makes a netherite sword with sharpness level 32767

quartz kindle
#

except that those are all mathematically and philosophically well defined numbers

#

ie they are made up, but they actually mean something

#

like an entire theory was created to back the number and why it should exist

#

there's an entire field of study of big numbers called googology lmao

#
Googology Wiki

This is a list of googolisms in ascending order. This list contains ill-defined large numbers, e.g. BEAF numbers beyond tetrational arrays, BIG FOOT, Little Bigeddon, Sasquatch, and large numbers whose well-definedness is not known, e.g. large numbers defined by Taranovsky's ordinal notation and Bashicu matrix number with respect to Bashicu matr...

earnest phoenix
lyric mountain
quartz kindle
#

idk about the formula, but the actual number would take eons to write even if you wrote one character every plank time

#

some numbers have pretty fun names

lyric mountain
#

Tethrathoth, got a new name for next D&D final boss

quartz kindle
#

these are all unspeakable amounts of orders of magnitude bigger than grahams number

lyric mountain
#

has to be with a name like that

queen basin
#

how do you make a object in JS?

#

my professor told me its about inheritance

quartz kindle
#

there are many types of objects on js

#

if you want inheritance, the best way to represent it is through classes

queen basin
#

you mean class as in lecture ?

quartz kindle
#
class A {
  constructor(arg) {
    this.arg = arg;
  }
  getArg() {
    return this.arg
  }
};

class B extends A {
  constructor(arg) {
    super(arg);
  }
  getArg2() {
    return this.getArg() + 2;
  }
}

const obj = new B(10);
obj.getArg2() // 12
lyric mountain
#

inheritance is like: "A dog is an animal, and an animal can move, thus dogs can move"

queen basin
#

ohhhhhhhhhhhhhh ok

#

what does the constructor do

quartz kindle
#

the constructor is the function that is run when you do new B()

#

is what creates the object and gives it its initial values and properties

#
class A {
  constructor(arg) {
    this.f = arg;
  }
}

console.log(new A(10)) // A { f: 10 }
#

technically classes in JS are just an alternative/simpler sintax to plain objects with references and stuff

#

you could write the same with in other ways, without actually using classes

#

JS is a very hackable language

queen basin
#

can you do this in JAVA?

quartz kindle
#

java has classes as well, in fact everything in java is classes lmao

#

but java is probably not as hackable as js is

#

you probably cant tamper with stuff in java like you can in js

#

like in js you can access, modify and override prototypes, which essentially changes the class after its created

wheat mesa
#

Everything in Java is an object ™️

#

Sorta

quartz kindle
#

of course all this flexibility makes js less "safe" than other languages

wheat mesa
#

Everything except primitives

queen basin
#

oh ok

lyric mountain
#

java is one of the best languages if u like working with classes

queen basin
#

do you also know if java has interrupts ?

lyric mountain
#

interrupts?

#

as in?

wheat mesa
#

Like system interrupts..?

lyric mountain
#

what is a system interrupt?

queen basin
#

my professor told me computers have interrupts but he didnt explain it

quartz kindle
#

interrupts are a very low level thing in systems languages

#

java is not a systems lang

wheat mesa
#

To call kernel and stuff

queen basin
#

is assembly a language?

wheat mesa
#

But no Java is a higher level abstracted language

#

Yes

#

There’s tons of types of assembly

lyric mountain
#

u can use JNI if u must call low-level interfaces

wheat mesa
#

Yeah but at that point I don’t see the real benefit to using Java

quartz kindle
#

JNI is very useful actually

#

just like NAPI in node

queen basin
#

oh so i should ignore it

wheat mesa
#

Java isn’t meant to be super low level, it just has some capabilities for compatibility reasons

#

But you certainly CAN do it if you wish

quartz kindle
#

there are languages for everything

#

and specializations for everything

wheat mesa
#

Personally I usually prefer to work with low level APIs in their native language or something on an equivalent level (like C APIs in rust)

queen basin
#

do you think i should also ignore ISR ?

wheat mesa
#

What’s ISR

quartz kindle
#

interrupt service register?

wheat mesa
#

Sounds low level

quartz kindle
#

you can ignore those if you dont want to work with systems and low level languages

queen basin
#

my professor said i needed to write this until our next lecture

quartz kindle
#

but your professor might want you to learn that regardless or he might fail you

#

it sounds like hes starting from low level languages and computer science things

#

all those things are useful to know, but not a requirement for knowing how to code

queen basin
#

do you know what ISR is?

#

sorry i'm confused a lot

lyric mountain
#

he's tim

quartz kindle
#

im assuming its one of these

wheat mesa
#

Sounds like he might want you to learn things that are working towards learning assembly, what kind of class is it?

#

Just a general CS class?

queen basin
#

IDK what it is in english

#

it translates to: mechanical engineering

quartz kindle
#

hmm so basically software for machines and robots?

#

then yeah you'd need to know low level languages if you're going to work with hardware directly

queen basin
#

he said this is a very hard course xD

quartz kindle
#

yeah i can imagine

#

but hey, you'll be able to build an usb-powered sweeping broom

queen basin
#

he also say we need to know this

#

how do i code symbols like this in JAVA xD

quartz kindle
#

you dont

#

logic gates are pure hardware

#

they are made with microscopic transistors and switches

#

thats how a processor is built

#

programming languages are a way yo use computers without having to know how they work

#

you can use those to build a redstone computer in minecraft

queen basin
#

oh wow i did't know xD

#

do you know what pages are? too?

quartz kindle
#

those symbols are actually circuit board symbols for drawing electrical diagrams in circuit boards

quartz kindle
queen basin
#

what is memory?

#

is it what the computer can remember

quartz kindle
#

you know what RAM is?

#

like when you check how much ram your computer has

#

thats the memory

queen basin
#

ohh i did hear

quartz kindle
#

its what programs use to run

#

when you run a program, the program puts its code in memory, so the processor can read it very fast

lyric mountain
quartz kindle
#

becasue hard disks are slow

wheat mesa
#

Does somebody else use your account? I thought you said you made an OS earlier

#

I figure you’d need knowledge of this unless you were just trolling earlier

quartz kindle
#

he also said he made a database

wheat mesa
#

Yea

#

Sounds almost like speedy trolling on an alt KEKW

quartz kindle
#

"BroDB"

wheat mesa
#

SpeedyDB

#

SpeedyOS

quartz kindle
#

hmmm

#

speedy is that you?

#

lmao

wheat mesa
#

His first message in here was today, it’s possible

quartz kindle
#

account is from 2018

#

hmm

wheat mesa
#

Speedy has planned out the last 4 years simply for this moment

spark flint
#

speedy was banned

wheat mesa
#

Oh lmfao

#

Makes sense

#

How long was he muted for and for what lemme check modlog

spark flint
#

1 month

wheat mesa
#

Can u send ss

#

Can’t find it on mobile

lyric mountain
#

lmao so it was speedy after all

wheat mesa
#

Speedy was doing some advanced trolling

lyric mountain
#

the bro was the imposter

wheat mesa
#

I assume it’s this

#

Yeah it is

quartz kindle
#

wait what

#

LOL

wheat mesa
#

Rip speedy he’s gonna need a new personality for his new alt so he doesn’t get found out

quartz kindle
#

he says its not the last we're gonna hear from him

#

lmao

dry imp
#

imagine if the bro is not actually speedy

wheat mesa
#

Nah def is

quartz kindle
#

speedy dmed me right after thebro was banned

dry imp
#

lmao rip

quartz kindle
wheat mesa
#

Lmaooo

#

He was talking earlier about the db thing

#

Then all of a sudden doesn’t know what an object is

quartz kindle
#

xD

wheat mesa
#

Just gave him the benefit of the doubt

quartz kindle
#

well tbh i didnt even know he was banned in the first place

wheat mesa
#

Same

#

He didn’t get banned until 30 mins ago

#

But he did get muted earlier today

#

Like 5 hours ago

quartz kindle
#

so thebro joined immediatelly after he was banned? or was thebro already here all this time?

wheat mesa
#

Joined right after

quartz kindle
#

lmao

wheat mesa
#

Had the “new here” sticker

#

Better watch out he’s gonna get that oracle server finally and raid top.gg lmao

quartz kindle
#

anyone remember the good old times when someone would keep joining with a bunch of alts to insult dbl? and more specifically oliy and tonk

#

join > spam a bunch of fuck yous in all capitals > ban > repeat

wheat mesa
#

I’ve only been here since like

#

2020 I think?

quartz kindle
#

i forget all'yall are teens

#

:^)

wheat mesa
#

Wdym? Are you trying to make valorant cheats lol

#

Pretty much impossible to get through their anticheat unless you’re a professional cheat developer

spark flint
#

lmao

#

first he starts with a bot for valorant login details

#

now this

wheat mesa
#

Why though

#

Valorant already has an RPC you can use

#

What you want to do here is going to be a little bit complex

#

You’re going to need an application that runs in the background as a windows service or something on startup like that, then listens for application open events via the windows api (I think?)

spark flint
#

just use regular RPC?

wheat mesa
#

Probably, but not worth the effort you’ll be spending

#

Just use the normal RPC, this sounds like a really annoying project to make for something so small lol

#

And trust me, the windows API is absolute HELL

lament rock
#

I've been here since before this place became top.gg, but my joined at date will say otherwise. Could probably find my oldest message and see how often I talked in the bot command 1 channel

#

Can remember the good old days

#

Now I shit on Discord.js

clever beacon
#

is requiring USE_EXTERNAL_EMOJIS for commands that use them allowed for bots submitted to DBL? i see plenty of permission denials and was curious whether it's okay for cosmetic features that could work without emotes, but wouldn't be as nice

lyric mountain
#

u can request it, no prob

clever beacon
#

(as in request the bot?)

lyric mountain
#

if you use it, yes

clever beacon
#

gotcha, thanks!

lyric mountain
#

top.gg permission rules aren't about prohibiting features, it's about common sense and only asking what you really need

#

you can ask for all permissions (except admin) if you do use them

clever beacon
#

gotcha, wasn't sure if it was just an "if you use them" thing or if it was a "use as few permissions as possible" thing where if you could workaround a permission then you should

wheat mesa
#

So, what's the point of using @sentry/node? Why bother with it instead of just using a normal error handler?

lyric mountain
#

I believe sentry has a web dashboard

#

other than that, lazyness

wheat mesa
#

ok it's pretty cool

bright hornet
spark flint
#

by Ian

wheat mesa
#

Is it built for a specific lib?

#

Got it now, I'll see if it works

wheat mesa
#

Alright I got it, but it doesn't seem to send me messages on the webhook when there's an error captured by sentry. I tested the webhook, works perfectly fine

#

Is there anything special I need to do?

sharp geyser
#

py

wheat mesa
#

It's an example exception you dumbo

sharp geyser
#

I know I can fucking read

#

Also waffle my new apartment doesn't have wifi

#

Sadge

wheat mesa
#

the error I'm sending it gets logged in sentry, but not sent to the webhook

sharp geyser
#

Interesting

#

Maybe see what requirements sentry has to send a webhook

#

Maybe there's an option you need to enable in sentry node

wheat mesa
#

I'm enabling it right now. Turns out you need to set up integration alerts along with it

quartz kindle
#

tfw your code is a gigantic mess, so you start everything from scratch and promise yourself its gonna be clean af this time, months go by and you watch your clean af code turn into a giant mess all over again

wheat mesa
#

lmfao

#

classic

quartz kindle
#

and you think its gonna be an easy rework

#

6 months later still not done

#

and your "clean af code" is already 59 files

#

i realized how much i hate large codebases and how much i love small code snippets

sharp geyser
#

That's how I feel working with discords API and gateway

#

You try your best to make code that is readable and not messy and next thing you know you're doing black magic

proven lantern
#

what's the max amount of text that can be sent into a slash command?

bright hornet
lament rock
proven lantern
#

like input from the user

#

type: 3

lament rock
#

each string field can only have so many characters. I think 100

proven lantern
#

mmmkay

#

oof

#

100?

#

dang

lament rock
#

But you can have multiple options of strings

#

for larger strings, I'd just use form submitting

#

Those have a maximum character count of either 2000 or 4000

#

I forget

proven lantern
#

nice, i might need to switch over to that

crystal wigeon
#

hey um, anyone know how to show server count on topgg website?

#

like in their website

#

when someone searches for bots

#

i see other bots have server count on display

#

https://top.gg/api/bots/:botid/stats
Im making a POST request to this route with Authorization: Bot {bot_token}
But its always returning unauthorized

wheat mesa
#

It should not be your bot token

#

It should be your top.gg api token

crystal wigeon
#

do i send bearer token or basic

#

or "bot <api token>"

#

it looks like bearer token to me

#

anyway thanks i figured it out

near stratus
crystal wigeon
#

nvm thanks haha

near stratus
crystal wigeon
#

is there any webhook for when server vote happens?

#

or is it only for bots

near stratus
#

see server > settings > webhook

crystal wigeon
#

gotcha, thanks!

crystal wigeon
#

my question was, if on topgg someone votes for a server, is there a webhook that would give me the info like how there is one for bots

#

nvm i found it lol

#

thanks lol

near stratus
#

same for bots and servers

crystal wigeon
#

ye ye, my dumbass was looking in the discord app server settings 😂

near stratus
#

........

ancient nova
#

still getting the fucking DiscordAPIError: Missing Permissions randomly

#

:/

glacial kestrel
#

Well people could just edit the invitation url doesn't it?

near stratus
dry imp
#

i hate when people do that to spam my fkin console

ancient nova
#

I tested each and every command it doesn't pop up in the console from them

#

it pops up randomly

#

the intervals can be from 30s to 1h and there is no stack trace other than the channel the error came from

near stratus
#

Then you can see which channel causing problem

#

after that you can fetch channel info and find the problem

wooden ember
#

how would you stop a setinterval loop in js?

#

im asuming if i just add something like if stop == true then the loop will still run but just return everytime

#

or do i have to use a while loop or somthing?

#

but idk how to add a pause or sleep in there without doing somthing wacky

earnest phoenix
#

with clearInterval

#
const myInterval = setInterval(function, milliseconds);

Then you can to stop the execution by calling``` clearInterval()

clearInterval(myInterval);```

wooden ember
#

oh i see

#

thx

ancient nova
#

actually no nevermind that's not it

hasty lotus
#

Hey, i've got a simple button that triggers a function, but i sometimes get a critical error from the discord api saying "unknown interaction" when trying to reply to the button, which causes my bot to crash. I've tried adding the answer in a try catch loop to get more informations and avoir the bot from completely crashing, but it sadly didn't work :/

Does anyone have this issue ? And have anyone got a solution for it ?

ancient nova
#

I'm sure it's not related at all but what you could try is replying to each interaction

hasty lotus
#

yeah i do too, but it's way easier than having a reaction listener :/

ancient nova
#

do interaction.reply(...) to it and it shouldn't fail anymore

hasty lotus
#

that is what i do

ancient nova
#

that solved my problem

hasty lotus
#

it's as simple as that

ancient nova
#

maybe don't try catching that and instead follow up?

#

I've got a function from someone here I could send it to you

hasty lotus
#
data:    index.js:41181 -       throw new DiscordAPIError(data, res.status, request);
data:    index.js:41181 -             ^
data:    index.js:41181 - DiscordAPIError: Unknown interaction```
ancient nova
#

have you made a collector?

hasty lotus
#

the message is just a confirmation that everything else worked well, but there are anyway other informations saying that everything is okay

ancient nova
#

can you send the whole script?

#

I can check if I see the issue

hasty lotus
#

so if the message is not sent it's not much of an error, but just stop it from crashing 🥲

hasty lotus
ancient nova
#

I have no idea honestly, you're not even using a collector so you prolly need an event to reply to them?

#

try using interactionCreate event

ancient nova
#

I've never used that event but it seems fine to me

hasty lotus
#

but i don't even know if that comes from djs or discord api

#

and would you have a solution to suggest just to avoid the complete crash of the process ?

ancient nova
#

and see which error pops up

hasty lotus
#

hmm okay i'll that

#

thanks ^^

ancient nova
#

I did that when trying to figure out my error, then I added whatever the error that came up with to my collector and it started working

woeful pike
#

cursed javascript

const backingArray = new Uint8ClampedArray(sharedArrayBuffer);

const pointer = wasm.paint(
  width,
  viewportHeight,
  aspectRatio,
  focalLength,
  new Float32Array([x, y, z])
);

const raw = new Uint8ClampedArray(wasm.sharedMemory().buffer, pointer.offset(), pointer.size());

for (let i = 0; i < raw.length; i++) {
  backingArray[i] = raw[i];
}

return sharedArrayBuffer;
near stratus
#

Have no idea what I'm looking at

woeful pike
#

ray tracer in web assembly, reaches into wasm memory to copy data onto a SharedArrayBuffer

ancient nova
woeful pike
#

typed arrays can be used for pretty much anything

ancient nova
#

yeah but it's mainly for drawing

woeful pike
#

it's going over 200k pixels every frame and painting some kind of color on the screen depending on intersections and stuff. Fun project, I don't think you could make it work this smoothly in js directly

ancient nova
#

you can do it with javascript alone

woeful pike
#

well I'm learning ray tracing so

#

if you did that in js it would probably be slow

#

although maybe not even by much

ancient nova
woeful pike
#

and glsl mmLol

#

anyways the point isn't "put 2 spheres on the screen" so it's irrelevant regardless

ancient nova
woeful pike
#

I just said it lol, learning new stuff

ancient nova
#

ah

#

did you use three.js for the project from the recording above?

#

it kinda looks like threejs

woeful pike
#

it's all math from scratch 😃

frank hornet
#

DYOR on doggy

ancient nova
#

so essentially you ACTUALLY managed to write your very own ray tracing engine

woeful pike
#

tbh most of it was just copying C++ code into rust

#

but yea

ancient nova
#

dang

#

your next goal: make a game engine with ray tracing built in KEKW

woeful pike
#

I wanna implement looking around with my mouse but I first need to solve other problems

ancient nova
#

which are?

woeful pike
ancient nova
#

I feel bad for you 😭

woeful pike
#

hard to figure out what it's doing tbh

ancient nova
#

btw are you going to publish it as a web game once you finish?

ancient nova
#

but it kinda looks as if you have a memory leak

woeful pike
#

I'll turn it into an interactive thing but not a game

#

it's not a memory leak on my end. Something is wrong with vite

woeful pike
#

I think I need to switch to webpack oops

ancient nova
#

send it to me once you finish ples KEKW

#

that's some extensive writing

woeful pike
#

no lmaoo I'm reading it

ancient nova
woeful pike
#

I suck at math I'm following through with it

ancient nova
#

ah that's cool

earnest phoenix
#

hello, someone use sequelize with mysql here please?

sharp geyser
#

Just ask your question

ancient nova
#

do you guys have any command ideas?

pine nova
ancient nova
#

can you get guild property from channel?

wheat mesa
#

<GuildChannel>.guild

#

Careful though, if it's a DMChannel then the guild property won't exist

lament rock
#

Use the raw api

boreal iron
#

wtf

#

the field title is not even documented

#

so... modals are an initial response and the interaction can't be deferred (before)?!

#

nvm

#

They are

ancient nova
#

ERROR Unhandled rejection: DiscordAPIError: Missing Permissions

#

why

#

I added an permission check

#

in

#

literally

#

every

#

script

#

why

lyric mountain
#

check channel not role

ancient nova
#

what do you mean??

lyric mountain
#

check bot's permissions at channel level, not member level

#

like, do not check the bot's permissions directly, check channel permissions for the bot

ancient nova
#
    if (message.guild && !message.channel.permissionsFor(message.guild.me).has(
        [
            Permissions.FLAGS.VIEW_CHANNEL, 
            Permissions.FLAGS.SEND_MESSAGES, 
            Permissions.FLAGS.EMBED_LINKS
        ]
    )) return;
#

that's what I'm doing

#

or is there anything I'm missing that could be causing the DiscordAPIError: Missing Permissions pop up every 30 seconds

lyric mountain
#

then u missing some perm

ancient nova
#

which 1???

lyric mountain
#

how would I know?

ancient nova
#

I wish I fucking knew but it's not telling me

#

I don't even know which channel it keeps popping up from cause it's not any of the guilds I'm in

lyric mountain
#

would help if u post at least the stacktrace

ancient nova
#

oh sorry I thought I posted it

#
DiscordAPIError: Missing Permissions
    at RequestHandler.execute (/home/container/node_modules/discord.js/src/rest/RequestHandler.js:350:13)
    at runMicrotasks (<anonymous>)
    at processTicksAndRejections (node:internal/process/task_queues:96:5)
    at async RequestHandler.push (/home/container/node_modules/discord.js/src/rest/RequestHandler.js:51:14)
    at async TextChannel.send (/home/container/node_modules/discord.js/src/structures/interfaces/TextBasedChannel.js:176:15) {
  method: 'post',
  path: '/channels/124622509881425920/messages',
  code: 50013,
  httpStatus: 403,
  requestData: {
    json: {
      content: undefined,
      tts: false,
      nonce: undefined,
      embeds: [Array],
      components: undefined,
      username: undefined,
      avatar_url: undefined,
      allowed_mentions: undefined,
      flags: undefined,
      message_reference: undefined,
      attachments: undefined,
      sticker_ids: undefined
    },
    files: []
  }
}
#

that's the entire thing

#

most of the time it's the same channel

lyric mountain
#

do you know what command is it?

ancient nova
#

no idea, it doesn't even happen when I execute a command. it just happens at seemingly random intervals

#

once rebooted I noticed it happens once every around 30 seconds to 5 minutes

lyric mountain
#

don't u keep a log of commands used?

ancient nova
#

I do, but it's got nothing to do with the commands

lyric mountain
#

are you 100% sure?

ancient nova
#

last error popped up 5 minutes after last command was used

#

yes, absolutely

grim aspen
#

I bet you have an unauthorized permission

lyric mountain
#

we know

grim aspen
#

Just saying

lyric mountain
ancient nova
boreal iron
#

Anyone of you experiencing ModalSubmitInteraction being sent multiple times?

ancient nova
#

nope I don't use interactions very much

lyric mountain
#

put a catch in all sendMessages in your guild listener

#

print something you can use to quickly locate where it happened

#

then wait for it to happen

ancient nova
lyric mountain
#

wherever you handle guild messages

ancient nova
#

I use messageCreate event for that

#

I'm using discord.js

lyric mountain
#

does messageCreate include DMs?

ancient nova
#

yes, but I've got that handled, there is specific commands for guilds and DMS

lyric mountain
#

no no, you see, I'm not talking about commands

#

you might be trying to send a message to an user it can't

ancient nova
#

ah no, that's definitely not it

#

it only responds on mention

#

and anything that sends messages to users has a permission check

lyric mountain
ancient nova
#

cause sendMessages is only done in the commands itself

#

and the error happens randomly

lyric mountain
ancient nova
#

so you want me to put a catch on the logs? how will that help?

lyric mountain
#

if you're 100% SURE it has nothing to do with commands how tf is it happening in a command then?

#

topggFacepalm ok, back to the start, you keep a log of commands right?

ancient nova
#

it's not.. it randomly happens perhaps you misunderstood what I meant

ancient nova
lyric mountain
#

that's...not a log of commands

ancient nova
lyric mountain
#

when I say log I mean a history of all commands used

ancient nova
lyric mountain
#

both for safety and debugging purposes

lyric mountain
ancient nova
#

done. What now?

lyric mountain
#

add a timestamp to that

#

or does ur console add date for every line?

ancient nova
#

already do

lyric mountain
#

ok, now just wait for it to happen again

ancient nova
#

okay one ssec

#

can I ping you when it happens?

lyric mountain
#

yes

ancient nova
#

oh it happened

lyric mountain
#

what command was it?

ancient nova
#

nobody even managed to execute a command yet

lament rock
#

failed to send a message pog

lyric mountain
#

then that ain't happening inside command handlers

#

do you have ANY sendMessage before run?

ancient nova
#

yes

lyric mountain
#

put a catch in it

ancient nova
#

but I check for SEND_MESSAGE permissions before any of them are sent

lyric mountain
#

doesn't matter, put a catch on it

ancient nova
#
    if (message.guild && !message.channel.permissionsFor(message.guild.me).has(
        [
            Permissions.FLAGS.VIEW_CHANNEL, 
            Permissions.FLAGS.SEND_MESSAGES, 
            Permissions.FLAGS.EMBED_LINKS
        ]
    )) return;
#

ok

lyric mountain
#

are there any others or just that?

lament rock
#

Every send has to be checked

ancient nova
ancient nova
lyric mountain
#

inside that catch make it log to console something u can easily locate

ancient nova
lament rock
#

I think I do understand based on the error. POST /channels/:channel_id/messages can only do one thing

lyric mountain
#

we're trying to find out what permission he's missing

ancient nova
#

I'm aware but I don't post to anywhere without a reason, and each message.send I do is being checked for permissions

lyric mountain
#

did you add it?

ancient nova
#

yes

#

I just have to reboot

lyric mountain
#

keep an eye if it pops in the console

#

if it does, the error is happening there

#

if it doesn't, that's not the only sendMessage there

ancient nova
#

so far so good

#

around 1 minute after rebooting

#

though I have no idea how possibly that could happen...

#

2 minutes we good

#

wow did that actually fix it lol

#

I should check if anything had stopped working

lyric mountain
#

that's not a fix, we're trying to see if the issue is there

lament rock
#

Permission checks don't guarantee a message will be sent, because of latency or caching issues or whatever.
They only reduce the amount of bad requests you can make to prevent bans

lyric mountain
#

did u put something easily findable?

#

like ```js
console.log(`

ERROR IS HERE

`)

ancient nova
ancient nova
#

I'm going to edit the commands rq then

#

give a sec

#

though I think it actually fixed it

#

:Z

lyric mountain
#

that's not a fix, that's a mat sweep

ancient nova
#

I understand

lyric mountain
#

did it appear?

ancient nova
#

yes

lyric mountain
#

then there's you error

ancient nova
#

it happened when I ran command -urban

lyric mountain
#

show what you're doing there

ancient nova
#

nevermind xd

lyric mountain
#

still

#

show the code where u put the catch

lament rock
#

Might want to console.log(new Error().stack) stuff so you can see code execution

ancient nova
#

yeah but it's not a problem anymore it seems

#

I've done the catch in every message.send I got in the messageCreate event and it still popped up

lyric mountain
#

you shouldn't use the very same message in all catches

#

how will we know which one is it now?

lament rock
#

That's why I said printing a new Error().stack

#

create the new Error().stack outside of the catch because it will include previous frames of the event loop

ancient nova
#

but that's not the issue

lyric mountain
#

either do what papi said or make the debug messages different

ancient nova
#

how do I format it?

#

@lament rock

lament rock
#

You can only go so far back in stack frames and Discord libraries usually don't remove the garbage frames from their request handler

ancient nova
#

.catch(console.log(new Error().stack));?

lament rock
#
const s = new Error().stack;
msg.channel.send(...).catch(() => console.log(s))
quartz kindle
#

none of that is necessary if you use await instead

lyric mountain
#

good catch, didn't notice the missing awaits

ancient nova
lyric mountain
#

in both places

ancient nova
#

you want me to await both of these message.send?

#

also

#
    at module.exports (/home/container/events/messageCreate.js:88:32)
    at Client.emit (node:events:390:28)
    at MessageCreateAction.handle (/home/container/node_modules/discord.js/src/client/actions/MessageCreate.js:26:14)
    at Object.module.exports [as MESSAGE_CREATE] (/home/container/node_modules/discord.js/src/client/websocket/handlers/MESSAGE_CREATE.js:4:32)
    at WebSocketManager.handlePacket (/home/container/node_modules/discord.js/src/client/websocket/WebSocketManager.js:346:31)
    at WebSocketShard.onPacket (/home/container/node_modules/discord.js/src/client/websocket/WebSocketShard.js:478:22)
    at WebSocketShard.onMessage (/home/container/node_modules/discord.js/src/client/websocket/WebSocketShard.js:317:10)
    at WebSocket.onMessage (/home/container/node_modules/ws/lib/event-target.js:199:18)
    at WebSocket.emit (node:events:390:28)
    at Receiver.receiverOnMessage (/home/container/node_modules/ws/lib/websocket.js:1169:20)```
#

it happens when I execute -urban

#

and the -urban has the nsfw if statement

lament rock
#

You don't do checks there from the code you sent

lyric mountain
ancient nova
#

what's wrong?

lyric mountain
#

try doing what tim said, put await on those sendMessage

ancient nova
lyric mountain
#

are you checking if you can send messages before that part of the code?

ancient nova
#

I sent you that piece of code 3 times

lyric mountain
#

but is it before?

ancient nova
ancient nova
lyric mountain
#

well, then I'm out of ideas, but at least now you know where it's happening

ancient nova
#

it happened even after I added the catches

lyric mountain
#

catch doesn't magically fix the issue

#

you can put a mute catch there, or u can investigate what other perms you'd need to send a message

ancient nova
#

it happened in a separate interval...

#

so it's not in messageCreate event

lyric mountain
#

but it did happen there too, else it wouldn't show the catch message

ancient nova
#

but it shows the catch message AND sends the message itself

#

so what's the problem?

sharp geyser
#

What even is the issue anymore

ancient nova
#

discordapierror: missing fucking permissions

lyric mountain
#

mysterious missing permission error

ancient nova
#

for literally no reason

sharp geyser
#

What are you trying to do

ancient nova
#

happens at very weird intervals

#

it can happen immidietaly after startup or not at all

#

for example it didn't do it right now somehow

#

nvm it just did

#

seconds after I send the image

#
[2022-07-06 19:38:55]: CMD Bot Owner ItsOkayBae#1172 (392035788004524043) ran command stats
[2022-07-06 19:40:04]: ERROR Unhandled rejection: DiscordAPIError: Missing Permissions 
DiscordAPIError: Missing Permissions
    at RequestHandler.execute (/home/container/node_modules/discord.js/src/rest/RequestHandler.js:350:13)
    at runMicrotasks (<anonymous>)
    at processTicksAndRejections (node:internal/process/task_queues:96:5)
    at async RequestHandler.push (/home/container/node_modules/discord.js/src/rest/RequestHandler.js:51:14)
    at async TextChannel.send (/home/container/node_modules/discord.js/src/structures/interfaces/TextBasedChannel.js:176:15) {
  method: 'post',
  path: '/channels/124622509881425920/messages',
  code: 50013,
  httpStatus: 403,
  requestData: {
    json: {
      content: undefined,
      tts: false,
      nonce: undefined,
      embeds: [Array],
      components: undefined,
      username: undefined,
      avatar_url: undefined,
      allowed_mentions: undefined,
      flags: undefined,
      message_reference: undefined,
      attachments: undefined,
      sticker_ids: undefined
    },
    files: []
  }
}

#

and nobody exeucted another command

#

so WHY

#

WHY

#

???

sharp geyser
#

Calm yo self man

ancient nova
#

it's been like this for days

#

I'm so annoyed

#

why can't I get rid of that

sharp geyser
#

Well it's obviously an issue with posting to a channel

ancient nova
#

but WHICH CHANNEL?

#

I DON'T HAVE ACCESS TO IT

sharp geyser
#

It gives you the channel ID

ancient nova
#

so what am I supposed to do with it?

sharp geyser
#

Figure out what channel

ancient nova
#

I'm not in that channel

sharp geyser
#

Is this bot public?

ancient nova
#

yes

sharp geyser
#

Well then it's likely an issue of you sending a message on ready/message create or some other even that gets fired when bit starts up

#

bot*

ancient nova
#

I put the permission check code in almost every event

#

the only events that I didn't put it in are because I can't get the channel property

#

to check channel permissions

sharp geyser
#

Iirc it could also be a dm

#

But I don't remember if missing permission is what discord returns when a bot can't dm a user

ancient nova
#

yeah it's not

#

I know it's not

sharp geyser
#

🤷‍♂️

ancient nova
#

but I doubt anyone would be dming it anyways

#

why

#

it's only got 50 fucking servers

#

there is a catch on literlaly every channel I try sending to

sharp geyser
#

You say you know it's not but you've been wrong on other occasions before so I doubt your judgement

ancient nova
#

for example this is message delete

#

I cought it, I don't log anything either

#

so why would it pop up

sharp geyser
#

That's not exactly safe error handling but whatever

ancient nova
#

and besides I've got

    if (message.guild && !message.channel.permissionsFor(message.guild.me).has(
        [
            Permissions.FLAGS.VIEW_CHANNEL, 
            Permissions.FLAGS.SEND_MESSAGES, 
            Permissions.FLAGS.EMBED_LINKS
        ]
    )) return;
``` right above it
boreal iron
#

Is there a faster way I don't think of to create and check for an existing object property?

if(object.prop) object.prop.test = value; else object.prop = { test: value };
sharp geyser
#

I can't remember if in is a thing in js

#

If so you can check if it's in the object

#

But I don't see what's wrong with doing object.prop and then setting it no?

grim aspen
#

Maybe based on your star command?

#

Stat*

boreal iron
#

Isn't there something like ??= ?

ancient nova
sharp geyser
#

Ah yes forgot about that mf

ancient nova
#

in any server even if no permissions

sharp geyser
#

Well my guy it's literally an issue with posting to a channel

#

Stat command would respond with a message

boreal iron
#

But I don't see ??= is helping me

sharp geyser
#

If it can't send it will error

sharp geyser
sharp geyser
#

The enum name even changes doesnt it?

ancient nova
#

@sharp geyser

#

I found which channel

sharp geyser
#

Why ping me

ancient nova
#

I fetched it

#

idk..

sharp geyser
#

Seems like it doesn't have permission to send in that channel

#

Gj finding out what the channel is

#

Gtg

boreal iron
#

Where's Tim or Voltrex when you need them

ancient nova
#

+reboot

#

finally

#

I fixed it

boreal iron
#

Also guild.me doesn't exist as property in v14

#

just to say (once again)

ancient nova
#

jesus christ v14 is going to suck

#

I don't think I wanna update

#

wait v14 is already released?

sharp geyser
#

It's a master version iirc

lament rock
#

Errors in the console are fine btw

ancient nova
#

I'm not updating

sharp geyser
#

It hasn't been pushed to stable I don't think

boreal iron
#

i dont think so, but when deciding to do create something new, go with the latest changes

#

don't build something that will be deprecated in a few weeks again

boreal iron
lament rock
#

object.prop = object.prop || {}; object.prop.test = value;

boreal iron
#

well... that's literally the same

lament rock
#

or no wait. I have one better

sharp geyser
#

Isn't that essentially the same as using ??=

boreal iron
#

just without the statement at all

lament rock
#

object.prop = Object.assign(object.prop || {}, { test: value });

ancient nova
#

ok I updated every event with that method

#

now I shall never see that error again

#

thank god

#

thanks for help

boreal iron
boreal iron
ancient nova
#

NOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO

#

ERROR Unhandled rejection: TypeError: channel.permissionsFor is not a function

#

what

lament rock
#

permissionsFor doesn't exist on DM channels

grim aspen
#

Dms don’t use permissions

ancient nova
#

I fucking accidentally replaced my messageCreate event with another

#

and didn't save

#

time to fucking rewrite

boreal iron
#

God thanks somebody invented CTRL + Z

boreal iron
lament rock
#

breaking parity with Discord

#

lets go

ancient nova
boreal iron
# quartz kindle 🤮

Most ridiculous thing is they don't start with a small letter as camel case would do

ancient nova
#

I was coding all of that in my VM

#

which doesn't have that

#

:/

quartz kindle
#

my lib wont even have permission strings, if you wanna deal with permissions, learn bitwise

boreal iron
#

true, but still ridiculous

ancient nova
#

how will they work in v14?

boreal iron
#

what?

ancient nova
#

permissions

boreal iron
# quartz kindle my lib wont even have permission strings, if you wanna deal with permissions, le...

That won't help you with API errors caused by Discord
Best example:

ChangeNickname, PermissionsBitField { bitfield: 1071661829185n }, true

// interaction.appPermissions?.has(permission) -> true

Obiviously ChangeNickname is part of the bitfield

When executing the god damn action, look at the response:

  rawError: { message: 'Missing Permissions', code: 50013 },
  code: 50013,
  status: 403,
  method: 'PATCH',
  url: 'https://discord.com/api/v10/guilds/768526426412417045/members/972714450564026408',
  requestBody: {
    files: undefined,
    json: { nick: 'test bot', communication_disabled_until: undefined }
  }
#

How does bitwise help with Discord API issues, hmm?

#

appPermissions is a new field respresenting your, guess, app permissions in any situtation

ancient nova
#

I'm definitely not updating now

boreal iron
#

I've got no words...

#

permissions are fucked up so many times, I can't count this anymore

quartz kindle
#

lmao

#

honestly most of the time its not even worth handling them

#

except if your bot is huge

#

but for small medium bots its much easier to just let it error

boreal iron
#

I can't fucking fix this API issue

#

Not even reinviting helps

#

I'm still missing the permissions to change the nickname while the appPermissions telling me, I'm allowed to do so

boreal iron
#

Also inconsistency anywhere in the lib, my gosh

#

well, kicking and reinviting doesn't work as well

#

nothing fixes the api permission issue

#

great

#

Either it’s the v10 gateway or my guild is fucked up

sterile lantern
#

When using Cloudflare Workers, your app won't be able to access non-ephemeral CDN media. For example, trying to fetch an image like https://cdn.discordapp.com/attachments/1234/56789/my_image.png would result in a 403 error. Cloudflare Workers are still able to access ephemeral CDN media.

is there any other way to access things such as user avatars, guild icons, etc w cloudfare workers

viscid gale
#

😔 another discord.js issue
the second line 10 seconds later says undefined but that means that I did try to login and my bot simply never gets ready

I also tried bot.login(...).then(console.log).catch(console.log) but there's absolutely nothing

quartz kindle
#

using a timeout is not the right way to wait for the bot to be ready

#

you need to use the ready event bot.on("ready", () => {})

viscid gale
#

I did this..

#

after I realised my bot simply isnt loading

quartz kindle
#

to see the bot's connection status you can use the debug event

#

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

viscid gale
#

will try

sterile lantern
#

unless using a different image server, but i dont think any other image server has all discord avatars + guild icons

quartz kindle
#

why the fuck cant cf workers access discord stuff?

boreal iron
sterile lantern
#

🤷‍♂️

viscid gale
#

it was just me trying to find the problem.. it's not an error of me happening before the bot attempts to log in.. it tries but then.. yea gonna on("debug")

#

huh

sterile lantern
#

id assume it has to do with some sort of security problem but i dont think there would be any security issues

viscid gale
#

on local it runs

#

the bot loads when I selfhost