#👾-core-development

1 messages · Page 273 of 1

austere talon
#

why did bro make this a pr

#

lmfao

#

lmaooo

#

it's got a point but these are fine

charred monolithBOT
austere talon
#

the prototype pollution aspect it brought up is actually true

#

settings sync is indeed vulnerable to it

#

it's not really a bad vulnerability (since I doubt it can be exploited in a meaningful way, plus the attacker needs to have access to your vencloud safe aka have access to your discord account or be us) but should still be fixed

turbid hatch
charred monolithBOT
#

I have created a plugin that lets you set an expiration time for your messages. It supports exclusions for DMs (all), channel ids, guild ids. It has different options such as editing the message before deleting, getting notified for messages that have been deleted, forceful cleanup of message queue.

It also has handy slash commands that let you add exclusion directly from the channel/guild you are in.

When this plugin is toggled or the user forcefully flushes the message queue, it may m...

#

<img width="1256" height="308" alt="image" src="https://github.com/user-attachments/assets/6c78b196-b43d-4336-b653-af6c44d8450b" />
:thinking:

Do let me know if you think such plugin can be implemented (especially with proper rate limiting). My ideal scenario is that in the end, you would have some counter in the UI that tells you something like "Messages waiting to expire: x" and when you disable the script/forcefully delete everything, it would batch it in groups of 10-20. :+1:

gritty iris
#

isTryItOutFlow -> isTryItOut is the only difference I saw and its not stable compat because of it

odd heath
gritty iris
odd heath
#

its a findbycode not a findbyprops

#

as long as it matches the code it wouldnt matter if isTryItOut specifically is used in the match

#

thats all i said blobcatcozy

#

it doesnt need to be stable compat anyway its just a plugin

gritty iris
#

or are you saying have both?

odd heath
#

OH

#

im stupid

#

as always

odd heath
gritty iris
#

also wym more places that use git hash? all I see thats using it right now is
HashLink (img above)
Updater both for fetching/checking for updates and calculating changes
SupportHelper for the full commit link

dusk blaze
#

why

#

useless

#

i could // @ts-check

#

because @ts-pmo

#

Paigr 2

#

Wipaigr 2

charred monolithBOT
#

Ports most of Vencord/Vesktop#1198 into a plugin.

The native Wayland module still remains in the original Vesktop PR due to Vencord apparently not being able to load native node modules, so if this is merged the old PR needs a quick tidyup to remove its old implementation and instead just add the wayland-protocols package to enable Wayland compatibility.

Still mostly untested, even more so since it's been ported. Tested on NixOS 25.11 unstable with hyprland 0.51.1.

charred monolithBOT
limber skiff
#

1 week later and I have no idea what UI breaking things nino is referring to in known issues

austere talon
#

I told you he's insane

limber skiff
#

there's nothing to be fixed? 😭

glass jasper
#

Idk he is insane

#

There is also desktop-land-and-learn breaking pin DMs

#

But thats a small number of people who have that

charred monolithBOT
limber skiff
#

vtest

nimble pendantBOT
nimble pendantBOT
# limber skiff vtest
Slow Patches

