#👾-core-development
1 messages · Page 229 of 1
Please explain.
rename common components that are minified ,like focus ring, to focusring
it's fairly good actually
xd
huh?
Ended up just going with this, seems the least cursed. Someone can just suggest changes in review if there's a better option
I kinda wanna map the modules for the whole lib but I don't really have time to hunt them down
they are probably exported in the same module tho
This alone is useDrag
Like it just seems to be a module per function near enough
But, y'know, me just being dumb is always on the table
Content
please add this plugin: BetterAnimations
Request Agreement
- [x] I have read the requirements for opening an issue above
i like going down a rabbit hole to find 1300 line bd plugin file
☑️ I have read the requirements for opening an issue above
tfw contributor agreement
nuh uh
all closed since idk how long ago
also good luck to anyone who wants to port that anyway
i can't because it is closed/archived
Well yeah, no shit, requests are closed and you didn't read the contributor agreement either.
i really don't get it, if something is shouting at you in all caps maybe you should read it
instead of being annoying af to the maintainers of a project which very much do not want you to do this because its a waste of everyones time
Plugin Description Hello! I would like to request a plugin that enhances animations, particularly improving transitions when changing channels and other interface elements. It should offer extensiv...
honestly i bet the reason why nobody has ported this is because the original plugin is almost 2k LoC in a single file
also why would you want your discord to be animated like that 
disguises how slow discord is when switching channels

I realised I think they're all in the same webpack chunk so Maybe™️
their entire fork is doomed
they attempted to add bettermic, betterscreenshare, the entirety of philsPluginLibrary (which hasn't been updated in months and likely doesn't work properly), fakedeafen and a few other things
(and a lot of add files via upload)
add has marked themselves as the author of the massive plugin lib
trol
its horror
they probably just want to annoy people in vc
make people go crazy but harassing one of their ears
you love forwarding causing mute
#🤖-bot-commands message
i bet the code from that doesn't even work anyway
Yet another vencord feature stolen smh my head
“smh my head”… shake my head my head?
looks like custom badge component exploded
canary motherfucker
None
None
None
None
BadgeAPI (had no effect):
ID: 184325
Match: ```
/(?<=text:(\i).description,.{0,200})children:/
**__AccountPanelServerProfile (had no effect):__**
ID: `720734`
Match: ```
/(?<=\.SIZE_32\)}\);)/
None
None
None
Oof... also i was thinking that it cant be that difficult to make a patch so badges show up in the My Account section of the settings with the other badges.
what did you leak there 😭
what do you mean?
you delete the attachment
what attachment?
what image?
(im trying to gaslight her, the truth is it was just a really bad image so I removed it)

