#development

1 messages · Page 276 of 1

neon leaf
#

they used the slow drizzle methods

#

tf is this

sharp geyser
#

idk man

#

this is pretty compelling

delicate zephyr
#

:^)

sharp geyser
#

drizzle = slow

neon leaf
sharp geyser
#

it's name is drizzle for a reason

#

I might go full on TS for my next project

#

even tho I hate ts now

delicate zephyr
#

but nah tbf at the end of the day its personal pref

sharp geyser
#

so true

lament rock
#

Waiting for inline type comments in js

delicate zephyr
#

we use both Prisma and pg-node on topstats

#

lol

sharp geyser
#

Waiting for when I make it big with my unicorn company ideas

delicate zephyr
#

cause I have to interface with timescale to make raw queries

sharp geyser
#

It will happen one day guys

#

Don't you worry

#

I wont forget you when I make a quick millie

#

this def isn't happening but yk

neon leaf
#

im still awaiting government approval of my business 🙏

lament rock
#

Make a promising startup company and then get bought out and just dont work on it anymore

sharp geyser
#

Well

#

This startup im planning on making rn Idm if it gets bought out

#

The other one ima hold onto as long as possible

lament rock
#

I'd prefer if someone made a compelling offer on my projects I've worked on under my bot's org name

#

Pretty cool stuff!

sharp geyser
#

Are they even publicly accessible to view?

lament rock
#

Yup

lament rock
sharp geyser
#

Interesting

lament rock
#

Amanda's client repo should be of interest as there are packages

hidden gorge
#

so i rewrote my system to accept a Json file for a collection and it works now

#

it just doesnt support default...

sharp geyser
#

??

hidden gorge
#

idk why

hidden gorge
sharp geyser
#

This sounds stupid

#

postgres better

hidden gorge
#

well it works now

#

im still working on moving perms away

wheat mesa
#

Also you’re storing passwords in plaintext

#

That’s a very bad idea

hidden gorge
delicate zephyr
#

please

#

dont store passwords in plaintext

wheat mesa
#

Bitflags has nothing to do with the password being in plaintext

#

You need to hash and salt the password

hidden gorge
#

im fucking gonna....

#

its called early development stage

spark flint
#

just hash the pass

hidden gorge
spark flint
#

my guy it takes like 30s

wheat mesa
#

I’m in the early development stage of my swe class project and our passwords are hashed lol

hidden gorge
#

ok

wheat mesa
#

There’s nothing more permanent than temporary

hidden gorge
#

so idk if i undersand this fully

const Permissions = new BitFlags({
    APPROVE_IMAGES: true,
    BANNED: false,
});

would banned allow them to not do anything or i am doing it wrong

wheat mesa
#

Why is “BANNED” a permission and not a field

wheat mesa
#

Permissions define what a user is allowed to do

#

“Banned” is a status of some sort

hidden gorge
#

o

#

like this is what i have rn

#

i removed banned

wheat mesa
#

Perhaps I don’t fully understand what you’re doing here

#

Is that permissions variable being assigned to something elsewhere?

hidden gorge
#

this is what my code does

hidden gorge
# wheat mesa Is that permissions variable being assigned to something elsewhere?
const Permissions = new classes.BitFlags({
    APPROVE_IMAGES: true,
    DELETE_POSTS: true,
    COMMENT: true,
    VALIDATE_POST: true,
    CREATE_POST: true,
    DELETE_USER: true
});

const userPerms = Permissions.combine("APPROVE_IMAGES", "DELETE_POSTS")
console.log(`Users Perms: ${userPerms}`)

console.log(Permissions.has(userPerms, "APPROVE_IMAGES"))

wheat mesa
#

I see

#

Still don’t fully understand why this requires a package but to each their own I suppose

fossil folio
#

hey

hidden gorge
neon leaf
#

why is it still an object

hidden gorge
#

lemme do that rq

hidden gorge
neon leaf
#

why are you awaiting them

hidden gorge
#

them*

#

ykw i could remove that await in the user

neon leaf
#

and why is that async

hidden gorge
neon leaf
#

why is combine async

hidden gorge
#

the whole function is async

#

oh

#

its noit

#

not*

neon leaf
#

then dont await it

#

???

hidden gorge
neon leaf
#

awaiting pushes your task to the next event loop iteration

#

which is insanely slow

hidden gorge
#

i'll run it without await

hidden gorge
#

actually

#

1: No await
2: await

neon leaf
#

it shouldnt be noticable on single requests

#

probably just coincidence

hidden gorge
#

true i'll run another test

#

okay yeah that was just a coincidence

neon leaf
#

singapore 🥀

mortal snow
#

but when it doesn't it REALLY REALLY doesn't wanna work or behave in any useful manner

neon leaf
#

yea its cursed

#

thankfully 90% of endpoints only read

#

the other 10% take 1s+

hidden gorge
#

is that a good idea?

mortal snow
neon leaf
#

I have 3 server locations, us-east, germany and singapore

#

germany has the primary db (for writes)

#

there were people complaining about slow api responses in asia so I added singapore

mortal snow
#

Hopefully that helps a fair bit ahah

neon leaf
#

well ill hope too, singapore servers are double the cost devious

mortal snow
#

😭

wheat mesa
#

you need to be able to uniquely identify a user based on a request, e.g. some sort of auth token

hidden gorge
#

check the mods perms

wheat mesa
hidden gorge
#

welp i gotta find that out

wheat mesa
#

You need auth tokens

#

You cannot trust the frontend at all, the only way to trust it (usually) is for the server to give the client a secret, then have the client send that secret back to the server for verification upon requests

#

Basically the server has a private key that it uses to sign an auth token/cookie given to the client upon logging in, then that cookie/token is sent in with each request the client makes. It uniquely identifies the user, and cannot be impersonated by some other user

hidden gorge
#

also imo flags looks awesome

wheat mesa
#

Plaintext passwords

#

slippery slope

hidden gorge
hidden gorge
sharp geyser
#

What

#

no

#

you're literally saving plain text passwords

#

those are mongodb documents right?

hidden gorge
#

oh

sharp geyser
#

or objects

hidden gorge
sharp geyser
#

Test or not, should implement same security practice

#

How do you login with test users

#

when the passwords aren't hashed

#

verifying the "hashes" wont work here

hidden gorge
#

ok im gonna code it now

wheat mesa
#

That way you can check that the password is valid when attempting to log in, but you can't recover the password without a lot of work if the database gets leaked

wheat mesa
#

chatgpt did it quick 😉

sharp geyser
#

lol

