#👾-core-development
1 messages · Page 154 of 1
to their parents?
No more spam from whitenames asking how to install messagelogger or other thirdparty plug ins
least braindead vencord-dev misuser
I was thinking about adding a role to access vendetta dev channels but I'm lazy
if something new comes up i'll tell people so we know quickly
pick a struggle 💀
its the same struggle
trueee
reminder to self to remove badge circle crop tmrw
i did that before and i did it again, same error
you are likely trying to use a Type as a value
Message is a Type
Types don’t have constructors lol
const Message = findLazy(m => m?.prototype?.isFirstMessageInForumPost != null)
@hollow slate here's a way to grab discord Message class
i thought it did
dont mind me, am just learning tsx, all i know is python and java
do you know what are Types
why are you trying to create a new message
youre trying to instantiate an interface
instead of the class
i figured it out but i thought i needed to pass in Message type for sendBotMessage()
this behaviour should definitely be configurable!
i really dislike this "feature", hence why i wrote the code this way. and the fact that noone complained about this inconsistency until now shows that people either don't mind or prefer it this way
to me this also seems kind of redundant because you can already have the same behaviour by just clicking the beginning of the seekbar
you can just add a new setting for it. i recommend defaulting it to false (so by default use the old behaviour), so nothing changes for people who've been using the plugin in the current state
heyo, is there like any fuction or anything close to it that would return like a discord message react component/element which would be based on the Message object i'd pass onto it
no?
:c
that'd just be the message component no?
you can use react devtools to inspect a chat message, or the preview in some modal like the report one
then find some way to grab it
in case of the delete message modal it's this component right here
alternatively look at how reviewdb used to do it https://github.com/Vendicated/Vencord/blob/377cf600550da9c1b49924bd996fc86be9011048/src/plugins/reviewDB/components/ReviewComponent.tsx#L85
what are u actually trying to do
you most likely do not actually need the component
is there a way to define a function to be called once a plugin option is modified?
settings have an onChange option
remember that it also fires when your plugin is disabled though
i honestly don't know how to handle that
both firing when disabled and not firing at all when a setting is changed are undesirable
Is there any way to rerender the whole react tree?
I'm changing a mapping that will affect basically every class name in the whole dom
then change before it's rendered 😛
- do not
- what nookies said
I do, but reloading the page to test every small change is rather slow
I wouldn't do this in production of course, it's to speed up development
Uh show a message in a modal
look at MessageLinkEmbeds
Hm
Yeah that's what I ìnitially did and I was abt to use something like that but then I realized you can't really add accessories to it, I mean you can but yk the layout changes for amount of pics or the type of file
Am assuming that I would have to use <ChannelMessage .... />
Am Makin like a uhhh save/bookmark messages plugin
It would show the saved messages on a modal
And if the user wants, it would also save the accessories of that message
less asking more doing
you have the plugin as an example
try to replicate what it does
Alr
see if it works for you, see if its what u want
@austere talon can vencord desktop get the hardware accel option like standard discord has
why
tested on vesktop and chrome, not on firefox. don't see how just disabling video locally requires something special from the browser side though
Describe the bug
When in a call, audio recorded in Vesktop experiences a delay of ~0.5 seconds before being sent
To Reproduce
Apologies for the jank setup, but this is the best way I could think of to reproduce the problem.
In all calls, one person is muted and observes the audio received
- Start a call using a service other than Discord to provide a static reference audio channel to listen to, I used steam chat
- Start a call in Vesktop, say some stuff, and observe the di...
3f1f52b Add automatic self updating on Windows & Linux ... - Vendicated
cause
some users have problems with hardware accel
so they might want to turn it off
Some ppl turn it off so more of their gpu is free to render games
I will pr and ven will merge immediately
None
None
None
None
None
None
None
None
Can i get someone to test something for me?
dont ask to ask
im surprised vesktop just doesnt have a launch flags editor
how would that work
:)
doing it myself cause ven so lazy
nvm i forgot hardware accel disabling is just app.disableHardwareAcceleration();
yeah
nvm lol
ven so evil
using --disable-gpu and downgrading to 535.146.02 fixed this for me.
@Janybanny if you care
this PR supersedes #553
does basically the same thing
For some reason LastFM decides to default to the last used album if it has no clue what it's supposed to be. Also did some grammar and capitalization stuff.
I had to make a new PR because I'm an idiot and deleted the main branch instead of just renaming it lmao
Reimplements #248 to allow starting Vencord minimized/hidden, but with an argument instead of a Settings toggle, so that it may be appended to autostart shortcuts without impacting explicit launching of the app.
Flag is --start-minimized to match the official Discord application's flag.
Environment:
- Stable 256231 (96a39c5)
- Vencord 30bc979 (Vesktop V0.4.4)
- Electron 27.1.2
- Chromium 118.0.5993.144
- Linux 64-Bit
Description:
During calls, other participants occasionally experience an extremely loud and high-pitched sound. This issue has persisted across the last two versions of the program.
Reproduction Steps:
- Join a call.
- Engage in conversation until the high-pitched sound occurs.
Additional Information:
A clip of the sound has b...
Have you used discord-screenaudio recently? it used to cause this issue system-wide for me until I rebooted.
Nope, also as said this persists across the past two versions of the program. I am winging it in this case but if I remember correctly it's something that is going on for approximately the whole past month, so I have rebooted many times since then.
Maybe try building from source and see if the electron upgrade fixed it
Sure thing, will try during the whole of today to reproduce the bug on the source version, thanks for the idea so we can narrow further down the issue!
holy shit https://github.com/vencordjp/Vencord
Huh, neat
I wonder if the readme is properly translated or if they just used google translate
Oh they’ve translated way more than the readme
Is this just a side effect of Discord web? Can you also perform this experiment in Chromium itself, rather than Vesktop?
hire this guy to do vencord's japanese translation
🙏
maybe its proper?
i looked a bit into them and they translated like, 2 other projects
nvm 3
wait do custom keybinds just work on web and discord limits them purely cause they feel like it
i assume they would work just fine?
yeah i dont see any way to make custom global keybinds so this just works lmao
oh its because all the desktop exclusive options are missing
yes but only if the app is focused
yeah im aware
it seems proper
the guy makes japanese video content too and the jp responses seem to be good
might get them to do the translations if they're proper
quick question, if i made like a message slur censor plugin and i want it to have a default worldlist, should i just make a json and put it in there and do a PR or...? i feel like that am not supposed to just push slurs into the vencord git repo
not sure if I said this but isn't project fluent a bit overkill? is the gender stuff and plural stuff that important? or is it the easiest to use anyway
module number got minified lol
i thought so too
something similar to what discord has would be best
horror
uh?
does discord use a library? otherwise could you just hook into discord's own system? well i guess that would be prone to breaking
-1 byte lmao
totally good optimisation
who knows, maybe it adds up and you can save 4 bytes
soonish
its the one i actually know how to use best lol
i dont know what system discord uses
i usually just create a map and use String.format or whatever the language has lol
which can trigger javascript actions
so its like
ehhh
i could implement discord's i18n i guess
i just have to work out the best way of doing it
does fluent work so you just wrap strings in a function call and they are magically translated? or do you need translation keys
both, in theory!
(well, qt actually uses a macro 😭 )
fluent's actual react integration looks something like this:
return (
<Localized id="lsndfkjhsdf">
Then your content <span>exists here</span> and it will get automatically localized.
</Localized>
);
(it's like tr("Hello %1").arg("world"))
in fluent its translation keys
so
t("hello-world", { world: "Discord" });
is how i've exposed it atm
you can create something similar to macros in javascript with compiler plugins probably? (famous last words)
you can
you can use a typescript transformer
but there's not much point when it has to run at runtime anyway xd
-vencord = Vencord
hello = Hello my beautiful {$worldName}! And yes this works because {-vencord} is awesome!
t("hello", { worldName: "Discord world" }); // -> Hello my beautiful Discord world! And yes this works because Vencord is awesome!
is how the file works
i didnt think it was that overkill tbh
well you can't see the strings in the source
we can try react-i18next then i suppose
so you could make something just as good for vencord's needs in 5 minutes with JSON.parse :P
my main concern is languages where we cant really do that xd
i know minecraft does that xd
shrimply reverse engineer and copy minecraft's translation engine
also i need to think of a better way of doing translations where we need to insert links and stuff
though i dont suppose we really have anything like that do we
actually, elaborate?
plurals? do they matter
just do item(s)
that doesnt exist
it reads quite awkwardly from my understanding if you dont do plurality correctly
just do some
but in english wouldn't it be like 1 items
does anyone care that much
i imagine people do and would flag it up as an issue
saying it doesnt read as proper polish
or x language
it does
there's a table that explains how qt linguist does it
because yes
languages are this complex
you need a calculator for a brain to speak russian i see
i imagine it becomes common sense when you learn
i am unsure how qt linguist seems to do it
but their translation tool seems to use the english strings as keys
is there a language where prime numbers have a different plural
so i think
well, i suppose what they would do is have multiple translations for the same sentence
e.g. in theoretical vencordi18n
// for polish, but we'll pretend
{
"There are {} plugins available": {
"none": "There are no plugins available",
"some": "There is {} plugin available",
"more": "There are {} plugins available"
}
}
i guess
so maybe not overkill
fluent itself probably isnt that overkill considering this
but we can definitely simplify it a bit
yeah
ourselves
hm
but gender
and gender too
vencord is woke now?? /s
because language gender actually matters
and then all of a sudden this format is now 3 layers nested deep and no translation tool in the universe can handle it
LANGUAGES SUCK
FUCK ME
usually params won't be words though
yes
i feel like the usual practice would actually be to create multiple translation keys for that :P
is that also getting translated
i mean
i dont think some of the stuff really comes across well in other languages
but we could translate it and then the resultant translations are the xored versions
xored
Lets make the only language for vencord simlish
meow language
but then you have to have multiple translation keys in gender-neutral languages
so its like
eh?
i think most translations are try to be neutral if possible, but then just default to a gender
lets make our default gender female
lmao
i meant like
n_rabbits = "You have %d rabbits"
n_foxes = "You have %d foxes"
don't ask
i have a lot of rabbits and foxes

inb4 issue because vencord doesn't respect pronoundb pronouns
im not going to bother reading users' gender for translation strings
it'd either be gender neutral or default
english
french
czech
lithuanian
polish
romanian
russian
japanese
are the ones discord supports, so we'd have to theoretically support too
so we dont have to implement all the rules, but we have to implement a lot
idk if rabbits and foxes had a different gender whatever ahsfhkjashfkjashf you have would be able to change if needed (is it like that in any languages? I'm too stupid)
but does you have need to change depending what the thing in question is
my computer has a gender ???
bump
lemme get google translate out haha
i mean ideally no you wouldnt want to push such content
but if you really wanted to you could just encode it so its not obvious
you could use configuration? or encryption like loadingquotes
a noun is feminine if it ends in e or ion except when its age, ège, or isme
otherwise its masculine
maybe hang around different people if this plugin is needed? 
(ew discord defauled to ugly pepe stare)
so you'd have la famille and les enfants
un garçon, une fille
(boy, girl)
une chemise (a male-tailored shirt) and un jupon (a slip dress)
amazing
their emoji autocomplete in general has been so weird lately
OH GOD THE READER NEEDS TO BE MALE
like i get a bunch of results first, but then i try and select one and it limits it to like 6
i think its tu?
SELECT YOUR GENDER TO USE VENCORD
no it isnt?
imagine if you is aged
lewi did u study french..?
dummy
yes you is a formal and pluraled thing
tu is the singular informal, otherwise you use vous for everything
formal singular, or informal/formal plural
i dont know why
i dont care to know why
i wonder if there's a language where there's a you for <10, <20, <30, <40, <50 etc. and people get offended if you use the wrong one
because i wouldn't be surprised at this point
anyway yeah languages have really arbitrary rules and if you dont follow them you look like a dumbass who cant use basic grammar

i love languages
you broke a load of rules in english in that sentence
exactly
Anyway, yes, languages have very arbitrary rules, and if you do not follow them, you look like a dumbass who cannot use basic grammar.
Anyway, yeah. Languages have really arbitrary rules - and if you don't follow them you like like a dumbass who can't use basic grammar.
UI';m bad at rgrammar
- makes no sense here because of the and follow on
drop and and replace with ; for a better sentence
I didn't know that
i mean yeah that's what im looking into
a lot of this discussion is just how stupid languages are
seems smarter than using some niche tool made specifically for mozilla stuff
and if we can get away with 1:1 translations
wait
i completely missed the plurals page on i18next
lmfao
use google translate at runtime
it just uses ${key}_${plurality suffix}
{
"key_zero": "zero",
"key_one": "singular",
"key_two": "two",
"key_few": "few",
"key_many": "many",
"key_other": "other"
}
i18next.t('key', {count: 0}); // -> "zero"
i18next.t('key', {count: 1}); // -> "singular"
i18next.t('key', {count: 2}); // -> "two"
i18next.t('key', {count: 3}); // -> "few"
i18next.t('key', {count: 4}); // -> "few"
i18next.t('key', {count: 5}); // -> "few"
i18next.t('key', {count: 11}); // -> "many"
i18next.t('key', {count: 99}); // -> "many"
i18next.t('key', {count: 100}); // -> "other"
(arabic)
all this language talk is making me dizzy 
because you have to write all of the weird stuff for it
# Simple things are simple.
hello-user = Hello, {$userName}!
# Complex things are possible.
shared-photos =
{$userName} {$photoCount ->
[one] added a new photo
*[other] added {$photoCount} new photos
} to {$userGender ->
[male] his stream
[female] her stream
*[other] their stream
}.
we will simply not support bad languages that wanna be special
i know im just saying like
😭
arabic? who needs that..
english:
fluent is complicated but is cool
and i know how to use it really well now
xd
but i suppose i18next works fine
english is incredibly simple
taking this out of context and posting it everyone
😔
brb
english is just "concat words in a predetermined order"
yet I struggle to speak this language - being my first and only 😭
I will test that next time my friend is online.
what kind of development channel has this become
i18next makes this stupidly easy
english is so fucking simple compared to most other languages xd
i suppose
it just concats different "contexts" to the key
so you can have friend, friend_male, friend_female
and pass a context of male or female
and it'll work it out
strictly SVO
other than he/she/it there are no conjugation
etc
okay i will switch to i18next
which also means we get to use the react components

in german for example it's not strictly SVO. subject verb and object can come in any order depending on the context
every verb is conjugated
i go - ich gehe
you go - du gehst
she goes - sie geht
we go - wir gehen
you go - ihr geht
they go - sie gehen

OH THIS IS FIRE
HOLY SHIT
return (
<Trans>
you just stick your <strong>bullshit</strong> in here and
it'll work it out! including <Card>react components!</Card>
</Trans>
)
yes
TRANS
girl every translation framework supports that
🏳️⚧️
i avoided this because the examples show that you have to use an i18nKey
but when you read deeper into the docs there's an aside that says its optional and it'll generate one for you

but also isn't that weird? like a pseudo-component?
it just does interpolation
even my homecooked framework
i probably have more experience with winforms than react
my love
actually if we do this
then we can just use i18n keys
and not have really stupid looking translation files
ill show what it does one sec
why do people say i18n when they could say t9n
ohh
i18n is making it actually international
dates

i18n is not just translations
i love working with time
https://codeberg.org/vee/vendicated.dev/src/branch/main/src/pages/[lang]/index.astro#L22-L24
https://codeberg.org/vee/vendicated.dev/src/branch/main/src/locales/en.ts#L16
this is how mine works
there's actually not much point repeating the entire string cause it just uses the tag from your children
but ig it feels more natural and that's why i18n react does it
do u get intellisense for trans keys with this
yeah
it'll also replace the translation keys with the actual translated string
where applicable
so you can see what it is
because the files are in json format
not typescript
silly
its resolving them from the json files themselves
- you can import it as typescript file i think
- why not use ts file
i could use typescript i guess but then you lose the entire purpose of i18n ally :P
which is to show you the string itself
not the translation key
typescript can do that
hover the t() func and look at return type
not inline no
we use this extension at dbots cause it makes it easier
that's cool ig
this is what i do

though i dont mind using a homegrown thing
ya this is cool
tbh copilot translated most things for me
it's really good at translating
i'll work with i18next for now and see what i can do with it
i wrote all strings in english
then i switched to the german file and it remembered all the strings and literally one single completion generated flawless translations for an entire page??
pretty nuts
AI is good at translating
that's the one thing i like using it for
DeepL is pretty fire too from what i've seen it output
but i know GPTs are off the charts because obviously they have had literal books of languages thrown into them
it wasn't even like google translate where you'd need to correct it and it might be overly formal
it correctly assumed tone based on tone in the source strings and was correct
poor translators losing their jobs
it seems much smarter to just use ai to translate and have a human approve / reject it
lame: translating strings and worrying about plurals, gender, etc
based: using purely english and translating the strings at runtime using gpt
hey gpt translate this sentence to turkish: 2 plugins
Chargpt says 2 eklenti
hm good idea

time to do some
type definition bullshit
actually i wonder
does i18n ally support ts files now
IT DOES
HOORAY
FUCK JSON
make sure that doesn't require loading all strings at once
and lets u danymically require
but also im pretty sure you can import a json file as type in ts
cause json files are by definition just frozen objects
they are but i think doing it the ts way is a bit easier anyway
since i dont have to worry about json file loading
huh
i18next supports fluent
neat
anyway
hm @austere talon i cant seem to get i18next's typescript support to work
it wont resolve the keys and it wont check the interpolation
how strange
let me try making it json and seeing what happens
i know why :p
hm?
/*
* Vencord, a Discord client mod
* Copyright (c) 2024 Vendicated and contributors
* SPDX-License-Identifier: GPL-3.0-or-later
*/
import "i18next";
declare module "i18next" {
interface CustomTypeOptions {
resources: {
vencord: typeof import("./translations/en/vencord");
};
}
}
cause this is what i had
and it didnt work
so im just gonna switch back to json translations
cause i18n ally got upset as well for some reason :(
**tsconfig.json: **Line 17
"noImplicitAny": false,
might be this?
dont think so
correction i don't
i thought we didn't have strict null checks but we do
it's just no implicit any that we don't have
the intellisense just doesnt do anything
ah well
it just says on their docs try typescript 5 but we are on typescript 5
so idk
its fine though
the extension gives you intellisense
it just cant do any strict typechecks like with the interpolation sadly
also i checked, no the extension wasnt breaking it, cause the typescript support also checks the interpolation variables but it wasnt erroring either
I'm unsure if anyone else has this issue, but on my 240 Hz Omen monitor in Windows 11, the experience is extremely flickery and glitchy. To the point where it could probably be an epilepsy hazard. When I drag it onto my 70 Hz Sceptre monitor, all is well though.
My graphics driver is NVIDIA (currently 546.33)
A video or any context on what you mean would be greatly helpful, although this sounds like it might be unfixable from our end already.
something something disable hardware acceleration
except there's no way to do that yet
https://github.com/Vencord/Vesktop/assets/116850347/8476406a-1898-4f08-9585-807e621f7c11
On my actual screen, it's worse than this, flashing black bars everywhere and even sometimes turning the entire window black, but this video successfully captures the gist of what's going on. No other client I've used has done this. Using it on my 70Hz monitor is fine though, so I'll probably keep it on there but it's almost unusably horrid to even move the cursor in on my 240Hz monitor.
that is very awfully strange
likely fixed by disabling hardware acceleration. there is no good way to do this yet, but you could try running vesktop with the --no-gpu flag and see if its fixed
open %LOCALAPPDATA%, go to the VencordDesktop folder, open a terminal, drag the vesktop .exe into it, add --no-gpu and press enter
actually they seem to know how to code so maybe i didnt have to explain it
worth it for non-coders who stumble on it
I GOT IT TO WORK
IM SO PROUD OF MYSELF
its because namespaces are formatted differently
each translation file is a namespace
In case it works and you want to make it permanent you can modify the shortcut on windows to always launch the application with these modified parameters like described above.
The short video you showed looks almost 1:1 to how the Battle.Net app behaves on Linux, another Chromium app that has some problems with hardware acceleration and looks exactly like that. That's a sync issue and at th...
so you dont use dot notation to access it, even though theoretically it works
let me see if i can get i18n ally to behave now
got it behaving
it does say "failed to locate key" if you try and navigate to the key in the locale file but it does take you to the right file
so its still a bit.. bleh
but it works great
i suppose there wouldnt be a uh
way
of automatically doing this would there
we'll just have to add the file for every translation bundle
oh well!
let me test if this even works xd
Hey, im running into a weird VSCode issue. When I open a folder to edit with a plugin, some imports give errors. But if I open the .tsx file directly, there aren't any errors at all. Anyone else had this problem? im not sure if its a vencord thing specifically or just a vscode issue
did you do pnpm i?
you cant open singular folders
it wont contain the tsconfig for vencord
you just need to open vencord entirely and edit it
damn, that kinda sucks. Thanks though
@austere talon update vencord types when
soon
you love that the current ones are like 8 months old
what are u using them for
honestly it doesn't rlly work if you want to use it for a plugin repo cuz the paths are gonna be wrong
u could prob make it work though
wdym?
vesktop uses the types
u cant import from @webpack
**index.ts: **Lines 15-16
import { findByPropsLazy } from "@vencord/types/webpack";
import { FluxDispatcher } from "@vencord/types/webpack/common";
vesktop is a vencord plugin
yes
i love throwing git repos inside vencord
yes
i made this template monorepo for plugins https://github.com/Vencord/plugin-template
but that idea has been scratched
jumpscare
**translation.ts: **Lines 53-60
declare module "i18next" {
interface CustomTypeOptions {
defaultNS: "vencord";
resources: {
vencord: typeof import("../translations/en/vencord").default;
};
}
}
need a better way of doing this ideally
i do think generating this type is probably easier
so
we can just make a script that generates it and we just commit it to the repo
should be easy enough
why? this is fine
const resources = await fs.readdir("./src/translations/en");
const imports = resources
.map(r => `${path.basename(r)}: typeof import("../translations/en/${r}").default;`)
.join(" "); // space padding
const typeDef = `
/* eslint-disable */
/* autogenerated, rerun script to update */
declare module "i18next" {
interface CustomTypeOptions {
defaultNS: "vencord";
resources: { ${imports} };
}
}
`.trim();
as in
when people add resources
it wont auto update the type, so the types will be wrong
so i'm just gonna write that as a script
make new file in translations/en
write translations for plugin
oh no
they dont work
because i18next doesnt know they exist
idgi
which bit
yes
so why would we ever add a string that doesn't exist in english in another language
you arent going to put all of the translations in one file
you're going to split them up
why not
because the file will be huge
it does
how
you would have to load every single translation string, including for things that arent being used
everything is being used
which defeats the point of even putting them in the asar
vencord does not have lazy loading
all translations will be used
no
the vast majority anyway
for those
you can put them in the vencord.ts file
thats fine
for plugins that wish to be translated
their translations will be loaded lazily
thats what the script is for
im not saying we split up all of vencord's translations into separate things because yes
most of them will end up being used
im saying each plugin gets its own translation file, if they decide to translate
(or we translate for them)
all plugins should be translated otherwise there's no point
then yes
they get their own file
it keeps it organised and means we arent shoving everything into one translation file
otherwise we have to prefix keys with pluginName and that is literally what i18next's namespaces are for
vencord will be the default namespace
so we can just write translations without prefixing them
but plugins will use pluginName:abc or useTranslation in the react stuff
and the translation will be loaded on demand
this script is just generating a typings file for it
why do namespaces use multiple files
that sounds bad
they dont have to, but do you want to load one large file containing every single translation
how
yes
loading one large file is faster than loading 100 smaller files
and there's no point splitting 100 bytes of strings into separate files
loading one large file is wasteful if you will never see it, and the small files thing only really matters over the network, but we're bundling them into an asar and at this point the optimization from bundling it into a large file is so tiny that the inconvenience in doing so will most likely make it harder to maintain than just having them in separate files
i think its crucial to remember all of this is happening locally
there is very little overhead in this case, and the optimizations we get are so miniscule that they would basically be considered noise by most people
no one will notice the difference in terms of UX, but we will in terms of maintainability
and remember this is discord, one of the slowest fucking react apps in existence
where the click between opening the settings panel and it actually showing up is really noticable in most cases
i do not think we have to worry
i wasn't trying to say it matters
i was just saying it to counter your optimisation point :p
ah
personally for my website i use one single file per locale and just use nested objects to introduce categories
i was thinking in the context of what we're doing
in the case of a web app
yes i fully agree
at dbots we do it by the language
but also we have translation tooling that maintains the files for us
even on host
reeding one larger file is way faster than reading 100 small files
we could, if we really really really wanted to, transpile it and then work out how to combine it into one file
but i do not think there's much point :p
like this, i find it cozier tbh https://codeberg.org/vee/vendicated.dev/src/branch/main/src/locales/en.ts
is there a function i can call to open the config modal of a plugin?
does VencordToolbox do this
but just see what the ⚙️ button does
i want to add a quick access button to configure my plugin on the vencordtoolbox
ah
ah actually thats a good shout
toolboxActions: {
async "Open settings"() {
openModalLazy(async () => {
return modalProps => {
return <PluginModal {...modalProps} plugin={pluginInstance} />;
};
});
}
},
would be your goto
what do i need to import to use openModalLazy?
utils/modal
anything else i need to import or fill out? im probably being a fuckin dumbass 
why ask
vscode tells u
type the name and it shows in auto complete
hit tab to complete and import
it isnt autocompleting 
L
my skill issue is just too bad for software to function
Despite using nothing else but Vesktop source for the entire day, the problem persists. In fact, it has already occurred three times in just the past 15 minutes.
Interestingly, it seems to occur when I’ve been silent for a prolonged period and then suddenly start talking again. This pattern leads me to believe that the issue might be related to transitioning from a state of silence to sudden activity.
I’ve also checked the console log for any useful information, but it doesn’t seem to p...
YOU MEAN HE DIDN'T STEAL MY YOGHURT??
You're probably gonna hate me for asking, but is there any way to force download all lazy-loaded webpack chunks?
I have a plugin that downloads the webpack as a tarball, but it doesn't get all files (most localization is missing for example), and I suspect lazy loading is to blame
our ci does that
use #🧩-plugin-development next time, since that has nothing to do with vencord
Gotcha
When interacting with the Screenshare feature on Linux, the behavior that allows you to close in on the application does not function properly.
This is how vencord-screen-share should function, as seen by qpwgraph
Some situations where an individual requests to screen share a singular application instead makes vencord-screen-share request every application, instead of the desired result ab...
the vencord.app page changed
they added an example contact form and change some styling
and they have only these plugins lol
idk
it's a wordpress website
and the contact form just straight up doesnt work
also the backend is php

holy shit there's a /admin route
it requires authentication but i just found the username is "vencord"
and now the person who owns this website has a password reset email in their inbox
oh my god i found a directory listing
wtf is going on 
UBO blocks that page, probably for the best
yeah we put it on ubo
i had to disable it to get it to work properly
so this is a LiteSpeed Web Server running a wordpress website
- that has always been there
- what does that have to do with vencord dev? #🧊-off-topic-iceman-only
sorry lol i got carried away
thats the same
None
None
None
None
None
LazyComponentWebpack(()=>{let e=Wc("AvatarDecorationModalPreview");return B.memo(e)}...)
None
None
joever
is there a callback for when a new page/tab gets loaded?
why
so many https://xyproblem.info lately
when asking a question, ALWAYS include what youre trying to do
My bad, im making a plugin to debloat bot messages, essentially removing all the yapping so i want to check element values and inject css whenever you focus on a dm or channel
Wouldn't it be better to hook into the relevant react components?
what is this big virus :(
Probably because cloud is down #announcements
it probably would, yeah (im very stupid)
When you have vesktop unfocused on fedora sliverblue 39 after a few minutes the program seems to "hibernate" and disconnects from any calls until i refocus again and it reloads. After checking this doesn't seem to happen with the official app.
please provide more info
how did you install vesktop
what desktop environment do you use
what vesktop version
Flatpak
Hyprland
Vencord 5dee2e8 (Vesktop V0.4.4)
if anyone else has the same issue please comment with your info as well
btw i believe #2035 is ready
I have the same issue on Arch Linux with vesktop from the aur - I can't seem to reproduce this consistently though, however it happens fairly often
Is there a way to install plugins programmatically? as in vencord plugin enable or something like that
explode
None
None
None
None
None
None
None
None
@junior olive you shall be happy
None
None
None
None
None
None
None
None
@austere talon btw codeberg sync isnt working
yeah i know
Im trying to get the favorite icon on gifs but I cant select it, and I tried the snippet in #📜-js-snippets to pause the app but it breaks the react devtools
inspect the gif logo
go up the tree and look at every components code til u find the right code
ok i found the function but i have absolutely no clue how to get this in my plugin
what do you want with it
i want to render the favorite gif button on normal images
Awesome :D
try to find where it chooses to render it
Just after that function, there's a ```js
return q.IMAGE_GIF_RE.test(e.filename) && null != n && null != s
? (0, a.jsx)(eE.default, {
width: n, height: s, src: t, url: t,
format: u.GIFType.IMAGE,
className: eN.gifFavoriteButton,
})
: null;
That looks relevant I think
The one I posted very clearly says IMAGE_GIF_RE though
Oh, so it's gif subtype t, not gift as in present
is like
gifts for gif gifs and gifv for videos that render like gifs (ex from tenor)
yeah
There's a gifFavoriteButton: eR(t),, where ```js
eR = (e) => () => {
let { proxy_url: t, width: n, height: s } = e;
return q.IMAGE_GIF_RE.test(e.filename) && null != n && null != s
? (0, a.jsx)(eE.default, {
width: n,
height: s,
src: t,
url: t,
format: u.GIFType.IMAGE,
className: eN.gifFavoriteButton,
})
: null;
};
eE.default is the component for the actual button, with click listeners and all
uh this is what u need
just override the IMAGE_GIF_RE
regex patch IMAGE_GIF_RE to match anything
done
Why the double lambda in (e) => () => { tho
actually kinda not
cause then all images will have the gif badge
which u dont want
ull figure it out tho
ok i did it but it only shows the gif badge and not the favorite button
ok this is really buggy actually
on some images it will show it and then when you hover over it it will disappear
i made a plugin inspired by the 🗿 plugin, essentially you can list any amount of triggers and sounds to play (seperated by a comma)
i am going insane
This plugin completely hides the blocked people like they doesn't exist!
Before:
After:
PSA: this still an initial version, more improvements are coming soon
TODO:
- [x] Hide blocked members messages
- [ ] Hide blocked members completely from server's members list
- [ ] Rename t...
cant you do that with just css
hi. this is already a plugin: https://vencord.dev/plugins/NoBlockedMessages
vencord also does not use raw dom manipulation, you should use patches
thanks a lot regardless
doesn't this already ex- oh
highest quality bd plugin

using class= and then keeping the class hash is the best part
love
lol
What did you patch instead?
when you open an image in the big view
the star appeared there instead of on the image
anyway this is how im doing it now
const GifAccessory = findComponentByCodeLazy("GIF_TOOLTIP_REMOVE_FROM_FAVORITES");
i found the actual component
None
None
None
None
None
None
None
None
Cause of discord's silly code I had to change how the favorite gifs menu is rendered and re-make parts of how the favorite accessory works
LETS FUCKING GOOOOO FINALLY
ive been wanting to make this for forever but i struggled getting the patches right
then i spent all of today rewriting how the favorite gifs menu is rendered and how the favorite button is rendered
dude ive been wanting a plugin like this since i moved from bd ages ago
youre my hero 
@spark pivot i tested the plugin and it works great, it would be cool if you could replace the gif text with "media" or something, and the gif button icon with a photo
good idea
you should be able to do it with just css injection actually
done
looks off centre
i actually changed "Search Favorite Gifs" from the FavoriteSearch plugin when my plugin is active
**index.tsx: **Line 196
placeholder={Plugins.isPluginEnabled("FavoriteAnything") ? "Search Favorite Media" : "Search Favorite GIFs"}
don't import from that file
oh i just figured out multiple images doesn't work without nomosaic







