#🪅-progaming

1 messages · Page 12 of 1

languid tide
#

am i not allowed to rust now

royal nymph
#

yopppp

lavish frigate
#

I don't think so, private visibility modifiers are there for a reason, they are there so you can expect stuff to work. If you set a private property/call a private method it could have very unexpected and breaking side effects and I BET you'd complain about "omg this _method I called changed stuff unexpectedly and now the whole thing imp building broke". If you need to call a private function I personally think that's the library developer fucking up, they should provide a way for you to use the thing you want to use safely

royal nymph
#

there are always reasons one might want to use private library function

#

it's up to the consumer

#

for example Aliucord used a shit ton of private android methods

#

or in a discord bot you might want to manually send gateway messages but the library makes the raw gateway send private

ornate quiver
#

obviously at the cost of no support from the library developer
however you could always block ignoring visibility modifiers in production code

lavish frigate
pearl stagBOT
royal nymph
#

any sane language allows you to access privates if you really know what you're doing

frosty obsidian
#

reflection 🤤

royal nymph
#

meanwhile java, c#, etc allow accessing everything via reflection

in the case of java it's used heavily by android apps, including very popular apps such as the Facebook app

lavish frigate
# ornate quiver the issue with leaving it up the library dev is that they will always keep a min...

But then you can indeed fork the library and change the visibility, knowing it voids all support from the developer. Developers are also users, and we all know a ton of users are idiots
Ive seen people complain about "why does calling _thisMethod break stuff" before, it leads to unexpected codeflow
unexpected codeflow is a whole 'nother issue especially because private methods can be not very well named or documented and then have a _sendGatewayMessage method do stuff like change things on the bot object
but i guess im just coming from a place (rust) that is heavily restricted, everything private by default to remove unexpected codeflow
Forking the library, changing what you want knowingly voiding all original developer support and keeping idiots away is a much better solution imo

royal nymph
#

idiots will be idiots either way

#

worsening experience for smart users because of idiots makes little sense to me

#

the idiot will fork and then ask for support with the fork

frosty obsidian
#

my gateway implementation has no public way to send raw event

ornate quiver
#

yeah pretty much

royal nymph
#

no smart user will use private shit then expect support if things go south

frosty obsidian
#

forced reflection

ionic lake
#

I agree that languages should allow access to privates either way, but should you be entitled to support from library maintainers if they decided to remove said privates which you were using? No

royal nymph
#

nah ofc not

#

private api inherently makes no stability guarantee

#

unless you're Facebook

ionic lake
#

we don't talk about Facebook here

frosty obsidian
#

rusher loves very useful classes and functions being internal in compose

ornate quiver
frosty obsidian
lavish frigate
#

the solution to this problem is to obviously rewrite every single library you use yourself because what are you doing relying on other people smh

ornate quiver
lavish frigate
frosty obsidian
#

compose shit is so nested its insane

ornate quiver
#

nobody knows how the android build system works

#

it's crazy

ornate quiver
#

huge mix of gradle, bazel, makefiles, and some other build system

ionic lake
#

just use python, it has no private methods blobcatcozy

lavish frigate
#

i think the problem is that you are using java that should definitely be close to a death sentence

frosty obsidian
#

just trying to find what text style some component uses usually involves ctrl clicking through several layers

royal nymph
royal nymph
#

the day they rename it Aliucord will break

frosty obsidian
#

aliu breaks every update already

ionic lake
#

aliu is dead

frosty obsidian
#

as of right now it doesn't work on a15

ionic lake
#

for me atleast

royal nymph
#

NOP

royal nymph
#

why not

frosty obsidian
#

although a fix is known

royal nymph
#

must fix..

ionic lake
#

I'm on RN right now

royal nymph
#

tbf why are u on android 15

frosty obsidian
#

its just aliuhook being behind

royal nymph
#

I'm still on 13

royal nymph
frosty obsidian
#

im not on a15

royal nymph
#

fix

ionic lake
#

I already need reduced motion so enabled it and app runs nice

frosty obsidian
#

i just check core dev occasionally

frosty obsidian
royal nymph
#

zt

lavish frigate
# royal nymph secret react internals you are not to use lest you be fired

you see in my personal opinion (which is indeed personal and an opinion) i think react sucks because there is demand for using it and there is apparently no way to safely get the things this provides, but i also just think react sucks in general and we should kill it in favour of svelte and vue

royal nymph
#

the thing is that as a library developer you don't really know everything people need / want

frosty obsidian
#

i think we need a new framework

#

one that has zero problems

royal nymph
#

there'll always be some private thing that people will find useful

frosty obsidian
#

veeue.js

ionic lake
#

we already have many frameworks for each library

royal nymph
#

that's why i think using the new #privates in js libraries is awful

frosty obsidian
royal nymph
#

we've already had the _private contract for so much time and it's perfect

lavish frigate
ionic lake
#

vite + ecosystem api, and implementation for your ui library

#

react devs do know

frosty obsidian
#

wrong

royal nymph
ionic lake
#

it has existed for a decade

frosty obsidian
#

we need yet another way to manage state

royal nymph
#

it makes sense that react doesn't want to expose this for public use

frosty obsidian
#

there are too few ways to handle state

ionic lake
frosty obsidian
royal nymph
#

if you make it part of the public api you need to maintain it, and make a stability guarantee, document it, provide support, etc

ionic lake
#

rxjs is ehhh

royal nymph
#

it's better kept private (but should still be usable by advanced users who know what they're doing)

frosty obsidian
#

i didn't say it was good

#

vee doesn't know what shes doing

royal nymph
#

OBSERVABLES ARE AWFUL

#

KILL OBSERVABLES

#

I have trauma from working with minified observables in Aliucord

frosty obsidian
#

i understood them

lavish frigate
# royal nymph well it's hooking into internal react rendering logic

is it? I mostly see it getting used for wdyrStore.React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner.current, if like everyone wants to use it i see no reason for there not to be like an i guess useReactCurrentOwner() or whatever react does (i have no idea what this even does or thats how react would use it)

frosty obsidian
#

its just worse flows

royal nymph
#

observables kinda suck tbh

#

insane that people ported them to js

#

when promises exist..

ionic lake
#