hidden gorge
#

i literally typed that

wheat mesa
#

no shame in using AI as long as you don't want to learn much

#

can't lie I'm using it right now to write the frontend for my swe project

#

sick of this class and just need it done quick

hidden gorge
#

i literally just followed the bcrypt docs

wheat mesa
#

was just a guess, I've seen some other stuff in your project that was ai-inspired at the least

#

I'm not judging, just sayin

hidden gorge
#

new error time

#

the second i remove the hash code it works 😂

#

welp ik my error

wheat mesa
#

there you go

hidden gorge
#

ok now i should work on user verification

#

already have the page for it

sharp geyser
#

I feel like thats a lot of unneeded information

hidden gorge
#

i like it

#

so does like 90% of my friends

sharp geyser
#

I am confused

#

Is this for you and your friends

#

or for customers

#

Your average customer isn't going to even spend time looking at half that shit

#

they want immediate access to whatever they are buying

hidden gorge
sharp geyser
#

Tough news

#

your opinion doesn't matter much

#

Keep it, but your average person won't look at most of that

#

They want immediate access to whatever they are signing up for

hidden gorge
#

thats why i added the login in now button

prime cliff
#

Such a massive improvement compared to Portainer in parsing label values for actual useful data vibecat

sharp geyser
#

ok bro

hidden gorge
#

?

hidden gorge
#

actually ima move the buttons to the top

sharp geyser
#

Just from my personal opinion this isn't needed

hidden gorge
#

well that was easy

hidden gorge
sharp geyser
#

People will know what account they are verifying, they will know its now active since it literally says "Verification Successful"

#

and knowing when they verified isn't really useful to them

hidden gorge
#

ykw actually if people really wanna see it, if they like info i'll make it a dropdown bc why tf not

#

but i'll hide it

sharp geyser
#

Do what roblox does at the bottom of every user profile

#

if you even have those

hidden gorge
#

do what?

sharp geyser
#

When they joined your platform or whatever

hidden gorge
#

oh

hidden gorge
sharp geyser
#

👍

#

Look how much cleaner that is

#

and nicer on the eyes

hidden gorge
sharp geyser
#

Sure

hidden gorge
#

i chose it bc its related to the site

sharp geyser
#

I wonder what a blur looks like

hidden gorge
#

well the card itself has a blur

#

but like

hidden gorge
#

nvm

#

stupid webkit filter wont work on it

prime cliff
#

vibecat I listen to a lot of EDM and monstercat when coding

sharp geyser
#

I listen to nothing

#

I cant focus

hidden gorge
#

i grew up around both of those

sharp geyser
#

apparently not

hidden gorge
#

bruh its returning a string

sharp geyser
#

cause its a string

#

:))

#

parseInt

prime cliff
#

Tiny name/email leak :3

hidden gorge
#

Number() is a Js object is it not???

sharp geyser
#

everything is a js object

hidden gorge
#

im so confused

#
  const updateResult = await collection.updateOne(
                query,
                { $set: { "verificationProcess.currentCode": newCode } }
            );
``` it has to do with this line
sharp geyser
#

does updateOne expect a json object?

hidden gorge
#

my class for the db uses mongodb not mongoose

prime cliff
#

It depends on the field type set in mongo too, if your currentCode is set as a string instead of number in mongo, not sure if the js mongo lib converts it?

hidden gorge
#

this is the whole user:

{
    "bsonType": "object",
    "required": ["username", "email", "password", "flags"],
    "properties": {
      "username": {
        "bsonType": "string",
        "description": "The user's username."
      },
      "email": {
        "bsonType": "string",
        "description": "The user's email address."
      },
      "password": {
        "bsonType": "string",
        "description": "The user's password."
      },
      "profilePictureURL": {
        "bsonType": "string",
        "description": "The URL to the user's profile picture."
      },
      "flags": {
        "bsonType": "int"
      },
      "verificationProcess": {
        "bsonType": "object",
        "required": ["verified", "currentCode", "codeExpiresAt"],
        "properties": {
          "verified": {
            "bsonType": "bool",
            "description": "Whether the user has been verified."
          },
          "currentCode": {
            "bsonType": "int",
            "description": "The current verification code for the user."
          },
          "codeExpiresAt": {
            "bsonType": "date",
            "description": "The expiration date of the verification code."
          }
        }
      }
    }
  }
sharp geyser
#

or wait no thats the schema nvm

hidden gorge
sharp geyser
#

idk what Selector is

hidden gorge
#

nor do i

sharp geyser
#

it makes me think that query is invalid type

hidden gorge
#

never had this error

spark flint
#

send the value of query

hidden gorge
spark flint
#

the query can't just be the email

#
  const updateResult = await collection.updateOne(
                { email: query },
                { $set: { "verificationProcess.currentCode": newCode } }
            );```
sharp geyser
#

Yea as I thought

hidden gorge
#

oooh

#

i hate mongo

spark flint
#

i think mongo hates you

hidden gorge
#

its one error after another 😭

#

I wish that error would return what caused it to fail

#

IM SORRY HOW DOES THIS HAPPEN

sharp geyser
#

Bro forgot to floor

hidden gorge
prime cliff
#

Lul

hidden gorge
#

now to figure out how tf to verify them

hidden gorge
# sharp geyser Bro forgot to floor

nah rn this is all i use:

const randomCode = require("generate-random-code");

async function generateVerificationCode() {
    let code = randomCode.generateVerificationCode(6)
    
    return code
}
sharp geyser
#

More useless packages

hidden gorge
sharp geyser
#

smh

#

You are lucky you aren't using rust

hidden gorge
#

luckily its easy to just swap it

sharp geyser
#

build times go brrr

hidden gorge
sharp geyser
#

literally just randomly generate an alphanumeric letter

#

ezpz

#

if its numbers

#

numeric

hidden gorge
#

these just kept causing cargo to take forever

sharp geyser
#

Well no shit

#

you are using axum, tokio and serde

#

big packages

#

a lot of deps

hidden gorge
#

i also just learned u can handle 404s on express

sharp geyser
#

duh

#

Sorry I need to break my valorant lingo

#

I am being rather rude

hidden gorge
#

huh

frosty gale
neon leaf
quartz kindle
neon leaf
#

ye

quartz kindle
#

amazing

neon leaf
shut widget
#

guys can i ask where is the channel where it show i add my bot to top.gg and they add/decline the bot

shut widget
mortal snow
queen needle
#

I was pro mongo until I used any form of SQL

#

Because I wrote an SQL query to mongo query for fun as a developer command on a bot and then I decided "well why not just try it" have not left since

