#๐งฉ-plugin-development
1 messages ยท Page 2 of 1
skill issue
my function is two lines
console log
and return true
too slow!
console.log is intensive y'know 
Was just one example
Does anyone know how I can grab all blocked users?
RelationshipStore = Vencord.Webpack.findByProps('getRelationships', 'isBlocked')
Object.keys(RelationshipStore.getRelationships()).filter(r => RelationshipStore.isBlocked(r))
Thank you <3
hardcoded t variable ๐ค
shit got pulverized anyways it doesnt matter
fair
because I replaced it with another hardcoded variable!
woo!
Heyo, just wanted to ask a question about the quickCSS editor? How did you embed a vscode editor into it? Im trying to do something similar for a note taking application im developing
it's monaco editor
just check the source code

**monacoWin.html: **
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>QuickCss Editor</title>
<link rel="stylesheet" data-name="vs/editor/editor.main"
href="https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.34.0/min/vs/editor/editor.main.min.css">
<style>
html,
body,
#container {
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
margin: 0;
padding: 0;
overflow: hidden;
}
</style>
</head>
<body>
<div id="container"></div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.34.0/min/vs/loader.min.js"></script>
<script>
require.config({ paths: { 'vs': 'https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.34.0/min/vs' } });
require(["vs/editor/editor.main"], () => {
getCurrentCss().then(css => {
var editor = monaco.editor.create(document.getElementById('container'), {
value: css,
language: 'css',
theme: getTheme(),
});
editor.onDidChangeModelContent(() =>
setCss(editor.getValue())
);
window.addEventListener("resize", () => {
// make monaco re-layout
editor.layout();
});
});
});
</script>
</body>
</html>
he left
used to being used whore
this completely breaks vencord, prohibiting it from actually initializing webpack
Thats... curious
nobody knows
There is a fix apparently
buuuut i am not having issues so cant tell you what it is exactly
??
worked fine for me when i tried it
Hold on
I found the issue
๐ญ
You import findByProps in a different way I do
All sorted
Again, thank you for the snippet
lol