This PR updates the screenshot showing the ReplaceGoogleSearch plugin in action to better reflect the current search engines available.
ngl, text replace and pin dms should not be using DataStore
not sure about relationship notifier and better sessions
message tags too
it's not even a huge amount of data, I don't get why they were put in DataStore
Merge my PR 
what pr?
Yeah but the data store thing is still included in the pr so
wdym
The pr takes the data out of data store into a setting
Opinions on renaming "PinDMs" to "GroupDMs"/"TagDMs" or something along the lines
Or add it to the description
Seems pointless and worse
objective facts right here
pointless and will confuse users
maybe add in tags so it shows up in search
just give us UserTags
None
None
None
None
BadgeAPI (had no effect):
ID: 184325
Match: ```
/(?<=text:(\i).description,.{0,200})children:/
**__AccountPanelServerProfile (had no effect):__**
ID: `720734`
Match: ```
/(?<=\.SIZE_32\)}\);)/
None
None
None
did they really bump electron to a version without the devtools fix
it's white again
god
gottta be kidding me
WHO DID THIS
You mean the mv3 one?
it's complete shit
Not the defaulting to white part, but the weird colors.
i love the way the blue looks
19361ef BadgeApi, AccountPanelServerProfile: Fix not wo... - sadan4
This should upload the image to https://github.com/Vendicated/Vencord/issues/1749 and use the link from it
Hello! I will quickly do it, to be honest I was very confused with the URL scheme from GitHub but anyways... I will do it :)
88e3bc0 ConsoleShortcuts: Set FluxStore toStringTag to ... - Sqaaakoi
It should use this link instead https://github.com/user-attachments/assets/ac844fde-5b67-4eb6-949a-c6165dc44da4
Reflect.defineProperty lovely
It should use this link instead
https://github.com/user-attachments/assets/ac844fde-5b67-4eb6-949a-c6165dc44da4
Oh, how did you get this link? (so that in the future I don't mess up)
iirc you can get it when you upload before sending, when editing the message and from the GitHub embed in Discord
Oh, thanks :) I will push the new link then
there are two classes for messagesWrapper now, and the second one doesnt
match anything with querySelector
a60af65 RevealAllSpoilers: Fix error on <C-S-Click> (#3... - sadan4
Alright @fossil inlet, in 4 hours: add to console janitor
fixes: https://github.com/Vendicated/Vencord/issues/3123
github wont close the issue automatically because this isnt being merged into the default branch
it's also less performant for some reason and the console log level/filter level randomly stops working
new electron devtools suck
better than CEF devtools 
(old patch didnt match anything even after all lazy chunks were loaded)
read what I said...
BUHHHHHHHHHHHH
mobile small screen and j didnt scroll up more
love
why the hell would they bump to 33 flat
thats psychotic
well at least they are updating it ,,,.
||time to re-introduce that one temp fix for the dev tools we had at one point||
that was so bad
it was a flashbang every time I opened devtools since I use system theme on discords main window
but it worked
BadgeAPI (had no effect):
ID: 184325
Match: ```
/(?<="aria-label":(\i).description,.{0,200})children:/
**__AccountPanelServerProfile (had no effect):__**
ID: `720734`
Match: ```
/(?<=\.AVATAR_SIZE\);)/
None
None
None
None
None
None
None
troll
@fossil inlet, <t:1737234775:R>: add to console janitor
done 
also btw it's Saturday, they don't work in weekends
which means no canary -> stable push
we are kinda overdue a tag push
Agreed should really do it with the next push to main
what is even the point of the versioning
I’m pretty sure when the version is bumped the Google extension is updated
something like that i believe
ahh
After (???) amount of usage, I've noticed this doesn't work. I been researching how PopoutWindowStore works to see how this could be fixed.
Replace the subscription to "POPOUT_WINDOW_OPEN" with the "message" event on the window.
Replace finding the most recent windowKey with event.data?.discordPopoutEvent?.key
This is how PopoutWindowStore adds the styles (]through a chain of functions)
Extra note: There is a ternary to switch between recreating all link[rel="stylesheet"] ele...
ah, thank you!, should've spotted that myself
ah, thank you!, should've spotted that myself
hold on; since I posted that I have realised that another check needs to be implemented
you should also check event.data?.discordPopoutEvent?.type === "loaded" or else an error will occur when closing windows
I am considering rewriting the managed styles API to support styles injected at runtime
i already did that instead lol
@uneven needle is this worth doing
probably?
this is why btw
i feel like if I make this it I will rewrite quickCss to use this and that will explode the changes you just made
it'll be better in the long term though
doesnt work for online themes