neon leaf
#

mongo has its uses but its definitely not for structured data like in most bots

queen needle
#

I still reach to it for very simple projects or testing

sharp geyser
#

I can’t stand mongo

#

I’d rather use SQLite

#

Postgres for big projects for sure tho

quartz kindle
#

mango > mongo

small tangle
#

🥭

pearl trail
#

those who know

queen needle
scenic kelp
#

i pretty much use sqlite for everything unless i have a solid reason to use postgres early on

queen needle
#

my only experience with sqlite is quick db 💀

scenic kelp
#

i mean if you know how to deal with postgres you know enough to deal with sqlite

#

it's a lot easier working from a file than an actual network connection

chrome dawn
#

Hey guys

covert gale
#

i also just use postgres wherever possible

lyric mountain
#

and you cant create procedures/functions, and triggers only support pure sql

queen needle
#

Very ee

#

Ew*

ivory hawk
chrome dawn
ivory hawk
chrome dawn
ivory hawk
#

Easy class too then mountain biking after

chrome dawn
#

Okay

sharp geyser
#

@prime cliff whats the link for ur docker thing again

#

Ima try and install it again

#

:p

prime cliff
sharp geyser
#

Oh its in ur bio as well

#

Thanks

#

Ima give it a shot

#

Had to reinstall portainer so I thought i'd give ur project a try

sharp geyser
#

Do I need both?

delicate zephyr
sharp geyser
#

So its not really needed?

delicate zephyr
#

i'd ask in devspace support tbh

#

im unsure too

sharp geyser
#

Holy shit

#

there is a whole community behind Builderbs project already

delicate zephyr
#

i mean

#

he runs waifu

sharp geyser
#

Fairs

prime cliff
#

I've been developing Discord stuff since 2016 ofc i have a server 001_NK_XD

sharp geyser
#

Yea

prime cliff
#

And to answer your question it basically works like portainers you setup the website and then install the agent on each server you want to manage docker with

sharp geyser
#

So I would need Agent on at least 1 server gotcha

prime cliff
#

Most of the docker/portainer feature are available aside from some issues with creating stacks, no container console access and no per-container/stack permissions yet

#

Other than that it's mostly stable and functional with some neat features already

sharp geyser
#

Right so I caused an uh oh oopsie
Waiting for cache lock: Could not get lock /var/lib/dpkg/lock-frontend. It is held by process 56660 (apt)

#

Anyone know how to fix this

#

I just rebooted and fixed it

#

Everything I saw on the internet looked very sus

sharp geyser
#

I assumed it used .net core

prime cliff
#

It uses just .NET

sharp geyser
#

I see

#

I am having a lot of issues still

prime cliff
#

.net framework is the very old 4.7/4.8 that's preinstalled on windows, then there was .net core up until .net 6+ where it just became .net

#

What are you having issues with? it should just be running the docker compose up -d

sharp geyser
#

I have it running

#

its the setup process

#

Like the last time I tried using it, it freezes

#

Finally it responded

prime cliff
#

Does that aws have some kind of option to allow SMTP or something

sharp geyser
#

wym

#

It uses SMTP

prime cliff
#

Let me see where that error is coming from hang on

sharp geyser
#

Apparently it "aborted"

prime cliff
#

Hmm yea look like it's not connect to aws smtp somehow

sharp geyser
#

I've had issues like this in the past

#

Where docker prevents SMTP

#

I dont really know how I fixed it

prime cliff
#

It might be that the container is missing a certain ssl linux package or something aws needs will do a bit of testing now

sharp geyser
#

Alright

sharp geyser
#
devspace-web  | Unhandled exception. System.FormatException: The format of value '<null>' is invalid.
devspace-web  |    at System.Net.Http.Headers.HttpHeaderParser.ParseValue(String value, Object storeValue, Int32& index)
devspace-web  |    at System.Net.Http.Headers.HttpHeaders.ParseAndAddValue(HeaderDescriptor descriptor, HeaderStoreItemInfo info, String value)
devspace-web  |    at System.Net.Http.Headers.HttpHeaders.Add(HeaderDescriptor descriptor, String value)
devspace-web  |    at DevSpaceWeb.Services.HealthCheckService.RunChecks(Object sender, ElapsedEventArgs e) in C:\Users\Brandan\Documents\Visual Studio 2022\Projects\DevSpaceWeb\DevSpaceWeb\Services\HealthChecks.cs:line 94
devspace-web  |    at System.Threading.Tasks.Task.<>c.<ThrowAsync>b__128_1(Object state)
devspace-web  |    at System.Threading.ThreadPoolWorkQueue.Dispatch()
devspace-web  |    at System.Threading.PortableThreadPool.WorkerThread.WorkerThreadStart()
devspace-web  | Aborted (core dumped)

This is what it throws

#

Constantly needing to restart the container

#

I'd report this in your server but idrk what channel im supposed to do so in

#

😅

prime cliff
#

Ah i see what it's doing

#

Since smtp isnt actually setup it's breaking the health check endpoint

sharp geyser
#

Could this be causing the smtp connection issue as well?

#

or is this separate

prime cliff
#

Let me try some stuff

sharp geyser
#

Sounds good

#

lmk if you need an aws smtp user

#

I can just let you use it to test

#

:p

#

unless u already got one iara_lul_haha

prime cliff
#

Hu that's weird

#

@sharp geyser try running this docker exec devspace-web openssl s_client -crlf -starttls smtp -connect email-smtp.us-east-2.amazonaws.com:587

sharp geyser
#

I might be a bit stupid

#

I never installed devspace agent

#

💀

#

uno momento

prime cliff
#

Oh no wait nvm

#

Do it with devspace-web instead docker exec devspace-web openssl s_client -crlf -starttls smtp -connect email-smtp.us-east-2.amazonaws.com:587

sharp geyser
#

Yup ran it

#

Waiting for output

prime cliff
#

Wait waiting for output ThinkOwO

#

Is it not

sharp geyser
#

Quite literally nothing is being outputted

#

and its taking ages

#

I think its going to return with a refused connection

prime cliff
#

Hmm interesting is your vps provider blocking smtp or something

sharp geyser
#

I use Digital ocean so it may be possible

prime cliff
#

Try telnet email-smtp.us-east-2.amazonaws.com 587

#

Should say connected

sharp geyser
#

nope

#

I think do blocks smtp

#

Not sure if this is relevant

prime cliff
#

Ok lucky you can use mine instead

sharp geyser
#

you have one?

prime cliff
#

Yea the fluxpoint managed option