very minor thing that doesnt come up often but would be pretty nice, mobile.twitter links dont convert to fx
I'll work on it today
@dull magnet https://youtu.be/tyTz_-EQOXE
please youtube donยดt clear this video.. omg you donยดt know how hard can be this fu%%&&g song... i know the copyright and that shit..
@dull magnet Could you Merge/Review https://github.com/Vendicated/Vencord/pull/141/
(that is how you trip isDeveloper)
Can someone add ... at the end when the text is cut
it's more of a pain to implement than you'd think
doesnt work
i would say find the text length
but that's hard to do when the window could be any size
if it was one line it'd be easy
i literally tried to add it when i was making the pr but it wouldn't add the ellipsis
we could do it through js ig
yeah it's just a huge ballache
h
everybody gangsta til the wide characters get used
how did you fix
with deprecated css properties that may not work on all browsers
๐
css my beloved
why this didn't work aludes me
firefox users will cope
firefox is so dogshit because mozilla has too big of an ego
whaaat
Firefox stopped innovating years ago
i like firefox/mozilla
they refuse to add dogshit features which seems good on paper but is just painful because browsers are bad so you need dogshit features
now their entire business is just redesigning the general ui of their browser every few years
ven loves browsers not following web standards
I use chredge
I used to feel shame but edge is actually a nice browser to use now 
Microsoft actively making it worse by trying to advertise edge to me while I'm using Edge lmao
I was gonna say line clamp might work
no way
trol
as much as I hate h265 and anything to do with v-nova, Firefox doing a little trolling by not supporting h265
they don't even pass through to the os to decode it
they refuse to because its proprietary xd
anyway it looks good
av1 is superior anyways tho
nop
tbf proprietary non royalty free codecs are almost as bad as hitler so more power to mozilla ig
cope
lmao
true
it looks fine
av1 is based
description will have more space above it
soon
m3-ify discord 
because adhd why would I ever finish one task before starting another trolley
did it work on ff
xd
but it seems to be the only way
Well it shouldn't make ff any different to what it looks like now at least
ven uses firefox mobile
-webkit-box is the predecessor of flexbox if i understood correctly (deprecated)
but it has some special behaviour that makes ellipses just work
love
ellipsises
i love inventing new words
ven will make his own version of css
I don't get why multi line ellipses wasn't added to spec immediately
lmao yeah
well at least it will probably never be removed
it's a huge pain point for so many people
i hope they also never remove with
web devs love supporting 30 year old browsers
basically browsers cannot remove anything
ive never heard of with in css
with (console) {
log("hi");
}```
you love browsers having special logic for some domains because they rely on non standard behaviour
with can be nice in kotlin
Microsoft login flow moment
this entire fucking file https://github.com/WebKit/WebKit/blob/main/Source/WebCore/page/Quirks.cpp
loading quotes looks funny, can you customize it
quirks
No but could easily be added

isYahooMail
horror
personally I think they should remove quirk stuff
they can't
just force these websites not to write shit code
ven uses Netscape navigator 1.0
doesnt work that way
if they break popular websites like amazon people will blame their browser and they will lose many users
and everyone will complain to webkit
like webkits going anywhere
and it's web philosophy to NEVER break anything
which is why they also will never remove deprecated apis unless there's a really really good reason (talking vulnerabilities)
ja
amazons website is so ugly
browsers trying to not be antique pieces of shit (impossible)
amazon one of the worlds largest companies but they can't hire any good web designers
I love smooshgate
that was a fun read
Good article
when they have to rename an api because some stupid module messes with internal classes
this one is funny as well, I randomly found this a while back https://android.googlesource.com/platform/libcore/+/master/dalvik/src/main/java/dalvik/system/DexPathList.java#67
when they have to h
shits hilarious
7 lines down another place where they can't edit the internal
private and marked with @UnsupportedAppUsage yet apps still use it and they still can't change them

and before you say "just change it whats the problem", imagine updating to new Android and suddenly facebook app and other apps break
everyone is gonna blame android when it's facebooks fault
xdd
Also we use that same field in Aliucord as well 
horror
many apps access it probably, it's the easiest way to load dex files at runtime
horror
scroll down a bit and there's another one https://android.googlesource.com/platform/libcore/+/master/dalvik/src/main/java/dalvik/system/DexPathList.java#481
that todo is probably years old
lmao
and that's just one single file
husk
it's probably like that a lot throughout the codebase
imagine you're an android developer and try refactoring internals to clean up code and suddenly half your apps break
the amount of hate currently flowing through my veins
I also use an internal api that they changed 4 times throughout android versions
so i have
if (android 26)
methodName = "blah"
else if (android 27)
methodName = "bleh"
else if (android 29)
methodName = "bluh"
else
methodName = "xd"

**profile_saver.cpp: **Lines 27-42
// MIUI moment, see https://github.com/canyie/pine/commit/ef0f5fb08e6aa42656065e431c65106b41f87799
process_profiling_info = AliuHook::elf_img.GetSymbolAddress(
"_ZN3art12ProfileSaver20ProcessProfilingInfoEbPtb", false);
if (!process_profiling_info) {
const char *symbol;
if (AliuHook::android_version < 26) {
// https://android.googlesource.com/platform/art/+/nougat-release/runtime/jit/profile_saver.cc#270
symbol = "_ZN3art12ProfileSaver20ProcessProfilingInfoEPt";
} else if (AliuHook::android_version < 31) {
// https://android.googlesource.com/platform/art/+/android11-release/runtime/jit/profile_saver.cc#514
symbol = "_ZN3art12ProfileSaver20ProcessProfilingInfoEbPt";
} else {
// https://android.googlesource.com/platform/art/+/android12-release/runtime/jit/profile_saver.cc#823
symbol = "_ZN3art12ProfileSaver20ProcessProfilingInfoEbbPt";
}
process_profiling_info = AliuHook::elf_img.GetSymbolAddress(symbol);
pretty funny

is that the thing that changed in a13 that made me and aa have to cope for a bit
@dull magnet
wanna try and make a plugin that adds translations
right now poking around hoping to find the best place to hook
iirc juby made one for powercord a while back
think i got it
remaining question is, where is the best place to like read the translations out of?
like it should be easy to install translations, i gues
without bundling them into vencord
https://simplytranslate.org/ is cool
Experience simple and private Google translations
wait no i mean translations of the discord ui
ok fuck it appears the find key is insufficient to find the module i actually want to patch
desired module (e,t,n)=>{var r={"./bg":363541,"./bg.json":363541,"./cs":842613,"./cs.json":842613,"./da":13616,"./da.json":13616,"./de":997644,"./de.json":997644,"./el":18677,"./el.json":18677,"./en-US":568601,"./en-US.js":568601,"./es-ES":129608,"./es-ES.json":129608,"./fi":332025,"./fi.json":332025,"./fr":992684,"./fr.json":992684,"./hi":522738,"./hi.json":522738,"./hr":144421,"./hr.json":144421,"./hu":489936,\n"./hu.json":489936,"./it":242216,"./it.json":242216,"./ja":474953,"./ja.json":474953,"./ko":365247,"./ko.json":365247,"./lt":918012,"./lt.json":918012,"./nl":131763,"./nl.json":131763,"./no":141469,"./no.json":141469,"./pl":132011,"./pl.json":132011,"./pt-BR":257899,"./pt-BR.json":257899,"./ro":984417,"./ro.json":984417,"./ru":908647,"./ru.json":908647,"./sv-SE":538613,"./sv-SE.json":538613,"./th":611291,"./th.json":611291,"./tr":673272,"./tr.json":673272,"./uk":808374,"./uk.json":808374,"./vi":488703,"./vi.json":488703,"./zh-CN":355783,"./zh-CN.json":355783,"./zh-TW":612244,"./zh-TW.json":612244};function o(e){var t=i(e);return n(t)}function i(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");t.code="MODULE_NOT_FOUND";throw t}return r[e]}o.keys=function(){return Object.keys(r)};o.resolve=i;e.exports=o;o.id=932706}
conflicting module
you can't do webpack search on top level in plugins
they load too early
use lazyWebpack
const RelationshipStore = lazyWebpack(filters.byProps("getRelationShips"));
I love how you could tell the error even tho i forgor to include code snippet
because I know the common pitfalls too well by now xd
basically plugins load way before webpack is initialised
so you can't do webpack search on top level at all
the only place where its safe to use raw find() is in start() and stop()
in other places use lazyWebpack or waitFor

Alright
how do i cache something for personal use
i have object
big object
i wanna only grab object every blue moon
so as to not start dumpster-fire
wha
explain better
you want to cache object across restarts?
like cache for a week?
wha
.
I want to fetch all blocked users to compare with a message author, but I also want to call the function to fetch the blocked users only once
getRelationships & isBlocked
in my mind, calling every message is a bad idea
bro I have no idea what you're trying to say
just call isBlocked()
dw about it
what's the problem
fml
you think calling isBlocked for every message is bad?
dw about it, look at its code
it's just an object lookup and comparison
one of the most efficient operations you can have in js
alr, thank you ven
because its fairly dogshit, it only ignores messages in the channel you are currently active in, and when discord decides to grab all messages again the blocked message comes back
Good for what I want, but I dont think others will find any use in it
I can pr it in ig
as an option in hideBlockedMessages ofc
Ill look into it now actually
lol
the entirety of discord is proprietary
and their voice & video is native
in any case
find: "blah",
replacement: [{
match: /,.{1,3}\.default\.ensureModule\("discord_krisp"\)/,
replace: ",Promise.resolve()",
}, {
match: /;.{1,3}\.default\.requireModue\("discord_krisp"\);(.+?case (\d):.{0,30}Failed to load Krisp)/,
replace: (_, rest, code) => `;return [${code}];${rest}`
}]```
untested but should work probably
oh yeah just kil the whole thing that works as well
but uh the match is kinda bad imo
better if you add a .{0,300}discord_krisp to be on the safe side
lmaooo
if you make a proper accident for disliking krisp i can add it
should that plugin be moved to #1032200195582197831 
yop
hacks
discord::util::GetAllProcessIds()
mmmmmm
Base64EncodingTable 
why do they b64 it
skill issue
nah hes right dont troll too much
i havent left one comment on the gh smh
explode
nah
aliucord server things
megucord
you will explod NOW
explode
๐คฏ
But links are more funny
And it works well
It made me join this server :)
๐ ๐
๐ง
every time I see moyai on discord mobile I expect a thud but it never happens ๐
vencord RNA now
imagine not having Aliucord moyai smh smh