well then I will just rewrite that to be part of this new styles api
also does anyone know if VencordStyles["classNames"] is ever actually used or can just be removed
answering my own question... (this doesnt get called by anything)
i think this whole thing needs to be changed into a generic "edit style" function
I need to use a FluxStore in a core API, is this a bad practice?
it's going great
bruh
destructuring losing this moment
i just had to set a debugger point just to realise that I didn't add the element to the DOM
this happened because I moved where the element is created
I have implemented this
https://github.com/Sqaaakoi/Vencord/blob/dc957fc8e609962284e76c835fb78b212830f49d/src/api/Styles.ts#L115-L126 compatibility code, might be removed later, but also it might not be
Styles.ts: Lines 115-126
export const setStyleClassNames = (name: string, classNames: Record<string, string>, recompile = true) => {
const style = requireStyle(name);
style.edit = source => {
return source
.replace(/\[--(\w+)\]/g, (match, name) => {
const className = classNames[name];
return className ? classNameToSelector(className) : match;
});
};
if (recompile && isStyleEnabled(style.name))
compileStyle(style);
};
should I nuke isStyleEnabled while I'm at it
Yes
Wtf is an illegal invocation
I was trying to call document.createElement and I destroyed this by destructuring document
Guhh this language is dumb
What is this
Wha
You will declare module
why are you even changing it
make injecting styles into popout windows easier
also to avoid any plugins creating and injecting their own style element
i'm still playing around with the API
oh also less CSS in JS
what
why
https://github.com/Vendicated/Vencord/blob/main/src/plugins/shikiCodeblocks.desktop/utils/createStyle.ts
is any of this even used, other than clearing the styles?
I got a very basic implementation for array settings that dont include UI
will use it to migrate stuff from DataStore -> settings
@odd heath isnt this what you were doing
It is lol
😭
Well I have more than that
But that is also in my PR
As I've previously mentioned 😭
Just merge my PR :3c
It's 3 new files
The rest is just changes to plugin settings to add the changes xd
o

dont just implement it without plan
it needs ui to manage and needs to be a few types of arrays
user array, role array, channel array, arbitrary string array, like that issue describes
nono that's not what I'm doing
I'm just doing barebone array for settings that dont require UI, but we want to save in the settings JSON
that goes against how other settings work
by default it should have ui
if you don't want ui you should use hidden property
I dont wanna implement UI right now, I just want to easily be able to use array to save settings
well you did specify hidden
I will make array settings be hidden for now
ARRAY optiontype should probably take a renderRow function
UI is way more complicated, and I dont wanna deal with it
which gets one element and has to render row for settings
and then there are more specific arrays (user, role, channel, etc) which dont need it
mainly I wanna avoid this right now
I'm gonna make text replace and pin dms use settings instead of DataStore
so I need array
not a good idea imo
just need to make DataStore sync instead
and to make it easy to migrate to when we have proper array settings, I wanna implement this basic type inference and default right now, without UI
yes but it doesnt even make sense for those to be using DataStore
why
why would it
PinDMs absolutely does
because dms are essentially temporary state
copying PinDMs to a separate account wont work
will just fuck ur dms up
the same will happen if you sync DataStore
and it wont mess up anything?
dms that dont exist wont make a difference
why separate account
when would that ever happen
different account
everyone just be using DataStore for everything when it's not needed
pindms syncing >>>>> edge case where one converts vencord settings to diff account
ngl
its so ASS when i install on a new device and have to redo all my ordering
what would be the usecase of a role array?
i could add roles to my pr
key the data storage by account ID?
surely you can figure out a way to implement this into the settings API
Testing my managed unified styles API is going just fine.
smh
i did something obviously dumb
after over 5 hours of insanity i have ported almost every style injection point in Vencord to the Styles API
This includes the core CSS
horror
nvm the issue was different but easy fix regardless
i reverted my part that migrates from datastore to array 
just message tags and pin dms now
I did it@uneven needle
yeah its VERY husk
@limber skiff you will cry when you see my significant changes to vencord code
I may be dumb but why don't you guys just work on the same PR if they're so intertwined
For the arrays stuff
pin dms is harder than I thought
tbf you can just take the data out of the key
i accidentally intentionally obsoleted someone elses PR
yeah but I cant save the data into something like this
I need a way to separate by userId
why
you need a per user settings abstraction
it's done like that currently
so either, store an array with userId and categories in settings
or OptionType.OBJECT
alternatively add the user id to the category object
I think I will do this
I need help