#

Will add a notice for that smtp block too thanks for testing

sharp geyser
#

No problem

ivory hawk
#

Nvm that's cheap 0.10 per 1000 emails received

delicate zephyr
pearl trail
#

like, a lot

prime cliff
short pilot
#

SaltMiner.js:9 Refused to connect to 'wss://oliegrey.com/' because it violates the following Content Security Policy directive: "connect-src https://1348684765481402409.discordsays.com/.proxy/ wss://1348684765481402409.discordsays.com/.proxy/ https://discord.com/api/ https://canary.discord.com/api/ https://ptb.discord.com/api/ https://cdn.discordapp.com/app-assets/ https://cdn.discordapp.com/attachments/ https://cdn.discordapp.com/avatars/ https://cdn.discordapp.com/embed/ https://cdn.discordapp.com/ephemeral-attachments/ https://cdn.discordapp.com/guilds/ https://cdn.discordapp.com/icons/ https://media.discordapp.net/app-assets/ https://media.discordapp.net/attachments/ https://media.discordapp.net/avatars/ https://media.discordapp.net/embed/ https://media.discordapp.net/ephemeral-attachments/ https://media.discordapp.net/guilds/ https://media.discordapp.net/icons/ data: blob:".
how do i use websockets on discord activities. making a game in godot using websockets to communicate to my VPS which has a secured connection set up.

pearl trail
short pilot
#

if anyone was curious, the solution was to add a url mapping in my settings then use wss://1348684765481402409.discordsays.com/.proxy/<prefix from url mapping> when i create the websocket, which proxies to my server

#

is working multiplayer activity now

#

just need to get my server re-launching itself on a github pull and i have everything automated and can finally focus on the actual game

#

🙃

ashen mural
#

Bruh

surreal sage
#

nginx vs traefik (response time)

frosty gale
surreal sage
#

this is what basic auth does to your response time children

frosty gale
#

is that what caused the huge difference in performance?

#

i wouldnt expect nginx to be much slower if slower at all

#

it does look interesting though

#

i dont like how nginx locks some of its features behind a paywall so it would be cool to move away some day

delicate zephyr
#

from experience, I had trafaek die under load multiple times

surreal sage
#

certificates died

#

for precisely 6 hours

#

it just wouldnt respond to tls messages

#

would just ghost

delicate zephyr
#

nah im talking

#

the process died

#

no errors nout

#

at around 4-6k req/s

surreal sage
#

ok 1 that's a lot

surreal sage
quartz kindle
#

config, version, plugins, etc

#

was that mainline 1.27?

surreal sage
#

latest docker afaik

quartz kindle
#

ah idk about docker, i have it installed on host

delicate zephyr
#

instead of nginx directly

#

for this exact reason

quartz kindle
#

like SWAG and NPM (nginx proxy manager)

#

there are also nginx forks like Angie, which also add a lot of features from those stacks as built ins

delicate zephyr
#
GitHub

More than just another GUI to Kong Admin API. Contribute to pantsel/konga development by creating an account on GitHub.

quartz kindle
#

angie has brotli and auto ssl
swag is a docker container which includes nginx certbot autoban etc
npm has a web dashboard for configuration or something idk

delicate zephyr
#

though I need to move off konga apparently

quartz kindle
#

i feel like giving Caddy a try these days

#

looks really nice on paper

delicate zephyr
#

Caddy looks cool

quartz kindle
#

i was watching some benchmarks

#

realistically nothing really beats nginx (except haproxy), but if you're within 90% of its performance you're good enough

#

but nginx's default config is ass

#

all those benchmarks that show X being faster than nginx its because they're using nginx default config lmao

#

the only downside with caddy is its written in go

delicate zephyr
#

I like go sad

lament rock
#

Time to make my own nginx like proxy

#

I already studied HTTP 1.1 quite a bit trying to make my own stream based client because the built in ones don't play nice with an audio server I would sometimes request from backed by SHOUTCast/ICECast

#

All because they didn't put the HTTP/1.1 at the start of the payload

#

Time to learn HTTP 2 and Quic

eternal osprey
#

why is my messageCreate event not firing for dm messages?

quartz kindle
quartz kindle
#

well its not bad, but it does lose an edge compared to C-based webservers

delicate zephyr
#

but then a lot of things lose to C

#

for good reason kekW

quartz kindle
#

:^)

lament rock
#

supposedly nginx supports quic

quartz kindle
#

and honestly i dont even remember how i did it

#

ah i remember now

#

i had to explicitly allow UDP on port 443

#

completely forgot quic works on udp lmao, we are so used to web being tcp all the time that didnt even thought of it for a long time

lament rock
#

yup

#

can wait to impl packet loss prevention

delicate zephyr
lament rock
#

only some clients support quic, but it's much faster to produce a response

quartz kindle
#

the more small files it has the bigger the difference

delicate zephyr
#

ah fair

#

guessing it's just quicker interaction wise

quartz kindle
#

yeah, its like

#

http1 = turn based game
http2 = timer based game
http3 = real time game

#

lmao

delicate zephyr
#

ah

#

xD

quartz kindle
#

the most ass analogy ever

sharp geyser
#

There is an http3 already?

lament rock
sharp geyser
#

well I know it was quick

#

Im shocked as well

lament rock
#

Adoption into clients is low

#

Chromium supports it tho iirc

sharp geyser
#

I wonder when it will be fully adopted

lament rock
#

Which I guess is realistically all that matters

sharp geyser
#

Also my joke went woosh

lament rock
#

idk. HTTP/2 isn't even that common

sharp geyser
#

Yea

#

It's 10 years old now

#

well soon to be 10

lament rock
#

Though nginx does HTTP/2 front facing and converts the traffic to HTTP/1.1 for the backend

#

Dunno why the nodejs team focused so hard on undici when HTTP/2 is yet to be common in js

sharp geyser
#

Why is http2 not common?

lament rock
#

There are quirks with HTTP/2 where you can't as cleanly translate your application. Typically, your web server is stream based where you'd write your headers then your body and then call res.end() indicating the end of the response. With HTTP/2, you can reuse a socket to fulfill multiple requests through multiplexing. This adds a not insignificant amount of complexity to optimizing your app if you wish to take full advantage of HTTP/2. Browsers still send HTTP/1.1 as a supported alpn since if you're gonna treat HTTP/2 as HTTP/1.1, might as well use HTTP/1.1

#

Quic also adopts this multiplexing on top of being UDP based along with some other hard to implement protocols like being encrypted basically out of the gate

#