Promise.resolve(@vending.machine#0000)

#

husk

lavish frigate
#

we need every single component inside its own js shadowrealm.

frosty obsidian
royal nymph
#

terrible

#

why is ur repo so much java

#

did you never bother rewriting stuff in kotlin

#

my repo is like half half

deep mulch
#

wing biggest java fan

frosty obsidian
#

i have a pr that does that but i barely touch

royal nymph
#

wow

#

that's more kotlin than I remembered

deep mulch
#

wait

royal nymph
#

fix themer plugin @deep mulch

deep mulch
#

ignore the java that's cause of protobuf

royal nymph
frosty obsidian
#

i just haven't bothered to rewrite bc its largely stable

royal nymph
#

evil zootie be like

ionic lake
#

protobuffing

deep mulch
#

@ionic lake hiii

ionic lake
#

protobufmaxxing

#

hey

deep mulch
#

protobuf

royal nymph
#

yeah same I only rewrote stuff that I was actively working on

deep mulch
#

I will rewrite everything in kotlin

frosty obsidian
#

i wish protobuf kotlin worked like apollo

lavish frigate
#

wait jetbrains made kotlin

#

?!?!

royal nymph
#

yes

deep mulch
#

yes

frosty obsidian
#

where you can just run a task to generate from proto schema

#

no weird steps

ionic lake
#

one of the great things Jetbrians made

#

another was the font

deep mulch
#

I've noticed some differences in wings behavior which leads me to believe this is not the real wing @royal nymph

frosty obsidian
#

im probably gonna end up making minimal library for dealing with discords settings protos

deep mulch
#

you need to quarantine and remove mod before it tries a takeover

frosty obsidian
#

i become more and more sane and zeet freaks out

deep mulch
#

yes

#

@frosty obsidian I will generate videos using ffmpeg

royal nymph
#

a bit full

frosty obsidian
#

messy

#

women can't do anything right

lavish frigate
#

was steht auf der Tasse...

frosty obsidian
#

smh

royal nymph
deep mulch
#

wing racist

ionic lake
#

wing loves racing

deep mulch
#

@royal nymph did you know

royal nymph
#

what kinda name is grunka

lavish frigate
deep mulch
#

grunka

frosty obsidian
#

caveman

ionic lake
#

grungkah

deep mulch
frosty obsidian
#

zeet honest about how far back he is evolution wise

ionic lake
#

my name is so universal

frosty obsidian
#

taxi machine

deep mulch
ionic lake
#

no matter the accent, everyone says it correctly

deep mulch
#

tax season machine

ionic lake
#

oh noes

frosty obsidian
#

your name Derek

ionic lake
#

no my name is skrillex

deep mulch
#

wing real name Wilhelm

frosty obsidian
#

ill give people my name for $50

deep mulch
#

I know it starts with W or J

frosty obsidian
#

usd

deep mulch
#

Jesus

#

you said you look like Jesus

#

you are Jesus

frosty obsidian
#

i wish

deep mulch
#

mindfortress or silly @frosty obsidian

lavish frigate
#

waluigi

deep mulch
#

maybe

lavish frigate
#

i was wondering why my php code was so slow turns out i was traversing about 600 gb of files just to get the first 100... whoops

autumn sigil
fleet cedar
#

Who even uses php in 2024

lavish frigate
#

Or are you thinking of Python

#

Php has been faster than node since 8.0 iirc

autumn sigil
#

thought it was slower than python even

lavish frigate
lavish frigate
#

I just know php cuz of work anyway I don’t use it at home

autumn sigil
# lavish frigate no lol

hm i dont see any real benchmarks but most of the sources say js is faster except apparently php has good io?

lavish frigate
#

Also php has types so it’s technically better than js (ts excluded)

royal nymph
#

I highly doubt php is faster than nodejs

#

v8 is crazy

lavish frigate
autumn sigil
#

idk man just use rust

lavish frigate
#

That is what I’m already doing at home

royal nymph
#

tbh i just find php super ugly

#

I hate any language that uses $ prefix for variables

#

bash excluded

autumn sigil
#

i hate bash fuck bash kill bash

#

terrible language

royal nymph
#

bash is cute

#

:3

autumn sigil
#

bash is ugly as shit

royal nymph
#

Ich liebe bash

lavish frigate
autumn sigil
lavish frigate
#

EVERY single file has to start with <?php

balmy lintel
lavish frigate
#

Unless you are doing html in your php?? But then you are already past mental insanity

lavish frigate
#

Shiggy blast

#

Falsches gif aber das wirst du sein nachdem ich fertig mit dir bin

sullen tapir
#

deutsch

lavish frigate
# royal nymph v8 is crazy

Okay yeah you are right whoops maybe I was thinking about a different language then but php isn’t slow just extremely ugly and weird

balmy lintel
#

poor php

lavish frigate
#

It was in like 2006

#

It’s not 2006 anymore

dusty moth
#

<span><?= 1+1 ?></span>

lavish frigate
#

It’s now for website backends

#

If you want to render out html using php you use TWIG

winged mantle
#

iirc

#

oh i think i got that mixed up lol

#

i was suprised that python is slower than python

lavish frigate
winged mantle
#

*php

#

😭

#

i just woke up

#

also lewi broke automod and made it timeout 10 mins for space

#

that was distracting

winged mantle
#

python is slower than php that is

winged mantle
#

\x20

runic sundial
blazing haven
#

xd

viscid grove
silver mauve
#

anyone else here using the new theme refresh? just want opinions and thoughts on it

cerulean plover
elder scaffold
#

i wrote my user app in java

pine peak
#

Someone needs to make a multi message delete plugin frfr

viscid grove
cerulean plover
#

shift clicking hold buttons with messagelogger is so good though

dusty moth
#

gmas

pseudo mica
#

Do Discord cdn links expire? Can I just use Discord message links for my plugin or should I store them somewhere else?

ornate quiver
#

cdn links expire after 24h

pseudo mica
fleet cedar
#

Links uploaded after a specific date expire

#

Those before don't I think

ornate quiver
#

yeah

royal nymph
#

no?

royal nymph
#

but the link won't work outside of discord

pseudo mica
#

oh gotcha, thx. Then I'll keep using Discord links

royal nymph
#

so if you try to use the link as an image inside your plugin it won't work

#

only if you send it as a message

pseudo mica
fleet cedar
#

Make a bot that reposts it in a private channel every 24h

pseudo mica
royal nymph
#

50 at a time iirc

fleet cedar
#

But that's less funny

lavish frigate
ornate quiver
#

oh did they increase it

#

i remember when they were first rolling this out it was 24h

#

thats cool

frosty obsidian
#

the link should tell you when it expires

lavish frigate
pseudo mica
#

How do I find actual react component names? React developer tools show me minified names like "d" and "e"

ornate quiver
#

i dont think you can

fleet cedar
#

If they're not in Forms or has an otherwise visible name, just make one up

pseudo mica
#

ok, if I for example want to place a button inside some element how do I reference that element?

#

I've been following the docs half tutorial and this tutorial and I got the gist of it but this is the only thing that confuses me

Gist

GitHub Gist: instantly share code, notes, and snippets.

dusty temple
#

Hellow I had ChatGPT make me a plugin for personal use, can someone check if this plugin would even work?

#

cuz I personally can´t code

ornate quiver
#

try it and see

#

generally ai makes dogshit code

dusty temple
ornate quiver
#

no

royal nymph
#

ai is awful at writing functioning code

dusty temple
# royal nymph it won't work

The thing is Ik this plugin won´t be allowed on regular vencord so I wanna have it for my personal use but ChatGPT can´t tell me how I can activate it for some reason.... there is no plugins folder in my Vencord folder and creating one myself didn´t help either

median root
viscid grove
dusty temple
native spruce
thin canyon
#

oi smart ppl

thin canyon
#

do a yof you happen to know if theres a tool similar to tp_smapi but for acer asipre laptops

#

the closest thing i found was acer-wmi-battery, but that doesnt seem to allow you to set thresholds to start/stop charging

cerulean plover
# cerulean plover
poll_question_text

do we like Java

victor_answer_votes

9

total_votes

19

victor_answer_id

3

victor_answer_text

No

balmy lintel
#

based

cosmic sand
#

Could someone please help me?
I keep getting the error:
The package "fs" wasn't found on the file system but is built into node. Are you trying to bundle
for node? You can use "platform: 'node'" to do that, which will remove this error.
How can I fix this?

fleet cedar
#

Have you considered doing what it says?

median root
dusty moth
cosmic sand
thin canyon
cosmic sand
cosmic sand
dusty moth
#

(haven't tested it though)

cosmic sand
#

im not an idiot

thin canyon
dusty moth
#

let me try enabling that plugin rq

cosmic sand
#

im not on linux either anyway

cosmic sand
cosmic sand
median root
#

it seems to be able to use readFile from fs/promises

cosmic sand
#

Yeah I know the import fs code is IN the native.ts unless thats not what you meant

median root
dusty moth
#

seems to be more like

#

(native/index.ts === native.ts except it can have other modules)

cosmic sand
dusty moth
#

eval("require")("electron") blueless

cosmic sand
median root
#

inside voiceMessages/DesktopRecorder.tsx

cosmic sand
median root
#

tbh i dont understand this too well either im just taking what i understand

cosmic sand
#

nvm i dont think it matters i thought the PluginNative thing was basically like saying its should use node (which it is but i thought it was needed for native.ts as well i think this is needed just for sort of other nodejs files so i dont think i need this)

#

Yep something is weird with my build because I checked if it just happens because of my code/user error but it does it even if i copy other code

#

does anyone know how to fix The package "fs" wasn't found on the file system but is built into node. Are you trying to bundle for node? You can use "platform: 'node'" to do that, which will remove this error. error?

cerulean plover
#

i had this issue and i forgot if i even fixed it

#

it was a different module though

cosmic sand
#

it happens for any node modules not just for fs

median root
cosmic sand
#

try and use wsl to build instead of windows

#

and hope for the best

median root
#

il tell you if i manage to get a working thing too

cosmic sand
#

yep nvm using wsl to build doesnt work either

median root
#

however it has to return something and the bit im looking at does it like this:

#

im working on creating something along those lines too

cosmic sand
royal nymph
#

what in the xy-problem are you guys talking about

median root
royal nymph
#

why

fathom haven
median root
royal nymph
#

that's a security hazard you can't do that

#

ask for help with your actual end goal, not your solution

lavish frigate
# cosmic sand nvm i dont think it matters i thought the PluginNative thing was basically like ...

index.ts/tsx runs inside of electron which is a containered environment (because of course you dont want websites to access your filesystem), native.ts runs on node so you can actually do desktop application stuff, take it as a "front- and backend"
if you need to access the filesystem you make a function in native.ts that does specifically what you want and then call it inside of index.ts

royal nymph
median root
median root
cosmic sand
cosmic sand
lavish frigate
#

for what

royal nymph
#

why do you need to import a json file

#

and why does the user input a path

lavish frigate
#

im sure your goal can be done MUCH better

royal nymph
#

there are web apis for askign for a file

cosmic sand
royal nymph
#

which opens a file open dialog and is safe

lavish frigate
cosmic sand
# lavish frigate for what

im trying to import chats from old accounts (using jsons extracted from discorchatexporter) i know its probably an idiotic idea

cosmic sand
fleet cedar
#

You can make custom settings components, yes

lavish frigate
#

youd just have to make a react component

cosmic sand
#

Right. thanks for your help!

median root
#

wait okay so how would i save something in a folder as I wanna have something that saves an image to a folder somewhere

royal nymph
#

you definitely cant save to arbitrary folders

#

what's the plugin goal

lavish frigate
# royal nymph https://xyproblem.info

I think the entire world would be a much better place if people just "hey im having x problem, y is the goal, z is what i currently get. I have tried a, b, c. Here are some screenshots/logs:"

median root
lavish frigate
#

lazy ass

median root
median root
royal nymph
median root
buoyant trellis
#

it can be any folder
flatpak restrict vencord to accessing only certain dirs, so if you want to disribute it/send pr then you should look at what is whitelisted in flatpak and use one of them

#

also you should path.resolve(path.join(dir, filename)) and check if it is in right dir to make sure something malicious doesn't set filename to sth like ../.. to write files to other place than intended

serene elk
#

unless it also encrypts the http

#

¯_(ツ)_/¯

formal belfry
serene elk
#

that's nice

fallen nebula
#

stupid question, but where does textReplace store the rules ?
i would guess it's not in the settings.json since i can't see it there, so in the storage of discord somewhere ?

fleet cedar
#

DataStore I would presume

pearl stagBOT
fallen nebula
#

mmmmh
i'm gonna try to change that to the settings.json or to another file to be able to easily share it or edit it outside of copy pasting my regexes inside of discord

ornate quiver
#

I'm fairly certain you might be able to export the indexeddb through devtools

fallen nebula
#

tbh i'm very new to JS, electron, react and all that stuff so i'm just dicovering

ornate quiver
#

maybe try and see

royal nymph
fallen nebula
fallen nebula
#

is there an easy way to like automaticall breakpoint once smth read data from a particular store ? (without knowing what is trying to access it obv, otherwise would be way easier)

formal belfry
#

any tips on where do I start on making a plugin

magic shale
autumn sigil
#

i made something cursed

#

made the bundler import css as an instantiated stylesheet and shadowroot to remove the c from css

fallen nebula
#

To be able to understand which function is the one reading and then writing to it to probably patch that function or at least have a starting point where i can explore the function tree to find out stuff i could patch

fallen nebula
#

those are the interesting one i want to dive into

  • GravityStore
  • MyGuildApplicationsStore
  • SystemAnalyticsStore
  • understand why the "token" one has its value start with "dQw4w9WgXcQ" which i instantly noticed is the rickroll
  • InstallationManagerStore
  • hideGuildRaidDetectionNotice
    and probably a few others
fallen nebula
#

also stupid thing, idk if it's possible, but it would be nice to have vencord companion being split into 2 extensions, one being the snippet, and one being the tester, cause since the tester can't be install on GH codespaces, i can't use the snippets

royal nymph
#

sorry but no

#

u can do it urself

supple whale
#

@trail night did u get notarization working on macOS?

trail night
#

i think i did yeah, but a release hasnt been published yet properly

#

should be fixed next rel

supple whale
#

wanna TLDR me on what the different env keys are? looking to copy it

#

sorry for ping, if u dont feel like explaining thats fine too

#
CSC_LINK: ${{ secrets.APPLE_SIGNING_CERT }}
API_KEY: ${{ secrets.APPLE_API_KEY }}
APPLE_API_KEY: apple.p8
APPLE_API_KEY_ID: ${{ secrets.APPLE_API_KEY_ID }}
APPLE_API_ISSUER: ${{ secrets.APPLE_API_ISSUER }}
```those
#

cuz i cant find where to source them

#

i assume signing cert is pretty much obsolete

#

or is simply using APPLE_API_KEY: apple.p8 alone enough?

#

@trail night I assume thats a no?

trail night
#

no

supple whale
#

👍

trail night
#

the API_KEY is the key file

#

the KEY_ID is the ID of the actual certificate

#

the ISSUER is the team ID

#

you need all of these to submit to the API

supple whale
#

vencord paid for a apple developer profile?

trail night
#

i did

#

yes

supple whale
#

damn

#

gg

trail night
#

i have it for unrelated reasons

#

so i just sign vencord with it

supple whale
#

shite

#

kinda dont feel like using my company profile for this ngl

#

oh well

#

fuck notarize

#

no auto update for macOS then

#

thank you for wasting time on me

elder yarrowBOT
low pendant
#

Alrt hanks

rigid apex
#

i can read it???

#

make the text neon lime green

autumn sigil
viscid grove
autumn sigil
fleet cedar
#

What is it?5D Chess With Multiverse Time Travel the first ever chess variant with spatial, temporal, and parallel dimensions. It's the first ever chess variant with multiverse time travel!Features Sharpen your tactics by solving a collection of multiverse chess puzzles. Practice against four different AI personalities, each with different streng...

Price

$11.99

Recommendations

6612

▶ Play video
lavish frigate
#

is that real

fleet cedar
#

It's for subtitles or something

atomic brook
supple whale
# autumn sigil

you style future styles...?
which you will never see, because by the time they appear....?
they are current
not future
??????

atomic brook
#

You can also style past

sullen tapir
#

and present

fallen nebula
#

anyone could explain to me why some css work in vencord quickcss, but not in openasar theming ?
the &:: stuff is getting me errors with openasar
also i'm using openasar theming instead of quickcss from vencord cause at the caveat of needing a client reload to apply, it seems more performant

fallen nebula
#

nvm openasar doesn't like nested css it seems like

stoic helm
#

does it just error in the editor, or does it not apply at all?

#

they might need to update their monaco

#

also theres no way to make applying a theme "more performant"

#

all it does is add the css to the head of discord

fallen nebula
fallen nebula
#

maybe it's just placebo tho idk

final night
# autumn sigil

They are adding time travel to css

Only works with computers equipped with GPUs that have quantum acceleration like the 50 series of RTX GPUs

Works like :hover but instead targets what the user will interact with next

#

-# ||or maybe its something with subtitles, idk||

worldly sigil
#

i'm guessing its so you can match subtitles like

[this subtitle is in the past] -- matches `:past`
[this is the current subtitle] -- matches `:current`
[next subtitle line not shown] -- matches `:future`
fallen nebula
#

stupid question, but for the css how much deep is it worth going ?
like if i only have one [class*=<stuff>] that work, i mean it's good and if discord move it around it has a low risk of breaking, but i would guess that for the CSS to be applied the thing has to search what i target so it's maybe slower and also it has a higher risk of having a side-effect i didn't noticed ?
but then if i go like full path to the element it will point at it directly and make it faster maybe, but it mean if discord change one thing, it break
so what would be the "best" way to make the CSS ? always go for the more minimalist approach, try to just go as hard as possible or some point in between the 2 ?

final night
fallen nebula
#

also is there maybe a tool to see to what a specific html element a CSS rule is applied to ?
it would probably help me discover the thing i modify accidentally

final night
#

Or document.querySelectorAll('selector')

fallen nebula
fallen nebula
final night
#

In general just make sure it feels specific enough

fallen nebula
#

i try to make it specific enough to only match what i want, but lax enough so that if discord decide to mess around it has some chance of not breaking

final night
#

Discord will always break your css

fallen nebula
#

😢

fallen nebula
final night
fallen nebula
#

interesting

#

yoink this is mine now UwU

fallen nebula
#

ok there is this weird effect going on the more specialized my selector is, the worst it perform
it's like the opposite of what i think would happen

fleet cedar
#

More for it to check I guess

#

I'm pretty sure querySelectorAll performance is quite different from styling performance though — qSA is "which elements match this selector" while styling is "which selectors does this element match"

fallen nebula
#

mmmmmmm

#

based on what it show me in the quickcss i would expect it to match, but it seems like it doesn't when i use ^^ but it does when i do ^* why is that ?

fleet cedar
#

Because the class attribute here doesn't start with bottomRowActionDisabled

#

In the first place having two attribute-starts-with on the same attribute is kind of silly

fallen nebula
#

well the quickcss show me this
<element class="bottomRowAction… bottomRowActionDisabled…">
<div class="bottomRowAction_d936aa bottomRowActionDisabled_d936aa" ...>
seems to match that format

fallen nebula
fleet cedar
#

bottomRowActionDisabled is not at the beginning of the string

fallen nebula
#

mmmmmmh

serene elk
#

the string is bottomRowAction_d936aa bottomRowActionDisabled_d936aa

#

and bottomRowActionDisabled is not at the start

fallen nebula
#

so each thing reevaluate separately unlike what the quickcss tooltip show

fleet cedar
#

What quickcss tooltip

fallen nebula
#

i thought when you did [][] it combined in some sort or regex/match/etc

fleet cedar
#

Hm

fleet cedar
#

Which, unless one is a prefix of the other (as is the case here) will of course never match anything ever

fallen nebula
#

i see

#

now that i dig more into it CSS is way more advanced that i had imagined

autumn sigil
gray heron
#

@naive bane hai i was told to ping u
is there a way to replace a cursor state with an image just with css? i tried a bunch of stuff but it never fully replaces the pointer for all interactions

native spruce
gray heron
fleet cedar
#

If you mean replace all cursor: pointer with a custom image, then no, nothing automated

#

You'd have to find every rule that sets cursor: pointer and change it manually

gray heron
#

damnit that would take forever

#

i tried with stuff like

a, button, input[type="button"], input[type="submit"], input[type="reset"], [role="button"], .custom-pointer {
  cursor: url('./theme-resources/select.png'), pointer;
} 
``` but that didnt work for like half of them, it seems some just change it back even if i set if to certain divs entirely they just change to the normal pointer
#

i'm trying to make it work for stylish and vencord respectively so that it can be applicable to molst websites for all interactable objects and divs etc

#

(stylish as in the chrome plugin)

mild yoke
native spruce
#

why is that so fast

#

discord cant compete

mild yoke
fallen nebula
mild yoke
#

All loaded on the fly

mild yoke
#

Think of the bloat

native spruce
frosty obsidian
#

all

mild yoke
#

yeah it works on most everything

#

not tested on iOS and MacOS since I don't have an iphone or macbook

native spruce
#

its so fast

mild yoke
#

there is a MacOS build in github actions, and it does compile, so that's something

mild yoke
native spruce
#

makes the normal discord app look so slow

mild yoke
#

of course I have other targets in development, but speed is one of them

#

it's super nice on older devices as well

frosty obsidian
#

weird what happens when you don't use react with 4 billion frameworks

mild yoke
#

truee

#

although a lot of discord's iffyness is actually the codebase and not the framework

#

but I'm sure a lot of the performance could come from react native / js stuff depending on the platform

frosty obsidian
#

the analytics don't help

mild yoke
#

they just do some questionable stuff

#

here's a good one- ever notice that delay when clicking on guilds on the mobile app?

deep mulch
#

@frosty obsidian

mild yoke
#

I think they wait for a network request to show the view, so it feels like shit

frosty obsidian
#

my client will probably be a bit faster than yours on android due to not needing any sort of bridge or interop

mild yoke
#

it doesn't need a bridge

#

mmmm that might not be true

frosty obsidian
#

does it just compile to java or something

mild yoke
#

It compiles natively

deep mulch
#

wing why did idea freeze

frosty obsidian
#

i haven't used dart

deep mulch
#

i tried dart and hated it

mild yoke
#

I think it compiles to native objects

#

so it's not java

#

the only transpilation that really occurs is when compiling to web when not using WASM

#

which goes to JS

frosty obsidian
#

oh neat

mild yoke
#

but it has been noted that yes, native apps are generally faster across the board, although not by a ton

frosty obsidian
deep mulch
#

huge

mild yoke
#

ah yeah

frosty obsidian
#

not much clearly

mild yoke
#

w/e?

frosty obsidian
#

whatever

mild yoke
#

ah

#

yeah it's not a ton, but for max performance it's still best to go native

frosty obsidian
#

im not really using compose just because its native though

#

its just what i know

mild yoke
#

ah

#

yeah I started using flutter for school stuff and it's just nice idk

#

super good packages, I like dart, it's fast, the tooling is great, cross-compilation to all platforms is a super cool bonus, etc

#

job market sucks, but I haven't really been looking since I'm just outta high school

frosty obsidian
#

compose is also cross platform but its just not quite there yet for all platforms

mild yoke
#

what platforms?

frosty obsidian
#

ios, android, desktop, web

mild yoke
#

oh wow

frosty obsidian
#

desktop support is pretty bad rn

#

web is experimental last i checked

mild yoke
#

is there a good web demo?

frosty obsidian
#

the only site i know that uses it is zeets

#

but his isn't a great example bc its not interactive

mild yoke
#

zeets?

deep mulch
#

it uses compose html

#

it adheres very closely to html

frosty obsidian
#

web is in alpha

deep mulch
#

the wasm api is true compose

frosty obsidian
#

ios is in beta

deep mulch
#

it renders to a canvas

mild yoke
#

yeah that's where flutter is kind of at

frosty obsidian
#

desktop and android are the only stable ones

mild yoke
#

I wanna do WASM but a few of the libraries I use don't really support it because of careless importing

frosty obsidian
#

although i think ios support is production ready

deep mulch
frosty obsidian
#

i just really wish desktop support didn't create incredibly bloated binarys

mild yoke
frosty obsidian
#

gloom desktop was 200mb

deep mulch
#

you can massively reduce the size by specifying the modules and running proguard

#

default includes every module

frosty obsidian
#

i specified the modules

deep mulch
#

did you enable proguard

frosty obsidian
#

maybe

#

i don't rember

deep mulch
#

fix

frosty obsidian
#

its still not great for other reasons

royal nymph
#

you can make well performing rn / electron apps

frosty obsidian
#

like how you can't customize the installer

deep mulch
#

thats not really compose desktop fault

#

thats the gradle plugin

#

by jb

mild yoke
# royal nymph all of it xd

I mean there's some jank / performance issues that I see across all electron apps, but discord just adds their own spice lmfao

frosty obsidian
#

same dev

deep mulch
royal nymph
#

name one jank or performance issue in vscode

deep mulch
#

conveyor makes much better packaging

frosty obsidian
#

i really just needed an installer that could do registry stuff

royal nymph
mild yoke
deep mulch
royal nymph
#

are u running a potato from 2003

mild yoke
#

compared to native yeah

#

when indexing large project vscode struggles much more than something like zed

#

not that electron isn't capable, it's just issues I notice, that's all

royal nymph
#

zed is the only example that's faster

mild yoke
#

zed is native, that's why I'm comparing it

#

you asked what issues are caused by electron, those are the issues I notice

#

sorry if you disagree with what I notice lmfao

deep mulch
#

@frosty obsidian i think graalvm helps with compose desktop im gonna test

royal nymph
#

also idk what state loss issues whatever that's supposed to mean has to do with electron

#

happens in so many apps 😭

#

state management is hard

mild yoke
#

that's jank I see with electron apps more. Why? Unsure. but I do.

frosty obsidian
#

just save state to disk every single frame

#

impossible to lose

mild yoke
#

in any case, electron is important, I just definitely notice the jank, and it isn't only bad discord coding

deep mulch
mild yoke
royal nymph
#

anyway that's besides the point, discord could perform well with electron if their code was better

mild yoke
#

me when I writefile for inter-process communication

royal nymph
#

vscode performance is excellent

frosty obsidian
#

guhhub desktop

royal nymph
royal nymph
frosty obsidian
royal nymph
#

Central store handling thousands of events...

#

scary

frosty obsidian
#

they probably can't do much about that

#

their only alternative is probably rxjs

mild yoke
#

I've never heard of this, this is interesting

royal nymph
#

among other things

royal nymph
frosty obsidian
#

most of their state is flux based

royal nymph
#

Google Facebook flux and you'll find it

mild yoke
#

I actually don't know a lot about discord's client internals despite dealing with the user api a lot

royal nymph
#

there's a central flux dispatcher which handles subscriptions and the events

deep mulch
#

wing works for discord

royal nymph
#

then there are flux stores which are stores for all data discord needs

mild yoke
#

oh yeah that's fine

royal nymph
#

each flux store has its own subscriptions

#

and the gateway and many other things dispatch flux events

mild yoke
#

so there's the primary dispatch, then each flux subscription individually listens to a seperate bit of the gateway dispatch?

royal nymph
#

so when a user updates, it dispatches USER_UPDATE which then notifies the UserStore which updates its data and notifies ui components that are subscribed to the UserStore

royal nymph
#

there's one single central dispatcher

#

all events go through that one central handler

frosty obsidian
#

discord has to manage a lot of state

mild yoke
#

okay yeah I got that

frosty obsidian
#

so many things updating all the time

#

and nearly all of it has to be cached

royal nymph
#

I imagine that that might be a big bottleneck

#

pretty sure Events are dispatched consecutively

mild yoke
#

I... don't think so?

#

That's what I do

#

I handle events in a single gateway parser and there's a lot, but not that many

royal nymph
#

that's normal yes

frosty obsidian
#

theres a lot more when you subscribe to guilds and junk

mild yoke
#

yeah I have that already

royal nymph
#

but you don't have one central handler that handles thousands of events and hundreds if not thousands of subscriptions

mild yoke
#

opcode 37 stuff

mild yoke
frosty obsidian
#

but it also depends on how many servers you're in

royal nymph
#

there aren't thousands of gateway events

deep mulch
#

wing

mild yoke
#

Not unique no

frosty obsidian
mild yoke
#

When you say thousands of events, what are you referring to?

royal nymph
#

the entire app uses events for everything

mild yoke
#

yeah that's normal

royal nymph
#

gateway events are only a minor subset

#

I don't think you've checked how fucking long that line is

frosty obsidian
royal nymph
#

it's 50kb

#

of just event names

mild yoke
#

yeah that's not that crazy

#

these events aren't processed at high volume

royal nymph
#

yes they are

frosty obsidian
#

not having to care about analytics will help us greatly

mild yoke
#

high count of events does not equal high total volume

mild yoke
frosty obsidian
#

we don't have to report every single thing the user does

#

the official client does

deep mulch
#

wing secretly works for discord

mild yoke
#

the settings api would be more of a bandwidth thing than a performance thing

frosty obsidian
#

eh not really

#

its compressed

mild yoke
#

but like, I doubt a settings call is gonna hurt your frame times lol

frosty obsidian
#

the problematic payloads are ready and ready supplemental

royal nymph
mild yoke
#

like idk I don't really see that much of a problem with discord's event stuff

royal nymph
mild yoke
#

I already do guild subscriptions and process nearly every user event type and it's not super expensive

#

the expensive bit is content rendering

frosty obsidian
#

kotlinx serialization is already very fast

royal nymph
frosty obsidian
#

ill move to zstd at some future date

royal nymph
#

you know how discord kotlin has this deranged manual json parser where the entire app broke when they changed the order of fields once

#

I wonder if that was cause of performance gains on potato phones

frosty obsidian
#

the zlib stuff is probably the biggest bottleneck and even then its not by much

mild yoke
#

discord is actually so bad on older phone

#

I might benchmark my app vs discord

#

but holy smokes

royal nymph
#

discord kotlin isn't

#

only RN

mild yoke
#

yeah

royal nymph
#

it's no wonder

#

their js is even laggy on good desktops

royal nymph
#

even worse on bad phones

frosty obsidian
#

they use gson for the actual data

mild yoke
#

I downloaded the legacy client, and I'll say that it's way stranger than I remember

#

very fast

#

but strange

frosty obsidian
#

and gson doesn't care about order

#

even discord kt is innefficient in certain areas

#

my phone always gets warmer when i open discord

royal nymph
#

that's the crypto miner I hid in Aliucord

#

don't mind it

frosty obsidian
#

i have no idea how I'm gonna do caching yet

royal nymph
#

code

frosty obsidian
#

my choice is compressed json or roomdb

#

both have their own challenges

royal nymph
#

roomdb

#

horror

#

do u mean like runtime caching of data structures

mild yoke
#

oh god I did something terrible for caching

frosty obsidian
#

lots of stuff needs to be cached in memory and on disk

mild yoke
#

I made a required readonly value for every network object's json recieved from the network

#

so you just cache from the original value, since there isn't any changes over it's lifecycle

frosty obsidian
#

stuff does change pretty frequently though

#

messages get deleted and edited, people change their profiles, presence is a thing

#

and a lot of data structures will only give you an id and not the actual object

#

discords api is designed around aggressive cacheing

royal nymph
#

Eric why stop at a custom frontend

#

when are you making a custom backend too

frosty obsidian
#

insane

#

fosscord 2

mild yoke
#

I actually do have mockups of an app I might develop with a few friends at uni

frosty obsidian
#
private suspend fun listen() {
    wsSession.incoming
        .receiveAsFlow()
        .buffer(Channel.UNLIMITED)
        .map { frame ->
            frame.parseAsText(inflater)?.let { str ->
                try {
                    json.decodeFromString<GatewayPayload<JsonElement>>(str)
                        .also(::logIncomingPayload)
                } catch (e: Exception) {
                    Log.d("Gateway", "Failed to decode payload", e)
                    null
                }
            }
        }
        .filterNotNull()
        .collect { payload ->
            if (payload.sequence != null)
                sequence = payload.sequence

            when (payload.opCode) {
                OpCode.Dispatch -> handleDispatch(payload)
                OpCode.Reconnect -> handleReconnect()
                OpCode.Heartbeat -> handleHeartbeat()
                OpCode.Hello -> handleHello(payload)
                OpCode.InvalidSession -> handleInvalidSession(payload)
                OpCode.HeartbeatACK -> handleHeartbeatAck()
                else -> {}
            }
        }
}
#

processing gateway so easy

#

@mild yoke do you log the trace(s)

#

just curious

mild yoke
frosty obsidian
#

the _trace property

mild yoke
#

don't think so

frosty obsidian
#

sent in the ready, hello, and resumed payloads

#

i can share my code if you'd like to

mild yoke
#

erm sure

frosty obsidian
#

maybe it could be translated to dart

mild yoke
#

I mean maybe

#

I made a fork of a bot library

frosty obsidian
#
/**
 * Logs the `_trace` property sent in the Resumed, Ready events and the Hello payload
 *
 * @see buildTrace
 */
// TODO: Make extension function one proper Logger is created
internal fun logTrace(trace: String) {
    val parsedTrace = Json.decodeFromString<List<JsonElement>>(trace)
    Log.d("Gateway", buildString { buildTrace(parsedTrace) })
}

/**
 * Assembles the `_trace` property sent in the Resumed, Ready events and the Hello payload
 * into a readable format for logging
 *
 * Should produce something resembling the following output:
 * 
 * gateway-prd-us-east1-d-dkmp: 266.217ms
 * |    id_created: 0.914ms
 * |    session_lookup_time: 0.273ms
 * |    session_lookup_finished: 0.023ms
 * |    discord-sessions-prd-1-132: 260.845ms
 * |    |    start_session: 154.152ms
 * |    |    starting_guild_connect: 0.078ms
 * |    |    presence_started: 0.247ms
 * |    |    guilds_started: 0.428ms
 * |    |    guilds_connect: 102.282ms
 * |    |    presence_connect: 0.002ms
 * |    |    connect_finished: 102.629ms
 * |    |    build_ready: 1.845ms
 * |    |    clean_ready: 0.002ms
 * |    |    optimize_ready: 1.419ms
 * |    |    split_ready: 0.039ms
 * 
 */
private fun StringBuilder.buildTrace(trace: List<JsonElement>, level: Int = 0) {
    trace
        .chunked(2) { (name, data) ->
            name.jsonPrimitive.content to Json.decodeFromJsonElement<TraceData>(data)
        }
        .forEach { (name, data) ->
            val prefix = "|    ".repeat(level)
            appendLine("$prefix$name: ${data.micros / 1000f}ms")
            if (data.calls != null) buildTrace(data.calls, level + 1)
        }
}
#

guh the code has codeblock formatting

mild yoke
#

ah okay that's interesting

#

may use it in the future ig, it seems nice

frosty obsidian
#

the _trace property is weird

#

its something that can really only exist in js/ts

mild yoke
#

at the moment I'm going full speed on major features, and I'm leaving a lot of "best practices" behind until I need them- this appears to be one of those things

frosty obsidian
#

a mixed array

mild yoke
#

although this would be nice since I'd like to monitor the performance of my CORS proxy

frosty obsidian
#

i haven't found it actually useful yet but dolfies asked me to try logging it so i did

mild yoke
#

feels like more of a backend utility

frosty obsidian
#

yeah i wouldn't call it necessary

#

just neat

deep mulch
#

@frosty obsidian real name Ling

#

dumb windows

#

won't add to bootloader

ornate quiver
#

corrupted moment

frosty obsidian
#

yeah

ornate quiver
#

also it would be a waste of memory

#

basically no point

frosty obsidian
#

thats why i said both have challenges

#

with room I'd have to write migrations quite often

#

annoying

#

and entities being mostly duplicates of the api models

#

and I'd probably have to write the domain models that'd actually end up used in the ui

autumn sigil
#

if youre updating the app might as well kill cache

#

erm why is my phone 40 degrees

fallen nebula
#

i have an issue
quickcss doesn't like my 165MB of custom CSS
all i'm trying to do is play bad apple 😭

grand garnet
#

Yeah no shit use an external editor instead

fallen nebula
ionic lake
#

why the fuck do you have 165mb of custom css

#

that is next level unhinged

viscid grove
fallen nebula
#

but in css

#

it's just like 300k lines

fallen nebula
#

is there a way to hide the spans like that ? <span>\n</span> (\n i the actual linefeed character, not the characters \ and n)

#

i tried this, but it doesn't work

span:blank
{
    display: none !important; /* Prevent display */
}
fallen nebula
ornate quiver
fallen nebula
tribal jungle
fleet cedar
fallen nebula
fleet cedar
#

I never said anything about css

fallen nebula
lavish frigate
#

what are you even trying to do

fallen nebula
fallen nebula
fleet cedar
lavish frigate
#

what is your end goal

fallen nebula
# lavish frigate for what

So that the fact they send F up data doesn't break how it look
Because they send hundred of new lines, well it create hundred of span with new lines that affect how the app look

#

Here it's in the user profile
It create a long empty user profile
Which because i want to uncap to see the user bio, create a mess
(it's also an issue for vanilla discord if you open the extended user profile thing, but because i go there less i wasn't annoyed by it too much)

lavish frigate
#

what are you trying to accomplish though, what are you doing this for

#

what is your result

#

because it very much sounds that what you are doing now is incredibly unnecessary

fallen nebula
#

I want user profiles to not be F up
I want all the trailing whitespaces to be removed

#

If you wait a bit i'll send a screenshot of what i mean

fallen nebula
royal nymph
#

you don't need to overwrite any http responses for that

#

just change what's rendered

fallen nebula
#

i don't have knowledge on how to do that

#

like i don't know where to start

fallen nebula
#

🤦‍♂️

#

i'm pretty sure if i want to replace the response i just have to dig a bit into the electron protocol API and register a handler or an intercept or smth like that and then it's just a case of checking whether it's an URL i want to handle or not and if it's good then do whatever i want to do on the response then give it back or smth
could probably do it with mitmproxy or smth if i didn't want to bother with electron and injecting into discord, but if i manage to do it inside of discord it's gonna be nicer
and sure maybe there's a cleaner way by changing smth else, but while i do have knowledge about how networking work and hacking stuff around it, i don't really know how the rest of discord work
i know a bit of html, js and css, but like only very basic stuff

fallen nebula
#

ok sure, how do i do it in another way

potent cloud
fallen nebula
#

yes, but how

potent cloud
#

make a plugin

#

and patch

fallen nebula
#

The ability to understand code from just reading it, without requiring documentation
🤣 at least i could half-ass betterdiscord plugins because they had extensive docs

  • thanks for telling me to read the basic vencord docs, but i've alr done that
    when i mean how, i mean could you explain the basics on how to do it
    like even pointing me at an example in the vencord repo would be more useful
    but i guess i'll search
royal nymph
#

there are more than a hundred plugins for you to look at

solid sleet
fallen nebula
royal nymph
#

a lot of them

fallen nebula
#

ig i'm in for a reading session

balmy lintel
#

only for the small popout though, not for the big one

formal belfry
#

can anyone give me a snippet to add a button to the message box? i have an idea for a message scheduler

balmy lintel
#

look at silent typing plugin

#

or translate plugin

fleet cedar
#

Or timestamp thingy, or message preview

#

Plenty of options

fallen nebula
green gulch
#

One of my first full projects using typescript

#

If anyone has feedback on this it would be appreciated

#

that reaction doesnt seem like good feedback ngl

ornate quiver
#

that's cause the concept is cursed asf

green gulch
#

i know

ornate quiver
#

cool though

green gulch
#

I mean it works lol

#

I have a way more cursed idea im working on

formal belfry
#

im attempting to simulate the user pressing enter inside the chat box to send a message but its not working. any reasons as to why?

const handleSend = () => {
        const textarea = document.querySelector("textarea");
        if (textarea) {
            const message = (textarea as HTMLTextAreaElement).value;
            if (message.trim() !== "") {
                (textarea as HTMLTextAreaElement).value = "";
                const inputEvent = new InputEvent("input", { bubbles: true });
                textarea.dispatchEvent(inputEvent);
                const sendEvent = new KeyboardEvent("keydown", { key: "Enter", bubbles: true });
                textarea.dispatchEvent(sendEvent);
            }
        }
    };
royal nymph
#

don't do that

#
import { sendMessage } from "@util/discord"
#

don't do hacky Dom stuff

formal belfry
#

😔

#

i guess i should ask if theres documentation?

#

nvm found it

formal belfry
mild yoke
#

Like they are starting to delete files

viscid grove
mild yoke
viscid grove
#

really?
that seems weird?

#

Can i see your source?

mild yoke
#

Not really. Hosting websites is expensive.

#

Sure

mild yoke
viscid grove
#

that's not about deleting them
it's about needing the key to access them outside of discord

#
https://cdn.discordapp.com/attachments/1223973149222375536/1270948500879835148/2024-08-07_19.png?ex=66b58e87&is=66b43d07&hm=d5096522f107debd7b6e3aa4be5d97af962e8fe64243b1f7aa95f7fd2b18feb7&```
#

and that's not even new anymore?

#

and they can still be accessed on discord without the credential stuff

viscid grove
# green gulch https://discord-storage-beryl.vercel.app/ funne

Is that inspired by this video?
https://youtu.be/c_arQ-6ElYI

How I'm storing hundreds of gigabytes of files on Discord, for free! I wrote a server in NodeJS and a frontend in React that lets me upload any file of any size to Discord, then download it later. Works great! And even hides tax evasion evidence from the IRS!

Don't do this yourself, I didn't actually read Discord TOS but if I had I'm pretty sur...

▶ Play video
green gulch
#

Seems to be less functional than mine though

green gulch
#

The bot uploads data about the file then the chunks so they are identifiable

green gulch
#

It was inspired by a conversation I had with my friend

deep mulch
#

@royal nymph @royal nymph sleep

fallow jasper
cerulean plover
#

both of your solutions to the "discord channel as file storage" have pros and cons tbh

fallow jasper
#

what are my cons

cerulean plover
#

from what I can tell, you only do local metadata storage

green gulch
#

for discord specifically

cerulean plover
fallow jasper
cerulean plover
#

wtf are you doing

#

how cursed is it

green gulch
#

do you store file urls locally

fallow jasper
#

it stores one inode locally, which points to an inode stored in one of the buckets and then it is a root directory, which stores pointers to other inodes for files and directories

cerulean plover
#

oh

#

that is actually

#

quite smart

fallow jasper
#

pointer basically specifies which bucket and then has some identifier like message id for discord

green gulch
#

mine just uses discord bot

#

and metadata in a message

fallow jasper
#

mine uses webhooks

#

cuz you can make a lot of them easier

cerulean plover
#

i was wondering how tf it works

cerulean plover
fallow jasper
#

webhooks can create edit read and write so basically everything

royal nymph
#

how does it work with expiring links

viscid grove
#

webhooks can read?

green gulch
#

does the links expire

cerulean plover
fallow jasper
fallow jasper
royal nymph
#

I didnt know this exists

green gulch
#

oh huh

cerulean plover
#

you just track history yourself it seems

fallow jasper
#

i dont need to track history

#

i have pointers in inodes

cerulean plover
#

shhh thats kinda what I mean guhhh

fallow jasper
#

this way one file can be even split between discord and github

cerulean plover
#

do you edit messages to point to other inodes

fallow jasper
#

if i add new file for example, yes

royal nymph
#

you should emulate a real file system on discord

where you can have folders, file metadata & history, permissions and different users

#

do

cerulean plover
royal nymph
lavish frigate
fallow jasper
cerulean plover
#

discord fuse driver trolley

green gulch
#

that would be insanely cursed

fallow jasper
green gulch
#

download speeds 📉

cerulean plover
#

because you cant find when something was changed