TypingTweaks (took 7.1ms):
ID: 738619
Match: ```
/(?<="aria-atomic":!0,children:)\i/

Bad Webpack Finds
findComponentByCode("isTryItOut:", "pendingThemeColors:", "pendingAvatarDecoration:", "EDIT_PROFILE_BANNER")
nimble pendantBOT
glass jasper
#

vext

nimble pendantBOT
limber skiff
#

no tag pushed

austere talon
#

oop

charred monolithBOT
austere talon
#

vtest dev

nimble pendantBOT
charred monolithBOT
nimble pendantBOT
nimble pendantBOT
charred monolithBOT
#
[Vendicated/Vencord] New tag created: v1.13.5
charred monolithBOT
charred monolithBOT
scenic brook
#

Pretty sure using a bot token in a client is just as frowned upon as self botting

gritty iris
charred monolithBOT
turbid hatch
#

i like keeping my prs up to date

#

:3

gritty iris
#

when translation v6?

turbid hatch
#

never

gritty iris
turbid hatch
#

v3 is my magnum opus

gritty iris
#

v3.1 prayingcar

charred monolithBOT
turbid hatch
#

tbh i kinda remember why i did it like that but its no longer necessary

#

especially since i can just set the loadedLocale to default to english, so there's always a loaded bundle

dusk blaze
#

i should actually look at that review

#

@austere talon how should that safe mode be triggered on web?

#

and what if Settings explodes

#

discord will still explode yk

fossil inlet
#

isnt it just using local storage

dusk blaze
#

the patches

charred monolithBOT
charred monolithBOT
hollow musk
charred monolithBOT
chrome coral
#

Is it me or do I just not trust anything that has the commit name “Add files via upload” in it

dusk blaze
#

they don’t know how to use git so they probably made with ChatGpt and uploaded

dusk blaze
#

/**

  • Vencord Plugin: Bulk Channel Delete
  • @name BulkChannelDelete
  • @description Multi-select and delete multiple Discord channels at once with Shift + Right Click
  • @author YourName
  • @version 1.0.1
  • ⚠️ WARNING: This plugin can permanently delete channels. Use with extreme caution!
    • Deleted channels CANNOT be recovered
    • This may violate Discord's Terms of Service
    • Use only in servers where you have proper authorization
    • The author is not responsible for any consequences of using this plugin
      */
#

okay this is vibe coded

pure hinge
still maple
mossy notch
gritty iris
#

we love discords ui choices

scenic brook
#

I think the adblock plugin is causing some issues, it seems to spam some sort of module crash log in the native console when you play a video and each time you click another youtube embed the log gets longer and longer and discord gets more and more laggy

#

It seems like the log contains the other logs as it gets ridiculously more escaped lol

night creek
gritty iris
#

like 8 clicks and it died

scenic brook
#

Yeah it stacks fast lol, the logs look ridiculous at that point, just a screen full of backslashes

gritty iris
#

my discord wont even open now

#

voice just went missing

#

then it crashed

#

instantly 3gb used again

#

not even loading anything

scenic brook
#

A full restart sorts it for me

gritty iris
turbid hatch
gritty iris
gritty iris
#

the 3gb is from doing it before

turbid hatch
#

where's that hiddenCSS one coming from?

#

i tried looking for it but cant find a ref to it in (at least my) client source

gritty iris
scenic brook
#

adguard

scenic brook
turbid hatch
# scenic brook adguard

hmm i kinda knew this much, but im trying to work out whats specifically saying hiddenCSS has already been declared since it should be scoped

#

unless it is that

scenic brook
#

Yeah I clicked the console error to jump to that

turbid hatch
#

hm okay

#

so that snippet probably has stopped working then

#

since its constantly rerunning in the iframe context

#

CR: hiddenCSS redefinition issue, not the loop though

#

latest canary

turbid hatch
#

fwiw from what i can see no lol

scenic brook
#

Nah it happens in the native console

#

You have to run from command line to see

turbid hatch
#

can u dm me it

#

i cant replicate it so anything helps

scenic brook
#

Sent

#

I don't think that recording had my email anyway, must've been an earlier one but better safe than sorry

turbid hatch
#

i have no interest in leaking ur info so ur secrets r safe with me

#

agh that is a very deeply nested json structure

#

hm interesting ok so it seems to eventually play the video

scenic brook
#

Yeah I think each log is containing the previous one as a string

turbid hatch
#

yeah it seems to

scenic brook
#

The videos play, it just gets slower and slower

turbid hatch
#

can you check the dir it references, %appdata%/discordptb/module_data/crashlogs

#

you are right though it is def logging the prev one in the object

#

idk if im chasing a dead end but its worth trying to investigate anything in there

scenic brook
#

Just log files with the same content as the console

#

The last one before it causes a crash is 121mb lol

turbid hatch
#

hm okay not very useful then

#

tbh the logs arent really that helpful either lol

scenic brook
#

fwiw it's logged as a sentry report, shouldn't that be disabled?

#

Or is it just the part that actually sends it to discord

turbid hatch
#

the sending is disabled

#

it can still make reports but they wont be sent to discord cuz the sentry reporter is dead

scenic brook
#

Makes sense

turbid hatch
#

we should probs disable that in the plugin though, @limber skiff ^

scenic brook
#

The json is just a list of the console lines from the session as well so just nothing interesting at all really

turbid hatch
#

yeah its nothing more than you'd get from devtools

#

that kinda sucks, i was hoping for an easy "oh its that" fix

#

doesnt help that i cant repro the issue

limber skiff
#

I'm confused

#

what are we talking about

scenic brook
#

the yt adblock plugin is repeatedly crashing in the iframe and it's causing sentry to keep trying to report the logs in console, so it keeps including its own previous report and inflating the log each time

limber skiff
#

😭

turbid hatch
#

but only in some users

#

on my client, it reinjects once sure but doesnt seem to cause a memleak

#

idk if this is an a/b from youtube or not

charred monolithBOT
chrome coral
#

what is protex

chrome coral
charred monolithBOT
wise cedar
#

all the commit does is blocks users from using vencord if they're blocked from using the protex bot

#

i presume

chrome coral
#

a plugin for a bot wouldve been rejected anyway

wise cedar
#

ikr

chrome coral
#

this plugin is just a bit silly for what it is

wise cedar
chrome coral
#

more suitable as a third party one

wise cedar
#

i just dont understand why vencord would need it

fossil inlet
wise cedar
#

oh wtf

fossil inlet
#

wait

#

not hiding messages

#

but adding some blockedn text thingie to them

wise cedar
#

it blocks the entire user

#

i thin

#

im genuinely dumb i cant tell

fossil inlet
#

i dont care enough to find out lol

wise cedar
#

neither

fossil inlet
#

whats the point in using wreq.j

#

the other side of the terenary is null

charred monolithBOT
fossil inlet
turbid hatch
#

ty

fossil inlet
#

that bug has been annoying me for longer than it should have been

#

(i should have fixed it a lot eariler)

charred monolithBOT
gritty iris
#

@limber skiff got a question for you

gritty iris
#

so for that pr for whatever reason arguments[0] is always undefined when hovering in chat

#

but using the avatar decoration override value that was there blocks decor?

#

also apperantly the create modal is fucked

gritty iris
#

fix was avatarDecorationOverride -> avatarDecoration

charred monolithBOT
charred monolithBOT
charred monolithBOT
charred monolithBOT
charred monolithBOT
charred monolithBOT
austere talon
#

vtest fix-circular-deps

nimble pendantBOT
austere talon
#

its broken

#

bro i cant reproduce

#

vtest fix-circular-deps

nimble pendantBOT
austere talon
#

web only issue

charred monolithBOT
austere talon
#

vtest fix-circular-deps

nimble pendantBOT
nimble pendantBOT
nimble pendantBOT
charred monolithBOT
dusk blaze
#

ts pmo

austere talon
#

so we can merge

charred monolithBOT
charred monolithBOT
charred monolithBOT
#

@Vendicated Thanks for the response. Appreciate it.

I agree with all of your points. Honestly, I didn't have high expectations on this to be merged. What's more, if I were you, I would not approve this as well.

Hopefully someone might find the plugin useful someday and despite all precautions not to grab random binary from a random dude on the web would still compile the thing.

Anyway, it was a nice experience writing a plugin for your this project. I really enjoyed it. It is amazing...

scenic brook
#

PR obituary

chrome coral
gritty iris
#

tmk its been broken since they changed the last patch

austere talon
gritty iris
#

idrk how Im gonna fix the store being broken

#

any ideas?

#

they're using the override in chat and such is the issue :(

austere talon
#

wdym

#

what store

charred monolithBOT
gritty iris
desert cosmos
#

It's Showtime!

charred monolithBOT
charred monolithBOT
charred monolithBOT
charred monolithBOT
fossil inlet
austere talon
#

who

charred monolithBOT
charred monolithBOT
#

I made some changes to remove the logging statements that weren't previously part of the plugins, and to move the CSP editing from the main CSP file into the plugin itself so that users who aren't opted-in to using the plugin don't have any modifications to their CSP. I also added additional checks to ensure the plugin doesnt have null dereferences or array out of bounds accesses done within the frame javascript context.

dusk blaze
#

insane 😭

hybrid blaze
jagged cloak
#

horrorrrrr

gritty iris
#

this is the terrible fix I have for it wiping the shop decors for custom decors 😭

#

apperantly its broken in the actual decor thing as well gone

limber skiff
#

@austere talon hi

austere talon
#

good music

inland fable
#

portuguese is hypnotizing

limber skiff
#

I have been only listening to portuguese songs recently

limber skiff
limber skiff
#

@inland fable are you brazillian

#

I dont remember

inland fable
#

im spanish

#

brazilian but with typos

limber skiff
#

I know a bit of spanish

gritty iris
#

thank you keys thank you stare (chatbarbuttons)

limber skiff
#

@inland fable I gotta go now

#

so the music will stop

#

👋

junior olive
#

i would say

#

check modal stack?

austere talon
#

vtest fix-circular-deps

nimble pendantBOT
nimble pendantBOT
nimble pendantBOT
limber skiff
#

instead target which place that access the user current decoration and passes it down to avatarDecorationOverride

gritty iris
limber skiff
#

huh

gritty iris
#

the module its patching is kinda like the center and expanded upon

#

so I just patched messages instead

limber skiff
#

that's what I said

gritty iris
#

oh

#

im losing it YIPPIEEEE

#

its not a very good patch ngl

// Messages
        {
            find: '"Message Username"',
            replacement: [
                {
                    match: /(?<=void 0:)((\i)\.avatarDecoration)/,
                    replace: "$self.useUserDecorAvatarDecoration($3)??$2"
                }
            ]
        }
limber skiff
#

you were patching UserWithAvatarDecoration and not the component that had <UserWithAvatarDecoration decoration={...}>

#

for example

gritty iris
#

well keeping the old patch does member list and such still

#

so I was just gonna keep that and patch messages separately

limber skiff
#

and how does it not affect the shop too?

gritty iris
#

it doesnt

#

its falling back if override is null

gritty iris
#

ill just add uservalue to use as an anchor

#

I just pushed it to the pr

charred monolithBOT
charred monolithBOT
charred monolithBOT
charred monolithBOT
#

Content

[Feature Request] Enable Developer Tools via Ctrl+Shift+I (Console Access)

Description

I’d like to request the ability to open Developer Tools (the console) directly within Vencord, similar to how it works in Discord Web.

Currently, I’ve tried several approaches to enable it, including:

  • Using Ctrl+Shift+I
  • Setting "DANGEROUS_ENABLE_DEVTOOLS_ONLY_ENABLE_IF_YOU_KNOW_WHAT_YOURE_DOING": true

…but none of these methods seem to allow access to the console.

Why This W...

brazen bone
#

Love feature requests for things that already exist

charred monolithBOT
brazen bone
#

Opening devtools with f12 would be nice though

austere talon
#

sure

charred monolithBOT
charred monolithBOT
gritty iris
#

I just did -1 so they stayed the same as before YIPPIEEEE

#

also that fix looks eh I wanted input so I opened it

charred monolithBOT
gritty iris
austere talon
#

vtest dev

nimble pendantBOT
nimble pendantBOT
nimble pendantBOT
charred monolithBOT
#
[Vendicated/Vencord] New tag created: v1.13.6
fossil inlet
#

test

austere talon
#

guhhh

#

discord devs rushing to break more shit the second I push a new tag

dusk blaze
fossil inlet
odd heath
austere talon
#

Satan #1 slop dev

#

adding support for all the worst discord features

odd heath
#

Good feature tho

#

And it's not slop if it can animate and doesn't get animated by always animate

#

Simpleee

dusk blaze
#

i have one to annoy others

#

but i have them off

fossil inlet
austere talon
#

I always read mcp server as Minecraft pocket edition server

fossil inlet
#

Finally be able to vibecode patches

fossil inlet
#

That's mcpe

#

mcpedl my beloved

gritty iris
#

:(

#

minecraft still refers to bedrock as pe internally lol

#

quickest ss I have

coral mason
#

why r u talking about mc

brazen bone
#

Why aren't you?

coral mason
austere talon
#

great more aislop

dusk blaze
#

funnily enough they all have i18n

charred monolithBOT
turbid hatch
#

i wonder why though

dusk blaze
turbid hatch
#

dont think so

austere talon
#

yes they do

dusk blaze
#

okay that’s why

turbid hatch
#

oh they do?

#

interesting

bleak blaze
#

also why

hybrid jetty
#

WHAT is that

#

reminds me of that

#

lol

charred monolithBOT
dusk blaze
#

its me

charred monolithBOT
austere talon
#

vtest

nimble pendantBOT
nimble pendantBOT
nimble pendantBOT
charred monolithBOT
charred monolithBOT
austere talon
#

when u forget to remove your logpoints

charred monolithBOT
limber skiff
#

vtest

nimble pendantBOT
nimble pendantBOT
nimble pendantBOT
limber skiff
#

ugh

#

we still have to fix new settings

turbid hatch
#

thats fine it can be removed in a different commit

#

it'll just get compiled out since its unused

#

or, well, should

#

dunno if its smart enough for that

austere talon
#

no

#

and i deliberately left it in

turbid hatch
#

hm?

charred monolithBOT
limber skiff
#

@austere talon why is this needed?

austere talon
#

wdym

limber skiff
#

I meant like

#

can we not import patches from here already

#

or does the autosort imports mess it up

#

because then it gets moved to the bottom

austere talon
#

yes

limber skiff
#

ugh annoying

austere talon
#

there's no difference in priority or anything

#

it's just the autosort

limber skiff
#

this is too funny

austere talon
austere talon
#

this one is so funny

#

browser imported utils/discord before importing vencord entry point

#

which imports like half of the entire mod

limber skiff
austere talon
limber skiff
#

I removed the one in the top

austere talon
#

we want patchWebpack to be loaded first

limber skiff
#

is the one in the bottom enough or will it cause issues

#

ah, I think I misunderstood what you said with priority

austere talon
#

well technically we don't need the patchWebpack import

#

trhe plugin import already imports it

#

wait does it

#

yeah it does

#

it can go i think

limber skiff
#

yeah you are right

charred monolithBOT
austere talon
#

vtest fix-circular-deps

nimble pendantBOT
nimble pendantBOT
nimble pendantBOT
austere talon
#

wait we dont need the inline import in VencordNative i think

charred monolithBOT
austere talon
#

vtest fix-circular-deps

nimble pendantBOT
austere talon
#

wrong hmm

charred monolithBOT
limber skiff
#

should we have something like hasPluginStarted?

charred monolithBOT
limber skiff
#

to avoid this for example

austere talon
austere talon
#

I don't like passing plugin names as strings

#

it hurts maintainability

limber skiff
#

couldn't it at some point cause a circular dependency

austere talon
#

it could yes but it's easy to avoid & fix

limber skiff
#

alright

austere talon
#

even this i dont like

limber skiff
#

ideally it should be something like OpenInAppPlugin.enabled?

limber skiff
#

I see

austere talon
#

importing plugins is fine it should never cause any issues

#

the way circular import issues happen is if two files have top level code that depends on each other

limber skiff
#

did you test anything here?

austere talon
#

for plugins importing each other or themselves to cause issues, they would both have to have top level code that uses each other

#

we should just avoid top level code as much as we can

#

is discord having issues

#

github webhook didnt send the commit and my messages are lagging

#

vds

nimble pendantBOT
# austere talon vds

🟢 API: Operational
🟢 Media Proxy: Operational
🟢 Gateway: Operational
🟢 Push Notifications: Operational
🟢 Search: Operational
🟢 Voice: Operational

Latest Outage Information

Incident: 🟠 API Availability Issues
Status: 🔴 Investigating
Identified At: N/A
Last Updated: <t:1763214170:F>

austere talon
austere talon
#

it shouldnt matter but eh

limber skiff
#

I'm not sure if it still causes issues but

#

it seems risky to keep it

#

since it indirectly requires all webpack commons which is kinda risky

#

ill keep it as is right now

#

webpack commons should avoid importing each other

charred monolithBOT
austere talon
#

erm that's a leading space

#

vtest fix-circular-deps

nimble pendantBOT
nimble pendantBOT
nimble pendantBOT
limber skiff
#

SDGFAHFDJSFADS

#

was this on purpose

#

oh yeah

#

we nuked that plugin didn't we

austere talon
#

yeah its gone lmao

charred monolithBOT
limber skiff
#

ugh I formatted the file in accident

#

ehh It's fine, right?

#

now eslint is yapping

austere talon
limber skiff
#

@austere talon this is dumb, any idea how to fix this?

austere talon
#

lmaoooo

turbid hatch
#

you'd have to just eslint-ignore it

limber skiff
#

why the fuck does it want this

austere talon
#

it wants you to use @plugins/decor/api

#

just run autofix btw

limber skiff
#

there has to be a configuration for this

limber skiff
austere talon
#

just dont add plugins import alias bleh

austere talon
#

makes it clearer where it's coming from

turbid hatch
#

one of their examples shows it

limber skiff
#

I mean

turbid hatch
#

you're meant to use the full alias no matter what (except in our case for ./)

limber skiff
#

I just dont understand why it wants to nest it so much

#

if our relative import is much more closer and short

turbid hatch
#

refactoring mostly

#

the whole point is that if you were to change where the file was it would still import fine

#

otherwise you'd have to update your relative imports

limber skiff
#

welp

#

autofix makes it use backslash

#

very smart

turbid hatch
#

windows issue

#

its using the environment path sep blobcatcozy

#

i think if you use the eslint cli it doesnt do that

austere talon
limber skiff
#

stupid clankers

limber skiff
turbid hatch
#

eslint is dumb then

#

it shouldnt be using the env sep when / is the only valid char for node lol

austere talon
#

the issue isn't eslint it's that plugin

charred monolithBOT
austere talon
#

just undo and I'll do it

limber skiff
#

I spent 15 mins fixing it 😭

#

5 mins trying to make a regex and failing

charred monolithBOT
austere talon
#

xD

limber skiff
#

I ran the lint command and it said everything was fine

#

so stupid

charred monolithBOT
turbid hatch
#

/s

austere talon
#

vtest fix-circular-deps

nimble pendantBOT
austere talon
#

evil pr

nimble pendantBOT
nimble pendantBOT
limber skiff
#

alright looks good to me

charred monolithBOT
limber skiff
#

does that look okay?

#

vtest fix-circular-deps

nimble pendantBOT
nimble pendantBOT
nimble pendantBOT
austere talon
limber skiff
#

dont tell me

austere talon
#

settings api imports half of vencord

limber skiff
#

oh my god

austere talon
#

just undo that commit trolley

charred monolithBOT
turbid hatch
#

💔

limber skiff
#

useless

turbid hatch
#

vencord is.. spaghetti code??

#

we need to add custom instructions

#

if we're gonna keep using that hunk of junk

limber skiff
#

at least in some places

turbid hatch
#

cuz as a pr reviewer its practically pointless

charred monolithBOT
limber skiff
#

Settings should not import commons 😭

#

vtest fix-circular-deps

nimble pendantBOT
nimble pendantBOT
nimble pendantBOT
turbid hatch
#

dude i cant wait

#

until i get more nvmes

#

i can finally move my data drive off of spinning rust

turbid hatch
#

i give up i've tried two tools to generate a depgraph

#

and neither of them want to play nice with codebase

#

madge doesnt support path aliases, and dependency-cruiser seems to get caught up on the two .js files we have and assumes that the whole codebase is js only

austere talon
#

i think im going to do more refactoring in this pr @limber skiff

#

like make settings not import other places

#

and move quickcss to api

#

etc

limber skiff
#

alright

#

seems good

austere talon
#

it needs all plugins and react for hooks

#

we could solve it by spamming lazy imports but meh

charred monolithBOT
charred monolithBOT
scenic brook
#

stylelint in quickcss when

prime dew
#

Just like back when :has() selectors weren't properly recognised

austere talon
#

@limber skiff why doesn't findStore early return?

#
export function findStore(name: StoreNameFilter) {
    let res = fluxStores[name] as any;
    if (res == null) {
        for (const store of Flux.Store.getAll?.() ?? []) {
            const storeName = store.getName();

            if (storeName === name) {
                res = store;
            }

            if (fluxStores[storeName] == null) {
                fluxStores[storeName] = store;
            }
        }

        try {
            const getLibdiscore = findByCode("libdiscoreWasm is not initialized");
            const libdiscoreExports = getLibdiscore();

            for (const libdiscoreExportName in libdiscoreExports) {
                if (!libdiscoreExportName.endsWith("Store")) {
                    continue;
                }

                const storeName = libdiscoreExportName;
                const store = libdiscoreExports[storeName];

                if (storeName === name) {
                    res = store;
                }

                if (fluxStores[storeName] == null) {
                    fluxStores[storeName] = store;
                }
            }

        } catch { }

        if (res == null) {
            res = find(filters.byStoreName(name), { isIndirect: true });
        }
    }

    if (!res)
        handleModuleNotFound("findStore", name);
    return res;
}
#

there are multiple places where it could early return

limber skiff
#

old code I think

austere talon
#
export function findStore(name: StoreNameFilter) {
    let res = fluxStores[name] as any;
    if (res) return res;

    for (const store of Flux.Store.getAll?.() ?? []) {
        const storeName = store.getName();

        if (storeName === name) {
            fluxStores[storeName] = store;
            return store;
        }
    }

    try {
        const getLibdiscore = findByCode("libdiscoreWasm is not initialized");
        const libdiscoreExports = getLibdiscore();

        for (const libdiscoreExportName in libdiscoreExports) {
            if (!libdiscoreExportName.endsWith("Store")) {
                continue;
            }

            const storeName = libdiscoreExportName;
            const store = libdiscoreExports[storeName];

            if (storeName === name) {
                fluxStores[storeName] = store;
                return store;
            }
        }

    } catch { }

    res = find(filters.byStoreName(name), { isIndirect: true });
    if (res) {
        fluxStores[name] = res;
        return res;
    }

    handleModuleNotFound("findStore", name);
    return null;
}
#

isn't this better

#

also that should use Map not object

#
export function findStore(name: StoreNameFilter) {
    let res = fluxStores.get(name);
    if (res) return res;

    for (const store of Flux.Store.getAll?.() ?? []) {
        if (name === store.getName()) {
            fluxStores.set(name, store);
            return store;
        }
    }

    try {
        const getLibdiscore = findByCode("libdiscoreWasm is not initialized");
        const libdiscoreExports = getLibdiscore();

        for (const libdiscoreExportName in libdiscoreExports) {
            if (!libdiscoreExportName.endsWith("Store")) {
                continue;
            }

            const storeName = libdiscoreExportName;
            const store = libdiscoreExports[storeName];

            if (storeName === name) {
                fluxStores.set(storeName, store);
                return store;
            }
        }

    } catch { }

    res = find(filters.byStoreName(name), { isIndirect: true });
    if (res) {
        fluxStores.set(name, res);
        return res;
    }

    handleModuleNotFound("findStore", name);
    return null;
}
#

this should be removed probably

charred monolithBOT
austere talon
#

I see

#

but it shouldn't do it every time eh

austere talon
#

why do you even build a big object of stores

#

i dont really get the point

#

how about this @limber skiff

function populateFluxStoreMap() {
    const { Flux } = require("./common") as typeof import("./common");

    for (const store of Flux.Store.getAll?.() ?? []) {
        fluxStores.set(store.getName(), store);
    }

    try {
        const getLibdiscore = findByCode("libdiscoreWasm is not initialized");
        const libdiscoreExports = getLibdiscore();

        for (const libdiscoreExportName in libdiscoreExports) {
            if (!libdiscoreExportName.endsWith("Store")) {
                continue;
            }

            const storeName = libdiscoreExportName;
            const store = libdiscoreExports[storeName];

            fluxStores.set(storeName, store);
        }

    } catch { }
}

/**
 * Find a store by its displayName
 */
export function findStore(name: StoreNameFilter) {
    if (fluxStores.has(name)) {
        return fluxStores.get(name);
    }

    populateFluxStoreMap();

    if (fluxStores.has(name)) {
        return fluxStores.get(name);
    }

    const res = find(filters.byStoreName(name), { isIndirect: true });
    if (res) {
        fluxStores.set(name, res);
        return res;
    }

    handleModuleNotFound("findStore", name);
    return null;
}
charred monolithBOT
austere talon
#

wtf is this store

958832: function(e, t, n) {
        n.d(t, {
            Z: () => s
        });
        var r = n(442837)
          , i = n(570140);
        let l = {};
        class a extends r.ZP.Store {
            hasFetched(e) {
                return null != l[e]
            }
            getTopChannelIds(e) {
                return "874345844743213126" === e ? ["1041887225819955252", "985996080107892776", "1035280727610241166"] : l[e]
            }
        }
        let s = new a(i.Z,{
            GUILD_TOP_READ_CHANNELS_FETCH_SUCCESS: function(e) {
                let {guildId: t, topChannelIds: n} = e;
                l[t] = n
            }
        })
    },
#

what guild is 874345844743213126

charred monolithBOT
austere talon
shy veldt
austere talon
#

really or are you meming

shy veldt
#

Cap's Book Community

austere talon
#

wtf lmao

#

peak

shy veldt
austere talon
#

how tf do you have this data 😭

#

only 3 members

austere talon
shy veldt
#

👍

austere talon
#

empty blobcatcozy

dusk blaze
#

Dziruwa is discord staff or something

charred monolithBOT
#

I tested it out, it's fantastic. However, in the case of the member list headers, if it contains an emoji, the emoji would also suffer the same fate as the text
<img width="81" height="31" alt="image" src="https://github.com/user-attachments/assets/6aa10c05-e476-47ee-8451-a73bcd646c11" />
I looked at how Discord handles emojis in gradient roles (I can say they forgot this case too) but in usernames, they thought about it and separated emojis and text by putting each emoji into their own spa...

charred monolithBOT
charred monolithBOT
austere talon
#

i think it's ready now

charred monolithBOT
austere talon
#

vtest fix-circular-deps

nimble pendantBOT
nimble pendantBOT
nimble pendantBOT
charred monolithBOT
#

Pull Request Overview

Copilot reviewed 102 out of 106 changed files in this pull request and generated 5 comments.

Files not reviewed (1)

  • pnpm-lock.yaml: Language not supported

Comments suppressed due to low confidence (1)

src/api/SettingsSync/cloudSync.ts:30

  • [nitpick] The cast as Uint8Array is used here. While this may be necessary, TypeScript 5.9 might have stricter type checking. Verify that this cast is actually needed and that the types are compatible.

💡...

austere talon
austere talon
#

it's so dumb 😭

turbid hatch
#

see the copilot review thing is a cool idea, but the issue with it is that copilot reviews it

dusk blaze
#

Vendicated Vibe Coder

desert cosmos
#

im stupid i think

tight bridge
#

I've written support for electrons global hotkeys, would this be of interest to the community? I saw vesktop had it on the roadmap, but didn't know if vencord did or even planned for it.

dusk blaze
#

it patches the desktop client

#

Vesktop has an open pr

tight bridge
#

maybe I need to do some more digging into the patching of it, I was under the impression it wasn't done, so I went full nuclear and made an entire api inside the core.asar lol

charred monolithBOT
dusk blaze
#

FaFa Death

charred monolithBOT
charred monolithBOT
#
[Vendicated/Vencord] branch deleted: fix-circular-deps
austere talon
#

billions must fix merge conflicts

limber skiff
#

I just opened the PR to see what u changed

#

and I couldnt find it

#

cuz it just got merged

#

LOL

charred monolithBOT
austere talon
#

lmfao

#

i wrote it in the pr description

#

or just see commit messages

#

Refactored some more utils

Moved utils/quickCss to api/Themes (it managed themes, quickcss etc lmao)
Moved utils/settingsSync and utils/cloud to api/SettingsSync
Cleaned up apng dependency
Dropped InvisibleChat to get rid of the dependency

now only remote dependencies we have left is Shiki and QuickCss

#

we could drop shiki tbh it's kinda niche and the plugin is semi abandoned

charred monolithBOT
austere talon
#

if only we had plugin statistics

charred monolithBOT
#
[Vendicated/Vencord] New branch created: useSettings-wildcard
dusk blaze
charred monolithBOT
gritty iris
#

I will maintain shiki trust

gritty iris
#

^^^

austere talon
#
const settings = useSettings(["plugins.SomePlugin.*"]);
#

i need it for my pr

gritty iris
#

would it be best to move this to a vc repo?

austere talon
gritty iris
#

wait why not just use tm-grammars?

charred monolithBOT
austere talon
charred monolithBOT
austere talon
charred monolithBOT
gritty iris
#

whats injections vs grammar for shiki?

charred monolithBOT
#

Pull Request Overview

This PR adds prefix path matching functionality to the useSettings hook, allowing components to subscribe to changes for any setting under a specific prefix path using the wildcard syntax (e.g., "plugins.SomePlugin.*" or "notifications.*").

Key changes:

  • Added prefixListeners Map and associated methods (addPrefixChangeListener, removePrefixChangeListener, notifyPrefixListeners) to SettingsStore
  • Extended ResolvePropDeep type to handle wildcar...
#

The prefix parameter should be typed as P instead of string to enable proper type inference. Currently, the generic parameter P is unused for the function parameter, which means TypeScript cannot infer the correct type for the callback's data parameter based on the prefix string literal.

Suggested fix:

public addPrefixChangeListener<P extends string>(prefix: P, cb: (data: ResolvePropDeep<T, P>, path: string) => void)
    public addPrefixChangeListene...
austere talon
#

😭

#

bro yapping

gritty iris
#

it just wants you to know your entire codebase is wrong

austere talon
gritty iris
#

I didnt know that was possible

charred monolithBOT
#

Hello, This is a port of my open source desktop pet "Pocket Bird"! The full source code of the project is available here: https://github.com/IdreesInc/Pocket-Bird
The plugin adds a small pixel-art bird that hops around your discord and lands on images, as well as the ability to insert sticky notes that the bird can land on! New birds can be unlocked by catching the feathers that fall every so often. It's a relatively simple pet and does not store any data elsewhere besides the Vencord datas...

austere talon
#

both are correct

charred monolithBOT
gritty iris
#

once in a lifetime commit ^

#

it worked YIPPIEEEE

#

too bad I only need the name

charred monolithBOT
austere talon
#

nvm

charred monolithBOT
gritty iris
#

I actually hate js I changed one thing

#

its for generating jsons Joe_Shrug

gritty iris
#

its something

#

it works YIPPIEEEE

dusk blaze
#

what are you doing @gritty iris

gritty iris
#

updating shikis languages

#

the themes changes I did I discarded just now so im just doing langs

gritty iris
#

anything but load tsx

#

but it works YIPPIEEEE

#

fixed the display names its all good now

#

how do you want the json for that tho because I just have them in a test repo rn

#

I also added the new themes that were in a newer commit thumbs_up

gritty iris
#

just added all the missing icons and zig now has one

charred monolithBOT
charred monolithBOT
austere talon
elder plinth
charred monolithBOT
austere talon
#

bro try catching a clearInterval()

hybrid blaze
# austere talon <:hamsterWhat:1015585837855019078>

horror score scale:

0-2: clean code, no notes
3-4: minor issues, pretty mid but acceptable 👍
5-6: lowkey concerning, needs a cleanup
7-8: straight up rejected, rewrite this asap
9-10: absolute disaster, completely unusable 💀

#

rate it

hybrid blaze
#

or indeed ai

#

who knows

elder plinth
#

never seen emojis in commit names in the wild

hybrid blaze
elder plinth
#

only ever here in ai prs

hybrid blaze
#

this automatically adds the emojis to ur commits

#

idk why would someone use this

#

also i have no idea why i have this installed

olive aurora
#

what are you talking about

#

it's just adding fix:/feat:/etc

hybrid blaze
#

it does supports gitmojis as an optional feature

#

so if you set it its automatically use them

olive aurora
#

did u read it 😭

#

and the commits from that pr dont have scopes or types

hybrid blaze
#

horror

#

its indeed purely text based

dusk blaze
#

it’s just AI garbage iSob

hybrid blaze
#

i live in another dimension ig

olive aurora
#

yeah conventional commits are fairly common but very few people use them 100% of the time

#

I personally find it annoying you can't just write fix X with conventional commits

#

fix: fix plugin being broken

#

so dumb

hybrid blaze
#

indeed

austere talon
olive aurora
#

so you write fix: whatever was broken

austere talon
olive aurora
#

should have no colon tbh

austere talon
#

YESSSS

charred monolithBOT
#
[Vendicated/Vencord] New branch created: better-toolbox
austere talon
#

adding more stuff

#

and going to make plugin entries more powerful

dusk blaze
#

mantikafasi will rejoice

austere talon
#

YESSSS

#

well not custom

#

but custom menu yes

#

you will be able to add checkbox, slider, submenus etc

#

anything the context menu api supports

dusk blaze
#

love

charred monolithBOT
austere talon
#

should I add a massive menu with all plugins except you can go one level deeper to change plugin settings

austere talon
#

is this insane

dusk blaze
#

⚰️ alert vendicated

austere talon
#

is this insane

elder plinth
#

yes cause no setting descriptions.

fossil inlet
fossil inlet
austere talon
#

i disagree

fossil inlet
#

guh

austere talon
charred monolithBOT
charred monolithBOT
austere talon
#

i plan for more plugins to add stuff

#

we don't want the main menu to be super long

#

so merging it into the theme submenu is better imo

fossil inlet
#

it doesnt matter that much tho

austere talon
#

I mean same

#

but it's not too inconvenient to have it in a submenu imo

fossil inlet
#

probably yeah

austere talon
fossil inlet
gritty iris
prime dew
brazen bone
#

Better to allow marking specific settings as quick and having subsubmenus only for those imo

#

Think I also tried including only restartless settings, which worked ok

elder plinth
#

array settings when

charred monolithBOT
dusk blaze
#

why are they reviving a 3 month old pr

chrome coral
#

happens often, nothing new

#

without accidentally waking someone up is kind of a non problem in my opinion, just send it anyway shonbee

charred monolithBOT
turbid hatch
#

cuz they can have scopes

#

fix(core): this thing that was broken

olive aurora
#

message.split(" ")[0]

#

[tag] scope: fix thing

#

its not hard to come up with a different format

#

😭

hollow musk
#

i personally prefer to just scope: <message>, i dont try to use scope, but for a different project, conventional commits is hella useful, i cant be bothered to make changelogs and i just categorise my commits, sort them, etc to look nicer

dusk blaze
#

conventional commits are useful if you auto generate changelogs but that’s like the only use

#

just use AI to parse the commit message

hollow musk
olive aurora
#

its not even hard to categorise commit messages by hand AI could probably do it

hollow musk
olive aurora
#

you dont need to use the format if you're already separating commits correctly

#

vee will hire me to write changelogs (i wont do it)

austere talon
#

if you want a user friendly change-log you always have to write it manually

hollow musk
#

its just barely 90 stars anways, not everyone will take a look at the changelog and go 'eww'

turbid hatch
#

just... worse

olive aurora
#

did u read

#

the colon is annoying for grammar

turbid hatch
#

yes but ur just making it worse by complicating it more with the [tag] thing

#

:p

olive aurora
#

losing it

#

lewi i know u can read

turbid hatch
#

well i read it but

#

i dont get what u mean

olive aurora
#

the whole point is you can just make a new format that just uses verbs

#

its optional or w/e/

turbid hatch
#

i mean yeah but the point is less about humans reading it and more about machines, or something that takes commits in that format and prettifies them

#

fix(openInApp): tidal regex

#

they're still mostly clear to humans though

#

thats why its a fixed set of prefixes and why it includes it in the grammar

olive aurora
#

but annoying to write 😭

turbid hatch
#

eh i personally handwrite them but there are tools that can guide you through it like commitizen though they're a bit pointless

#

its easier to just learn the format

#

than to use the wizard system

hollow musk
#

also commitizen is just slow and annoying and just takes away the lock-tf-in moment i would be in

charred monolithBOT
#
  • Add settings for this plugin with a dropdown list of usable followers (currently Oneko (the original), Tora (a cat), and Dog (...))
  • This selects different sprites generated from the original oneko program (I can release the tool that assembles the images too) (the images have then been edited manually so that i.e. the Zzzs are more visible) (the images were uploaded to imgur but that can be changed)
  • The JS script is loaded on plugin startup, then is cached and reused when changing sel...
austere talon
#

yeah, the reason I put everything is because you might want to toggle some plugins quickly

#

like CustomRPC

brazen bone
#

I feel like toggling whole plugins on and off should be a pretty rare occurrence

austere talon
#

but yeah having all is too insane

brazen bone
#

If there are plugins that you toggle frequently, put in an "enabled" setting

austere talon
# charred monolith

this PR is still just a draft so I didn't bother with making it consistent with BetterSettings yet blobcatcozy

brazen bone
#

Fair, just pointing out that your road has been treaded before

fossil inlet
fossil inlet
# charred monolith

Has favoriting plugins been considered before? I feel like it would be nice to be able to like put a star next to them in the settings and they would appear at the top of the plugins list as well as you could also access them from the toolbar maybe

brazen bone
#

It would be nice to have plugin usage statistics for a whole lot of reasons

#

But I'm pretty sure Vee has been pretty clear on no telemetry

austere talon
#

so we can have sort by popularity etc

fossil inlet
austere talon
#

but i mean that wouldn't really help here

austere talon
#

or pr to the pr if you're crazy

fossil inlet
fossil inlet
# charred monolith

@odd heath imagine add/remove current channel/guild from setting in toolbox with array settings

odd heath
#

useless

#

youd need the same structure of plugins > plugin > setting > "Add/Remove from setting" or you spam it with every plugin but thats bad too

#

and atp you can just left click the chan or guild

#

unless you only make it an option for specific plugins but then also how do you determine what should get it

#

or you do a checkbox for each setting itself but that adds so much useless complication

charred monolithBOT
austere talon
#

you can open all settings tabs as modals

#

idk why we'd need that but ig good to have

#

this turns so gory with it lmao

chrome coral
#

make some button titles be shorter

chrome coral
austere talon
#

I added it for this

#

opens as modal

chrome coral
charred monolithBOT
elder plinth
#

cold

crisp owl
#

there's a lot of stuff i haven't done yet cause it's an early concept but i wanted to show it off still