A major slowdown for internet traffic was handshakes and the fact that it's built on TCP for its rigidity against packet loss. Now Quic implementations may take even longer to become available and even longer to be mainline

#

Quic does have its own packet loss prevention protocols

sharp geyser
#

What the hell does this bs mean

lament rock
#

Huh

#

what is 526

#

Invalid SSL cert according to cloudflare

sharp geyser
#

I don't see how

#

I literally just replaced it

lament rock
#

Did you refresh your cache

sharp geyser
#

yea

#

even tried in incognito

lament rock
#

Can you make requests from some kind of cli

sharp geyser
#

How do you do that again 💀

#
➜  zitadel curl -I https://lovewithnikki.rocks
HTTP/2 526
date: Wed, 16 Apr 2025 03:59:03 GMT
content-length: 0
server: cloudflare
cache-control: private, no-store
cf-cache-status: DYNAMIC
cf-ray: 9310c4909f7e18e6-FRA
alt-svc: h3=":443"; ma=86400
sharp geyser
# lament rock Can you make requests from some kind of cli
➜  zitadel echo | openssl s_client -servername lovewithnikki.rocks -connect lovewithnikki.rocks:443
Connecting to 104.21.70.159
CONNECTED(00000003)
depth=2 C=US, O=Google Trust Services LLC, CN=GTS Root R4
verify return:1
depth=1 C=US, O=Google Trust Services, CN=WE1
verify return:1
depth=0 CN=lovewithnikki.rocks
verify return:1
---
Certificate chain
 0 s:CN=lovewithnikki.rocks
   i:C=US, O=Google Trust Services, CN=WE1
   a:PKEY: id-ecPublicKey, 256 (bit); sigalg: ecdsa-with-SHA256
   v:NotBefore: Apr  5 02:34:17 2025 GMT; NotAfter: Jul  4 03:32:51 2025 GMT
 1 s:C=US, O=Google Trust Services, CN=WE1
   i:C=US, O=Google Trust Services LLC, CN=GTS Root R4
   a:PKEY: id-ecPublicKey, 256 (bit); sigalg: ecdsa-with-SHA384
   v:NotBefore: Dec 13 09:00:00 2023 GMT; NotAfter: Feb 20 14:00:00 2029 GMT
 2 s:C=US, O=Google Trust Services LLC, CN=GTS Root R4
   i:C=BE, O=GlobalSign nv-sa, OU=Root CA, CN=GlobalSign Root CA
   a:PKEY: id-ecPublicKey, 384 (bit); sigalg: RSA-SHA256
   v:NotBefore: Nov 15 03:43:21 2023 GMT; NotAfter: Jan 28 00:00:42 2028 GMT
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIDvjCCA2OgAwIBAgIRAKiAeYOer1MmDQHveKxjMowwCgYIKoZIzj0EAwIwOzEL
MAkGA1UEBhMCVVMxHjAcBgNVBAoTFUdvb2dsZSBUcnVzdCBTZXJ2aWNlczEMMAoG
A1UEAxMDV0UxMB4XDTI1MDQwNTAyMzQxN1oXDTI1MDcwNDAzMzI1MVowHjEcMBoG
A1UEAxMTbG92ZXdpdGhuaWtraS5yb2NrczBZMBMGByqGSM49AgEGCCqGSM49AwEH
A0IABANiivrdXKY8NoS66oUjxeWVSVThhKkXidocTqfrkk/BDFDle37m5Ir4y9/8
pxNHa0rs9KxQK8/f3S88zOwq0K+jggJjMIICXzAOBgNVHQ8BAf8EBAMCB4AwEwYD
VR0lBAwwCgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUJlb6Gaja
Uqcls/PzFc2UiCsmm0QwHwYDVR0jBBgwFoAUkHeSNWfE/6jMqeZ72YB5e8yT+Tgw
XgYIKwYBBQUHAQEEUjBQMCcGCCsGAQUFBzABhhtodHRwOi8vby5wa2kuZ29vZy9z
L3dlMS9xSUEwJQYIKwYBBQUHMAKGGWh0dHA6Ly9pLnBraS5nb29nL3dlMS5jcnQw
NQYDVR0RBC4wLIITbG92ZXdpdGhuaWtraS5yb2Nrc4IVKi5sb3Zld2l0aG5pa2tp
LnJvY2tzMBMGA1UdIAQMMAowCAYGZ4EMAQIBMDYGA1UdHwQvMC0wK6ApoCeGJWh0
dHA6Ly9jLnBraS5nb29nL3dlMS9wVkhrQWJiSUx3WS5jcmwwggEEBgorBgEEAdZ5
AgQCBIH1BIHyAPAAdgAS8U40vVNyTIQGGcOPP3oT+Oe1YoeInG0wBYTr5YYmOgAA
AZYEA3hEAAAEAwBHMEUCICzSJvuWmnGvhRrMiImR7O7LkGpdoXBfekUKrB0AYKs8
AiEAx0VXHCkN2tWJLC861YfPKaJUpFiYdVi+xmnXHelVCi0AdgDM+w9qhXEJZf6V
m1PO6bJ8IumFXA2XjbapflTA/kwNsAAAAZYEA3xqAAAEAwBHMEUCIAvNpfkYKpz9
G3hFljEFseyriPoKOaad1LTTQfaX601kAiEAgZyUgchQvBZi9+QYeizSUSpZjDs+
YsJkOLwgR2UO0u8wCgYIKoZIzj0EAwIDSQAwRgIhAIhYgeg3FHLja0wjJhlFkVzk
HoNSoMYZ//DM8++c3qcFAiEAwBCtKIKylfotvpW+4+IQIyFbT0551nr3dQ54FZh7
/Mc=
-----END CERTIFICATE-----
subject=CN=lovewithnikki.rocks
issuer=C=US, O=Google Trust Services, CN=WE1
---
No client certificate CA names sent
Peer signing digest: SHA256
Peer signature type: ECDSA
Server Temp Key: X25519, 253 bits
---
SSL handshake has read 2851 bytes and written 416 bytes
Verification: OK
---
New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384
Server public key is 256 bit
This TLS version forbids renegotiation.
Compression: NONE
Expansion: NONE
No ALPN negotiated
Early data was not sent
Verify return code: 0 (ok)
---
DONE
#

dk if this matters

#

Is it...not using the wrong cert?

#

Shouldn't it be the key thats available

#

or am I wrong

lament rock
#

Ah so it doesn't matter if its your browser or some other cacheless client thats requesting. CF acting as a proxy is the one saying your SSL cert is wrong. Either misconfig or expired