@rugged spire do you have pinned dms?
my changes already don't work nvm
i will submit giant pr soon
yes
can you test if migration works?
sure
o wait it's not even passing tests
😭
alright done
yeah
make sure everything is working and migrated
and that DataStore no longer has any PinDMs related keys
don't worry
nice
my settings had arrays from testing and those are incompatible with the main repo lmao
Adds support for using Array Settings which sync whenever the array is modified, however they currently have no UI implementation and are always hidden.
This should be used for saving data which is handled by its own UI, like PinDMs. The difference of using this from DataStore is that the data gets cloud synced.
@rugged spire @odd heath wanna review?
seems fine to me
None
None
None
None
okay I will just wait to see if @rugged spire wants to review
oh @limber skiff one thing
why Settings.plugins.PinDMs.dmSectioncollapsed instead of settings.store?
actually whatr does this even do
you know more than I do
if I use settings.store I have to ts-ignore
because dmSectioncollapsed doesn't exists in its types anymore
though I don't get the point of categoryLen
you should probably refactor that out
what is this.
well the function existed so I just used it lol
instead of importing the category list I used the function
if yes keep it
let me see
if no don't keep it
it's finee
Converts the managed styles API to be a unified API for all styles
The problem
Vencord does not inject styles into popout windows.
Additionally, plugins that create their own styles at runtime contain a lot of (ugly) code to add these styles.
How this solves the problem
Almost every call to document.createElement("style")[^1] is replaced with the unified styles API.
This API should be considered the single source of truth regarding stylesheets for everything from now o...

@ts-ignore my beloved ❤️
now merge my pr for full support trolley
don't just merge that 
i am aware. what would you suggest doing instead? Keeping it inline? Get rid of the edit function entirely?
there should be a dedicated syntax for variables and then you specify them via some object
what?
alright
filter: blur({{VAR_NAME}});
something like this
and then you specify an object like
{
VAR_NAME: whatever
}
what's the issue
okay
it's a big api change
in this current state, yes it's unnecessary
i was just working on adding enabled by default styles, would there be ANY usecase for that?
like I said it has to be consistent with how the API works or it's an awful idea to add it
what
bruhh
don't rush adding something like that and don't just make changes to apis without everyone agreeing on it
you realize the difference between making the UI and the guild/channel/user stuff for it than just support saving
I'm not rushing there's literally 0 issues with supporting it like that right now
devbuilds arent even supported
I just wanna get rid of the datastore in a way that's not gonna change as soon as we change that API again
please do not nuke datastore entirely
you realize the actual UI for it is gonna take months to get added
if not a year
it's complex, very complex
I'm not
the core point is: do not make api changes without everyone's approval
okay so now we wait a year to get an actual change
plus that change literally impacts no one
if you need the UI for simply doesn't use?
it's not done and that's it, nothing bad about it
don't focus so much on the ui aspect
^
okay but then approve that
maybe, i'll have to see it first
the changes are extremely simple and just provide a clear way to use the settings instead of the datastore for arrays
since it got reverted I will just push to there then
I realized the settings proxy were never supporting a delete
is it worth nuking setStyleClassNames for this
i dont think any vencord plugins use it anymore
idr what that is
literally just a wrapper around the variables idea you had with a not so generic name
the main reason plugins use self managed styles is custom variables
nuking it is dumb
so just do this
or maybe we don't need that
i will just rewrite it
instead add an easy way to set variables on root
so you can just use css variables
we need to patch discord's css variable function for that
wdym
discord has a function (might be a reatc hook) that manages this
yeah i know
the variables and the classes
do we have to use that?
hook into that to let plugins easily add variables
yes
if you try to add it manually discord will overwrite it
i never said I wanted to edit the properties of the html element
whats wrong with just making another style element at the bottom that uses :root selector
it's better to put it on root element so it doesn't have to parse & recalculate styles afaik
so open PR and let me look 
don't self merge major changes
Adds support for using Array Settings which sync whenever the array is modified, however they currently have no UI implementation and are always hidden.
This should be used for saving data which is handled by its own UI, like PinDMs. The difference of using this from DataStore is that the data gets cloud synced.
ooops I was in [Electron Isolated Context]
preload.ts: Line 33
const injectStyle = () => webFrame.executeJavaScript(`Vencord.Api.Styles.createStyle("vencord-css-core", atob("${btoa(readFileSync(rendererCss, "utf-8"))}"));`);
HELP HOW DO I GET OUT OF ELECTRON ISOLATED CONTEXT OTHER THAN THIS HORRIBLE MESS
This is a keybind that I've been manually pasting into the dev console for the past year or so. It binds Ctrl+; to the topmost inbox jump button.
crazy, but actually a keybind plugin isnt a bad idea
like this
or a keybind for opening quickcss
Like a plugin that adds a bunch of different keybinds
and other already existing plugins like NoF1 or F8break can be merged into it
not a terrible idea
Record macro plugin 
nah, just use external software for that
AHK my beloved
was my first lang 
TODO: add a max limit of connections ShowConnections will display
insane discord even allows this
nah just make it only display one of everything
thanks github copilot
what user even is that (for testing)
@robust halo
fuck that, i cant even scroll on it
I recently asked it to give me code to do something specific I don't remember with strings
It had some scientific term
But it went like "can't use this code since it matches public code" and I had to go to stackoverflow to get the code I wanted 😭
config issue
(i think)
Really
not as bad as old permissionviewer along with reviewdb as far as i can remember
I know.
there used to not be a max
there is now
BadgeAPI (had no effect):
ID: 184325
Match: ```
/(?<="aria-label":(\i).description,.{0,200})children:/
**__AccountPanelServerProfile (had no effect):__**
ID: `720734`
Match: ```
/(?<=\.AVATAR_SIZE\);)/
None
None
None
Maximum number of connections reached (50)
None
None
None
None

