#development

1 messages · Page 1826 of 1

wheat mesa
#

But do you really know how to do that if you have 200 commands in a single index file

long crow
#

slash command

split hazel
boreal iron
#

That’s right

#

Or just begging in this channel for help, yikes

long crow
#

When 'GUILD_VOICE_STATES' become privileged, that be an explosion

grim sundial
#

i cant even think of 50 commands let alone 200

#

what type of commands were they

#

and 50 being, them weird commands like hello

#

and it'll say hello back

long crow
#

Technically I have more than 80 commands as of now, which some of it is subcommands under 1 main. most part is weeb stuff

earnest phoenix
#

Just wait until April 2022 fucking priv message intent

#

smh

long crow
#

guilded is going to release their api to public soon. also, the message intent doesn't really affect me now unless I'm doing moderation stuff that require to delete other's message

errant flax
#

r the msg intents out yet or?? no

modest crane
#

nope

solemn latch
#

Isn't it 9 months till that happens?

long crow
#

As long the bot does not involve reading other's message. You are safe

#

Which I think 99% here do with old message command

solemn latch
#

Its probably 80-90% of bots use old style commands

#

A fair few have moved to slash

long crow
#

I only have the deploy command that still using normal command. I think on it to fully move to slashies later

earnest phoenix
#

Wait, there's a message intent now?

#

npm degrade discord.js@12.without.v9.api

vivid fulcrum
#

they realized no one uses shitty slash commands so they're now forcing it lol

long crow
#

At least I have no fear of ppl accusing I'm spying on there chat now. Lol

earnest phoenix
#

your message data is collected by the bot to give you the best user experience

latent heron
#

a few large bots have moved to slash commands

#

Tatsumaki is one of them iirc

inner fulcrum
#

i aint gonna move to / command anytime soon

earnest phoenix
#

Why

inner fulcrum
#

yes

earnest phoenix
#

It's better for the user

#

You get an easy to use UI for interacting with the bot

#

No more !help <command>

long crow
#

well, imagine remembering the prefix for each bot

earnest phoenix
#

THIS

#

If you have an exclamation mark prefix you deserve hell

long crow
#

even I sometime forgot what my arguments look like

earnest phoenix
#

i forgor

split cipher
#

Is it possible to check if the bot can send a message in DM channel without hitting the error with djs?

inner fulcrum
split cipher
#

What should I do with the message in the console?

wheat mesa
#