ive seen people say they get it but how ๐ i want krisp
except it's way worse
Hi I have no idea how to use css and no idea what im doing but how would I replace for example every "hi" as "hello" just everywhere on discord?
I wanna make an in client patch helper
where it shows you the result live as you change your patch
no
count your days
How exactly do you plan to do this
understandable
skill
is it going to be a standalone thing?
whoa vendy so smort
no way
SEX
really nice
@dull magnet
@dull magnet
@dull magnet
@dull magnet
@dull magnet
release when?
when its not ugly hopefully
it already is great
fucking hell, i cant express how much pain making patches is w/o it
vencord plugin api with code blocks???
LOVE
we will have vencord for scratch soon
do NOT the monaco
no
ugly
@fresh birch dog
what
dog
bork
At this point, why not make it so that you can save the patch to a third party plugin?
????
js pretends this try catch doesn't exist?????
wtf
OH
setState(x => ow)```
react is calling it lmfao
fixed
why monaco
use codemirror plz
more lightweight
and you don't need monaco for plugin settings
fair enough
like i don't care that much its just sad that any time anyone needs to embed an editor they use monaco
which is like using a death star to kill a fly
and also its kinda un-smooth because the scrolling is line based by default
or like
not smooth
idk
Monaco is the editor 95% of devs are used to

and it's very easy to embed
an important factor is the ability to load it from cdn because I'm not bundling an entire ide with Vencord
you will embed vscode 
Use monaco with morbius theme
use a normal input box
it should be under updater right?
why isn't it
oh
it should be there always i think
or an option to show it
the code isn't included in main release, use dev build
yea i saw
release in main release when
wher dev build
guh explode
never
use dev build
pnpm watch
makes dev build
is Array.from(array-like) the same thing as [...array-like]?
by array-like i mean for example NodeList
mostly
apart from having to be careful when omiting semicolons line before with the 2nd one it should be the same no?
i wanna do node.children, convert to array, array.foreach
if you're passing an ArrayLike the behaviour differs
you can do node.children.forEach
they're the same in this case, pick your poison
but in other cases they vastly differ

but im also gonna be real if you're manipulating raw dom elements you're very likely doing something very wrong
Yeah I frequently use it for nodelists
Cause most of the time I map them
Why does nodelist not have map? :monkepain:
If it can iterated, then it can be a parameter to Array.from()
not asking for discord use case rn
making a userscript for another site and was just wondering where can i get a quick js answer from ppl who are not talking out of their ass
other coding servers im in either are too dead or too big & everybody ignores
this userscript is kinda a clusterfuck lol
im implementing so bad coding patterns, like function overrides and shit
unmaintainable 
I've yet to see a user script that wasn't the worst shit code ever
im making a song lyrics utils userscript
it is pretty well structured, i rewrote it three times
old version here
update soontm
but basically it supports a bunch of sites with song lyrics and parses & formats them. you can easily add opensong (song presenter software) headings, which are [V1], [V2] for verses, etc
and all the lyrics
and so this is the standard extractor
and on a per-site basis i can overwrite some of the functions
genius.com has more than 1 lyrics container sometimes so instead of text(), i need to use a custom querySelectorAll thingy
i can overwrite the functions like this
arguably the worst way of doing it but eh
don't wanna re-implement everything for every site
that's fine
right now there's a switch case statement that matches window.location.hostname and then mostly calls extractors._standard, sometimes different shit
sometimes i need 2 inject css, sometimes overwrite functions etc
this being the 3rd rewrite it actually has some structure because the other 2 versions were an absolute clusterfuck and there was no context separation between sites, only a shit ton of ifs handling edge-cases for every site
the userscript adds a few buttons like this. you can see it currently added the verse headings, thats the first button. 2nd is remove, 3rd is copy lyrics & 4th is just an indicator, because sometimes i hide my custom div bc no space on site
oh did i say shit userscript? i mean the absolute engineering marvel this userscript is, overcomplicated to oblivion 
tbf not all my userscripts are like this, most are shit lol
that's cool
thx. i also made a wholeass userscript that uses a real api lmao
it uses a currency conversion api on foreign shopify pages to get the conversion rates to euro once a day, cache them, & convert all price tags on the site to eur
im even storing the api key in violentmonkey storage, not hardcoded in the code 
and then there are userscripts like this:
just add a bigass table
lmao
that table is word exported to html and copy+ pasted
i used it to cheat in online exams for chemistry bc we were allowed to use ptable.com
lmaoo
dirty cheater
the only user script I actively use is https://github.com/zerodytrash/Simple-YouTube-Age-Restriction-Bypass
arguably a lot of effort if i could've just alt-tabbed to word but the screen not brightly flashing white on the camera was a win
does this still work? i know they broke a bunch of these. also i just verified it w my card like 2 years ago even when i wasnt 18 lol it just accepted my card & verified it
it works
Oh I need this again
Can't watch YouTube porn anymore because of age restrictions
https://greasyfork.org/en/scripts/447923-lyricutils-v2 here is the userscript if any1 needs it btw
unless you use opensong it's a glorified copy lyrics button lol
guys who else wanna do codevember 2022
thing i made up
where i uninstall twitter for the whole november & instead try to code every day
at the end i'll have hopefully broken my twitter addiction & will have done a bunch of sideprojects that were in the "planned" stage for a long time
rate my userscript
// ==UserScript==
// @name rule34 audio
// @namespace http://tampermonkey.net/
// @version 0.1
// @description try to take over the world!
// @author Arjix
// @match https://rule34.xxx/index.php?page=post*
// @icon https://www.google.com/s2/favicons?sz=64&domain=rule34.xxx
// @grant none
// ==/UserScript==
document.querySelector("video").volume = 1
rate another userscript of mine
// ==UserScript==
// @name Highlight videos in pools
// @namespace http://tampermonkey.net/
// @version 0.1
// @description try to take over the world!
// @author Arjix
// @match https://rule34.xxx/index.php?page=pool*
// @icon https://www.google.com/s2/favicons?sz=64&domain=rule34.xxx
// @grant none
// ==/UserScript==
Array.from(document.querySelectorAll("img.preview")).forEach((img) => { if (img.title.split(" ").includes("video")) { img.style.border = "3px solid #0000ff" } })
more goodies over at https://github.com/ArjixWasTaken/my-userscripts
i mean
if you can't hold out atleast 1 day you actually down bad worse than genshin players fr
the thing everybody fears, being a genshin player
codevember 2022 anyone
also ur odesli.co userscript is broken
uhh, have ya not seen the commit history?
pretty old
oh snap
not on github
well
it is pretty old
but i cant prove it
yeah, that is
actually more than 10 months old, i just uploaded it to github then
fix it then pl0x
nah codevember on top bc i made it up & unconvetional
nobody expects codevember, everybody expects hacktober
Yeah fr
amazing
trollage
good pfp material
:3
I've already gotten rid of twitter 
it's just crossposts from my mastodon acct now
how do i get the Minipopover module
idk find
i was trying
doesnt find it with any of the props, displayname is gone and idk what else there is
because those props are react props
not exports
findByProps should be named findByExportNames to be more appropriate
but that'd be awkward
you very likely will need to do a code search
uhhh
https://pastebin.com/0Qw4XNhr there is no export
Pastebin.com is the number one paste tool since 2002. Pastebin is a website where you can store text online for a set period of time.
what the fuck is this shit
there should be
send full module
27292929: () => {}
but why do you even need to find it
i want to add an icon
but regex patch is ewie and complicated 

regex was suprisingly easier than what I thought tbh
i dont know if i can properly use it in the way i want it to
put a breakpoint at the very end and check what "O" is
(show)
regex patches are unironically easier once you figured them out
because you don't have to find hacky workarounds to things like memos, don't have to cope with some things not being exported or frozen and you don't have to deal with props.children.children[3].props.children.children.splice("cock")
oh element
what in da props
and what's type
as in does this contain the renderer items
how
Okok
sammy becoming based
Pastebin.com is the number one paste tool since 2002. Pastebin is a website where you can store text online for a set period of time.
there you go
xn({
key: "view-thread",
label: At.Z.Messages.VIEW_THREAD,
icon: gn.Z,
channel: t,
message: n,
onClick: ht.Db
})
this creates the buttons
to add your own, write a regex to match where you wanna insert it and call it with your own stuff
Super simple
for example if you wanna insert after this one, just match this block, capture "xn", then insert code that just calls the captured xn with your own object
if you need help, let me know, but I'm sure you can figure it out
each element is like
x? xn({...}) :null
so just match exactly that with ur regex
and include key:"key of the element you wanna insert after"in ur regex to match the right one
actually they are just different skillsets ๐ค
convert it to gif from what?
apng to gif lol
you'll have to use some library
this might be good
you can get the frames from that then generate gif
its pretty minimal
actually
yeah i think discord can play animated .png
you can abuse this class
no
but why convert
renderNextFrame makes it draw to canvas, then you can use that canvas to generate gif
discord can already play apngs
see petpet plugin for how it generates gifs from frames
i don't mean they play from attachments
gu
basically it draws to canvas then adds that canvas to gif encoder
this also draws to canvas
use some lib that parses lottie into a gif
๐ญ
just dont support lottie
or that
lottie is only for discord default stickers
so you could download all of them and do it ahead of time
and dump them in some channel
nop
non default lottie stickers exist
lol youre gonna have to fork this
cause it uses nodejs eventemitter
but maybe theres a better library
literally this one
location.origin / location.hostname
location.latitude location.longitude
you love
each frame is a png
you can just use gifencoder from petpet to generate gif in a few lines of code with that
what
wtf are u using
gif.coffee????
const importApngJs = makeLazy(async () => {
const exports = {}
const winProxy = new Proxy(window, { set: (_, k, v) => exports[k] = v });
Function("self", await fetch("https://cdnjs.cloudflare.com/ajax/libs/apng-canvas/2.1.1/apng-canvas.min.js").then(r => r.text()))(winProxy);
return exports.APNG;
});
// once needed
const apng = await importApngJs();

uses ultra epic promise polyfill 
if u wanna make it more efficient fork and remove polyfills and other junk and compile to esm then you can just import(it)
but its 14kb its whatever
1 byte
my love
show code
wtf is that paste
wtf is createImageBitmap
no
not supported
nah thats ugly
anyway use this
its made by same guy except it returns Image not Blob
and you can put Image on canvas directly
yes lmao
just use the one i sent and then write each frame directly
yeye
can i write plugins in coffeescript
technically yes but i will come to your house and tickle ur toes if u do
good
regex patching looks kinda unstable
itll break like every time the variables chang-
good point
how do i ignore newlines
you won't have to deal with newlines
Vencord strips all of them before your patch is applied

cause your regex has spaces silly
discord has 0 spaces
๐ถ
did u not use the patchhelper?
nolol
wait what even is the find thing
string in the module u wanna find
for example .MESSAGE_TODOS_MARK_AS_DONE
okay it didnt show up as failed but it didnt work either
use patchhelper omg
fix
oh yeah how do i PatchHelper
you need dev build
^
oh
what exactly is the glitching
like look at the individual frames to see whats going on
lmao
send code
im pretty sure the generated code doesnt work
its replace not replacement
lol
yea
webpack changed
its not xn anymore 
how the fuck
am i supposed to make persistent patches
nvm i can just use . whereverthere is a variable
yes?
you don't include any variables
match: /?(.{1,3})\(\{key:"blah".+?\}\)/,
replace: (m, createMenuItem) => `${m},Vencord.Plugins.plugins.YourPlugin.makeItem(${createMenuItem})`
then make that method it calls on ur plugin object and make it return ur custom item

@dull magnet Could you check https://github.com/Vendicated/Vencord/pull/141 whenever you have free time 
im sorry, thank you for working on it
perhaps you could remake it with a different method?
im thinking every time you open settings
- fetch data of last time they were opened ( see last point )
- for each plugin that is new (aka not stored before) , mark it as new
- for each plugin in the store that was marked as new no more than 2 days ago, also mark it as new
- store all current plugins in datastore. For each plugin that is newly new, also store a newTimestamp along with it
hope that makes sense
Could do
no one?
also this just seems pointless to me
diff --git a/src/components/PatchHelper.tsx b/src/components/PatchHelper.tsx
index 853febc..8bfa606 100644
--- a/src/components/PatchHelper.tsx
+++ b/src/components/PatchHelper.tsx
@@ -202,7 +202,7 @@ function PatchHelper() {
find: ${JSON.stringify(find)},
replacement: {
match: /${match.replace(/(?<!\\)\//g, "\\/")}/,
- replacement: ${typeof replacement === "function" ? replacement.toString() : JSON.stringify(replacement)}
+ replace: ${typeof replacement === "function" ? replacement.toString() : JSON.stringify(replacement)}
}
}
`.trim();

