#๐พ-core-development
1 messages ยท Page 48 of 1

Aethcord 
yrah
vfaq themes
open the dev tools with CTRL + Shift + i and click on the "console" tab at the top. Then paste and run (with enter) the following code.
It will
- disable custom css (you can turn it back on in Vencord Settings)
- copy your current theme links to your clipboard as a backup
- remove all themes
(() => {
Vencord.Settings.useQuickCss = false
copy(Vencord.Settings.themeLinks.join("\n"))
Vencord.Settings.themeLinks = []
})()
open the dev tools with CTRL + Shift + i and click on the "console" tab at the top. Then paste and run (with enter) the following code.
It will
- disable custom css (you can turn it back on in Vencord Settings)
- copy your current theme links to your clipboard as a backup
- remove all themes
(() => {
Vencord.Settings.useQuickCss = false
copy(Vencord.Settings.themeLinks.join("\n"))
Vencord.Settings.themeLinks = []
})()
Discord Account
Enderteck#0172
What is it that you'd like to see?
I'd love to see a way to translate vencord. I can contribute for the french translation
Request Agreement
- [X] This is not a plugin request
how scuffed is patching a component to include a prop that adds a little bottom margin on that component 
that's fine mostly, but can't u use css to do that
I don't know css, and I just want to fix reviewdb in here ("Member since" is what I'm patching)
way simpler
i could add top margin to the review component, but then that's gonna make it weird on regular profile ๐ตโ๐ซ
add a margin top to the User Reviews heading
oh
does the member since have any specific classes
hmmm
[class|=section]:has(> [class|=memberSinceContainer) + .ReviewDB {
marginTop: 8px;
}```
should work
This plugin should be in the Vencord because it's so useful to share stickers.
oh is it cause of the non kebab case className ReviewDB? honestly I would just fix the reviewdb classnames to be more consistent with the rest of Vencord, such as .vc-rdb-foo
How it should look:

How it looks:

its also good to mention that it stops when scrolling or when using the chat searcher too
also reverse of this would be cool but not sure how useful it'd be neat is all
also reverse of this would be cool but not sure how useful it'd be neat is all if someone preferred the voice message ui
how about just put them in a folder? folders are always nice especially because you can add different names to them and it helps you organize your servers a lot better
I did implement it and it did feel useless!
As the name implies, a number showing the amount of mutual servers the user is in next to their username in chat and in the sidebar
This is useful for finding users that you might know easily
his ass is not converting issue to discussion
I notice it tends to get a bit slow loading the full member count(especially on big servers with thousands of members) so perhaps it would be faster to load an approximation? For example, load 29K instead of 29,318(as a setting, not everyone would like that change!).
Fixed!
Also, some members, like myself, don't really care about the amount of online members, so I think it would be useful to be able to disable that to declutter the member list.
You can do this with css
i forgot you could even do that lmao
^
guh
Basically a plugin that allows you to bind a text to a specified key on your keyboard (macro) so you can send it anytime you want with a single press of a key
Bindable keys are hard coded since some of them were creating an unexpected behaviour
I'm having trouble finding the dm widget :p
Did you find it? And by that, do you mean the profile bar on the right?
import { Tooltip } from "@webpack/common";
const url = platform.getPlatformUserUrl?.(connection);
this matcher is very specific, are you sure this is necessary? You seem to be matching the profile theme, why not use the function call you match manually? It takes the user and their profile, both of which are passed as an argument to the function your code is inside (accessible via arguments[0].user and argument[0].profileTheme)
same as below, you can get this via findByCode("().lastSection")
you can make this more elegant using the :is operator
:is([class*="userProfile"], [class*="userPopout"]) [class*="bannerPremium"],
@lime stone do you still need help finding the dm widget thing? I can find it for you if you want, I iust need you to explain what that is cuz I couldn't understand
i think this
wacky it got merged finally
TAGS CREATION GLITCH
Hi! Is this still an issue?
Would be awesome if this was combined with messageTags instead.
Not much is added other than the keyboard shortcuts.
Successfully deployed to the following URLs:
vencord-website โ ./
vencord-website.vercel.app
vencord-website-git-main-vendicated.vercel.app
vencord.dev
vencord-website-vendicated.vercel.app
www.vencord.dev
Allows the user to lock discord with a 4 digit passcode, instead of having to log out, saving up time and giving a bit of extra privacy.
- Lets the user use the keybinds CTRL + L (or custom) to put a locked screen where you have to place a 4 digit code to access discord.
- Works well to avoid casual people in places from snooping around.
The idea came from the plugin in BetterDiscord: https://betterdiscord.app/plugin/PasscodeLock
Me when Ctrl+I -> delete password entry element
me when i open the inbox and delete something random called "password"
BadgeAPI (had no effect):
ID: 655619
Match: /alt:" ","aria-hidden":!0,src:(?=.{0,10}\b([A-Za-z_$][\w$]*)\.(?:icon|key))/g
WebContextMenus (had no effect):
ID: 759725
Match: /return [A-Za-z_$][\w$]*\.[A-Za-z_$][\w$]*\?(?=\(0,[A-Za-z_$][\w$]*\.jsxs?\)\([A-Za-z_$][\w$]*\.Menu)/
WebContextMenus (had no effect):
ID: 638525
Match: /(?<=showApplicationCommandSuggestions;)if\(![A-Za-z_$][\w$]*\.[A-Za-z_$][\w$]*\)/
WebContextMenus (had no effect):
ID: 638525
Match: /("submit-button".+?)(\(0,[A-Za-z_$][\w$]*\.jsx\)\([A-Za-z_$][\w$]*\.MenuGroup,\{children:[A-Za-z_$][\w$]*\}\),){2}/
BadgeAPI (found no module):
ID: -
Match: Messages.ACTIVE_DEVELOPER_BADGE_TOOLTIP
None
JSHandle@error
my hatred
Honestly if you do it right a "discord pin" plugin could be cool
(Right meaning not just "overlay an element")
JSHandle@error is very descriptive
BadgeAPI (had no effect):
ID: 655619
Match: /alt:" ","aria-hidden":!0,src:(?=.{0,10}\b([A-Za-z_$][\w$]*)\.(?:icon|key))/g
WebContextMenus (had no effect):
ID: 638525
Match: /(?<=showApplicationCommandSuggestions;)if\(![A-Za-z_$][\w$]*\.[A-Za-z_$][\w$]*\)/
WebContextMenus (had no effect):
ID: 638525
Match: /("submit-button".+?)(\(0,[A-Za-z_$][\w$]*\.jsx\)\([A-Za-z_$][\w$]*\.MenuGroup,\{children:[A-Za-z_$][\w$]*\}\),){2}/
BadgeAPI (found no module):
ID: -
Match: Messages.ACTIVE_DEVELOPER_BADGE_TOOLTIP
None
JSHandle@error
what's that
yop
Like holy notes from better discord? (Or was it powercord?)
Oh nvm
This
define doing it right
Yeah I misunderstood what you said
it's impossible to do it right if by right you mean being actually secure
Actually being secure and not smth you can bypass with the devtools
You could encrypt the token with AES 
Ah yes
though tbh just screen lock lmao
I always lock my screen when I leave my pc, I can't see why some people find that hard to do
Is there any reason you can't just lock your computer?
That would be too easy, we need smth challenging.
Reddit + discus moment
I can't think of an OS w/o a lockscreen
Wait I can
SerenityOS, but does that count?
If it doesn't let you lock your computer that's on you for using a bad os
A person that would ask for a plugin that locks discord would most likely use an OS that has a lockscreen imho
Not viable, a pin of 4 digits being the key for the encryption means that it would take at most 1000 attempts to find the correct one
On a modern computer that is nothing
But that would leave you logged out
there's no way for us to make it properly safe, just lock ur screen bruh
If we did what tyman said with AES
1000? Isn't it 10000
10^4
Not if the token is encrypted and removed from local storage
But anyways yeah just use screen lock
When activated, freeze discord and have a notice asking for ransom to unfreeze discord.
This plugin would open the donate page.
(A tiny x button would be at the top right corner, as small as a mobile ad's close button, to unfreeze discord w/o paying.)
PS: This is an Easter egg, not an actual ransomware.
Yes, forgor to add a 0 there
??ร
Easter egg
okay fixed badges
localStorage?
what
whys that embed goofy
did discord break markdown in embeds
Search the world's information, including webpages, images, videos and more. Google has many special features to help you find exactly what you're looking for.
what
huh
Search the world's information, including webpages, images, videos and more. Google has many special features to help you find exactly what you're looking for.
alrighty
lol
Search the world's information, including webpages, images, videos and more. Google has many special features to help you find exactly what you're looking for.
??
weird
lol
u cant have numbers in hyperlinks
i think i broke it somehow
WebContextMenus (had no effect):
ID: 759725
Match: /return [A-Za-z_$][\w$]*\.[A-Za-z_$][\w$]*\?(?=\(0,[A-Za-z_$][\w$]*\.jsxs?\)\([A-Za-z_$][\w$]*\.Menu)/
WebContextMenus (had no effect):
ID: 638525
Match: /(?<=showApplicationCommandSuggestions;)if\(![A-Za-z_$][\w$]*\.[A-Za-z_$][\w$]*\)/
WebContextMenus (had no effect):
ID: 638525
Match: /("submit-button".+?)(\(0,[A-Za-z_$][\w$]*\.jsx\)\([A-Za-z_$][\w$]*\.MenuGroup,\{children:[A-Za-z_$][\w$]*\}\),){2}/
None
Cannot use SettingsStoreAPI without setting as dependency.
WebContextMenus (had no effect):
ID: 638525
Match: /(?<=showApplicationCommandSuggestions;)if\(![A-Za-z_$][\w$]*\.[A-Za-z_$][\w$]*\)/
WebContextMenus (had no effect):
ID: 638525
Match: /("submit-button".+?)(\(0,[A-Za-z_$][\w$]*\.jsx\)\([A-Za-z_$][\w$]*\.MenuGroup,\{children:[A-Za-z_$][\w$]*\}\),){2}/
None
Cannot use SettingsStoreAPI without setting as dependency.
why is that showing
idk ahaha
both of those are weird
i think its cause i force load all chuinks so it loads before settings or whatever
but no dia
can someone point me in the direction of some sort of documentation
im lost asf here
im trying to create a plugin that, on a message sent event, it sends the contents, user, etc to a websocket
here's some WIP docs
๐คจ
sounds sussy
bruh
let me explain
so basically
im making a plugin for steam vr
so it sends me a little notifcation for discord dms
hmm ok im looking at that rn
this is confusing asf
yooo real?
i remember using some hacked up thing that hijacked streamkit to do that
but tbf im usually on discord with an overlay anyways
the point of the plugin is that you can still use or show people other parts of your pc and it automatically toggles discord notifications, sense this plugin hasnt been on vencord my notifications have been disabled
i already requested this before https://github.com/Vendicated/Vencord/discussions/659
i feel like this is the biggest plugin that vencord is missing right now and the 75153 people that downloaded it from betterdiscord agree with me
oh my god why does this client mod not have 4-digit passcode lock
literally unusable must uninstall !!111!!1
Well a "toggle notifications" plugin is much simpler and different than a "lock discord plugin".
But just use do not disturb mode if you don't want notifications?
"lock" as in put an overlay on top of discord
But hey at least they use pbkdf2 for the pin 
yea im trying but its hard
wtf
markdown is dying
wait did I break it with fake nitro thing ๐คจ
ok good
I did not
discord did ๐
@lime stone search for this Profile Panel: user cannot be undefined, that's inside the function that creates the profile panel component, the place you need to patch
foxymachine is typing...
@woeful sable for your steamVR usecase, I kinda suggest that you look into discord's existing options for game integrations. You can subscribe to and listen for notifications over the RPC socket that discord already runs, and you won't be depending on a client mod to implement it. Additionally, discord specifically allows subscribing just to notification events, so you wouldn't even need to do any message filtering yourself.
(I'm very late but better late than never)
the RPC socket is pretty easy to get working (libraries in most languages, if you want to go that route) and tbh much more reliable in the long run than trying to implement a plugin for a client mod (no matter how simple the plugin is)
thanks!
that is what i meant yes
i probably could've found it by searching for other things, it can be very hard though :P
ayy
yes!
Would be awesome if this was combined with messageTags instead.
Not much is added other than the keyboard shortcuts.
Yeah that sounds well, I think I'll do that later this day
PS: Adding a popup that opens with a keybind, that allows you to search for and select a saved message would be nice as well, maybe on another PR?
I could work on that as well
i've managed to patch!
although I should probably make it hidden in streamer mode
force pushing was a mistake
i think i've crashed github oops /j
a
@austere talon https://www.youtube.com/watch?v=9RM2aErJs-s
maybe add it as a recommended extension?
https://github.com/Vendicated/Vencord/blob/main/.vscode/extensions.json
CHECK OUT THE PLUGIN HERE: https://github.com/yoavbls/pretty-ts-errors
I have no idea how I survived without pretty-ts-errors before but it is quickly becoming an essential part of my TypeScript experience. VS Code support for now, more soon?
Hopefully that's enough keywords for people to find this vid in the future
ALL MY VIDEOS ARE POSTED E...
i haven't used typescript much but it's hard to believe this is what you have to deal with!
yep yep
you either have to train your eye to read the blob of text in the error message, or just give up
not many choices
but this plugin makes life easier
lol you got an email too?
from the markdowned diagnostic messages
ahh so this is why pronouns don't show in the modal
this needs to be patched too, but they didn't reuse the component :c
they just created another one on the spot it seems lol
private beta :/ and not accepting new members
because notifications arent the problem, say a family member asks you โcan you go do that?โ instead of logging out and taking time to log back in and keybinds dont even save, you just do ctrl L, look at the better discord plugin and youโll understand, however i do see how this can be confusing.
i was on the edge for a while inbetween using betterdiscord and vencord JUST for this plugin, but to be honest vencord is so clean and neat, this plugin would be the cherry on top.
i really just donโt want friends who visit me to check my dms, you know? and for my keybinds to reset once i log out, and take like 10 tries to log in because i cant type my 40 something letter long password
hm what's private beta
because notifications arent the problem, say a family member asks you โcan you go do that?โ instead of logging out and taking time to log back in and keybinds dont even save, you just do ctrl L, look at the better discord plugin and youโll understand, however i do see how this can be confusing.
also, locking my computer doesnโt really work as it also means i have to put a password which is long there already. and most of my family members use the pc too, not just me so yeah.
From w...
that's a common discord Trend
they don't know how to make components reusable
So they just copy paste code for minor changes
true
i already requested this before https://github.com/Vendicated/Vencord/discussions/659
i feel like this is the biggest plugin that vencord is missing right now and the 75153 people that downloaded it from betterdiscord agree with me
Download count != People that use it
One person can download the same plugin thrice, does that person count as 3 people?
(Yes I am not that dumb, I understand the message that's actually being conveyed)
that doesnโt fix how keybinds donโt really save, and also a qr code takes long anyways too,
just look at how the better discord plugin works.
and yes, its so they donโt see it on accident, or well, the original works for both situations really, but now that i switched to vencord i have to logout every so often.
that doesnโt fix how keybinds donโt really save, and also a qr code takes long anyways too,
just look at how the better discord plugin works.and yes, its so they donโt see it on accident, or well, the original works for both situations really, but now that i switched to vencord i have to logout every so often.
I didn't really see the other thread where you talked about the keybinds before I sent the message you replied to.
As for the security, it only works for people that are not...
thats what they say, but it had worked really well for me for a pretty good time, thereโs a reason a bunch of people have the plugin, and if anything even a plugin that helps save keybinds would be real nice. iโm really set on the lock idea though. also eventually iโd be asked for the pin if i locked my pc, now for discord i can be like โyou donโt need itโ
but the same component is used in the popout and dm profile
whyy
new most commented plugin request
maybe the patch could just replace the duplicate component with the other one which looks exactly the same
If it has 75k downloads, why does it only have 69 likes (nice)!!!!!!
stop
notice how the biggest plugin, calltimecounter has only 1k likes out of 1.6 MILLION downloads, but thatโs a useful plugin right? lets just not involve likes, people dont really use the like button on there i guess
Still doesn't work, has same error message like before
most active GitHub discussion
bruh I just locked it
discussion lagger
Still doesn't work, has same error message like before
Update the extension to the latest version.
Still doesn't work, has same error message like before
Update the extension to the latest version.
It's 1.1.9, right?
If yes, i already have it
hm, maybe i needed to update again
or maybe it's just being inconsistent
yes, the error has gone after reinstalling
but it wasn't there before ๐ตโ๐ซ
please use our support channel then
it only stucks like 15-20s and then it auto closes
Okay thank you! I changed it to not be a managed style
99a7d78 [skip ci] USRBG: Update README link to a more a... - AutumnVN
E

What I meant is you're matching this, but it would be way simpler to just call p.Z yourself
Nevermind, it works now after a few reopenings


you can use a findByCode to find this function
This way you can make your patch way way simpler and don't have to match any variables and instead only use arguments[0]
Wouldn't it require calling it with "o" and "y"? tbh i don't really understand what's going on with (0, p.Z) as it looks like a call with no method.
you can obtain o and y
from arguments
arguments is a magic variable that refers to the arguments of the current function
(0,p.Z)() is the same as var a = p.Z; a()
i hope what i'm saying makes sense to you? @lime stone
if no just feel free to ask
i realised that later
so why isn't it just p.Z()?
poof
/run ```js
const someObj = {
method() { console.log(this) }
}
someObj.method();
(0, someObj.method)()
Here is your js(18.15.0) output @austere talon
{ method: [Function: method] }
<ref *1> Object [global] {
global: [Circular *1],
queueMicrotask: [Function: queueMicrotask],
clearImmediate: [Function: clearImmediate],
setImmediate: [Function: setImmediate] {
[Symbol(nodejs.util.promisify.custom)]: [Getter]
},
structuredClone: [Function: structuredClone],
clearInterval: [Function: clearInterval],
clearTimeout: [Function: clearTimeout],
setInterval: [Function: setInterval],
setTimeout: [Function: setTimeout] {
[Symbol(nodejs.util.promisify.custom)]: [Getter]
},
atob: [Function: atob],
btoa: [Function: btoa],
performance: Performance {
nodeTiming: PerformanceNodeTiming {
name: 'node',
entryType: 'node',
startTime: 0,
duration: 42.83453369140625,
nodeStart: 3.3094940185546875,
v8Start: 6.3908843994140625,
bootstrapComplete: 33.70618438720703,
environment: 16.927398681640625,
loopStart: -1,
loopExit: -1,
idleTime: 0```
see how it's the object the first time and the global the second time
wait i guess you're using some kind of comma operator
basically this refers to the object you call the func on. In the first case that's someObj as we're calling method() via reference to someObj.method. In the second case we use (0, x) to get its value and call it without the context
the same happens when storing the func in a variable
/run ```js
const someObj = {
method() { console.log(this.method) }
}
someObj.method();
(0, someObj.method)();
var variable = someObj.method;
variable()
Here is your js(18.15.0) output @austere talon
[Function: method]
undefined
undefined
i hate js sometimes (most times)
the reason the code uses (0,method)() is because of how Discord's code looked:
import { method } from "someplace"
method()
ohh
so it compiles to
var a = require("someplace")
(0,a.method)()
if it didn't do this, and instead did a.method(), that would change the semantics of the code
ah, but i guess here it doesn't matter?
it doesn't matter in 99% of cases but still needs to be done by the bundler to preserve semantics
yes..
you can just call it directly if that's what you're asking, yeah
but yeah that's why you see (0,foo.bar)() everywhere
i guess it could create confusing errors otherwise
but u can just ignore it and consider it as foo.bar()
the 0 is just to use the comma operator
https://cdn.discordapp.com/emojis/1045735735757647943.gif?size=48&name=mantika&quality=lossless i like it when this is actually this
/run ```js
const obj = { method() { console.log(this.method) } };
(obj.method)();
(0,obj.method)();
Here is your js(18.15.0) output @austere talon
[Function: method]
undefined
yes
it's whatever
the important stuff is just the comma operator, as it returns the rightmost thing as a value
oh
no it doesnt matter at all what the 0 is
you could also do (obj.method,1+1,object.method(),window,globalThis,obj.method)()
so everything would be evaluated but only the last called?
so i guess it allows you to run random code without "touching the ground"
anyway u dont need to worry about this
touching the ground = ;
just pretend it's not there :P
ok lol
it is interesting
this feels like something you don't need unless you're doing super... low-level... js!
lol
yeah you wouldn't ever encounter this in normal code
i'm pretty sure i remember other ways to do it
bind i think
i guess this is shorter
Well bind has a different purpose
the purpose of this is to not have any this attached
the purpose of bind is to have a custom this attached
what u do encounter in normal code tho is losing the this when passing a method as value
/run ```js
const MyCoolLogger = {
log(...args) {
console.log("MyCoolLogger", ...args)`
},
error(...args) {
this.log("error", ...args)
}
}
MyCoolLogger.error("oh no!!");
[1, 2, 3].forEach(v => MyCoolLogger.error(v));
[1, 2, 3].forEach(MyCoolLogger.error);
@austere talon I only received js(18.15.0) error output
/piston/jobs/831f7786-2b1f-4182-a1e6-815bb0146654/file0.code:13
SyntaxError: Unexpected end of input
at internalCompileFunction (node:internal/vm:73:18)
at wrapSafe (node:internal/modules/cjs/loader:1176:20)
at Module._compile (node:internal/modules/cjs/loader:1218:27)
at Module._extensions..js (node:internal/modules/cjs/loader:1308:10)
at Module.load (node:internal/modules/cjs/loader:1117:32)
at Module._load (node:internal/modules/cjs/loader:958:12)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
at node:internal/main/run_main_module:23:47
Node.js v18.15.0
erm
oh no!!
/run
const MyCoolLogger = {
log(...args) {
console.log("MyCoolLogger", ...args)
},
error(...args) {
this.log("error", ...args)
}
}
MyCoolLogger.error("oh no!!");
[1, 2, 3].forEach(v => MyCoolLogger.error(v));
[1, 2, 3].forEach(MyCoolLogger.error);
Here is your js(18.15.0) output @lime stone
MyCoolLogger error oh no!!
MyCoolLogger error 1
MyCoolLogger error 2
MyCoolLogger error 3
/piston/jobs/a49a9b3d-9b08-4358-8096-a3039dff1fe7/file0.code:6
this.log("error", ...args)
^
TypeError: this.log is not a function
at error (/piston/jobs/a49a9b3d-9b08-4358-8096-a3039dff1fe7/file0.code:6:15)
at Array.forEach (<anonymous>)
at Object.<anonymous> (/piston/jobs/a49a9b3d-9b08-4358-8096-a3039dff1fe7/file0.code:12:11)
at Module._compile (node:internal/modules/cjs/loader:1254:14)
at Module._extensions..js (node:internal/modules/cjs/loader:1308:10)
at Module.load (node:internal/modules/cjs/loader:1117:32)
at Module._load (node:internal/modules/cjs/loader:958:12)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
at node:internal/main/run_main_module:23:47
Node.js v18.15.0
same thing
you had a `
you pass MyCoolLogger.error to forEach as a value
So you remove the this context
I still think this behaviour is really dumb and shouldn't exist
but it's too late for js to change it now
yes
Funny that you did that on a plugin request about locking discord.
virtually everything in js makes no sense to me though
oospie!
ohh
JS is like English, it only makes sense when you don't question how things work.
- You have to memorize a lot of shit cause grammar is not really a thing.
this leads to so many hard to debug bugs for beginners
I struggled with that a lot as a beginner
as an experienced js developer you just know you can't pass a method as a value like that
yeah true
or c++'s same thing with & at the beggining
although this is kind of acting as a class with all static methods i guess
js classes are just really bad!
which is why I almost always opt not to use a class
those are terrible for other reasons
and ive rented about them a lot of times
they're truly private with no way to access them outside of the class
which is just terrible
don't you want things private sometimes?
i personally find it a hassle that you need to type the prefix when accessing them
yes! but not truly private
there are many many valid use cases for wanting to access private members
and every language doing it correctly offers you ways to do that
well that's what reflection is often for
you need a native library doing magic with the native javascript engine like v8 or use the debugger
or patching it i guess
but that's not portable and impossible in the browser
java does this right
java even lets u change final members :3
i don't think you can any more
u can
This reminded me of c#
Where the visibility is kinda fake
It only applies at compile time, so if you target a fake dll that has everything public, even when you use the real dll at runtime it will work fine.
oh, java has an illegalaccesserror iirc
well, unless you override the class loading
and do a casual & ~Opcodes.ACC_FINAL or whatever (i think)
We don't really need visibility modifiers in JS
You can use a scoped variable that is not exported anywhere
or have something about being fired in the name lmao
Doesn't work well with classes ig
sometimes you want stuff private so that it's clear it's internal
const gg = () => {
let scopedVariable = "hi";
return {
getTxt() { return scopedVariable; }
}
}
gg().getTxt()
Should work
(I'm on mobile)
/run ```java
import java.lang.reflect.*;
class Silly {
private final String j;
private static final Silly instance = new Silly("heh");
public Silly(String j) {
this.j = j;
}
public static void main(String... args) throws Throwable {
var modField = Field.class.getDeclaredField("modifiers");
modField.setAccessible(true);
var instanceField = Silly.class.getDeclaredField("instance");
modField.set(instanceField, instanceField.getModifiers() & ~Modifier.FINAL);
instanceField.set(null, new Silly("oop"));
System.out.println(instance.j);
}
}
@austere talon I only received java(15.0.2) error output
Exception in thread "main" java.lang.NoSuchFieldException: modifiers
at java.base/java.lang.Class.getDeclaredField(Class.java:2569)
at Silly.main(file0.code.java:12)
i've tried this on newer java versions and it doesn't work
cause they filter what u can access
how do you do that?
:i_tried:
i think you have to do it with command-line flags
is there any way which doesn't require that?
i don't think so
I'd assume it depends on the JVM
well i did already know about this but it's not ideal
something like --allow-access
rn i'm trying to get a good string to search but devtools keeps crashing xd
hm, ,"--profile-gradient-primary-color" should work
/run ```java
import java.lang.reflect.;
import java.lang.invoke.;
class Silly {
private final String j;
private static final Silly instance = new Silly("heh");
public Silly(String j) {
this.j = j;
}
public static void main(String... args) throws Throwable {
var lookup = MethodHandles.privateLookupIn(Field.class, MethodHandles.lookup());
var modifiers = lookup.findVarHandle(Field.class, "modifiers", int.class);
var instanceField = Silly.class.getDeclaredField("instance");
modifiers .set(instanceField, instanceField.getModifiers() & ~Modifier.FINAL);
instanceField.set(null, new Silly("oop"));
System.out.println(instance.j);
}
}
@austere talon I only received java(15.0.2) error output
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access using Lookup on Silly (file:/piston/jobs/94693477-efff-4b6c-99f5-55f392b2e90f/file0.code.java) to class java.lang.reflect.Field
WARNING: Please consider reporting this to the maintainers of Silly
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
Exception in thread "main" java.lang.IllegalAccessException: Can not set static final Silly field Silly.instance to Silly
at java.base/jdk.internal.reflect.UnsafeFieldAccessorImpl.throwFinalFieldIllegalAccessException(UnsafeFieldAccessorImpl.java:76)
at java.base/jdk.internal.reflect.UnsafeFieldAccessorImpl.throwFinalFieldIllegalAccessException(UnsafeFieldAccessorImpl.java:80)
at java.base/jdk.internal.reflect.UnsafeQualifiedStaticObjectFieldAccessorImpl.set(UnsafeQualifiedStaticObjectFieldAccessorImpl.java:77)
at java.base/java.lang.reflect.Field.set(Field.java:793)
this works but u also need to pass a bunch of command line flags
/run ```sh
cat > Silly.java << 'EOF'
import java.lang.reflect.;
import java.lang.invoke.;
class Silly {
private final String j;
private static final Silly instance = new Silly("heh");
public Silly(String j) {
this.j = j;
}
public static void main(String... args) throws Throwable {
var lookup = MethodHandles.privateLookupIn(Field.class, MethodHandles.lookup());
var modifiers = lookup.findVarHandle(Field.class, "modifiers", int.class);
var instanceField = Silly.class.getDeclaredField("instance");
modifiers .set(instanceField, instanceField.getModifiers() & ~Modifier.FINAL);
instanceField.set(null, new Silly("oop"));
System.out.println(instance.j);
}
}
EOF
javac Silly.java
java --add-opens=java.base/java.lang.reflect=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED Silly
@austere talon I only received sh(5.2.0) error output
file0.code: line 25: javac: command not found
file0.code: line 26: java: command not found
yes i'd already used this from stackoverflow a few years ago xD
anyway
this breaks with jdk18

i think the best way to do this now is to use JNI
android has so called HiddenAPI, stuff u cant access with reflection but u can easily bypass it with JNI
**UnitTest.java: **Lines 130-152
// Should fail due to being hidden api
try {
obtainHiddenMethod();
} catch (NoSuchMethodException ignored) {
hiddenMethodFound = false;
}
try {
obtainHiddenField();
} catch (NoSuchFieldException ignored) {
hiddenFieldFound = false;
}
assertFalse("Method found without bypass", hiddenMethodFound);
assertFalse("Field found without bypass", hiddenFieldFound);
XposedBridge.disableHiddenApiRestrictions();
// Now should work
var method = obtainHiddenMethod();
var field = obtainHiddenField();
assertEquals(method.getName(), "setHiddenApiExemptions");
assertEquals(field.getType(), Class.forName("dalvik.system.VMRuntime$HiddenApiUsageLogger"));
wait nvm i don't think you can change flags when the class is already loaded
unless you're using a special โจ jvm
but if you're making a mod for something you probably are using a classloader!
hehe
u can very likely still do this with Unsafe
well class transformation is probably the most safe
(i.e. it's unlikely to stop working)
i'm curious why you'd want to modify something final if you're not also doing other magic
one issue is that arguments[0] would need to be captured ๐
oh well not too hard
imagine if discord was made with awt!
I still make that mistake 
yeah u can still do this with unsafe
/run ```java
import java.lang.reflect.;
import java.lang.invoke.;
import sun.misc.Unsafe;
class Silly {
private final String j;
private static final Silly instance = new Silly("heh");
public Silly(String j) {
this.j = j;
}
public static void main(String... args) throws Throwable {
var f = Unsafe.class.getDeclaredField("theUnsafe");
f.setAccessible(true);
var unsafe = (Unsafe) f.get(null);
unsafe.putObject(instance, unsafe.objectFieldOffset(Silly.class.getDeclaredField("j")), "oop");
System.out.println(instance.j);
}
}
Here is your java(15.0.2) output @austere talon
oop
this looks like directly accessing memory though which doesn't look good
you're changing what it points to?
but yeah Unsafe is like the name implies inherently unsafe as it allows u to do raw memory manipulation
it literally has memCpy
/run
import java.lang.reflect.*;
import java.lang.invoke.*;
import sun.misc.Unsafe;
class Silly {
private final String j;
private static final Silly instance = new Silly("heh");
public Silly(String j) {
this.j = j;
}
public static void main(String... args) throws Throwable {
var f = Unsafe.class.getDeclaredField("theUnsafe");
f.setAccessible(true);
var unsafe = (Unsafe) f.get(null);
unsafe.putObject(instance, unsafe.objectFieldOffset(Silly.class.getDeclaredField("j")), new Silly("oop"));
System.out.println(instance.j);
}
}
Here is your java(15.0.2) output @lime stone
Silly@4d49af10
/run
import java.lang.reflect.*;
import java.lang.invoke.*;
import sun.misc.Unsafe;
class Silly {
private final int j;
private static final Silly instance = new Silly(2);
public Silly(int j) {
this.j = j;
}
public static void main(String... args) throws Throwable {
var f = Unsafe.class.getDeclaredField("theUnsafe");
f.setAccessible(true);
var unsafe = (Unsafe) f.get(null);
unsafe.putObject(instance, unsafe.objectFieldOffset(Silly.class.getDeclaredField("j")), new Silly("oop"));
System.out.println(instance.j);
}
}
@lime stone I only received java(15.0.2) error output
file0.code.java:18: error: incompatible types: String cannot be converted to int
unsafe.putObject(instance, unsafe.objectFieldOffset(Silly.class.getDeclaredField("j")), new Silly("oop"));
^
Note: Some messages have been simplified; recompile with -Xdiags:verbose to get full output
1 error
error: compilation failed
/run
import java.lang.reflect.*;
import java.lang.invoke.*;
import sun.misc.Unsafe;
class Silly {
private final int j;
private static final Silly instance = new Silly(2);
public Silly(int j) {
this.j = j;
}
public static void main(String... args) throws Throwable {
var f = Unsafe.class.getDeclaredField("theUnsafe");
f.setAccessible(true);
var unsafe = (Unsafe) f.get(null);
unsafe.putObject(instance, unsafe.objectFieldOffset(Silly.class.getDeclaredField("j")), new Silly(5));
System.out.println(instance.j);
}
}
Here is your java(15.0.2) output @lime stone
-518367768
haha
this is very unsafe indeed
/run
import java.lang.reflect.*;
import java.lang.invoke.*;
import sun.misc.Unsafe;
class Silly {
public static void main(String... args) throws Throwable {
var f = Unsafe.class.getDeclaredField("theUnsafe");
f.setAccessible(true);
var unsafe = (Unsafe) f.get(null);
unsafe.getByte(0);
}
}
Here is your java(15.0.2) output @lime stone
#
# A fatal error has been detected by the Java Runtime Environment:
#
# SIGSEGV (0xb) at pc=0x00007f9fcd2c247e, pid=5995, tid=5996
#
# JRE version: OpenJDK Runtime Environment (15.0.2+7) (build 15.0.2+7-27)
# Java VM: OpenJDK 64-Bit Server VM (15.0.2+7-27, mixed mode, sharing, tiered, compressed oops, serial gc, linux-amd64)
# Problematic frame:
# J 135 c1 jdk.internal.misc.Unsafe.getByte(J)B java.base@15.0.2 (7 bytes) @ 0x00007f9fcd2c247e [0x00007f9fcd2c2420+0x000000000000005e]
#
# Core dump will be written. Default location: /piston/jobs/1d92ba6f-7682-4301-b66d-adcd3ffb5535/core.5995
#
# An error report file with more information is saved as:
# /piston/jobs/1d92ba6f-7682-4301-b66d-adcd3ffb5535/hs_err_pid5995.log
Compiled method (c1) 1142 135 3 jdk.internal.misc.Unsafe::getByte (7 bytes)
total in heap [0x00007f9fcd2c2290,0x00007f9fcd2c2580] = 752
relocation [0x00007f9fcd2c23e8,0x00007f9fcd2c2410] = 40
main code [0x00007f9fcd2c2420,0x00007f9fcd2c2500] = 224
stub code [0x00007f9fcd2c2500,0x00007f9fcd2c2530] = 48
metadata [0x00007f9fcd2c2530,0x00007f9fcd2c2538] = 8
scopes data [0x00007f9fcd2c2538,0x00007f9fcd2c2548] = 16
scopes pcs [0x00007f9fcd2c2548,0x00007f9fcd2c2578] = 48
dependencies [0x00007f9fcd2c2578,0x00007f9fcd2c2580] = 8
haha
do you mind if i just hardcode e or should i capture it?
Aliucord uses unsafe a bunch
whyy
we mainly use it for unsafe.allocateInstance()
why do you need that?
which lets u allocate instances of classes without invoking constructor
aka of classes you normally wouldn't be able to construct
such as..?
for example any class that has a private constructor
some classes are impossible to construct
a lot of Discord's auto generated classes are
their gson classes
they auto-generate gson classes?
why do you need to create them?
ohh, i see you probably do
i guess if you want to create a custom instance of something normally deserialised from json
we should move to #๐งฉ-plugin-development btw :P
^
actually relevant
it also lets u do cursed stuff like not pass constructor args
where?
here
/run ```js
function foo(e) {
console.log(arguments[0])
}
foo("meow")
Here is your js(18.15.0) output @austere talon
meow
i think the most cursed thing about arguments is that it syncs with the actual argument variables
/run ```js
function foo(e) {
arguments[0] = "eeeeh?";
console.log(e);
}
foo("meow")
Here is your js(18.15.0) output @austere talon
eeeeh?
it's a pointer??
well i guess pointers are everywhere but hidden :p
what if you pass arguments into another function?
/run ```js
function printMyFirstArg() {
console.log(printMyFirstArg.caller.arguments[0]);
}
function foo(e) {
printMyFirstArg()
}
foo("hiii")
Here is your js(18.15.0) output @austere talon
hiii
javascript is a beautiful language
Function.caller & Function.arguments are both deprecated tho and won't work in strict mode which discord uses 
you can access the entire callstack and all their arguments
but deprecated and throws an error in strict mode
๐ญ
meh
it would be bad to depend on that
if the order changes you are screwed
discord's code is strict so we can't
vencord is strict too
js has so many cursed things
Why not use kotlin?
personally i prefer java
Better than java and can compile to js
they're both cool though!
:pitchfork:
kotlin js is unusable
i find it awkward doing var thing: Type
also final arguments is annoying
i like mutating things to the point of them not being recognisable!
I don't get what you mean by final arguments
that's why i never use it
you often have to in kotlin though
fun noFun(input: String) {
input += "hi";
}
this doesn't work :c
- const foo: SomeType = bar
+ const foo = bar as SomeType
Kotlin can infer types.
I only declare the types for function signatures
i prefer the 2nd
i also kind of prefer optionals to null, but javas lambdas kind of ruin it
optionals??
in classes though
i hate optionals they're terrible
hm, maybe just don't use null then
You are doing the same thing with TS so...
null is good
Look, I can spend an entire day hating java, but I won't, cause java ain't worth my time

anyway i find java is a better experience for me
one of the main reasons is because intellij takes too much ram and eclipse and netbeans have virtually no support
Have you used C#?
well eclipse keeps hanging
You will fall in love with LINQ
in 2017-2018 i think
You don't need VS for C#
well there's rider which costs money
And you can run C# on Linux with mono
i think there's a vsc extension?
hm, yes
You can sail the high seas
Uhh, vscode should work well enough
But I prefer Rider
i think it's a recurring payment though - i'm not a fan of those
u can get rider for free if you're a student or open source developer
yop
my GitHub thing runs out in like a month or two
I will be open source developer yopo

So, i was using discord-screenaudio (i'm using Arch btw) for a while now, and it is very convenient since standart discord client can't even stream sound out-of-the-box, and i, unlike many linux users, am too lazy to fix this issue myself.
Vencord has some very cool plugins, but it seems that the installer cannot install it on a discord-screenaudio client. Will there be any way to fix this, or, perhaps, a similar feature?
you can still use it just fine, right underneath the private beta notice is this
For connections to the RPC server, a list of approved testers is used to restrict access while you're still developing. You can invite up to 50 people
It's not amazingly ideal but it's no worse than needing a client mod to use it.
62e87fb RelationShipNotifier: Support multiple users - Vendicated
I was originally gonna migrate these but figured it wouldn't be worth the trouble and also not even guaranteed they're from the current user
@pure ledge is this alright?
hmm, for the profile panel it will be hard to locate this
function o
there's nothing both unique and unchanging here
whats that
the profile panel always uses the global theme setting afaik
it doesn't matter whether the accessibility option is on or off
this is trivial this hook is just useTheme
useTheme?
what's that?
const ThemeStore = findStoreLazy("ThemeStore");
export function useTheme() {
return useStateFromStores([ThemeStore], () => ThemeStore.theme);
}
export default useTheme;
this is the entire code of that module
people only wont get notified from when they last closed discord to when relationshipnotifier updates
couldn't i just do ThemeStore.theme?
i'm trying to do this inside the patch
ohh, well in my testing the theme made the code run again anyway
basically all i know about react is it's meant to make a thing happening make another thing happen lmao
could i just pass in useTheme()?
how would i use this inside a patch?
well i guess i could extract it to two separate functions
tested my pr and it seems to work
actually yeah, people will update then restart
so they will lose like 10 seconds of coverage at most
yeah
why not :P
inspired by eclipse ide
lol
i'm pretty sure that's what it defaults to if it doesn't have any local variable info
(when overriding)
Discord Account
No response
What is it that you'd like to see?
I'd love to be able to sort the plugin list for last updated, last added and such. This would enable to better look for plugins.
Other sorting ideas are number of users and maybe a rating system.

Request Agreement
- [X] This is not a plugin request
its just that it's trying to get current user
We don't have data about any of these except recently added, the rest are not not possible. The only way to make the others work would be by adding analytics but we're definitely not doing that
wait useTheme is from shikicodeblocks
ohh, right
you were talking about a hypothetical module
the small module u showed
thats useTheme
i explained it badly!
anyway no need to use it!
i've made it much cleaner now! :3
tysm for the help!
please properly use react:
return <Component id={e.user.id} theme={getTheme(e.user, e.displayProfile).profileTheme} />
Instead of using the ErrorBoundary in the below component (where it cannot catch all errors that might happen), you should instead wrap the outer function:
const profilePopoutComponent = ErrorBoundary.wrap((e: any) => {
...
});
shouldn't i put this on the general component?
no, then if an error occurs within profilePopoutComponent it won't be caught
Discord Account
No response
What is it that you'd like to see?
add some showcase of your mod
Request Agreement
- [X] This is not a plugin request
the screenshots from chrome/firefox extension work lol
I'd guess switching between alphabetically and recently added would still be nice.
it did?
no
just spams errors when u switch account using account switcher
about reading property id on undefined
i think it should be ok now
which comes from UserStore.getCurrentUser().id
i hope :p
oh lol
true
Summary
Adds a section to the Friends tab that shows your implicit relationships.
Limitations
The tab will usually be empty until implicit relationships are calculated, after which you have to reopen the Friends tab to see them. No idea how to go about fixing this.
you know the active now
in the friend list
WebContextMenus (had no effect):
ID: 638525
Match: /(?<=showApplicationCommandSuggestions;)if\(![A-Za-z_$][\w$]*\.[A-Za-z_$][\w$]*\)/
WebContextMenus (had no effect):
ID: 638525
Match: /("submit-button".+?)(\(0,[A-Za-z_$][\w$]*\.jsx\)\([A-Za-z_$][\w$]*\.MenuGroup,\{children:[A-Za-z_$][\w$]*\}\),){2}/
None
some people that are not even your friend show up thrre
these people have implicit relationship with you
and thats why they appear there
I documented in comments!!
basically user affinities that you have a mutual with
if you dont know what user affinities are, theyre people you frecently interact with
ong dolfies ,.,.
tl;dr: people you are likely to be friends with
you didn't explain what they were smh
aww shucks
WebContextMenus (had no effect):
ID: 638525
Match: /(?<=showApplicationCommandSuggestions;)if\(![A-Za-z_$][\w$]*\.[A-Za-z_$][\w$]*\)/
WebContextMenus (had no effect):
ID: 638525
Match: /("submit-button".+?)(\(0,[A-Za-z_$][\w$]*\.jsx\)\([A-Za-z_$][\w$]*\.MenuGroup,\{children:[A-Za-z_$][\w$]*\}\),){2}/
None
Cannot use SettingsStoreAPI without setting as dependency.
I tried with my account and I got nothing
is your data collection enabled
omfg gold bug hunter
makes sense
yeah then affinities wont exist for you
Changes the main window to use "Vencord" as its title. It's much nicer than having 200 character long window title that changes every-time you navigate
GUH
has anyone requested soundboard available in private vcs yet?
lmao, that's probably so doable
PFFT
even adding sounds in your side only
aliucoin, the new currency
would need a lot of work, but seems super doable
nah, i mean just render the component in any vc
and bypass nitro check
hm
I dunno actually
depends on how discord plays the sounds
if it's in your client it's doable
else we can't
in client i believe cos the sound comes from you
why is aliuplugins here
why not
Kinda lame but there is a similar one in bd where it automatically types an uppercase letter in the beginning of you text and also after each . which was kinda useful and shouldnt really inpact the performance of vencord i think since it aims to be lightweight
I wonder if it'd be possible to add a way to select text and use a key like caps lock to switch capitalization on the selected bit of text (all caps, all lowercase, caps on first letters of the sentence, maybe camel-case/caps on every word's first letter), sorta like on mobile
Idunno, just something I thought of because of this
lazy
I'm thinking shift might be used for other stuff that would trigger it when you want to do something else. Idunno, caps lock just seems more useful for it, though with CLock there's of course the problem of it being in an undesired state afterwards
Like if you were to mark it all to copy and alt-shift up/down to another channel-
I mean I'll admit it's a stretch, but I guess stuff like that should still be accounted for
Yeah... I mean I guess problems with using shift would all end up being fairly fringe cases anyway, so I guess shift could work
well you could add something to add it at the start of all sentences
but then you may also want auto-fullstop
I think generally if you want to be formal it's best to just to spend more time writing something!
it's not just a capital letter, it's also punctuation and spelling words right which i don't think a plugin can fix :p
Yep true, I was just thinking about the capitalization toggle thing, since something like that I feel could have some utility, at least in some situations
itโs cross the api
they forgot to nitro lock it tho
itโll be fixed soon iโm sure
lmao
@turbid hatch sooo
remember how I added the rel canonical
it didn't work 
THEY'RE IGNORING OUR CHOICE
FUCK YOU GOOGLE PART 38292929
lmfao
This error means that Google thinks that the tested page isn't a duplicate of the user-declared canonical. Instead, Google thinks that the tested page is a duplicate of the Google-selected canonical.
If the user-declared canonical is not similar to the current page, then Google won't ever choose that URL as canonical. A duplicate page must be similar to the canonical. (That's what duplicate means.)
they're literally identical
skill issue
we could just disable the stupid vercel domains
that wont stop google from indexing them
it could take weeks to be dropped
there is, however, a solution to this
just return 401 when a page is scraped by googlebot 

that also takes ages to be dropped
wait
what you can do
I made the vercel domain redirect to our domain
cant you force a recrawl
we literally communicate our own preference and it still ignores our choice
we can
but it takes up to a week for them to actually do it

their reasoning is fair.. when it actually applies
its to prevent abusing canonical URLs
but for some reason its bugged
average google shitcode

if the source isnt tagged as website its meaningless
So we just explode
you just gotta wait until google decides to redo its index for our site
the alternative is that you claim vencord-website.vercel.app as a property and then instruct them to remove it from the search
I will issue more fix validation requests until Google explodes
don't think u can
cause its not ours

all my homies hate https://webcache.googleusercontent.com/search?q=cache:https://vencord.dev/
yop
had to do this when they marked my vercel domain as malicious

LMAO
they marked ours as malicious too
idk if fixed now but Google safe search said our site was a Phishing site
but only the vercel one
Channel tabs plugin (https://betterdiscord.app/plugin/ChannelTabs) it allows u to have multiple tabs in discord so u can quickly go check a dc server if u need to copy and send in some other one (it saves the channel u are in)
just use favorite's server ๐
made my life easier
also def a duplicate smh
iz okay!
wait if you're here
i was gonna answer
actually for posterity's sake ill make a comment anyway
also
check out the experiment favorite server! Does essentially the same thing I've found and has categories too.
- enable the experiments plugin

3.

voilร
alright ill check it out
kinda cool, but channel tabs are just easier to control and it looks better overall but ty anyways ill use it until they add that plugin
fair enough. I like the favorites server because I remember channel tabs always making my entire discord a bit slower. (Also your favorites server will follow you to mobile too which is nice). But tabs on the top is the traditional setup so that makes sense.
looks good to me, just one small thing
Since all the patches use the same find, that means they are in the same file.
One optimization is to have one patch with multiple replacements.
Yes it is valid, the type is here.
TL;DR you can do
{
find: "...",
replacement: [
{ },
{ }
]
}
@quaint sapphire would this optimization be possible if the match/replaces were attatched to different predicates
ex)
{
find: '("guildsnav")',
predicate: () => settings.store.closeAllHomeButton,
replacement: {
match: ",onClick:function(){if(!__OVERLAY__){",
replace: "$&$self.closeFolders();"
}
},
{
find: '("guildsnav")',
predicate: () => settings.store.alwaysClose,
replacement: {
match: /(GUILD_TOOLTIP_A11Y_LABEL(?!.{5,50}FAVORITES).{40,70},onClick:)(\i)/,
replace: "$1function(){$self.closeFolders();$2(...arguments)}"
}
}
type wise that should work
cool! ty
thatโs already partially done in request #499 and itโs a duplicate of existing request #595 - although that request isnโt exactly by the book since there should be a separate discussion for each, but still legit
i know i just checked it too fast
@junior olive I got a patch for u
made it so that when you right click the home icon (or long press using a touch screen) to reload the user map
[deleted patch file]
to apply it to ur code do git am [path filename]
actually uhh, you cant really apply the patch, it will conflict
darn
here is the file, lmao
and the util I added
export const waitForElem = (selector: string, callback: (elem: HTMLElement) => void) => {
let found = false;
let elem = document.querySelector<HTMLElement>(selector);
const interval = setInterval(() => {
elem = document.querySelector<HTMLElement>(selector);
if (!found && elem != null) {
found = true;
callback(elem);
clearInterval(interval);
}
}, 200);
};
Hey thanks. As neat as this is; reloading users map is a debug option that I think I'd rather keep slightly annoying to get to
i just published https://npmjs.com/package/@vencord/types
but idk if work
ooh
then just add a setting to enable/disable that action

i hate how terrible typoescript is
i made import aliased and it works if u import manually
but intellisense cant fgind them
wait
i just had to add module: commonjs
but it's preferring the full path instead of the alias
third party plugins and stuff
okay types are working mostly
whats your emergency?
Discord Account
No response
What happens when the bug or crash occurs?
Whenever you scroll in a channel with reactions, every time WhoReacted loads a new icon the scroll position jumps, making it very hard to continue scrolling.
What is the expected behaviour?
Scrolling should be smooth as when WhoReacted isn't enabled.
How do you recreate this bug or crash?
- Enable WhoReacted
- Open a channel with a frequent reactions
- Scroll up
- Notice scroll jitter
E...
that's why my scroll jumps
insane
lmfao
what's the punchline?
i think it's just a reference
sounds like gullivers travels maybe
can't wait for aa to make ThisWillCrashYourDiscord
NO
working on le plugin template
what vsc theme :o
yay
not fully done
still nice
it's very very similar to how plugins in normal Vencord look
just slightly uglier imports
as typeof :P
surely there are things that could go wrong by having both internal/built-in and external plugins?
gpu explode
explod

the emotes of all time
the most emotes of all time
no
trasn
@austere talon how cors in vencord?
yes
cors 
third party plugins breaking built in ones









though