bot leek
@fossil inlet why is default not a multiple of 7
i didnt think it would look as good if the show more button was on a separate line
you can make it 21 if you want, i just think it looks better if the default is a mutuple of seven -1
all good

also i recall there being a way to scroll to a section on a profile but too tired to add that part
also i could be crazy
i think ur crazy
checks out
<12> So whatever you wish that men would do to you, do so to them; for this is the law and the prophets.
@austere talon thoughts
yeah seems good
honestly limit to 13
2 rows
probably bebtter
anything above 13 is insane
@austere talon how is this better
connections.push(<ConnectionsMoreIcon key="more-connections" onClick={() => openUserProfile(id)} />);
is there perhaps a way to make openUserProfile scroll to the connections? discord might have something for that
you should restructure this code
const connections = accounts.map();
if (overMaxLength) {
connections.length = maxLength;
connections.push(<MoreIcon />)
}
would be much nicer to type UserProfileStore instead
by using less markers 

i want 10000 connections
const urlRegex = /(https?:\/\/\S+)/g;
using a string like [[LINK]] is bad not only because it might be translated but also because some languages might reorder stuff (maybe RTL) and what if the user included that text in their message? xD
i would instead generate an id (maybe with discords snowflake generator or uuid or string hash) for each link, then replace that again
better to use splice with findIndex (make sure it's not -1 or it pops last element)
private globalListeners = new Set<(newData: T, path: string) => void>();
kinda unrelated to this pr but it would make much more sense to use an object instead of array for this, since this array is basically used like a KeyVal Record. would be super simple with just a private setting
also could just be an object using private settings instead of array
both MessageTags and PinDms should just be objects instead of arrays cause they're basically implemented as just worse performing objects
well PinDms should be Record<UserId, Pin[]>
that means OptionType.Object
why exactly do we need a separate function? can't the normal proxy also work for arrays? also unless i'm missing something, this doesn't proxy the array elements so if you have 2d arrays or objects inside your array, those won't be dynamic
no
u can just use private setting
the only downside of private setting is that u need to null check
that's what I'm trying to avoid
if that's really such a big deal then sure add OptionType.CUSTOM or smth
which is always hidden and can be anything
with this we wouldn't even need array type at all
definePluginSettings({
someRecord: {
type: OptionType.CUSTOM,
default: {} as Record<string, string>;
},
someArray: {
type: OptionType.CUSTOM,
default: [] as string[]
}
});
settings.ts: Lines 42-44
ipcMain.handle(IpcEvents.SET_SETTINGS, (_, data: Settings, pathToNotify?: string) => {
RendererSettings.setData(data, pathToNotify);
});
ummm actually
just leave it the way it is rn and ignore that feedback
we can rethink another time
SettingsStore.ts: Lines 52-62
set(target, key: string, value) {
if (target[key] === value) return true;
Reflect.set(target, key, value);
const setPath = `${path}${path && "."}${key}`;
self.globalListeners.forEach(cb => cb(root, setPath));
self.pathListeners.get(setPath)?.forEach(cb => cb(value));
return true;
},
yeah no it's supposed to be the root
lolll
anyway just leave it like this for now we can change it later
/**
* Add a global change listener, that will fire whenever any setting is changed
*
* @param data The new data. This is either the new value set on the path, or the new root object if it was changed
* @param path The path of the setting that was changed. Empty string if the root object was changed
*/
oh right i got confused because
ehmm we should just fix it
old vencord settings had a function to add change listeners
that function got the new value set
then i ported vesktop settings store to vencord which always gives root
and i got them mixed up so its this frankenstein
see if any plugins depend on it
otherwise change it to always root
and what do you think about this? remove array type from your pr and instead do custom
it doesnt even require description or hidden, it's always hidden
actually it does require 😭
i mean the new custom option wouldnt
hmmm
might just change it to this then
well we can fix that
change it to
export type Def = PluginSettingArrayDef | ((
....
) & PluginSettingsCommon);
XD
i think my CUSTOM idea is much more powerful than ur array one cause it will allow anything json serialisable
okay that seems good
I will try it
maybe later we can also add optional serialize & deserialize properties to custom so you can use non json serialisable stuff like maps or sets
but thats too much for now
pretty sure arrays still need a different proxy implementation but that's fine
also should we proxy the nested objects or not
I think just the top level object/array
nooot sure
okay that's a bit harder but let me see
i dont get why tbh
the normal one should be compatible
set and delete traps are literally the same thing
only difference is no get trap
the path differs
which makes sense in my head
unless we should make the path the index
yeah we should imo
then yeah same implementation
doing that is more accurate than doing the array path
cause that would mean the array is being overwritten
now this worked with any[] because it was an array
if I do just any it wont work how I want
hmmm
wait huh wh do you need this
you did any[] not any
yes
why array
that was the old implementation
I'm saying if I change to any that method does not work
ohhhh
apparently if its omitted its not extending undefined...
try never
o I think type-fest has something
o wait
try that and if it doesn't work, try
O extends { default: infer Default } ? Default : any
oh my god spotify reset my password
same issue I just said
let me figure it out
just do the rest and leave types explosive and i will fix them
@robust halo
undefined as any?
reject typescript, embrace @ts-ignore
oh
🗣️
extends true...
alrighttt
@limber skiff you should do some https://github.com/type-challenges/type-challenges
so fun
just push 😭
lmaoo
nah thats fine
that onChange is only called when its saved from the settings UI
😭
PluginSettingArrayDef & Partial<PluginSettingsCommon>
hold on
hi what's up
the scrumper
okay its all exploded right now
the me indeed
but yeah try to fix the typing I will do the rest
good
and thank u for keeping everyhting running 
you're welcome, it was a lot of work
not you you prick!!!
horror i need to setup dev env first this is my laptop
vencord flakes when
jumpscare
brooo
why does it check that for managing global
(its yarn global add but same thing with that)
ehh
I will try to fix the typings too
it's kinda shit without them
okay I almost got it
I got it
O extends PluginSettingCustomDef ? IsUnknown<O["default"]> extends true ? any : O["default"] extends undefined ? any : O["default"] :
not sure if there is a better way @austere talon
the second one works flawlessly for me
the infer Default
works fine
well actually now if you set default to undefined it shouldnt default to any
okay yeah you are right
works
I still had the old mindset
where if you set undefined it would default to empty array
which meant any[]
and actually that was wrong too
lmao 😭
i pushed that other thing
why
yeah but it makes it not error in the settings code
and it adds onChange
but yeah it does add this junk
I already fixed it I think
oh okay
lets not touch ignored activities
then undo (but add onChange to custom type)
it uses array but it's fine
I dont wanna migrate its settings again
(it's like the third time)
onChange doesn't work
just change it to use the new custom type but still with array
as I said before onChange is called when you save from the UI
which never happens for this one
ya
oh wait
unless we wanna fix it
with the .0 paths
(which would be good ngl)
settings.use wont work hmm
no no i mean
you do settings.use(["myArray"])
but when it fires myArray.0 it wont match myArray (iirc)
I guess we fire both then
we could add support for settings.use(["myArray.*"]) but that's kinda complicated
yeah ig
I guess?
or just only fire myArray but then you won't know what actually changed (but tbh there probably isn't a use case for this)
I suppose this will work
I can test it with ignored activities already
sure yeah
works perfectly
well
globalListener should be called either both times or only with the array path
because that's used for subscriptions over ipc
so both or only once?
only with array path would be best
alright
i added that a while back
it sends new object and path over ipc
so you can subscribe to paths in main too
vesktop uses it a lot
mainWindow.ts: Lines 351-365
addVencordSettingsListener("macosTranslucency", enabled => {
if (enabled) {
win.setVibrancy("sidebar");
win.setBackgroundColor("#ffffff00");
} else {
win.setVibrancy(null);
win.setBackgroundColor("#ffffff");
}
});
addSettingsListener("enableMenu", enabled => {
win.setAutoHideMenuBar(enabled ?? false);
});
addSettingsListener("spellCheckLanguages", languages => initSpellCheckLanguages(win, languages));
oh ya forgot about that
anyway lets change MessageTags to object instead of array then
makes much more sense :P
DONT GOOGLE discord.sex
worst mistake of my life
same for PinDms (it should be Record<UserId, Pin[]>)
HORROR
is it down for anyone else?
oh my god this fucking bot just reopened my closed alert
^^ i thought they updated the link
@median rapids why does discord.sex 502 but docs.discord.sex work
krill issue
pindms almost works completely
discord.sex was just a redirect
help me debug why changing the category color doesn't work
re-add 
too lazy to type docs.discord.sex
not my domain
isnt this wrong
why return
shouldn't we intialise to empty array
and try to get rid of the forceUpdate spam
can we use settings.use instead?
it's a weird forceUpdate inside the component
better not touch it for now
@austere talon what types do i give to props on the store that i have no idea what they are
also uhmm
or do i just not type them
but we are proxying nested
currentUserCategories = settings.store.userBasedCategoryList[userId] ??= [];
hahaha
it was working before yes
oh forceUpdate is this horror
terrifying
wait no
it's still ours
just change that patch to $self.settings.use(["settingName"])
then you can remove the forceUpdate calls everywhere
hmm i see
settings.use() then
it will subscribe to any changes
iirc
it's still better than forceUpdate spam
I think it should always fire the top level setting name path
for any custom?
kinda hard to do that especially if it's multiple level nested object
we would have to add special handling to the proxy that checks if the current path is custom setting
ugh that's kinda shit
we can still add that later
or maybe just implement that settings.use(["thing.*"])
woudn't be that hard
but no rush, we can merge without support for that for now
and add support later when we need it
this is finee
i will probably just add this in the future
wouldn't be that hard, just need to make the path listeners some kind of tree structure
i'm so confused
as I said splice worked before
it should fire a deleteProperty
but that's not happening now
is the array not a proxy...
why did you go back to array proxy
it is
I didnt
makeArrayProxy
ohhhh
I dont know either
but deleteProperty isn't being fired for the splice
oh
I should have looked at the console haha
right, the array has proxies and it's trying to clone that
nvm we should not proxy nested!
completely forgot about that issue and there's no fixing
hmmm yeah
wait why is it cloning
but like either way, if we proxy the return from the array they are gonna end up inside again I think
that was to trigger the array modification before
i think the clone error can be fixed
not proxying array elements would be kinda bad
let me see
it's cloning at Settings.ts:164
ohhhh i see
the array is a reference
by proxying its children we put proxies in the plain object
yeah
im not sure how im still putting a proxy in the array now tho
basically what splice(1, 1) does is
const oldElement = arr[2];
arr[1] = oldElement;
delete arr[2];
okay yeah there is no escaping this
how so?
that's horrible...
it's actually not that bad





i fucked up

ill just force push it away