sharp geyser
#

I just regened the certs

#

Maybe the client cert is expired

#

I dont fucking get it

delicate zephyr
sharp geyser
#

yes

delicate zephyr
#

It should work

#

nginx or?

sharp geyser
#

yes

delicate zephyr
#

using 1 file or a .key and .crt

sharp geyser
#

using a pem, key and crt

delicate zephyr
#

I've never given nginx a full chain

#

:^)

#

literally ever in my life

#

lmao

#

I normally just give it Key / Cert and it works

sharp geyser
#

Interesting

#

I've always given it full chain

#

And it always works

#

I have regened the certs in case that was the problem but no dice

delicate zephyr
#

dunno then

#

sounds stupid try without full chain

sharp geyser
#

How would the nginx config look?

delicate zephyr
#

Whats your current

#

feel free to send it in dms if you'd prefer

sharp geyser
#

Really just this

delicate zephyr
#

uhm

#

hmm

#

I've never used ssl verify client

sharp geyser
#

you have to with origin server on cloudflare

delicate zephyr
#

I normally just give it the cert and key from cloudflare and it works

#

I use Full (Strict)

#

for everything

#

and I have never used that

sharp geyser
#

do you turn on Authenticated Origin Pulls?

delicate zephyr
#

sec lemme check

#

where is that

#

👀

sharp geyser
#

Where you generate the origin certs

delicate zephyr
#

Yea no

#

i dont

sharp geyser
#

How does your nginx look then

#

I’m confused on how you don’t give it a full chain

#

Do you even use origin certs?

#

Or are you using let’s encrypt

delicate zephyr
#

I do use origin certs

sharp geyser
#

How

delicate zephyr
#

we do for topstats too

sharp geyser
#

You aren’t supposed to be able to

delicate zephyr
sharp geyser
#

Without enabling authenticated origin pulls

delicate zephyr
#

it just checks the SSL certificate from the server is the right one

#

and lets traffic through

sharp geyser
#

I’m so confused

#

I have to enable authenticated origin pulls or I get a different 5xx error

delicate zephyr
#

which 5xx error

sharp geyser
#

I don’t remember off the top of my head

delicate zephyr
#

is it "invalid origin cert"

#

:^)

sharp geyser
#

Something like that

delicate zephyr
#

Yea uh

sharp geyser
#

It’s been a while

delicate zephyr
#

You literally just need to give the Key / Crt as the key / crt files

sharp geyser
#

I’ve never gotten a 526 tho so this is new

delicate zephyr
#

hold on

#

for example

sharp geyser
#

Sure

#

I’ll try it out tomorrow

#

But before it would always tell me I had an invalid origin certificate and the only way to fix it was to use a client cert with authenticated origin pulls

delicate zephyr
#

I've never had to do that

#

so I have no idea

sharp geyser
#

I’ll try it tmrw then

#

Thanks villager

delicate zephyr
#

cause like

sharp geyser
#

Maybe it'd help if I dont use origin certs then

delicate zephyr
#

I use origin certs

sharp geyser
#

Then what is client certs

delicate zephyr
#

No idea

#

Ive never touched them

#

origin cert is literally just an SSL certificate for Cloudflares proxy to validate your server

#

Flexible: allows https -> http

#

Strict: requires HTTPS -> SSL 443

sharp geyser
#

im so confused

#

I disabled authenticated origin pulls right

#

and deleted the client stuff from nginx

#

restarted nginx

#

and still 526

delicate zephyr
#

uhhh

sharp geyser
#

like bro

delicate zephyr
#

I know why

sharp geyser
#

is this shit just cooking me rn

delicate zephyr
#

you havent got server_name in the 443 block

delicate zephyr
sharp geyser
delicate zephyr
#

yea

#

bad gateway now

#

your SSL cert is working

#

LOL

sharp geyser
#

Yea

delicate zephyr
sharp geyser
#

apparently my pm2 stuff got destroyed when I rebooted

#

cause the pm2 script is missing

delicate zephyr
#

pm2 resurrect

sharp geyser
#

💀

#

Didnt know that was a thing

#

I just re-ran the pm2 start command

delicate zephyr
#

only works if you pm2 save

#

pm2 save

#

pm2 startup

sharp geyser
#

I have to save this shit now??

delicate zephyr
#

pm2 saves the process list and its params

#

so it'll start on boot

sharp geyser
#

boring

#

Should auto save

delicate zephyr
#

lol

sharp geyser
#

I always thought my pm2 stuff was just broken

#

never knew I had to run a cmd

#

No wonder

#

Well it works now

#

great

#

Thanks Mr Villager

#

now me go sleep or my gf might get pissed off at me when I wake up late asf

crystal wigeon
#

if im using djs is it not possible to scale the bot with sharding?

#

like do i have to manually specify the shards? on each machine?

pearl trail
#

it is possible

crystal wigeon
pearl trail
crystal wigeon
#

one way i found was you manually specify the number of shards you want it to spawn like [1 - 10] in vm1 and [11 - 20] in vm2, but this isnt really an effective way of doing things

#

was wondering if there a way to automate this

pearl trail
quartz kindle
crystal wigeon
crystal wigeon
#

How are big bots managing this?

quartz kindle
#

you dont need to go for any inbetween

crystal wigeon
#

I see, hmm

#

I just wanted to see if I could auto scale it or something

#

Not have to do anything manually

quartz kindle
#

you can, but it will involve shutting down all shards, otherwise good luck filtering through duplicated messages

#

because every time total shards change, guilds get reshuffled into diffetent shards

crystal wigeon
#

Right

quartz kindle
#

so when you start a new shard, you need to get all its guilds and send a message to other shards to ignore those guilds

#

until all new shards take over

crystal wigeon
#

got it , thanks!

warped glacier
#

Bap

vapid berry
#

anyway, @warped glacier

#

cluster 0 is what is going to recieve the webhook

#

port 1738 (couldnt think of anything else KEKW )

warped glacier
#

Works lol

vapid berry
#

they all share the same db

warped glacier
#

Make a table then named like "Votes"

vapid berry
#

yup already there

#

ive been testing locally and it works wonderfully, basically procrastinating pushing it to prod now lol

#

wrong screenshot thanks windows

warped glacier
#

Store them there and have all clusters make a interaction check. Something like.

@discord.id = "id"


