#👾-core-development
1 messages · Page 221 of 1
dang
Once you submit, you have to wait
that sucks
The best you can do is wait
goddamn it we have to wait, to submit another fix to wait again?
yep
that just sucks
+FcYMz
yup
@limber skiff should i make a searchable thing of all old keys and their hashes
let me send you a mapping
sex
@fossil inlet wait are you planning in putting that json inside vencord
don't do DJSFHDJSFDS
return props.collapsedReason() === getIntlMessage("BLOCKED_MESSAGE_COUNT")
silly
nooooooooooooo
horror
10 minutes after being shafted by automod later for trying to say a word nuckyz said, i have returned to ask if that also fixes message logger with collapse deleted enabled?
no idea
nvm
yes 
they pushed intl changes
someone delete messages for me
guhhhhh fuck off
ugh
FORCE PUSHING IS A FUCK
i hope this branch gets to die soon
?remindme 3mo hey have you made a v3 of "your stable plugins" yet due to git hell
Alright @rugged spire, in 3 months: hey have you made a v3 of "your stable plugins" yet due to git hell
funny
no, but im fixing bothj
fixed both 
to fix that
i hate discords new formatting system
did u do that lol
NO
this is fucking cursed
that's not happening
IS DISCORD USING AN ENTRIES LIKE FORMAT BECAUSE THEY CANT SET ARRAYS AS KEYS
insane as fuck
this is cursed, there needs to be a way to generate an arbitrary message
i know what it is
squash merge fucked stuff up on that branch
i should've pulled
trol
on that note
we should really have something to push messages to all vencord users
similar to revanced alerts
(could be disabled but enabled by default)
i have a shitty system for this on my soft-fork but it is hardcoded in 
not a plugin tho
@rugged spire the origins of nin0chat
the origins of you running sudo init 0 and getting trolled
@dusk blaze@dusk blaze@dusk blaze@dusk blaze@dusk blaze@dusk blaze@dusk blaze do you know what this message means
vfjd?
No
im stupid
what is this thing
git submodule hell
I have no idea what they use to generate an ast
and I'm looking at the non minified source
it might not even be included in the client
yea its not
its parsed and generated at compile-time
yeah
ive been looking at it for the past bit
but if we can find where
its native rust code
oh
damn
do this then
and add @TODO: Find a better way to generate this
@limber skiff am i crazy or did your review vanish
I deleted it
ah
i made a mistake
mark it as ready
alr did 😭
we should work together and make a package for generating the ast
which other mods can use too
alr
at runtime, right
any plans to type i18n
i figured go deep on .intl and .t , but dont to that deep on other props
done
guhhhhhhh
@austere talon
@shy veldt
try on japanese
me
guhhhhh
i will fix soon™️
Added SHA-256 algo
A sha256 of the original filename? ...why
Why does it change the svg
Oh, it moves the } to the same line. That took a while to find
And removes the noop: true? What is this guy smoking
this isnt a bad idea, but it does a bunch other random stuff
tbh ive never understood error boundaries
I think noop: true makes it give nothing instead of large red box
its turk
the syntax just confuses me
what did you expect :3
Which is probably good if the element is smaller than the large red box
This gotta be a bot account
@rugged spire, <t:1730674213:R>: find a suitable name and description for simplifiedprofilenotes
catches errors inside your component
function MyComponent() {
throw "balls";
}
const MySafeComponent = ErrorBoundary.wrap(MyComponent);
const MySafeSilentComponent = ErrorBoundary.wrap(MyComponent, { noop: true })
<MyComponent /> // crashes entire app
<MySafeComponent /> // renders red error box
<MySafeSilentComponent /> // renders nothing
how do you pass props?
same way
The component returned by ErrorBoundary.wrap behaves exactly like the wrapped component except it doesn't crash
It's something like ```js
function wrap(Component, errorProps) {
return (props) => (<ErrorBoundary {...errorProps}><Component {...props} /></ErrorBoundary>);
}
ErrorBoundary.tsx: Lines 111-115
ErrorBoundary.wrap = (Component, errorBoundaryProps) => props => (
<ErrorBoundary {...errorBoundaryProps} wrappedProps={props}>
<Component {...props} />
</ErrorBoundary>
);
Oh so there's a wrappedProps too. That's surely useful for... something
it's used in onError
const Thing = ErrorBoundary.wrap(Component, {
onError: ({ error, props }) => {
console.log("Failed to render Component with foo =", props.foo);
}
});
i don't think this is used anywhere tho xD
i think i know whats causing the typing tweaks crash @shy veldt
discord issue that results in vencord issue
discord tries to format the username to be bold
but for some reason it results in a markdown string instead of a <strong> react element
note the markdown string doesnt get formatted
it just shows up as **user** is typing
@austere talon do i fix the bug in discords i18n if the plugin is enabled
wouldn't that be out of scope for the plugin though
especially since it's gonna be fixed in like a week or two probably
yea, prob
eh bad fix
use React.isValidElement
or something else
the .username check is very weird
like this?
idk
test it
how does that even work for discord
we're just returning their "element"
why does it crash for us but not them
wait didn't you already fix this
or does it crash on stock discord too
bruh the fix was broken 
user object gets passed instead of name wrapped in strong/>
this is a bug in discords i18n
oh
?
only for Japanese locales
I found something similar to this that caused crashes on most locales and got $2k bug bounty from their hackerone
trol
@austere talon is there something like react.isvalidelement for anything react can render
string, elements, ...
idk really
const isInvalid = e => typeof e === "object" && !e.type
maybe this
no
hmmm
it's $$type or smth like that
I'm not at my computer
I still don't understand how this causes crashes for us not but discord
oops wrong reply
so good
find a way to abuse this to crash someone (not yourself) using the Japanese locale
if you manage and report it to discord, you can claim free moneys
spreads a problem around publicly (on an alt) so it becomes a big issue then reports it to discord to get even more money 😎
(don't do this)
it doesn't have to be a big issue
that's the point of bug bounties
finding issues before they become problems and cause damage
it just has to be impactful, e.g. if you can crash other people just by doing something
who reacted determins if something is a user component by checking if it a react element with the strong type
normally the children looks something like this [<strong>username</strong>, "is typing"]
however, the Japanese i18n is broken and returns ["**", userObj, "**istyping"]
normally this would be ["**username**istyping"], but because typing indicators replaces the map of usernames, with userObjs, discord
's parser returns ["**", userObj, "**istyping"] instead
@austere talon guhhhh
lmao
None
None
None
None
None
None
None
None
i doubt you can with this bug, as you would need to pass an object to the format function, which would prob get caught by type checkers
i'd say its a fair time to unlock #🏥-vencord-support-🏥 now
it should have calmed down by now
done
Wrong
does anyone know why where is an extra char in the short hash here
@rugged spire explain
idk 
devbuild vs not devbuild
yea, but like where does that difference come from
ive been looking the code but cant find it
Different git version I guess
the short commit length is implementation dependant
Somehow github managed to name this PR about no blocked messages
update the sticky message then so we have more excuses to time people out
👍
Plugin Description:
Adds a "Mute/Unmute and Block/Unblock" button for all users. Unlike the standard Block/Unblock button, which only restricts certain users from messaging you, this option also mutes them in voice channels for added control.
Includes an automatic feature that mutes blocked users in voice channels, enhancing visibility and manageability.
This plugin effectively transforms standard blocks into "real" blocks, creating a smoother and more organized communication environment.
...
I wonder how hard the logic for that plugin will be
for now you can just use this as a 3rd party plugin
Okay I tried and it looks like it doesn't work anymore :/ too bad
i mean.. you're looking at it
Yeah
Is it just me thats experiencing occassional weirdness in the positioning of Vencords settings? Sometimes its pinned to the bottom (restarting discord fixes it)
that's weird
i think i saw somebody in #🏥-vencord-support-🏥 mention this too, but i can't find it now
for what plugin? xd
#👾-core-development message
not rlly a plugin, js added functionality to an existent plugin
thats what i'm sayin
It was brought to my attention that this just adds a "feature" to an existing plugin.
If so I would love to contribute to that plugin instead of crying about it on Discord.
Thanks <3
i think better folder might be a tad folders
@grizzled halo has anyone reported this yet?
huh
ive never had this happen before 
diff --git a/src/plugins/betterFolders/index.tsx b/src/plugins/betterFolders/index.tsx
index bb1a67ebb0..50dee4f563 100644
--- a/src/plugins/betterFolders/index.tsx
+++ b/src/plugins/betterFolders/index.tsx
@@ -274,12 +275,16 @@ export default definePlugin({
},
makeGuildsBarGuildListFilter(isBetterFolders: boolean) {
- return child => {
- if (isBetterFolders) {
- return child?.props?.["aria-label"] === i18n.Messages.SERVERS;
- }
+ try {
+ return child => {
+ if (isBetterFolders) {
+ return child?.props?.["aria-label"] === getIntlMessage("SERVERS");
+ }
+ return true;
+ };
+ } catch {
return true;
- };
+ }
},
makeGuildsBarTreeFilter(isBetterFolders: boolean) {
@limber skiff i might be stupid, but shouldn't this try-catch be inside of the returned function
wait then whats the point of it
because i dont think returning a function can throw
alr
Basically as the title describes.
Normal block just restrains certain users from messaging you etc. -> This also voicemutes them.
Option to do this automatic or with button.
Before:
After:
Also for the crybabies on discord:

tbf, if PRs were merged more often there would be less duplicates
especially with a project like this where discord breaks stuff so PRs go constantly stale Maintainers time is precious and we all love you
@fossil inlet, <t:1730322928:R>: plugin to replace github links with lines with the actual code
how?
the link should be returning as webp
that's the whole point of animated in getEmojiURL
animated webp embeds as a static image in discord
discords media proxy doesnt support it
god everything is broken
guhhh
turns out this only happens when switching accounts
idk if this was a thing before
ShowMessageEmbeds
Adds a context menu option to show embeds for links that don't have one.
Right click on the link and select "Show Embed" to use.
The new embed is only visible locally, allowing you to view embeds of links sent by users that don't have embed permissions or surrounded the link with in their message.
I kinda wanted to add settings so you could define url replacements, so if you clicked show embed on, say, a twitter link, it'd give you a vxtwitter embed instead
But maybe in future
None
None
None
None
None
None
None
None
#{intl::+2QBZW::raw}
What's the difference between that and just using "+2QBZW" directly?
gets transformed to ["+2QBZW"]
just like if you used the non hashed key
it's meant to be a universal way of targetting intl keys
so that we can easily change things
Gotcha
I dont understand exactly from what I can tell it just does for instance ["9RNkeH"] without raw and with raw ["APP_TAG"]?
Okay I know this might not be the right place but is it possible to add a log function to this program in case you miss the notifcation?
ur using the non hashed key
raw is for when you are using the hashed key
ah alr
None
None
None
None
None
None
None
None

I have another plugin that shares a lot of code with this but I feel like they do different enough things that I'm not sure if I should keep them separate or just merge them into one
ShowMessageEmbed lets you fetch and embed for a link in a message
EmbedReplace fetches a new embed with TextReplace-like rules applied to the url first and replaces the original embed
At the moment I have them slightly integrated anyway so that you can prevent the Show Embed button appearing for an embed that's been EmbedReplaced
But I don't know if maybe the EmbedReplace rules should just be part of the ShowMessageEmbeds settings
This is probably more #🧩-plugin-development but I forgot in replying to the github message
STOP BASİNG ON UNSTABLE BRANCHES
i do what i must to avoid doing work later
sorry
i mean
i fix my plugins on what is apparently a stable API
well dont bse on temp branches or just deal wit xd
is it possible to set the path vesktop loads from in console
nop
actually you can modify the path in the settings.json
but not as a launch arg if thats what you meant
you could sed "match" && vesktop
not sure if this works but after a bit of digging i found VesktopNative.fileManager.selectVencordDir
yea 😭
my vesktop was stuck on a old commit and it wouldnt update
so i needed to swap it
buh
go to vencord settings and click notification log
and use our support channel in the future
yes that's right
but it doesn't take argument, instead it shows a file picker prompt
Yea, that was all I needed
Anyway chrome extension is updated now, so if you wanna push a second round of fixes you can do that
i think i have a few fixes open rn
@jolly egret have people found any bugs that arent fixed yet?
i also found the most minor possible bug in permission viewer
incredible
it doesnt render formatted permission info tooltips, only the raw text
Wtf did they do now
Uh
Okay
Because I get full crash on loading vesktop on canary
Looks like it's only decor tho?
yeah its decor
bruh
could parts of this be written with ai
probably
looking into decor now 
It's weird that ai manages to squeeze in so many comments despite being trained on human code
ai slop
fr fr
were parts of this written with ai? this has a lot of unnecessary comments
Consider adding a stop function which removes the change listener
Pretty sure this also unmutes people manually muted but not blocked
forgot to mention, plugins need a README.md file
i love removing lines in suggestions
Also for the crybabies on discord:
Seems a bit unnecessarily antagonistic
It's referring to this but I don't really see that as crying, I think they just didn't realise they were speaking to the pr author
can anybody reproduce the crash with Decor on ptb/canary?
I can't reproduce it, but others can. I just want something conclusive before i throw anything in #1257025907625951423
Yeah I ran reporter on ptb and it crashed me
I can
aight i'll post something then
None
None
None
None
None
findByCode("will be removed in v4")
findByCode("[zustand persist middleware]")
mapMangledModule("expression-picker-last-active-view", {
useExpressionPickerStore: t=>typeof t!="function"?!1:Ia(Function.prototype.toString.call(t),e)...
})
None
None
woah
wtf is the second one 💀
I won't have fixes for decor until tonight if you don't get to them firt
first
nah, i get cursed stuff but i'm trying to figure out what the zustand persist middleware is doing in discords code
ah
SortFriendList
Adds to the Friend List the date you became friends and sorts them.
lmao i had that one in the todo list for a while
?remind saturday review
Alright @fossil inlet, in 2 days: review
I just noticed the sorting itself may not be working no longer;
The dates work 100%
Yeah the sorting definitely doesn't work
Oh unless the sort is by name then yeah it's fine
name is default yeah
No idea how to fix it; They can change the name to FriendListDates if needed, or if someone want to help out fix the sorting that would work out too I guess
It's just been super useful for me to clean my friend list, so thought of sharing it
if its only for dates it should probably be integrated with friendsSince
because it does the same thing just in another place
To be fair it should be integrated with friend requests and change the name, then fix the sorting
that would make the most sense imo
Is it possible to get the "last active" date of a user?
Which would become creepy
yeah
I mean, dont think it's creepy? I just want it for friend purging
plot twist
But tracking would be weird
I guess if it's only on friends it's not too bad
The logs are spamming this, maybe you can find it by that lol
Just in case you missed it filling the entire console
Is that the friend plugin?
Nah just discord in general
Ah alright
It's because type 3 and 4 are incoming and outgoing requests, type 1 is existing friends
Just changing to type 1 fixes
were parts of this written with ai? this has a lot of unnecessary comments
Haha yes I was trying some ai comments on js docs 💀
This is a small plugin I made for toggling themes with a hotkey or if you start a stream. You may also show a popup once you toggle the theme. All of the mentioned options are configurable, you can find a picture below for reference.
I'd also want to give some credit to Kodarru, also credited in the code. I used fragments of the code she wrote for the StreamerModeOnStream plugin for the theme disable functionality.
Hope you like it :)

so many issuesss

dev2 
did discord change it
try passing a size
still works
are you on stable or canary
this is on stable
I knew something was wrong
are you going to fix this some other way?
no need
we just gotta wait for discord to bump stable to canary
which should happen soon
let me fix this
doesnt that only happen when switching accounts
that has annoyed me more times than i can count
@fossil inlet what does this fix exactly?
you could have bumped me that
I didnt remember lol
hold on
let me find the message
@limber skiff #👾-core-development message
does it crash
still works
you didnt just collapse direct messages right?

yea
sorrryyy
tbh i didnt either untill someone else told me
is that a stock feature or is pindms adding that
prob the component being patch
Fixed in another commit already
stock haha
don't worry
happens to all of us 
good to know
oh really?
I could swear it was stock
cause it confuses people
yeah it doesnt have a proper indication
ConsoleJanitor (found no module):
ID: -
Match: ```
[DEPRECATED] Default export is deprecated. Instead use `import { create } from 'zustand'
**__ConsoleJanitor (found no module):__**
ID: `-`
Match: ```
[DEPRECATED] `getStorage`, `serialize` and `deserialize` options are deprecated. Use `storage` option instead.
ConsoleJanitor (found no module):
ID: -
Match: ```
[DEPRECATED] Default export is deprecated. Instead use import { createStore } from 'zustand/vanilla'.
**__ConsoleJanitor (found no module):__**
ID: `-`
Match: ```
[DEPRECATED] `context` will be removed in a future version. Instead use `import { createStore, useStore } from 'zustand'`. See: https://github.com/pmndrs/zustand/discussions/1180.
ConsoleJanitor (found no module):
ID: -
Match: ```
[DEPRECATED] Default export is deprecated. Instead use import { shallow } from 'zustand/shallow'.
mapMangledModule("useSyncExternalStoreWithSelector:,Object.assign", {
zustandCreate: e=>typeof e=="function"...
})
mapMangledModule("expression-picker-last-active-view", {
useExpressionPickerStore: t=>typeof t!="function"?!1:Ia(Function.prototype.toString.call(t),e)...
})
None
None
None
None
None
None
launches a headless chrome instance, injects vencord and loads the discord website
then force loads everything and checks what wasn't applied after
Very cool
Is it also opensource
I wanna peep at it's code
Like
How does it launch it
And force run everything
this launches chrome, opens discord and injects vencord
and also listens for console messages to capture failed patches logs, or the signal to end
and this is what loads everything and checks for bad patches or finds
beware the code is kinda messy
Vencord has basically a different type of build that has every plugin enabled and runs this file at startup, to load everything
So it js runs everything on the login screen?
yeah
it current does a login with a token
but you dont actually need to be logged in
And how would i run it locally
If i wanted to
Bcs i assume it checks for patches even in dev shell
So is it possible that i find errors in dev shell with it?
you have to set an environment variable for a chromium binary
then
pnpm buildReporter
pnpm esbuild scripts/generateReport.ts > dist
node dist/generateReport.js
I'm ambivalent about zustand, being that I don't know what it is
And the report will be posted here?
it will output in your terminal only
Alright great, new side quest made 
why do i have to spam Ctrl Shift I couple times before the dev console actually pops up
windows?
ive heard the amd driver binds that as a hotkey
novideo
nooo
ConsoleJanitor (found no module):
ID: -
Match: ```
[DEPRECATED] Default export is deprecated. Instead use `import { create } from 'zustand'
**__ConsoleJanitor (found no module):__**
ID: `-`
Match: ```
[DEPRECATED] `getStorage`, `serialize` and `deserialize` options are deprecated. Use `storage` option instead.
ConsoleJanitor (found no module):
ID: -
Match: ```
[DEPRECATED] Default export is deprecated. Instead use import { createStore } from 'zustand/vanilla'.
**__ConsoleJanitor (found no module):__**
ID: `-`
Match: ```
[DEPRECATED] `context` will be removed in a future version. Instead use `import { createStore, useStore } from 'zustand'`. See: https://github.com/pmndrs/zustand/discussions/1180.
ConsoleJanitor (found no module):
ID: -
Match: ```
[DEPRECATED] Default export is deprecated. Instead use import { shallow } from 'zustand/shallow'.
mapMangledModule("useSyncExternalStoreWithSelector:,Object.assign", {
zustandCreate: e=>typeof e=="function"...
})
mapMangledModule("expression-picker-last-active-view", {
useExpressionPickerStore: t=>typeof t!="function"?!1:Ia(Function.prototype.toString.call(t),e)...
})
None
None
NoTrack (found no module):
ID: -
Match: ```
.installedLogHooks)
**__ConsoleJanitor (found no module):__**
ID: `-`
Match: ```
[DEPRECATED] Default export is deprecated. Instead use `import { create } from 'zustand'
ConsoleJanitor (found no module):
ID: -
Match: ```
[DEPRECATED] getStorage, serialize and deserialize options are deprecated. Use storage option instead.
**__ConsoleJanitor (found no module):__**
ID: `-`
Match: ```
[DEPRECATED] Default export is deprecated. Instead use import { createStore } from 'zustand/vanilla'.
ConsoleJanitor (found no module):
ID: -
Match: ```
[DEPRECATED] context will be removed in a future version. Instead use import { createStore, useStore } from 'zustand'. See: https://github.com/pmndrs/zustand/discussions/1180.
**__ConsoleJanitor (found no module):__**
ID: `-`
Match: ```
[DEPRECATED] Default export is deprecated. Instead use `import { shallow } from 'zustand/shallow'`.
mapMangledModule("useSyncExternalStoreWithSelector:,Object.assign", {
zustandCreate: e=>typeof e=="function"...
})
mapMangledModule("expression-picker-last-active-view", {
useExpressionPickerStore: t=>typeof t!="function"?!1:Ia(Function.prototype.toString.call(t),e)...
})
None
None
oh it hit stable
no, discord reverted
oh
Why aren't you modifying the existing SortFriendRequests plugin to support this use case, especially considering the code is almost the same? I know the name would be wrong, but plugin settings can be kept after a rename by statically calling migratePluginSettings(newName, ...oldNames) (see how other plugins do it for an example)
<sub>also how do you have 1k friend requests??</sub>
I've been using an older userplugin version of this that you made for a decent amount of time.
Discord attachment links will be converted into "mentions" and the plugin does not have an option to show those embeds.
I've tried to look into this before but it seems like you'll need to do a decent amount of patching to pass the message object to the context menu.
@scenic brook thank you for making this PR 
also can you explain where the open link incognito comes from in the example I need that so bad https://github.com/user-attachments/assets/c943d74a-04a0-4d24-9d04-eca2970b8483
Content
[Feature Request] Possibility for Better Autocorrect in terms of it not taking forever after correcting one word to correct another, also plus if you would freshen up the UI of autocorrect and be able to choose your engine of autocorrect you prefer
Request Agreement
- [X] I have read the requirements for opening an issue above
Would indeed be nice
Would also be cool to be able to configure the language(s)
Personally it feel random wether it picks english or french as the language to autocorrect and it's very annoying
Would be nice if it allowed to specify a layered list of languages or at least to pin it to a single one
That's another one I made but I'm not sure what I wanna do with it because supporting different browsers and different install paths and everything sounds awful, plus I think I need to make it more secure since it's running a shell cmd (I hadn't bothered doing any of this since it's only me using it and I only use chrome lol)
I'll upload it as it currently is later 
I hadn't considered attachment mentions, thanks. I'll look into adding support for those later on
NoTrack (found no module):
ID: -
Match: ```
.installedLogHooks)
None
None
None
NoTrack (found no module):
ID: -
Match: ```
.installedLogHooks)
None
None
None
@limber skiff could you run reporter
None
None
None
None
Settings (had no effect):
ID: 991346
Match: ```
/({(?=.+?function ((?:\i)).{0,120}((?:\i))=(?:\i).useMemo.{0,60}return (?:\i).useMemo(()=>(?:\i)(\3).+?function(){return )\2(?=})/
None
None
None
was that the i18n crash?
they added this huge key
so if that errors it falls back to that one
yep
None
None
None
None
None
None
None
None
🔥
None
None
None
None
None
None
None
None
@grizzled halo any new broken things that people mentioned or everything seems fine now?
Everything seems fine
alright
I suppose I can push a tag without pushing to main
@austere talon technically wouldn't cause any issues right?
don't do that
Actually, do y'all wanna investigate the weird behaviour with imagezoom?
multiple users now have reported that its not saving the zoom level properly
i can kinda reproduce it?
it sometimes sticks, othertimes not
is it about zoom by scrolling wheel
what's the reason
Content
i dont like vencord and i want to do something like donottrack
Request Agreement
- [X] I have read the requirements for opening an issue above
i want to run a js snippet in discord console but i think discord can see it and i dont want to
lmao
Just adblock it then
@fossil inlet, <t:1730995961:R>: review
Did Nuckyz and Elias not add the icon for a NSFW Vc into userVoiceShow?
nop
wait, are nsfw vcs a thing
None
None
None
None
None
None
None
None
just found that discord is using https://github.com/sebbo2002/ical-generator
is that for server events
Yes
This
Fun fact
That button doesn't work on Vesktop because it tries to open a blob URI in a new tab
Worth making an issue?
how is it handled on normal desktop
f.isPlatformEmbedded ? s.Z.fileManager.saveWithDialog(n.toString(), "discord-event.ics") : window.open(n.toURL(), "_blank")
where n is the event object
s.Z is likely DiscordNative
yea
thats what i figured
if i had the time/cared about this
id impliment that native func on vesktop
This is in webpack module 70877
then just patch it
if i Patched in a react button and have a callback for it what you suggest for a modal and managing code for a list of information?
what are you trying to do
I had a suggest about the group dms thing before,
me and someone else managed to figure out how to patch the button I was talking about before in
however we are not sure how to render the group dms in the response to the react button
are you talking about the thing in your bio you want discord to make but you know they wont
https://github.com/nebulamoe/Vencord/tree/main/src/plugins/groupDMs
I assume the components file will list What I want
I assume the response needs to come from the button callback but we are not sure how that would work
There is a lot of stuff that will break and generally isn't clean in the button itself
so where should the callback go?

the button callback should call a function right?
You should be using Discord's own react components
React components like what, their discord react components?
we patched in a button similar to the friends button
can you show me an example of where you are talking about
https://github.com/nebulamoe/Vencord/blob/main/src/plugins/groupDMs/components/GroupDMsButton.tsx shows that you've tried to recreate everything from scratch
@marsh spruce Please just take a look at how MutualGroupDMs does things
what do you mean I tried to recreate everything from scratch?
did my accquitance render it incorrectly?
was the react object supposed to be rendered by something else?
1: don't do https://github.com/nebulamoe/Vencord/blob/main/src/plugins/groupDMs/components/GroupDMsButton.tsx#L4-L17 instead do findByProps with a unique set of those keys
2: There are so many react components that already exist and are better than writing the raw HTML elements every time. Doing that is much easier to read
3: Additionally, hardcoding the icon is a bad idea. You should try using #1293357944498556969 and importing Icons from @webpack/common and using those components
4: MutualGroupDMs code already likely has what you are after and can be easily tweaked for your needs
GroupDMsButton.tsx: Lines 4-17
const classes = {
channel: "channel_c91bad",
container: "container_d91ad9",
interactive: "interactive_f5eb4b",
linkButton: "linkButton_c91bad",
link: "link_c91bad",
avatarWithText: "avatarWithText_c91bad",
layout: "layout_ec8679",
avatar: "avatar_ec8679",
linkButtonIcon: "icon_fc4f04",
content: "content_ec8679",
nameAndDecorators: "nameAndDecorators_ec8679",
name: "name_ec8679"
};
so the icon viewer has the group dms sybmol?
We're using the memberlist here
so could you link me to the documenation alternative of this?
or an example?
Go to Vencord source code and search for findByPropsLazy( there are tons of examples of that
findByPropsLazy for the button making?
That is found for you
Please just go read through some other plugins
It will help a lot
I barely know javascript so what plugins?
just go look at https://github.com/Vendicated/Vencord/blob/main/src/plugins/mutualGroupDMs/index.tsx and if you have an IDE such as vscode, you can hover over the functions to see what they do, most of the common webpack finding things explain how they work that way
I don't think I can help further if you're not able to take a look and understand how similar existing plugins work
looking at existing plugins was by far the most helpful thing for me when i made my plugin.
so do we grab the icon from webpack common or do we convert the icon from svg to an asset?
you can grab the icon using webpack
I see the div path uses icon_fc4f04
that suffix should not be relied upon
well it is called the
"Hide Member List"
"Show Member List"
button
thats why you use findByPropsLazy which looks for modules that export an object that contain all the properties passed as arguments
you need to find a set of keys in the object (same as the prefix of the class name) that are unique and not shared by any other classes object
do note you can leave it and it will work fine, it'll just break eventually as those suffixes change
This is what the html renders:
here is an example taken from permissionviewer of finding one of these classes; the arguments map to keys of the object
you may notice that I use findByProps directly here, findByPropsLazy is used in the code as it won't look for the object until the properties are used in your code, without that your plugin will try to look for it immediately on start, fail to find it, and crash
I see, so lazy works when the code actually needs it and findbyprops runs on client startup?
findByProps does the find immediately
which is good for when you are manually checking
so lazy is the way to go then?
Yes
You should never statically declare a find of any type (props, code in a function, etc) without it being lazy loaded
Most of this is more relevant to generally developing a plugin rather than this use-case specifically
aria-label="Hide Member List"
aria-label="Show Member List"
well the arial label appears to be the unique object
<div class="iconWrapper_fc4f04 clickable_fc4f04 selected_fc4f04" role="button" aria-label="Hide Member List" tabindex="0"><svg x="0" y="0" class="icon_fc4f04" aria-hidden="true" role="img" xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24"><path fill="currentColor" d="M14.5 8a3 3 0 1 0-2.7-4.3c-.2.4.06.86.44 1.12a5 5 0 0 1 2.14 3.08c.01.06.06.1.12.1ZM18.44 17.27c.15.43.54.73 1 .73h1.06c.83 0 1.5-.67 1.5-1.5a7.5 7.5 0 0 0-6.5-7.43c-.55-.08-.99.38-1.1.92-.06.3-.15.6-.26.87-.23.58-.05 1.3.47 1.63a9.53 9.53 0 0 1 3.83 4.78ZM12.5 9a3 3 0 1 1-6 0 3 3 0 0 1 6 0ZM2 20.5a7.5 7.5 0 0 1 15 0c0 .83-.67 1.5-1.5 1.5a.2.2 0 0 1-.2-.16c-.2-.96-.56-1.87-.88-2.54-.1-.23-.42-.15-.42.1v2.1a.5.5 0 0 1-.5.5h-8a.5.5 0 0 1-.5-.5v-2.1c0-.25-.31-.33-.42-.1-.32.67-.67 1.58-.88 2.54a.2.2 0 0 1-.2.16A1.5 1.5 0 0 1 2 20.5Z" class=""></path></svg></div>
idk what I am looking for here
Ppl love vendroid
@fossil inlet, <t:1730653179:R>: update all my prs
None
None
None
None
None
None
None
None
This plugin adds easier ways to type the blue letter emojis (:regional_indicator_*:).
Option 1: Autocomplete
Makes e.g. a and aa suggest 🇦 first, b and bb suggest 🇧 first, etc.
https://github.com/user-attachments/assets/8a8dc738-6c55-406c-a57b-078a1354eda3
This will not insert the emoji if e.g. :bb: is typed.
Option 2: Alias
Makes typing e.g. :cc: correct to 🇨. Single letters like :c: don't work to avoid conflicts with 🅰️ and 🅱️.
https://gith...

can be done with the TextReplace plugin already
thanks for your effort though
Not entirely, this works in the context of reactions and the emoji picker as well
userplugger time
this seems fine to me other than that Vencord.Settings.plugins.LetterEmojiShortcut should be replaced with settings.store throughout the whole plugin file
just use +
None
None
None
None
None
None
None
None
- I think the button in the context menu is useless
- What are the lags when enabling the plugin and blocking users?
please upload your images to the thread and link them instead of uploading them to the plugin folder
and then force push them outside of history so people don't have to pull an extra 100kb every time they clone the repo
shouldnt matter bcs prs get squashed
oh right forgor we squash merge
@rugged spire i will squash you
@fossil inlet's Message: @rugged spire i will squash you
3.84% Identity attack
7.63% Compassion (beta)
7.84% Sexually explicit
15.6% Inflammatory
21.9% Severe toxicity
24.15% Profanity
36.81% Affinity (beta)
54.82% Toxicity
61.64% Threat ```
Powered by <https://www.perspectiveapi.com/>
it worked
were you baiting me into running that
no
i mean it was accurate
there should be something like vencord bisect to find out which plugin is causing a bug
@rugged spire rate idea
Telling people about binary searching is smth we do inside of the MC community to make people not try to remove 300 mods one by one
I have this tag for it
A binary search can be used to quickly find a specific mod causing trouble, which can be especially useful when logs don't give a conclusive answer to your issue.
Start by removing or disabling half of your mods, then test if the problem still occurs. If it does, remove half of the remaining mods and test again. If it doesn't, add back half of the mods you just removed.
Keep in mind you don't have to stick strictly to halves each time, and may have to enable some library mods like Fabric API out of order.
By repeating this on an increasingly smaller set of mods, you'll find the problematic mod within a few iterations.
Making a command to do it automatically like what git bisect do would be 300IQ+ move proving you are 100 parallel universe ahead of us

this happens with any group icon
(also please turn off desktop audio in obs omfg)
I could only get it to work with stock group icons
Setting a custom one didn't work
Including the music in your screen recording is the fun part
can you repro with this
idk if I didnt merge in buggy code yet or it just doesnt occur for me
guhhhh
lol funny
I'll see later
#1304101843399348305 message apparently this change is live again if you could remove this message
Wouldn't that be super unreliable
avg discord
canary n ptb
None
None
None
None
None
findByCode("will be removed in v4")
findByCode("[zustand persist middleware]")
mapMangledModule("expression-picker-last-active-view", {
useExpressionPickerStore: t=>typeof t!="function"?!1:Ia(Function.prototype.toString.call(t),e)...
})
None
None
bitches
ConsoleJanitor (found no module):
ID: -
Match: ```
[DEPRECATED] Default export is deprecated. Instead use `import { create } from 'zustand'
**__ConsoleJanitor (found no module):__**
ID: `-`
Match: ```
[DEPRECATED] `getStorage`, `serialize` and `deserialize` options are deprecated. Use `storage` option instead.
ConsoleJanitor (found no module):
ID: -
Match: ```
[DEPRECATED] Default export is deprecated. Instead use import { createStore } from 'zustand/vanilla'.
**__ConsoleJanitor (found no module):__**
ID: `-`
Match: ```
[DEPRECATED] `context` will be removed in a future version. Instead use `import { createStore, useStore } from 'zustand'`. See: https://github.com/pmndrs/zustand/discussions/1180.
ConsoleJanitor (found no module):
ID: -
Match: ```
[DEPRECATED] Default export is deprecated. Instead use import { shallow } from 'zustand/shallow'.
mapMangledModule("useSyncExternalStoreWithSelector:,Object.assign", {
zustandCreate: e=>typeof e=="function"...
})
mapMangledModule("expression-picker-last-active-view", {
useExpressionPickerStore: t=>typeof t!="function"?!1:Ia(Function.prototype.toString.call(t),e)...
})
None
None
ConsoleJanitor (found no module):
ID: -
Match: ```
[DEPRECATED] Default export is deprecated. Instead use `import { create } from 'zustand'
**__ConsoleJanitor (found no module):__**
ID: `-`
Match: ```
[DEPRECATED] Default export is deprecated. Instead use import { createStore } from 'zustand/vanilla'.
ConsoleJanitor (found no module):
ID: -
Match: ```
[DEPRECATED] Default export is deprecated. Instead use import { shallow } from 'zustand/shallow'.
mapMangledModule("expression-picker-last-active-view", {
useExpressionPickerStore: t=>typeof t!="function"?!1:Ia(Function.prototype.toString.call(t),e)...
})
None
None
nvm...
we should crash prove vencord
make all webpack finds fail and fix any
fun!
Forked v3 or v4
v4
why listen to the warnings when you can simply remove the warnings 
the warnings are kinda stupid actually
right
like we patch eslint to make it recognise \i
yeah
im gonna do this rn
nvm
later
should we make that a build type?
force enables every plugin & makes every webpack find fail
to detect potential crashes
okay I fixed crashing
what's the worst that can happen by try catching a hook
lets just hope it always errors when it does LOL
is it like a hook it calls inside patch?
i still wanna do this
im sure there are more things that could cause crashes
maybe we can even automate that test somehow
like detect if there are any unusual errors
yeah
there sure is
I think we should have branch specific builds too
anyways I'm pushing this to main
thats kinda tough to do
we would have to base it on build id
but we cant get that that early can we?
nop
GLOBAL_ENV.SENTRY_TAGS.buildId
build hash you can get from response headers
build id you can get from the chunkloader
too late lol
o
uhh
I guess the bump commit is gonna stay there
but lets push the tag another day
oh i thought u alr did
nop
I was kinda expecting somethign like this to happen
or another plugin to have an issue which we didnt see
ConsoleJanitor (found no module):
ID: -
Match: ```
[DEPRECATED] Passing a vanilla store will be unsupported in a future version. Instead use import { useStore } from 'zustand'.
**__ConsoleJanitor (found no module):__**
ID: `-`
Match: ```
[DEPRECATED] `getStorage`, `serialize` and `deserialize` options are deprecated. Use `storage` option instead.
ConsoleJanitor (found no module):
ID: -
Match: ```
[DEPRECATED] context will be removed in a future version. Instead use import { createStore, useStore } from 'zustand'. See: https://github.com/pmndrs/zustand/discussions/1180.
mapMangledModule("useSyncExternalStoreWithSelector:,Object.assign", {
zustandCreate: e=>typeof e=="function"...
})
mapMangledModule("expression-picker-last-active-view", {
useExpressionPickerStore: t=>typeof t!="function"?!1:Ia(Function.prototype.toString.call(t),e)...
})
None
None
None
mapMangledModule("expression-picker-last-active-view", {
useExpressionPickerStore: t=>typeof t!="function"?!1:Ia(Function.prototype.toString.call(t),e)...
})
None
None
ughhh
alright finally
can someone lock support I cant be bothered dealing with people who cant read
yes
its on stable
lock #🏥-vencord-support-🏥 until you push something to fix please
oop
@granite wharf tell people to update
All fixed?
yeah
None
None
None
None
#1257025907625951423 is updated but the joins are still high
maybe lets... wait an hour
None
None
None
None
but either way most people wouldnt have updated in time
as soon as update is pushed the join activity goes down lmao
I just remembered we have a popup to update to Vencord when it crashes
I hope that still works
it did, i got it
that has to be the reason a lot of people dont even complain
since a lot wouldnt know they had to use the installer or something to fix it
just keep it broken so we gain 5k members like that one time
Break things to inflate the member count
that's so true
get ntts to talk about vencord too… since that makes the member count go up
what if we shown a message in top like this to alert vencord users
If they're joining because their vencord is crashing they're not gonna see it
LMAO
wtf did they do while I was sleeping
my bad I’ll tell them to wait next time 
vscode loves shoving so much useless fucking info in my face
im pinned to 1.89.1 because they decided to break source maps when debugging js in later versions

needed to find out what plugin was causing an issue so i made this
normally, you would reload after pressing each button but i didnt want the video to be five years long
None
None
None
None
None
None
None
None
stock discord bug my beloved
the stock discord bug being you cant filter by tags in forum channels you dont have the permission to set
@limber skiff was trying to fix viewicons opening when it shouldnt with gdm icons
and ran into weird issue
this patch
{
find: /\.recipients\.length>=2(?!<isMultiUserDM.{0,50})/,
replacement: {
match: /null==\i\.icon\?.+?src:(\(0,\i\.\i\).+?\))(?=[,}])/,
replace: (m, iconUrl) => `${m},onClick:()=>$self.openAvatar(${iconUrl})`
}
},
applies to module 515753
but when i add this patch
which only matches module
266076
{
find: "[\"aria-hidden\"],\"aria-label\":",
replacement: {
match: /(src:(.*?))(?=})/,
replace: "$1,onClick:()=>$self.openAvatar($2)"
}
},
the first patch matches module 266076 and fails with a syntax error
nevermind
i found it out