yop
I will fix whenever I make some other change
don't really wanna make a useless commit
make four commits changing one character
step 1 โคโโขโกโคโโโกโโขโโฃโกโโขโกโโขโโขโกโขโโฃโคโโกโโโโกโโขโฃโกโโฃโโโโโขโโขโฃโโโโกโคโขโโกโขof porting invisible chat is done
horror
:D
Don't pull this shit in here
:D
explode
can't wait to do NSFW roleplay with you in invisible chat where we both will be queer yuri ๐๐ผ
wha
3 four letter acronym
Explod
regex isn't well suited for that job idk why that person is mad
discord giveth i taketh away
it still too fucking wide tho
omg
its really not that hard
just learn the symbols and profit
by symbols you mean tokens, anchors, quantifiers and meta sequences? 
what even is invisible chat
When the days are cold
And the cards all fold
And the saints we see are all made of gold
When your dreams all fail
And the ones we hail
Are the worst of all, and the blood's run stale
When you feel my heat, look into my eyes
It's where my demons hide
It's where my demons hide
Don't get too close, it's dark inside
It's where my demons hide
It's where my demons hide
what
it would be a port of https://github.com/SammCheese/invisible-chat
i took away colors
can't have shit in my theme
tbh i just didn't like how out of place it looked
even though discord wants to desperately earn money, i don't care
no
consistency > goofyness
i could restore only your theme tho lol 
will see what do
YES
nobody:
discord: rect
circle rect my beloved
Discord rect him ๐ณ๐ณ
discord is fighting real hard with me (the red border is for debug, look how fucked it is)
im just trying to restore harmony,,,
vendy i am sorry as much as i love you you cant have ur colors
i have overstimulation
head bout to explod from new profiles
i need to hide more shit, not just new profiles
im really close to doing all: unset on the popout parent at this point
or just like
not relying on variables and hardcoding colors with my own scss variables
What if you make a plugin instead that just patches whatever fetches that to say there is no custom profile
because then you'd have to find where it says there is no custom profile
Wouldn't be hard
Just find wherever it gets the data from, patch it to return the data without the custom profile info
{ ...$1, customProfile: null }
Or something
Actually that might be a cool plugin idea
NoNitro and you could make it also hide server avatars, profile banners, etc
I might make that
ill make css for it
bruh thats really easy to remove all the gradients just unset all of the css variables in the style attr
nevermind its slightly more complicated
plugin would be simpler
are settings available at patch time? (in a patch replacement)
yes
Well you have to be careful with race conditions
top level no I think
but if you make replacement a function then yes
the issue is that to return defaults, plugins need to have finished initialising, but inside your plugin top level it will obviously run before plugins finished
you can fix that by doing like ```js
Settings.plugins.MyPlugin ??= {}
const settings = Settings.plugins.MyPlugin
but it's easier to just use a function and not worry about it
i took away all the colors
all of them
instead of
i would say im sorry but i am not
it is a lot nicer to look at
it was too wide
might revisit & remove the strict overwrites i set in the future but not for now
apologise now
sorry ven ily ill restore your colors
is what a pussy would say
i stil love you but no colors

that shit look like the battle pass
i love this but it takes so much space
from the screen
i guess i could make it a custom module or something
this is still good
less wide
more clean
that looks disgusting
your opinion fucking sucks dude
ffs where's that emoji re-parser plugin
"your subjective opinion is objectively wrong" ๐ค
youre just always wrong ngl
cope, mald, seethe
ratio + yb better
i am considering adding it back just for ven
but not sure yet
i think i need less visual stimuli, not more
been contemplating compact mode, even
ok yeah no this sucks
cozy it is
I love u
go to bed smh!!!
can't too dumb to do that
also no longer drunk
i will go to bed soonish
i think i'll just leave premium profiles like they are but shirnk from 340px to 300 + muted text colors (where applicable)
and only apply custom styles to non premium
maids
do u need to learn javascript before typescript?
may as well
not really, well, not that it matters
anything that you can do in js, can be done in ts
so by learning ts, you also learn js
unless you already knew js
i never learnt js
or ts for that matter
i just use them
lmao
once you know python + kotlin
js is the easiest shit
ts might need some doc lookups
but thats all
I mean yeah, once you're experienced enough in programming, you can pick up pretty much any language just by looking at its syntax
you learn them by using it
so long the paradigm it's built on isn't too different from what you're used to
as a mainly Java developer, Haskell confused the shit out of me
i like to call them easter eggs
or any functional language for that matter
all the weirdness of js makes sense if you understand how things are handled within the language
objects on objects on objects
@main rampart i mean melvim wasn't that mad lol
like u did give credits and compling to licences is kinda important ig
post result
lazy
ok
bro really said window.alert()
why don't you windows.alert("some bitches") for yourself?
why not?
fuck you
what
why lol
Uncaught ReferenceError: window is not defined
we bouta be alerting windows ๐ฑ
i will soon contribute
do not
true
please fix the button and also the album its hella big and not really fit with discord ui/ux guidelines thx
proxy