SELECT *
FROM votes
WHERE discord_id = @discord_id;```
#

If it returns the value. Just assume true

vapid berry
#

alright yeah will do

warped glacier
#

Let me know how it goes

vapid berry
#

okie dokie

#

mfw i push to the wrong branch

warped glacier
#

OOF

vapid berry
#

fml 😭

warped glacier
#

Thats why i dont do clusters. Its hard to figure out what branch to push plus why do you need a cluster. Just shard it!

vapid berry
#

unfortunately having 25 shards running on a single instance just doesnt work

warped glacier
#

(I also hard code it. No pretest 95% of the time lol)

vapid berry
#

my bot was soooo slow

vapid berry
#

Yes

#

clustering is most definitely a necessity at my scale

warped glacier
#

When i was origionally ssetting up my shards i did 30 (It was in like 100 servers i was pre setting it up due to how fast its growing) And i was only having 1-2 sec delays

vapid berry
#

All of those shards were being invalidated because there arent any guilds filling them

#

so ofc there werent any delays

#

my bot is in around 22k servers, over a million users

#

shits crazy at these numbers lol

#

had to setup a grafana instance so i could view my clusters logs too

warped glacier
#

See i prob have 100 servers roughly 14k users

#

(Im rn locked at 100 :(. )

vapid berry
#

rip

#

dont wanna verify your identity?

#

omfg i just lost all my changes

warped glacier
#

No i need privlaged intents. There not responding

vapid berry
#

omfg

#

oop nvm

#

thank god

warped glacier
#

Thank goodness

#

Anyways.

vapid berry
#

still working on bringing my previous changes up after pushing to the wrong branch

warped glacier
#

I really dont want to cluster my bot but know ill have to later. I run PTERODACTYLPANEL also so that will be fun

vapid berry
#

move to portainer

#

like

#

yesterday

warped glacier
#

Does it work on ubuntu?

vapid berry
#

Yes ofc

#

I use proxmox for my vms. My clusters are on 1 vm, and my other services are on other vms

#

in my cluster vm, i have other shit in there too

warped glacier
#

Ill look into it. PTERO is intalled on a system in my ubuntu pc called casaos. I would have to look it up and take a look into it.

#

Mine would be odd as ubuntu for me is GUI system.

#

Should still work tho

#

and that was just bc i was too lazy to setup a proper remote access.

vapid berry
#

proxmox is very neat. Everything related to my services, bots, etc is under vm 100, the other vms are unrelated but its all the same machine

warped glacier
#

ive heard good things about proxmox. The system is old and wants to die.

#

already had to replace the HDD. now trying to upgrade the ram

vapid berry
#

You will need a beefy system. as you can see mine is pretty well used

#

the ram is cached, so its not actually using that much, but that much ram is being assigned to other vms

warped glacier
#

See the system has room to be upgraded. CPU is decently beefy. Just low ram amount and low storage (Upgraded it to a 1tb HDD)

#

its not a proper server either. Just a old pc i modified to run as a server.

delicate zephyr
vapid berry
warped glacier
#

bc i dont want to fork a ton for a proper server

delicate zephyr
vapid berry
#

thats what im doing

delicate zephyr
#

how much is that

vapid berry
#

like 120$ a month

warped glacier
vapid berry
#

something like that idr off the top of my head

warped glacier
delicate zephyr
vapid berry
#

okar back to work

warped glacier
#

unless you know a ovh for 15/m

#

I doubt it tho

neon leaf
#

got this cpu for free 🔥

warped glacier
#

NICE

neon leaf
#

0€/month 🔥🔥 (ignore electricity)

vapid berry
#

i need a better cpu

warped glacier
#

i need to just build a pc to run my shit

small tangle
#

Pi my beloved

neon leaf
#

I need to redo my rack cooling

#

some nodes are reaching 60°C ON THE SURFACE

warped glacier
#

eegh

#

that no good

neon leaf
#

well

#

temp doesnt matter that much, but its insanely loud when all nodes are doing stuff

#

(well the heat did kill 6 sd cards already but eh)

warped glacier
#

i mean it is a server

neon leaf
#

full noctua setup though, when only one node is active, 100% cpu usage cannot be heard

warped glacier
#

why not watercool?

neon leaf
#

well

#

some stuff is watercooled

#

but idk

vapid berry
#

i wish grafana wasnt so fucking slow omg

warped glacier
#

I have alot i need to do with my setup. Its ssry just a open pc sitting on the ground. I cant get a proper rack as my ISP will shutoff my internet if we have a server (Plus in a apartment) So what i prob need to do is build a BEEFY pc and set it up to run as a server

warped glacier
vapid berry
#

I love debugging ip issues

warped glacier
#

DoSeNT EvEryOne?

neon leaf
#

7900X3D 96GB DDR5 6600 (air cooled)
9900X 32GB DDR5 6400 (water cooled)
5900X 64GB DDR4 3600 (water cooled)
5800X 32GB DDR4 3400 (air cooled)

vapid berry
#

And the way my server is setup i cant even nmap to see if my port is actually open or not

#

dying

warped glacier
#

#fails 2025

neon leaf
#

why wat

warped glacier
#

Half air half water???? WHY DID YOU SET IT UP THAT WAY!

neon leaf
#

sir

#

I dont have unlimited money

warped glacier
#

Touche

neon leaf
#

I kinda want to make a custom loop for the rack so that theres a radiator on my roof

warped glacier
#

Why dident you water cool the 96GB tho over the 32?

#

if its a 96GB system its obviously designed to handle more. Wouldent it need the cooling more?

neon leaf
#

well

#

yes

#

but the 96GB one is chilling on 55°C air cooled

#

(bottom of rack)

vapid berry
#

WOOOOOOOOOO

#

does top.gg require https webhooks

#

pls say no

#

NEVERMIND WOOOOOOOOOO

sharp geyser
vapid berry
#

dw about it

#

YIPPEE!!!

#

(not my ip btw)

delicate zephyr
#

on a beefed up AX102

vapid berry
#

i used hetzner for a while

neon leaf
#

yeah I have some self-hosted and some hetzner

vapid berry
#

moved to ovh due to latency issues because hetzner is in germany lol

neon leaf
#

(everything that needs 100% availability is hetzner)

delicate zephyr
#

100ms Latency to discord is fine

#

I know of a few large bot devs who use hetzner

#

so :^)

vapid berry
delicate zephyr
#

OVH is fine

#

depending on circumstances

#

9/10 they're more expensive tho

vapid berry
#

clustering is pretty goated tbh

#

Instead of having to restart my entire bot, all i need to do is restart a specific cluster while i test these changes

#

lets go

#

need to fix the multiple embeds, but i dont think it'll happen during normal votes

#

it doesnt happen during normal votes

warped glacier
warped glacier
#

i dont understand their API Tbh

vapid berry
#

its just a post request to a webhook

#

pretty simple stuff

warped glacier
#

i just dont know how

vapid berry
#

google is your best friend for this

warped glacier
#

(And gpt if i had the energy

#

Yeah but like i said. It involves a odd pterodactyl panel instulation and alont PTERO runs 2 docker instances so i would have to figure out how to send across a docker instance.

#

And CASAOS not stopping it

warped glacier
#

I have a thought and would like to know if anyone has done this. I can run a GITHUB (Private) And send the code there as a cloud instance. Could i then have a reboot command and on boot pull the latest instance from github?

lyric mountain
#

simply set up your credentials on where you'll be pulling the code

warped glacier
#

I kinda like this idea as it also gives redundent backups

#

Because then ill have 2 backups in 2 places

#

I might make this change later

neon leaf
warped glacier
warped glacier
#

Forcing myself to fix it today

#

Complete rework including fixes to some delays when im banning users.

sharp geyser
#

Love how DO blocks typical smtp ports

#

so you can't even use AWS smtp normally

#

You have to hope the SMTP provider has a rest api

#

@prime cliff one critique (minor), if you only have one team, or even if you have multiple teams. Why doesn't it just put you to the team's page, or even the page with the list of teams when you login

#

Especially since clicking My Team is the only initial option you have

#

unless you click elsewhere in the top nav

#

I have to do a lot of navigation just to get to where i want, which isn't that big of a deal tbh just wondering why

prime cliff
#

Yea i could do that it's also currently set to redirect you to the last page if you use oauth login too

sharp geyser
#

I see

#

Also removing containers and stacks seem a bit buggy

#

Was throwing errors like the container not being stopped even though it was

lyric mountain
#

fuck, it is indeed understanding my code

sharp geyser
lyric mountain
#

intellij junie

sharp geyser
#

Some jetbrains AI shit?

lyric mountain
#

yes

sharp geyser
#

Damn

#

It's smart asf

lyric mountain
#

yep, I asked it how can I detect whether a player intentionally lost a match, cuz I have a certain problem with throwers

#

it went through the code to find how and found players can selfdamage, tho this is not exactly my intent but I asked poorly tbh

#

still reading its train of thought

#

I just clueless on this, need to somehow separate griefers from bad players

sharp geyser
#

btw

#

with user installs, can I dm the user if they do it

lyric mountain
#

if you have a bot (not just app) and include identify scope, yep

sharp geyser
#

Do they have to share a server with said bot

lyric mountain
#

for that I'm not sure, would need testing

sharp geyser
#

I can't be fuckin asked to test it

deft wolf
#

I've never used a user installed app so idk

sharp geyser
#

Right

#

So you can dm them without them sharing a server with the actual app

#

When they authorize a user install app, one of the permitted permissions is sending direct messages

lyric mountain
#

aight, managed to make it understand what I want

#

lets see what it cooks now

#

lmao it gave me a plan approach

#

including an implementation suggestion holy shit I'm scared

solemn latch
#

👀

lyric mountain
#

apparently it can also analyze query results

ivory hawk
lyric mountain
#

probably? it's included in IJ community

#

tho I nearly spent the whole month's quota today KEKW

#

but ngl this feature is making me consider getting a paid plan for higher quota

neon leaf
pearl trail
lyric mountain
#

ok, now I know where to start from, time for some heavy data crunching

#

1190 matches as sample size

warped glacier
#

Can someone help me fix this


class BackupBypassView(discord.ui.View):
    def __init__(self, callback_bypass, timeout=60):
        super().__init__(timeout=timeout)
        self.callback_bypass = callback_bypass

    @discord.ui.button(label="Bypass & Continue", style=discord.ButtonStyle.danger)
    async def bypass(self, interaction: discord.Interaction, button: discord.ui.Button):
        print("[DEBUG] Bypass button clicked")
        await interaction.message.edit(view=None)
        await interaction.followup.send(":hourglass_flowing_sand: Continuing deployment...", ephemeral=True)
        asyncio.create_task(self.callback_bypass(interaction))
        self.stop()

    @discord.ui.button(label="Cancel", style=discord.ButtonStyle.secondary)
    async def cancel(self, interaction: discord.Interaction, button: discord.ui.Button):
        print("[DEBUG] Cancel button clicked")
        await interaction.message.edit(view=None)
        await interaction.followup.send(":x: Deployment cancelled.", ephemeral=True)
        self.stop()```