How do I check the memory usage of my bot on a linux VPS? (I'm hosting on Oracle btw, if that helps)

#

Nvm, got it

bright flame
#

Hey anybody know about pyarmor?

earnest phoenix
spare goblet
#

Theres no way to do this, even if you did try once then cache it it might change in between

earnest phoenix
#

Just send the user the message and if it fails send a message in the channel

spare goblet
#

You HAVE to send a message, you can only catch it

split cipher
#

icic

wheat mesa
#

I love pm2

earnest phoenix
#

message.author.send("anime").catch(_ => message.channel.send("not a weeb"));

bright flame
#

I used pyarmor
I used it and it worked but it requires its own modules which are in the same folder as the file and i want the file alone
then can you help i wanna share that file to someone but dont want the code to be revealed

wheat mesa
#

Yeah sadly discord doesn't provide functionality for checking if you can send a dm to someone afaik

inner fulcrum
# wheat mesa I love pm2

pm2 is just a ez access handler there is no use of it but i use pm2 because i am lazi to open a terminal lol

spare goblet
#

..access handler?
You mean process manager ...

wheat mesa
#

^^

inner fulcrum
#

mmmmmmmmmm

#

u guys like pasta?

earnest phoenix
spare goblet
wheat mesa
#

I just use it to run my bot as a service on my VPS, the resource monitoring/dashboard is just a plus

inner fulcrum
bright flame
spare goblet
#

Docker gang klee_ayaya

frozen mesa
orchid ginkgo
#

How i can add my bot 24/7 it's music bot

lucid rapids
#

You can apply on the website.

undone rose
#

Anybody wanna help me with a logic/math problem? I'm using node-canvas, which allows me to place images onto other images. I'm tying to place images (example forest image) in the center of the grey rectangle. the grey rectangle's coordinates never change,but the image dimensions vary greatly. I think I can handle the math for properly sizing the image, but where I get lost is on how exactly I place the image so that it's always in the center https://cdn.tanners.space/N7Jg

split hazel
undone rose
#

Because Canvas' behavior is to place images from the top-left of the image (0,0)

split hazel
#

so centering the image in the gray rectangle

undone rose
#

ye

orchid ginkgo
split hazel
#

did you have no luck with finding a midway in the coordinates?

undone rose
#

So if I insert it at the middle coords, the top left of the forest picture will be in tye center instead of what I want: tye center of the forest image to be in the center of the rectangle

split hazel
#

can't you then find the middle point between the coordinate and the corresponding middle point?

lucid rapids
mild agate
#

same for height

orchid ginkgo
lucid rapids
orchid ginkgo
#

I hosted it on replit but sometime it goes offline so I want to make it 24/7 online

near stratus
#

Get a vps

earnest phoenix
#

does anyone know how to get steam ids from usernames in a bot

boreal iron
#

You mean by Steam URL or vanity name?

earnest phoenix
#

i want to input red and get blue

boreal iron
#

You gonna resolve it using the Steam API, get the Steam ID 64 as response and can work with

#

You can’t resolve the "personaname" aka. nickname.

#

But…

#

You can resolve the Steam URL and vanity URL like I said

#

A bot for that already exists… just to say

earnest phoenix
#

i want to add it to my bot so people dont have to use steam id to find their stats

boreal iron
#

Yeah makes sense but searching for the Steam nickname is not supported via the Steam API and you will never know if the result is the right Steam account since tons of results will be available usually searching for a nickname

rocky hearth
#

how can I see total downloads of a npm package?

boreal iron
#

That’s pretty much anything you can do to get a 100% save result

#

And I can guarantee you that since I wrote a bot doing that oldEyes

earnest phoenix
boreal iron
#

It was indeed KEKW

hallow shell
#

could someone explain the difference between Interaction.defer, Interaction.followUp, and Interaction.reply in Discord.js v13?

boreal iron
# earnest phoenix lol it was a good time for me to ask
earnest phoenix
boreal iron
#

Oh okay yeah just wanted to show you an example how it works and what you can use and fetch by the Steam API

#

For example if people are pasting their profile URL you can use regex to get the Steam ID 64 of it

#

(as long as it’s not vanity URL of course)

earnest phoenix
#

ok

#

thank you

#
steam.getUserSummary('76561198146931523').then(summary => {
    console.log(summary);
    /**
    PlayerSummary {
        avatar: {
            small: 'https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/7f/7fdf55394eb5765ef6f7be3b1d9f834fa9c824e8.jpg',
            medium: 'https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/7f/7fdf55394eb5765ef6f7be3b1d9f834fa9c824e8_medium.jpg',
            large: 'https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/7f/7fdf55394eb5765ef6f7be3b1d9f834fa9c824e8_full.jpg'
        },
        steamID: '76561198146931523',
        url: 'http://steamcommunity.com/id/DimGG/',
        created: 1406393110,
        lastLogOff: 1517725233,
        nickname: 'Dim',
        primaryGroupID: '103582791457347196',
        personaState: 1,
        personaStateFlags: 0,
        commentPermission: 1,
        visibilityState: 3
    }
    */
});
#

i want to do the reverse of this basically so i input this DimGG and receive this 76561198146931523 then use the SteamID64 Dec to search using TRN api

boreal iron
#

That’s possible since DimGG is the Vanity URL in this example NOT the accounts nickname

#

You can build and request the vanity URL and will get the Steam ID 64 as response

#

But you cannot search for the personaname (nickname) in your example

earnest phoenix
#

oh god my physics teacher says RBG instead of RGB

boreal iron
#

Stop using your phone while being in school okeh

pale vessel
#

Red black grey

rocky hearth
#

for js, hw cn I empty an object and replace with new data to the same object.

earnest phoenix
#

Redsus blasted Grey

pale vessel
#

Is the object a constant?

earnest phoenix
wheat mesa
rocky hearth
earnest phoenix
#

Why will you use const for an object you need to change

boreal iron
wheat mesa
#

Don't do that!

cinder patio
cinder patio
#

Creating a new object means creating a new reference to that object

proven lantern
#
for(const key of Object.keys(stuff)) {
  newStuff[key] = stuff[key];
  delete stuff[key];  
}```
pale vessel
#

for in exdee

earnest phoenix
cinder patio
#

flazepe now points to a new object

rocky hearth
#
const obj = {
  a: 1, b: 2
}
const objRef = obj
const dataToReplace = {
  b: 5, c: 0
}

// Now I want obj to be dataToReplace but objRef should still refer to obj. So it have same content as obj even after replace

Hope that makes sense.

cinder patio
earnest phoenix
#

delete every property inside objRef and then Object.assign(objRef, dataToReplace);

boreal iron
cinder patio
#

you have to clone the object

earnest phoenix
rocky hearth
round cove
#

Discord slash commands taking past an entire hour to show up on a bot makes me want to strangle the devs.

cinder patio
#

same

round cove
#

"New command idea, too bad I have to wait an entire year to test it"

pale vessel
#

Why not test first using guild commands?

earnest phoenix
pale vessel
#

Once you're done push them globally

earnest phoenix
#

That's what dank memer does

round cove
#

I tried doing guild command but it wouldn't appear either. viviooaahh Lemmie try one more time to make sure.

pale vessel
#

It should work fine with guild commands

earnest phoenix
#

you have to refresh the channel

cinder patio
#

It's a mess

earnest phoenix
#

i have the same problem too

round cove
#

It will not show up, like wtf? Lol

cinder patio
#

Refresh the client

round cove
#

I have trust me >_<

pale vessel
#

Uninstall and reinstall Discord

cinder patio
#

Hmm, kick the bot and then invite it again

round cove
#

Hmm

cinder patio
#

are you sure you gave it the interactions perm

#

not perm but flag idk how it's called

earnest phoenix
copper cradle
#

scope

cinder patio
#

yeah scope

pale vessel
#

10x zoom

earnest phoenix
round cove
earnest phoenix
#

did you give it bot mmulu

round cove
#

Yes :^)

earnest phoenix
#

cache

#

ok dont bully im a nube lol but im printing to console but i want to define id

#

define what

small tangle
#

id in the template string

copper cradle
#

id is undefined

small tangle
#

i guess

copper cradle
#

id exists in that scope

cinder patio
#

Put that code inside the then callback

copper cradle
#

but not outside of it

earnest phoenix
#

put the rest of the code inside .then

#

or use await

#

oh ok i was so confused

small tangle
#

Furthermore, notice how a class can practically implement as many interfaces as needed (there is a limit of 65,535 due to JVM Limitation).
dang but i want to have my class implements 65536 interfaces LULW

turbid spruce
#

There are slash comands (even not in dev!). You can use discord-buttons.

pale vessel
#

Disbutt

small tangle
#

Dis bee_ass

slender thistle
#

Dis but nah

small tangle
#

today i found out that interfaces can inherit LULW

#

and makes my code much cleaner hlyB

rocky hearth
#

if I fs.writeFileSync() and if the file already exists, does it gets ovewritten?

small tangle
#

yes by default

fossil vault
#

hey what can be the best way of storing images.

I need to store 1 image per server. and i need to access them frequently for welcome cmd

split hazel
#

the best way is to let your operating system handle it

#

store it using the file system and assign a specific file name

#

basically just throw the images inside a folder with each image being assigned an ID

#

@fossil vault

fossil vault
#

okk thanks

split hazel
#

storing the image in your database can be quite inefficient

fossil vault
#

yeah and would take much space as well

small tangle
#

so, what do you mean by adding the script

lyric blaze
#

I mean speaking of the slash commands

#

I haven't watched any tutorials yet

#

Ok, I mean whatever really XD

#

when it comes out I'll ask

small tangle
#

since im on java with my bot, im not that much of a help with js, sorry

lyric blaze
#

Oh, ok

small tangle
#

and depends on the lib youre using, if it supports interactions yet

lyric blaze
#

we'll see

split hazel
#

I have a similar setup i guess

#

it won't be too difficult to change

#

depending on how you want to go about things

lyric blaze
#

as easy as possible peeposhrug

split hazel
#

if you want to respond to a user via an interaction you'd have to regex a few things

#

if you just want the bot to send a plain message you'll be fine

lyric blaze
#

I currently don't have any interactions

#

thought about adding discord buttons

split hazel
#

by that I mean slash commands

lyric blaze
#

okk

split hazel
#

discord calls them all interactions

#

and it isn't too much different other than discord handles the arg splitting and processing for you

lyric blaze
#

Yee

#

I mean

#

I am pretty sure that there will be a lot of guides about that too

#

once the change hits live

#

so I think I'll manage

#

to understand it better then

split hazel
#

yeah depending on the bot it most likely won't be that difficult to change

#

if you have some feature interactions do not support you have to wait for discord to add them

#

they're adding tons of things such as text input etc

#

which could be used as a follow up message

lyric blaze
#

I mean not really, only text input I have is with the clear command really

#

then it's pretty easy

#

write a line = get embed

rocky hearth
#

what is the difference in these two statements?

fs.mkdirSync("./temp/src", { recursive: true })
// and
await fs.promises.mkdir("./temp/src", { recursive: true })

Which is better?

split hazel
#

second

#

First one blocks the event loop, even if it's for a short amount of time it's a bad practice

#

and event loop blocked = your whole program gets stuck

undone rose
#

Now I just need to figure out how to scale the image properly lol

#

Shouldnt be too hard

mild agate
#

hmm yes

rocky hearth
#

if the folder not exist, I want to create it.

cinder patio
#

fs.existsSync also checks for folders afaik

rocky hearth
#

yes, but that method blocks the event loop

split hazel
#

there's probably an equal alternative for it

#

think it's stat

rocky hearth
#

would it better to just make the dirs with
fs.promises.mkdir("./temp/src", {recursive:true})
no matter if th ey exists or not

cinder patio
#

Yeah use stat

#

you know if you looked at the docs before asking here you would've found all the answers a long time ago

split hazel
#

stat returns metadata about the file so it can basically be used to check

cinder patio
#

the docs even say to use it instead of .exists

rocky hearth
split hazel
#

only use blocking sync methods if you're either doing it once in the lifetime of the program or making a quick and dirty script

#

that's my way of going about it

cinder patio
#

or if your program in general doesn't have any async tasks

rocky hearth
#

isnt fs.stat is for files? I want to check for the folders

hexed sedge
#

Is (message.guild).fetchInvites() not a valid function?

split hazel
#

just checked

hexed sedge
#

Im trying to use it, but it crashes the bot with the error: TypeError: guild.fetchInvites is not a function

cinder patio
#

maybe the message was sent in DMs?

hexed sedge
#

Nope

split hazel
#

it should work

#

what library version are you on

#

and can you console log message.guild

#

just to make sure

pale vessel
#

const guild = "7736727265252626894"

split hazel
#

probably

hexed sedge
#

"discord.js": "github:discordjs/discord.js"

split hazel
#

run npm view discord.js version

hexed sedge
#

12.5.3

#

But this isnt the one im on

#

This is discord.js

#

wait

#

This is the version I Am on

split hazel
#

now I'm confused

#

can you console log what I asked

split hazel
rocky hearth
#

can not providing intent be an issue?

hexed sedge
#

:/

#

Guess the docs arent 100% done

split hazel
#

by default the docs are on v12

hexed sedge
#

I set the docs to master

split hazel
#

you have to manually switch them to v13

hexed sedge
#

Aka v13

#

This, right?

rocky hearth
#

use discord.js@dev not discordjs/discord.js

split hazel
hexed sedge
#

Ok awesome

rocky hearth
hexed sedge
earnest phoenix
#

how can i delete used keys

split hazel
#

god help me

jaunty idol
#

How to setup the webhooks of top.gg that it'll send a message whenever someone voted my bot?

mild agate
hexed sedge
#

Did the inviteCreate event change?

#

nvm

earnest phoenix
quartz kindle
#

you have to write the file again after deleting

earnest phoenix
#

Is there a way to change the number of columns in a css grid based on the width of the device? Btw I'm using React so @media is not possible

hexed sedge
#

welp

#

Did the inviteCreate event change?

quartz kindle
hexed sedge
quartz kindle
#

changed how?

#

its still inviteCreate

eternal osprey
#

hey! How do i get my twitch refresh, access tokens, expiry stamps etc. I have checked the docs and i only got like the client id. Should i really send a get request to get that info?

pale vessel
#

POST

#

Usually POST for OAuth

earnest phoenix
eternal osprey
cinder patio
crystal furnace
#
let CPU = Number(Math.round((await new Promise(async r => {
            let start = [process.hrtime(),process.cpuUsage()];
            await new Promise(r => setTimeout(() => r(),100));
            let elap = [process.hrtime(start[0]),process.cpuUsage(start[1])];
            r(100.0 * ((elap[1].user / 1000) + (elap[1].system / 1000)) / (elap[0][0] * 1000 + elap[0][1] / 1000000));
        }))+'e2')+'e-2')
#

how to put this working right when I enable shard process

quartz kindle
#

it will show the cpu of the current process only

#

if you want all processes, you need to broadcastEval and add the results

crystal furnace
#

Thank you

quartz kindle
#

you never used broadcastEval?

#

there are examples in the docs

crystal furnace
quartz kindle
#

how so? what have you tried?

crystal furnace
#
    const CPU = await bot.shard.broadcastEval(`Number(Math.round((await new Promise(async r => {
            let start = [process.hrtime(),process.cpuUsage()];
            await new Promise(r => setTimeout(() => r(),100));
            let elap = [process.hrtime(start[0]),process.cpuUsage(start[1])];
            r(100.0 * ((elap[1].user / 1000) + (elap[1].system / 1000)) / (elap[0][0] * 1000 + elap[0][1] / 1000000));
        }))+'e2')+'e-2')`);```
#

idk how to do so

#

just copy pass

#

*paste

quartz kindle
#

and what was the result?

earnest phoenix
#

how used key delete

quartz kindle
#

array.splice

#

plus you have to write the file again after you delete

cinder patio
#

are you using a json database BRO

earnest phoenix
pale vessel
#

Yes I'm using a JSON database BRO

#

Have a problem with that BRO?

earnest phoenix
#

what is BRO?

#

you are emphasizing

quartz kindle
#

Brazil Romania Olympic team

earnest phoenix
stable eagle
#

@rustic nova

crystal furnace
rocky hearth
#

can a package be created only in ts and published to npm? (not compiling the project)
Then only ts projects can run them, is it possible?
or npm packages must be written in js?

eternal osprey
#

hey, does anyone know why i am getting a connect ECONNREFUSED 127.0.0.1:80 error when trying to post to get my twitch keys?

earnest phoenix
#

I just spent 30 minutes on a codewars kata that could be done in 1 line

Check if _str_ ends with _ending_
function solution(str, ending){
  // super easy
  let doesItEndWith = str.endsWith(ending);
  // but how about we
  doesItEndWith = ending === "" ? /* bruh momento */ true : false;
  // do it the real way
  
  for (let i = 0, a = str.split(""), v = ending.split(""); i < ending.length; i++) {
    if (a.pop() === v.pop()) {
      doesItEndWith = true;
    } else {
      doesItEndWith = false;
      break;
    }
  }
  
  return doesItEndWith;
}
errant flax
quartz kindle
#

the package doesnt even need to work

rocky hearth
modest maple
#

you can just upload random shit to it

quartz kindle
#

you can even publish non js code

rocky hearth
#

so the package does need to be in, js.
I got it

quartz kindle
#

no it doesnt

errant flax
#

u can put malware to it jkjkjkjkjk

#

im kidding

quartz kindle
#

people actually did

rocky hearth
#

I was thinking, if the package could get auto compiled by the user.

quartz kindle
#

npm has had malware libs more than once

cinder patio
#

no no no don't publish a ts-only package

quartz kindle
cinder patio
#

but that makes it so people who use JS cannot use your TS package

rocky hearth
#

couldnt the package get merge with the user code?

cinder patio
#

just compile it and .npmignore the typescript source files

quartz kindle
#

add typescript as a dependency and put an install script that compiles it

cinder patio
#

or just compile it and publish the compiled code

#

like a normal person

rocky hearth
#

so how do I create a package in ts. And hv the compiled code published to npm. and the ts code to github?

cinder patio
#

yup

#

.npmignore the typescript source code and .gitignore the compiled js code

rocky hearth
#

OOh!

#

wasnt aware of .npmignore

rocky hearth
cinder patio
#

it's the same format yes

quartz kindle
#

and make sure the package.json points to the compiled code

#

and not something like ts-node

quaint wasp
#

hi.

        if(message.guild.id === supportServerID) {

            const supportYe = new Discord.MessageEmbed()
            .setTitle('Premium Status')
            .setDescription('This is the support server. It is obviusly premium')
            .setFooter('Thanks for being here. :)')

            return message.channel.send(supportYe)
        }
        if(message.guild.id === premiumStatus) {

            const embedYAP = new Discord.MessageEmbed()
            .setTitle('Premium Status')
            .setDescription('This server is premium!')
            .setFooter('Thanks for supporting us!')
            .setColor('GREEN')
            message.channel.send(embedYAP)
        }


        if(message.guild.id !== premiumStatus) {

            const embedNOPE = new Discord.MessageEmbed()
            .setTitle('Premium Status')
            .setDescription('This server is not premium.')
            .setFooter('Wanna make it premium? Support us by buying it on patreon! (Run ++support-us command to get the link!)')

            message.channel.send(embedNOPE);
        }```

So this should work, and I get all the stats from config, and it mostly works, I mean the support server says what it has to, the non premium servers say that its not premium, but then premium servers say its not premium as well....
#

I tryed all =.

#

I did =. == , and ===.

quartz kindle
#

what is premiumStatus?

quaint wasp
#
const config = require('../../../config,json')
const premiumStatus = config.premiumServers;```
quartz kindle
#

why is it config,json instead of config.json?

quaint wasp
#

Then is json its

"premmiumServers" : [
"id",
"id",
"",
""
]```
quartz kindle
#

you're comparing an ID to an array

quaint wasp
#

ya

#

array of other ids..

quartz kindle
#

thats not how it works

quaint wasp
#

😐

quartz kindle
#

you cant do that

quaint wasp
#

meaning it should be

if(message.guild.id === 'one id') {
// stuff
}

if(message.guild.id === 'other id') {
// more stuff
}``` ?
quartz kindle
#

thats one option, but very inefficient

#

to find if one item exists inside an array, use array.includes()

quaint wasp
#

so..


if(message.guild.id === array.includes(premiumStatus)) {
}```
quartz kindle
#

no

#

read the docs on how to use array.includes

cinder patio
#

and you call yourself a professional bot developer 🤡

quartz kindle
quaint wasp
#

oh alright thanks

small tangle
#

@cinder patio you missed his typo of professional peepoGiggle

lyric mountain
#

why do people brag about user count?

quartz kindle
#

like membercount?

#

idk

#

let me brag too

lyric mountain
#

two thirds more and I'll reach ya

quartz kindle
#

why is your bot a girl

lyric mountain
#

well, we're kuuhaku

eternal osprey
#

hey: ```js
canvas@2.8.0 install /root/monopolyhaskill/node_modules/canvas

node-pre-gyp install --fallback-to-build

sh: 1: node-pre-gyp: Permission denied
npm ERR! code ELIFECYCLE
npm ERR! errno 126
npm ERR! canvas@2.8.0 install: node-pre-gyp install --fallback-to-build
npm ERR! Exit status 126
npm ERR!
npm ERR! Failed at the canvas@2.8.0 install script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.```why do i get this canvas error when trying to rebuild my npm packages on my vps.

lyric mountain
#

if I'm sora she's shiro

quartz kindle
#

where is that from again?

lyric mountain
#

no game no life

quartz kindle
#

ah

#

no gaymu no laifu

lyric mountain
#

oh wait

#

is that heroku?

eternal osprey
#

no

lyric mountain
eternal osprey
#

no

quartz kindle
#

which host?

lyric mountain
#

ok then, try with sudo

eternal osprey
#

Galaxygate

eternal osprey
quartz kindle
#

did you use sudo before?

#

like sudo npm install?

eternal osprey
#

no not really

errant flax
quartz kindle
#

you have a root account, so you shouldnt need sudo

#

or did you create a new user account?

eternal osprey
lyric mountain
eternal osprey
quartz kindle
#

that makes no sense

eternal osprey
#

yeah i don't know either tbh

errant flax
lyric mountain
#

show the code so we know why isn't it a function

#

a minimal error message doesn't say much

errant flax
#
const {MessageEmbed,MessageActionRow,MessageSelectMenu} = require("discord.js")
module.exports = {
  name: "help",
  alias: ["commands","cmds"],
  run:async(msg,args,client,cache)=>{
    const prefix = cache.jsonFiles.get("config.json").prefix
    const color = cache.jsonFiles.get("colors.json").default
    const emb = new MessageEmbed()
    emb.setColor(color)
    if (!args.length) {
      const categories = cache.functions.get("getCateg.js")(cache,prefix)
      const slct = new MessageSelectMenu()
      slct.setPlaceholder("Command Categories")
      slct.setCustomId("slct-categ")
      console.log(categories)
      for (const categ of categories) {
        const name = categ.name
        const cmds = categ.value
        console.log(slct.constructor.name)
        slct.addOptions([{
          value: name.toLowerCase(),
          label: name,
          description: "test"
        }])
        emb.addField(name,cmds.join("\n"),true)
      }
      const row = new MessageActionRow().addOptions(slct)
      msg.channel.send({
        embeds: [emb],
        components: [row]
      })
    }
  }
}
#

@lyric mountain

quartz kindle
#

thats your problem

errant flax
#

oh fuck

quartz kindle
#

if you had shown the full error, you could see the line number from where it came from

#

also, you should probably handle errors in your commands

errant flax
#

wym?

#

like add a try catch or something?

quartz kindle
#

your command is async

#

run: async () => {}

#

so in your command handler, assuming you do something like command = commands.get(name)

#

command.run().catch()

#

or await command.run() inside a try catch

errant flax
#

oh ok

#

also what would happen if i try to await something that isnt asynchronous?

pale vessel
#

Nothing happens

rocky hearth
#

does ts doesnt like npm symlinks?

earnest phoenix
#

It does

#

Are you creating the symlink yourself

rocky hearth
#

yes

#

I've a package which I've to link, I ran yarn link, it says

earnest phoenix
#

Oh

#

You're doing that

#

I thought you'd be using something like link-module-alias

#

I haven't had any issues using yarn link with typescript really

rocky hearth
#

now the project to which I hv to link it to, I ran yarn link local-jsonbase

earnest phoenix
#

What exactly is the issue

rocky hearth
#

my both projects are in ts

earnest phoenix
#

An error of some sorts would be helpful

rocky hearth
earnest phoenix
#

Oh I see

#

Don't you have to compile the code with declarations

rocky hearth
#

i did

earnest phoenix
#

I see

#

Well I don't really have an idea thenn

#

I've never ran into an issue using yarn link with a Typescript project

#

Any issues I had was solved by compiling with declarations on

rocky hearth
#

ooh yes, it is "declaration:: true and not "typings": true.
Sorry, its fixed now

earnest phoenix
#

Lol

#

All good

rocky hearth
#

how to make docs for a package created by ts

near stratus
rocky hearth
#
"repository": {
  "type": "git",
  "url": "https://github.com/whatever/testing.git"
}

// and 

"repository": "github:whatever/testing"

Are they both same thing? in package.json

earnest phoenix
#

hey yall, i really don't know what happened lmao bot randomly went offline and when i restarted my bot, it doesn't say "bot is online" anymore, no errors

#

i regenerated token

lyric mountain
#

look, "no errors" is subjective

#

if the bot isn't working properly then there ARE errors

earnest phoenix
#

bro lmao bot just was online for days now i see him offline

lyric mountain
#

yes, that means errors

#

so, what are you getting on console? or isn't it even running?

earnest phoenix
#

it is running

#

it says nothing

lyric mountain
#

so the console is empty?

earnest phoenix
#

yes

lyric mountain
#

that means the code isn't even starting then

#

you said you regenned the token, did you also change it on the code?

earnest phoenix
#

nvm my server code wasnt working ill work on it

#

its on rn

feral aspen
#

👋

#
var user = message.mentions.members.first() || message.guild.members.cache.get(args[0]) || bot.users.cache.get(args[0]);
${bot.users.cache.get(user.id).joinedAt}
#

This is returning undefined. 👀

sudden geyser
#

.joinedAt doesn't exist on a User

#

But it does on a GuildMember

feral aspen
#

.. ah.

#

What can I do instead?

sudden geyser
#

You could use a guild member if that's what you want

feral aspen
#

Since the user is in the bot's cache.. it's undefined.

sudden geyser
#

Like you were with .members

#

But you're mixing users and guild members

feral aspen
#

.. but in the command, I want the user to do !userinfo <user ID> and the user id is from the bot's cache.

#

That's not possible, right?

lyric mountain
#

what's the precision of discord's unix timestamp?

sudden geyser
#

But you can get the time the user created their account

lyric mountain
#

ah nvm, it's to the second

feral aspen
#

I'll switch it to message.guild.members.cache.get(args[0]), instead.

#

Did I do something wrong?

#
if (!args[0]) {
    var member = message.author;
} else {
    var member = message.mentions.members.first() || message.guild.members.cache.get(args[0]);

    const embedError = new MessageEmbed()
    .setColor(red)

    if (!member) {
        embedError.setDescription(noUser);
        return await message.channel.send(embedError);
    };
};

const embed = new MessageEmbed()
.setColor(black)
.setThumbnail(member.user.displayAvatarURL({ dynamic: true, size: 4096, format: 'png' }))
.setTitle(`${member.user.username}'s User Information`)
.addField(`**These are information about ${member.user.username}**:`, [
    `**・Username:** ${member.user.username}#${member.user.discriminator}`,
    `**・ID:** ${member.id}`,
    `**・Current Nickname:** ${member.user.toString()}`,
    `**・Current Status:** ${status[member.user.presence.status]}`,
    `**・Currently Playing:** ${member.user.presence.game || "Nothing"}`,
    `**・Bot:** ${member.user.bot ? "True" : "False"}`,
    `**・Joined At:** ${member.joinedAt}`,
    `**・Created At:** ${member.user.createdAt}`
])

return message.channel.send(embed);
#

This is not sending.

lyric mountain
#

any error?

feral aspen
#

Nope.

lyric mountain
#

well, I see 1

feral aspen
#

.. it's not sending the message.

#

Hint?

lyric mountain
#

don't use var

feral aspen
#

Yikes.

#

I did let and still didn't work. 😂

lyric mountain
#

let's go by elimination

#

is addField supposed to be an array?

feral aspen
#

We can add console log codes to every part of a line.

feral aspen
lyric mountain
#

add a console.log right before "const embed = new MessageEmbed()"

#

to see if it's reaching there

feral aspen
#

I figured.

#

I'll check.

#

Hm..

#

It didn't reach after the embed.

lyric mountain
#

add console.log in those places too

feral aspen
#

Let me check.

#

I did !userinfo only.

#

It logged inside the !args[0].

#

.. and reached the embed.. but before not after.

hybrid cargo
lyric mountain
#

did you change from var to let already?

feral aspen
#

Wait..

#

I figured the issue.

#

It's working with args but doesn't work for no args.

#

👀

lyric mountain
feral aspen
#

Should I make it message.member?

feral aspen
hybrid cargo
#

message.author already returns a user object

feral aspen
feral aspen
#

Sweet.

#

.. and var is changed to let.

hybrid cargo
#

And here you are trying to access the user object from the variable called member. Which means it (member variable) should return a member object which contains a user object

sudden geyser
#

oo special border

feral aspen
#

👀

rocky hearth
#

what does it require to create a doc website for my package which looks like discord.js/docs

#

is there any tool for that, or it is made by themselves?

lyric mountain
#

entirely custom-made

#
#

and github wiki

feral aspen
#

Wait..

#

I realised the bot is not showing any errors at all?

#

I executed an unknown function, it gave no errors.

carmine adder
#

Hi, i have a problem about 403 forbidden error... Can anyone to help me please?

earnest phoenix
#

Is any vps under 2$ plsface

nimble kiln
#

There probably is, yeah

sudden geyser
#

yeah it's like one google search away

lyric mountain
earnest phoenix
#

What

#

I can't understand you

tired panther
lyric mountain
#

I'm bad at remembering prices

earnest phoenix
#

5$ almost 500rs

#

To costly

tired panther
earnest phoenix
earnest phoenix
#

Almost

lyric mountain
#

there ARE cheaper vps, but they're iffy

tired panther
#

thats a very low price

earnest phoenix
#

catsadcry I only got 250rs in month

lyric mountain
earnest phoenix
#

Xd

lyric mountain
#

he asked for MB lul

tired panther
earnest phoenix
#

They have own bots

lyric mountain
#

250rs?

#

like, R$?

earnest phoenix
tired panther
lyric mountain
#

I see

tired panther
#

thats 3$, when I saw it right

lyric mountain
#

like, going too cheap means sacrificing reliability, security or performance

tired panther
#

its 3.36$

earnest phoenix
#

I use my Card avd get linode account

#

I make 1 servers in india

#

500ms+ ping comes in bot

lyric mountain
#

unless you deal with music having a high ms isn't that bad

earnest phoenix
#

I also have aws

#

But can't work good

#

Ny brot can't take large ram still pm2 monitor show 500+ mb in AWS

tired panther
#

When your Bot is less than 10 Guilds, it should use more than 70mb Ram

earnest phoenix
#

I used linode now

#

Buy work speed is to slow

slender thistle
#

@earnest phoenix check out SkySilk

#

Oh music

earnest phoenix
rocky hearth
#

is there any other documentation tool, other that typedoc, for ts?

feral aspen
#

My bot isn't showing any errors even purpose errors, how can I fix this?

rocky hearth
rocky hearth
#

that is a good thing right?

feral aspen
#

No.

#

Suppose a command does this.

#

message.channel.send(thisIsAVariable).

#

.. but I didn't define thisIsAVariable at all.

#

It's supposed to error.. but it doesn't.

verbal spindle
#

its WiP

pale vessel
#

No, sorry

verbal spindle
copper cradle
#

This is not the place to ask for that

#

You'll probably get muted if you ask again, just so u know

rocky hearth
#

so heroku can, compile ts. Someone told me it couldn't bcoz it has vry limited resources

#

I'm getting this, whenever i try to watch

#

but doing tsc works fine

earnest phoenix
#

I'm making a password strength checker. I have a strength score between 0 and 10 and a colored slider that displays the score based on how red it is. I want to make it "redder" based on the score but don't know how. How do I do this (preferably with hsl)?

rocky hearth
#

light red to dark red??

earnest phoenix
#

green to dark red

sudden geyser
#

if you want to keep it easy just assign each strength a color manually

earnest phoenix
#

yeah

#

time to steal color palettes from chakra ui KEKW

pale vessel
lyric mountain
#

but does it have to be hsl?

earnest phoenix
#

nope

#

but i can tinker with hue to change "redness"

lyric mountain
#

like, full green means 0, full red means 10 right?

earnest phoenix
#

why would 0 be full green

lyric mountain
#

idk, red means power

#

but anyway, just revert it then

wheat mesa
lyric mountain
#

red = 255 - (score * 255 / 10)
green = score * 255 / 10

wheat mesa
#

p o w e r

lyric mountain
#

it'll transition smoothly from red to green

#

although I'd recommend 0 to 100

#

to make it smoother

#

10 will only have 10 steps

earnest phoenix
#

reducing your password from 28 characters on your microsoft account to 10 for your cubemania account is power

#

@lyric mountain ok but how do i use red and green in my code

lyric mountain
#

...rgb

earnest phoenix
#

cool

#

blue can stay as 0

lyric mountain
#

ye

earnest phoenix
#

but imma use hex hehe

lyric mountain
#

still

#

255 is just FF

#

convert int to byte and u have hex

rocky hearth
#

that error has no context with the previous message

near stratus
#

or like the left bar in vsc

rocky hearth
earnest phoenix
#

hi i have a command that locks 3 channels sending a message in all 3 channels ..my problem is bot is locking only the first channel thought bot has admin-permissions
my code: https://sourceb.in/3sAyakGFU2

rocky hearth
lyric mountain
#

but anyway, you need to loop over the array

earnest phoenix
#

i have a dank server so iam doing this for that server

lyric mountain
#

oh nvm, just noticed the loop

#

hell wtf is that formatting

earnest phoenix
#

idk what exactly is the problem

earnest phoenix
near stratus
# rocky hearth

Okay do I made a pretty similar file structure and if I transpile it with tsc it goes well no errors nothing

earnest phoenix
#

forgive me if you dont like this

rocky hearth
lyric mountain
#

ok, first thing that popped from the code

#

that loop can be converted to for...of

#

the reason for the first print is this:

#

you can't return inside a loop

#

I mean, you can, but it won't go to the next iteration

earnest phoenix
#

ohh ill check that thanks for the help :p

lyric mountain
#

this is also unnecessary since .includes() already return a boolean

#

simplified version

earnest phoenix
#

so you are making changes?

slender thistle
#

Rust
Who here is familiar with thirtyfour? (Specifically, its sync version)

lyric mountain
#

nope, I just copied the code and created a new scratch in intellij

earnest phoenix
#

Lemme see the result once so i can see what am i doing wrong

lyric mountain
#

it helps finding bugs

earnest phoenix
#

can i see the result?

lyric mountain
#

the whole code? just follow the prints

earnest phoenix
#

ill do

slender thistle
#

Probably no one here knows about it

earnest phoenix
lyric mountain
#

just remove return

#

wait, is that intellij too?

#

ah nvm, that's my print

quartz kindle
#

remove the await from channels.cache.get()

#

add the await to updateOverwrite() and to channel.send()

torn mesa
#

Hello guys, how can I adapt my bot's commands as slash commands? So what I mean is to adapt the commands I already have to slash commands, not in addition to the main file.

long crow
#

what lib?

rocky hearth
#

the latest?

dense spire
#

anyone know of a fast way to code leader board updating

lyric mountain
#

realtime?

dense spire
#

idealy

lyric mountain
#

then your only solution is using websockets

sly sierra
#

So I'm experiencing a weird problem

so when I just do args it shows the complete args though when do .join it only shows the first letter of the args

const [ message ] = args
const [ message ] = args.join(" 👏 ") 


//args
 const args = interaction.options.data.map((x) => x.value);

near stratus
pale vessel
#

Doing const [something] = text is the same as const something = text[0]

#

So that just grabs/destructures the first element

#

In this case the first letter since it's a string

#

It worked on args (without join, so an array) since args only have one element and it's that text

sly sierra
#

ohh

pale vessel
#

If it's just one value then you need to use args[0].split(spaceOrWhatever).join("clap")

#

What are you slicing

quartz kindle
#

pizza

pale vessel
lyric mountain
cinder patio
#

Why are all react libraries so bloated 😭

quartz kindle
#

different ways of slicing pizza

pale vessel
cinder patio
#

I'm looking for a react lib which allows you to create static sites with react

#

react-static has 71 dependencies and is 1.5 MB unpacked, and I need this for a lib myself

lyric mountain
#

cant u just return an html file then?

sudden geyser
rocky hearth
#

for tsconfig, is allowJs by default true?

slender thistle
pale vessel
#

const [p, i, z, z, a] = "pizza";

sudden geyser
#

liar

pale vessel
#

Called unpack in python or something

#

Dunno probably not exact same

sudden geyser
#

destructuring

quartz kindle
#

ye

#

forgot this one

slender thistle
#

How the fuck would you do it in Python

#
>>> p,i,z,z,a = "pizza"
>>> p
'p'
sudden geyser
#

yuh

modest maple
cinder patio
#

wack

lyric mountain
#
INSERT INTO pizza (id, text) VALUES (0, 'p');
INSERT INTO pizza (id, text) VALUES (0, 'i');
INSERT INTO pizza (id, text) VALUES (0, 'z');
INSERT INTO pizza (id, text) VALUES (0, 'z');
INSERT INTO pizza (id, text) VALUES (0, 'a');

SELECT FIRST 1 p.text FROM pizza p ORDER BY p.id;
sudden geyser
#

i have a few concerns

cinder patio
#

oh my

#

gatsby is 12MB unpacked

copper cradle
sudden geyser
#

js frameworks are so boring

copper cradle
cinder patio
#

Next.js is 30 MB 😫

stray seal
#

Me and My Team are having issues making slash commands work. Can someone help?

sly sierra
#

yea we can help with no code and errors

thorny flume
#

I'm creating an API on the same host as my bot, the API will transfer information to my website and some users that are part of my partner system, but I'm having trouble identifying if my bot is online or offline. . Can someone help me ?

stray seal
sly sierra
#

you're just asking for help

#

at least put some code and errors

stray seal
#

My fucking team asked me to ask here.

sly sierra
#

????

rocky hearth
#

😆

sly sierra
#

you are just asking for help, and not giving us code nor errors

wheat mesa
#

If you click on the website, you’ll see an accurate description of what you just did

signal estuary
#

How can I send data from the discord bot to my website?
I want to show stats about my bot in my bot's website but idk how to do this.

quartz kindle
#

either make a shared database that both processes can read from

#

or put a small webserver inside the bot that the website can send requests to

solid ermine
split hazel
cinder patio
#

Are you 12

solid ermine
#

L

stray seal
cinder patio
#

That sentence couldn't have come from someone who's above 12 years of age

split hazel
#

i didnt actually realise you were talking about databases earlier

rocky hearth
#

y git doesnt hv any interface to work with mouse clicks.
y it requires us to use the terminal. bcoz its 2021.5 now

cinder patio
#

there's github-desktop if you're using github as the git server

rocky hearth
#

i use vsc, instead of that

cinder patio
#

then y are you complaining

rocky hearth
#

it is there, but is very limited.
We cant visualise anything

cinder patio
#

then use github desktop

rocky hearth
#

imagine creating a new branch by dragging out a commit from a source branch

cinder patio
#

who needs that tho

quartz kindle
#

git is made so that people can easily create their own git UIs

#

there is github-desktop, there is gitkraken, etc

#

just pick one

solid ermine
#

command line git is always gonna be faster tho

quartz kindle
#

faster execution yes

#

faster workflow yes, if you know what you're doing

#

but for inexperienced users, learning the git cli can be quite time consuming

#

i personally use github-desktop

#

i quite like it

near stratus
#

well for a long time I used GitHub as storage rather than version control

quartz kindle
#

i use the side-by-side code diff comparison a lot

near stratus
quartz kindle
#

yes, but its not as good in my experience

#

i tried it for a while

#

plus i like the separation between code and git

#

i like doing it in different softwares

lyric mountain
#

jetbrains users: topggGuns

crystal wigeon
#

anyone use

#

fast-gateway?

#

or restana?

grim sundial
#

ask ur question

crystal wigeon
#

im basically trying to parse formdata

#

through fast-gateway

#

but its not working

#

its not forwarding formdata

#

i tried a couple of multipart packages, that didnt work as well

#

it needs a middleware so

cinder patio
#

@rustic nova

crystal wigeon
#

@rustic nova

#

ops

rustic nova
#

yup

crystal wigeon
#

he was here the last time too

#

why isnt he banned yet

quartz kindle
#

i use restana

torn mesa
crimson vapor
#

Why isn’t Tim banned

#

Always braking rules

south sinew
#

there's an faq in their server about it

south sinew
quartz kindle
crystal wigeon
crimson vapor
cinder patio
#

I'm so fucking sad

#

I think I'll have to use handlebars 😭

#

nvm fuck that

crimson vapor
#

For?

quartz kindle
#

to handle his bars

cinder patio
#

I'm making a documentation generator and I can't decide what templating engine to use

crimson vapor
#

Oh

cinder patio
#

I mean, there aren't any good ones to be honest

crimson vapor
#

thanks Tim I was confused

quartz kindle
#

you just want a templater and nothing more?

cinder patio
#

Yeah sorta

quartz kindle
#

i havent used any, but the one i liked the most from a first look was the razor syntax

cinder patio
#

And I feel like I want to use React and there's react-static buuut it's so big and I don't want a dependency which is like 2MB unzipped

quartz kindle
#
<p>How are you @model.name? Today is a sunny day on the planet Gunsmoke.</p>

<ul class="@(model.active ? 'highlight' : '')">
    @model.forEach(function(m){
        <li>@m.name</li>
    })
</ul>
cinder patio
#

oooo

quartz kindle
cinder patio
#

👀

quartz kindle
#

but theres a js implementation called vash

round cove
#

Razor pages are hell never teach anyone that dogshit framework.

gleaming crown
#

Hi

restive furnace
#

better than react.

gleaming crown
#

help me how to add bot to my sever

quartz kindle
#

literally click the invite button in the bot's website/page

slender wagon
#

anyone got a idea how to install youtube-dl on heroku?

restive furnace
#

just don't make a music bot in heroku

slender wagon
#

it's not a music bot

#

it's a bot that posts videos

slender wagon
#

can't quite understand how to add it as a buildback

slender wagon
#

ffmpeg was easy to add

quartz kindle
cinder patio
#

vash was last updated 3 years ago

slender wagon
#

lol

cinder patio
#

I wonder if just using react and react-dom will work

round cove
cinder patio
#

a documentation generator

round cove
#

I don't see why not.

sage bobcat
#

One message removed from a suspended account.

#

One message removed from a suspended account.

#

One message removed from a suspended account.

#

One message removed from a suspended account.

stray seal
#

This video i am watching says get your module for you server. What is this?

earnest phoenix
stray seal
earnest phoenix
#

With?

quartz kindle
#

sounds like the portuguese conjugation of the verb "to expand"

earnest phoenix
quartz kindle
#

eu expando (i expand)

stray seal
earnest phoenix
stray seal
# earnest phoenix What video? What module?

Discord.js Bot Tutorial #12

Hey guys how's it going. In this video, I show you how you can make some basic moderation commands. Please leave a like if you enjoyed the video, share it with your friends, and subscribe. Thanks for watching the video and Peace.

On this channel, I make coding tutorials just like this discord.js bot tutorial that I ...

▶ Play video
#

Wait, nevermind

#

I see the issue

quartz kindle
#

imagine 9 months from now the amount of people complaining their bots stopped working

earnest phoenix
#

That will be chaos..... In the discord.js support server

quartz kindle
#

but this time, it wont be limited to discord.js

#

it will be in all lib support servers

#

lmao

earnest phoenix
#

Every lib

#

Chaos spreading all across development servers

quartz kindle
#

a massive wave of angry turkish people

#

well but it only affects verified bots, so it wont be that bad

earnest phoenix
#

It will still be worse than any other wave

#

CoD: Zombies (Last Wave)

quartz kindle
#

xD

jagged heart
#

if this is for the wrong channel please correct me but i’m using replit to code my bot and now in the console its saying “discord.errors.HTTPException: 429 Too Many Requests (error code: 0): You are being blocked from accessing our API temporarily due to exceeding our rate limits frequently. Please read our docs at https://discord.com/developers/docs/topics/rate-limits to prevent this moving forward.” what does this mean?

Discord Developer Portal

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

earnest phoenix
grim sundial
#

^^ btw im pretty sure 429 is a few seconds

#

so its not that big of a deal and im sure ur library should handle 429, or ur jus doin some weird stuff

stray seal
#

I have looked over my code and nothing is wrong...

grim sundial
#

= - assign a variable to a new value
== - check if a x is equal to y (without checking type)
=== - check if x is equal to y (with checking type)

quartz kindle
grim sundial
#

there is no ====

latent heron
#

i like to use !=??

stray seal
#

I dont know hwo to fix.

latent heron
#

oh no

quartz kindle
#

what video?

#

lmao

stray seal
latent heron
#

tfw you learn how to make a discord bot only from a yt video

quartz kindle
#

link?

#

and time in the video where that is shown?

grim sundial
grim sundial
#

whoops accidently done de tts

stray seal
#

5:19 ish

#

I am there now lol

grim sundial
#

can u remove the embed pls just <link>

stray seal
grim sundial
#

edit ur message to <https://www.youtube.com/watch?v=VMO7nRv250Y>

quartz kindle
#

there is no ====

stray seal
#

Oh OK

#

Thanks!

#

The command is not working now...

quartz kindle
#

also, for future reference, your error says exactly where and what the problem is

#

this is the where:

#

file: index.js
line: 194

stray seal
#

@quartz kindle there no error in my console but it dont kick

quartz kindle
#

then you need to learn how to debug

crimson vapor
#

Hi Tim

#

Did you break any more rules

quartz kindle
#

thats the problem with these videos, they show you exactly what to do, without explaining the basics, so if anything goes not according to the video, you are left with zero information on how to deal with it

#

the only option you have is to review the video and see if you did anything wrong

#

like the ==== thing

#

other than that, you 'd have to learn the language basics first

quartz kindle
#

lmao

quaint rampart
#

can someone asnwer this question cuz i’m wondering lol so if there is a 6 letter string with only uppercase letters and numbers how many different combinations are there

grim sundial
#

?

#

how

#

if its only uppercase and numbers?

#

idk but it just doesnt seem right

#

oh yeah

#

whoops

#

no 9 numbers?

earnest phoenix
#

Map<keyType, valueType>

earnest phoenix
#

0123456789

grim sundial
#

er, i definitely knew that