#

I am stumped

sharp geyser
#

Not unless you give us your problem

#

What’s it doing that you aren’t expecting

#

Any errors?

warped glacier
#

Buttons do not respond to it being clicked

#

just says "This intreaction failed"

sharp geyser
#

Are you replying to the interaction

#

You only have a small amount of time to reply before it fails

#

Unless you defer it

warped glacier
#

I have it set to take 60sec till timeout. Im within that window. Ive tried deferring also. Nothing

sharp geyser
#

Any errors in console?

warped glacier
#

none

prime cliff
#

Just do breakpoints or console logs to see if it's actually being run and/or if you're using websocket or webhook interactions

warped glacier
elfin helm
sharp geyser
#

I should be able to just dm them from the rest api

#

So long as I have their user id

eternal osprey
#

Hey, how come that some ppl have channel names like Ticket | 53252 etc etc
Doesn't discord require you to use '-' to be url safe?

sharp geyser
#

If it’s a thread than no

#

What type of channel is it

eternal osprey
#

just a channel

sharp geyser
#

Normal text channel?

eternal osprey
#

A voice channel lmao

#

mb haven't been on discord for a long time

sharp geyser
#

Well voice channels can be named however

#

No restrictions on them

eternal osprey
#

love you

sharp geyser
#

Only text channels have restrictions

eternal osprey
#

thanks!

sharp geyser
#

No problem

eternal osprey
#

damnn aaron i didn't recognize you

#

how you doing

warped glacier
#

No idea im assuming?

sharp geyser
#

Sorry

#

I am currently having a issue of my own that I’m dealing with so I’m distracted

eternal osprey
#

np

sharp geyser
eternal osprey
#

he probably doesn't recognize me

sharp geyser
#

From an initial glance everything looks fine

eternal osprey
#

i used to run these streets

sharp geyser
#

I know who you are Mr AI guy

eternal osprey
#

but i took a break

eternal osprey
warped glacier
sharp geyser
#

You can’t use | in text channels no?

pearl trail
#

special char

sharp geyser
#

Ah wait

#

You can I forgot

#

Duhhh

pearl trail
sharp geyser
#

But even then