#👾-core-development
1 messages · Page 156 of 1
i just do so because there were annoying bugs with eclipse ide and bsnes 
i use x11 because nvidia
but also i haven't checked if i can use wayland in a while
in my experience wayland has laggier animations? it's weird.
well idk. it won't be wayland's fault when it's just a protocol...
ew, small buttons
also greyscale emoji
weird
through the power of bad regex i seem to already be doing this
Okay so electron's globalShortcuts api is not at all a good fit for this. the keyup/keydown events are rather crucial for discord's functionality. and also it "consumes" inputs (i have no idea what the correct term for this is. basically if you set anything as a keybind nothing else can use it, for example if you have the tab key as push to talk tab won't do anything everywhere else).
yes. as mentioned in the issue you linked and as discussed on discord, using a native library would be better. however all the current options don't seem to support wayland at all, so we will most likely have to write our own module
IS_WEB is true for vesktop right?
i don't think so
yeah no
IS_WEB = web only
IS_VESKTOP = vesktop only
IS_DESKTOP = discord desktop or vesktop
IS_DISCORD_DESKTOP = discord desktop only
but web plugins are bundled into vesktop
is there a documentation of any type for imports? or do you kinda just have to read the code

how can i check if the banner property of a guild is animated?
oh, checking if the url contains .gif seems to work fine ish 
ill just do that lmao
hash starts with a_
all animated ugc asset hashes will start with a_
im kinda confused on how context menu patching parameters work, ive figured out how to add menu items to different context menus, but how do i get information on what was clicked? specifically, ive added a button to "image-context" so how can i grab the image that was clicked?
via props i think?
The NavContextMenuPatchCallback gets the arguments passed when the menu was created
Usually (children, props), where props contains the tasty stuff
Probably props.href and/or props.src
ahhh, alright i get it. thanks you! :3
is there a way to replace specific strings in message contents? im creating a plugin that allows users to block specific images and custom emojis from showing by right clicking and selecting "block" in the context menu, then it will automatically replace any instance of the link with something else. right now ive created the context menu buttons, and it logs the link of whatever you right clicked in the console
just use the regular replace functions
but what/where do i call it on?
well yeah, but i mean how do i actually find all messages/media sent by users in a channel?
MESSAGE_CREATE flux event gives you messages from other people, for historic ones use api or something (dunno, doing too many things at once rn)
i remember someone making a pr for textreplace doing other people's messages
you patch the message component
youre asking so many questions that could easily be answered yourself by looking at other plugins
please try to do more of your own research
mhm
my bad, ill search around more before asking next time :P
shh I def didn't forget 3 months ago 
None
None
None
None
None
None
None
None
I forgot why I did this, I think something didn't work without it
This is necessary so that when I use setMatch it will update the checked text input, otherwise it doesn't
that pr i did should have fixed the complaints you had ven.
LOVE
not yet because i couldnt work out a good way of doing it
ill take a look when im home
ok so apparently the xdg portal way of having shortcuts doesn't exist on some implementations.
i only managed to get things working on kde. xfce (and by extension i'd assume mate and cinnamon since they use the same portal implementation) doesn't work. i haven't tried gnome but the global shortcut issue is still open so i don't think it is implemented yet
does discord even support keybinds on wayland??
nope it doesn't
kde has an option to fix it but besides that discord doesn't officially support it
xdg-desktop-portal's globalshortcuts api isn't implemented in most implementations. i don't think it's viable to use.
perhaps we could use libuiohook and for wayland users we could have a way of hooking up a shortcut in their wm to a specific action?
xdg-desktop-portal's globalshortcuts api isn't implemented in most implementations. i don't think it's viable to use.
I think it would be good practice to adopt this already even though some WMs don't have it implemented already (KDE has already) because it will probably become the standard soon (especially since it's designed to become a standard)
perhaps we could use libuiohook and for wayland users we could have a way of hooking up a shortcut in their wm to a specific action?
This i...
Perhaps I could implement a native module similar to libuiohook which supports x-d-p global shortcuts as well as a X11 Keyboard Hook and Windows either through a LL-Keyboard Hook (and maybe even RegisterHotkey).
I'd need a library like that for personal projects anyways, in case this would be of consideration for Vesktop, are there any preferences on how the API should look like?
@austere talon maybe it would be good if we had a library like that which supports all kinds of hotkey implementations
i haven't tested this but apparently RegisterHotKey also consumes inputs, so perhaps you wouldn't wanna use it if you are going that route
I know, I also wouldn't recommend RegisterHotkey as the backend of choice but rather the LL-Keyboard Hook - would be nice to have RegisterHotkey support as well though because it plays better with some Anti cheats I think
i don't think this is easily possible, since electron only supports screens & windows
try searching in the electron issues
They're just cameras, you can access them the same way you would a webcam
the real issue is getting that into discord as a stream feed id imagine
no don't close, it's still useful to track, it's just important to note that it's likely not that simple
I have a draft here #195 but I would appreciate some help with the patching!
would be nice if, before attempting to install vencord, the installer would check where discord is running and throw an error or at least warn the user if discord is running from somewhere else (ex. another windows drive), as there's no good way to figure out this is what's wrong by yourself. can likely be windows only as this shouldn't be an issue on other operating systems
He wants the Installer to check where the binary of the currently running discord process came from and check if that matches the path the installer suggests
i don't think i understand the use case
discord may be in ProgramData but the installer already detects that and tells u to fix it
im talking about obscure locations like Windows.old or another letter drive
@austere talon vesktop will rebrand to veesktop soon 
You have my support
None
None
None
None
None
None
None
None
Can be done using TextReplace
I didn't know about that plugin. I will close this pr.
sounds like a name for an htop alternative
Unable to add Account Connections (specifically Spotify, may be others)
Enviourment
Windows 11 22H2
Latest Stable Windows Release
Description
Attempting to add a connection (that uses outside OAuth2) does not work on Vesktop (probably because it opens a popup on Clean Desktop && Web Clients), this causes it to load indefinitely.
Reproduction Steps
- Install Vesktop on Windows
- Attempt to link a Spotify Account (Fresh Discord)
Active Plugin List
- Cras...
i haven't had much success using x-d-p's api. i don't think any implementation has it fully implemented
for now i think libuiohook is essentially our only option on linux (and macos probably i have no idea what has to be done there)
perhaps some cli tool that forwards things to vesktop would also work as a hacky workaround for wayland
a friend told me he uses https://github.com/cyrinux/push2talk
uses https://www.freedesktop.org/wiki/Software/libinput/ it seems
reeding the basic description it seems this is exactly what we need
it has a C api for getting events
it does seem promising
Why is there a view raw in the notifications menu
because discord calls that "channel-context"
you will pull a devilbro and do another case for every language
true
enlgihs is so real
@austere talon I have came back
womp womp
unsaneee
ıkoay fixed
seems like virus
does anyone want to place bets on how long it takes to be removed again
@crude hearth were the moderation changes requested made
they were server-side, https://github.com/mantikafasi/ServerGo/commit/02198e5018ba8a2c069faf394d2cc1580e975e7c
i assume that the plugin was updated too
it doesn't look like the client recieved the right changes..?
naw it did
okay
yes 100% ill place a bet
None
None
None
None
None
None
None
None
We wrote about VAAPI above, I personally got it working with the following parameters:
vencord-desktop --enable-features=VaapiIgnoreDriverChecks,VaapiVideoEncoder,VaapiVideoDecoder,CanvasOopRasterization,UseMultiPlaneFormatForHardwareVideo
after such settings, the encode from the video card finally started working.
My GPU: AMD Radeon RX 580 8gb.
Thank you!
can anyone ocnfirm this
I thought that was just normal for discord screenshare.
veeapi 
currently if you start vesktop and one is already running
it opens another instance, asking to login
it doesn't
it does for me
skill issue
well it is somehow for me
[Vencord] Installed React Developer Tools
[arRPC > ipc] not available, trying again (attempt 1)
[arRPC > ipc] listening at /run/user/1000/discord-ipc-1
[arRPC > websocket] 6463 in use!
[arRPC > websocket] listening on 6464
[arRPC > process] started
arrpc doesnt like
i closed my current instance
and now it works
strange
libva error: /usr/lib/dri/nvidia_drv_video.so init failed
fix
**index.ts: **Lines 74-84
if (!app.requestSingleInstanceLock({ IS_DEV })) {
if (IS_DEV) {
console.log("Vesktop is already running. Quitting previous instance...");
init();
} else {
console.log("Vesktop is already running. Quitting...");
app.quit();
}
} else {
init();
}
soon
does it happen if you suspend then resume
i found the files it uses
lrwxrwxrwx - nick 9 Jan 23:01 SingletonLock -> arch-81391
lrwxrwxrwx - nick 9 Jan 23:01 SingletonSocket -> /tmp/scoped_dirWG7HkR/SingletonSocket```
i wonder if the /tmp dir gets wiped
yop if i rm -rf that tmp dir it breaks
@austere talon hiiiiiiiiii isn't there a way for vencord to inject into discord updater and reinstall itself after the update completes
@SpookySkeletons thank you for the information about VAAPI, I personally got it working with the following parameters:
vencord-desktop --enable-features=VaapiIgnoreDriverChecks,VaapiVideoEncoder,VaapiVideoDecoder,CanvasOopRasterization,UseMultiPlaneFormatForHardwareVideoafter such settings, the encode from the video card finally started working.
My GPU: AMD Radeon RX 580 8gb.
This arguments on my hardware aren't doing much, I guess that's maybe due to my optimus configur...
@SpookySkeletons thank you for the information about VAAPI, I personally got it working with the following parameters:
vencord-desktop --enable-features=VaapiIgnoreDriverChecks,VaapiVideoEncoder,VaapiVideoDecoder,CanvasOopRasterization,UseMultiPlaneFormatForHardwareVideoafter such settings, the encode from the video card finally started working.
My GPU: AMD Radeon RX 580 8gb.
Any results??
why do code keep vanishing 😭
and why is there a patch that put \ into color props
when you start a stream with easyeffects running and "process all input streams" ticked, it will set both the mic and stream audio to Easy Effects Source
possible fixes
-
double-check the screenshare audio source is set to the correct one
-
make the application name for the screenshare audio recording stream is different so it can be excluded
workarounds
- don't use process all input streams
- enable all apps you use manually
- have to mess with easyeffects every time...
@austere talon Can you transfer this?
But I'd argue this is more of a EasyEffects issue than a venmic issue, but in depending on how the Node-Graph looks we might be able to workaround this
✍️ Bug Description
when you start a stream with easyeffects running and "process all input streams" ticked, it will set both the mic and stream audio to Easy Effects Source
possible fixes
-
double-check the screenshare audio source is set to the correct one
-
make the application name for the screenshare audio recording stream is different so it can be excluded
workarounds
- don't use process all input streams
- enable all apps you use manually
- have...
im having the same issue
Looks like EasyEffects is forcefully disconnecting venmic from the Vesktop and forcing itself in there - This is really bad.
I'm not sure if I can do anything about this
already exists but its only enabled on windows for some reason
its in a file named injectWin32Updater.ts or something close
Easy Effects does do that, it's how it and many other similar software like Soundux works afaik
maybe a report could be made to Easy Effects as you mentioned, for being too aggressive
until this gets figured out i might patch easyeffects to divert ONLY if source id equals default id
@wwmm Apologies for the ping - Is there any possibility that EasyEffects could avoid playing around with links from specific nodes? (In this case leaving vencord-screen-share untouched)?
I'm not quite familiar with how your guys' logic works - But judging by the screenshot provided here it looks like EasyEffects is removing the links from vencord-screen-share to Chromium (The links are created by Chromium here, as it requests to listen to said node)
Easy Effects does do that, it's how it and many other similar software like Soundux works afaik maybe a report could be made to Easy Effects as you mentioned, for being too aggressive
until this gets figured out i might patch easyeffects to divert ONLY if source id equals default id
Well Soundux only creates new links, while EasyEffects will delete links - I think this could probably be resolved if EasyEffects would avoid deleting links created by certain
Nop
Hi,
EasyEffects does not delete links. When its automatic redirection is
enabled it asks PipeWire/WirePlumber to redirect the stream to one of its
virtual devices (null-sinks). It is the only way to process the audio
player/recorder buffers. For example for audio players In the end you have
something like this:
audio player -> null-sink -> some filters -> soundcard
. As expected you can't have two audio managers trying to do something like
this. It will never work. One will dest...
Hi, EasyEffects does not delete links. When its automatic redirection is enabled it asks PipeWire/WirePlumber to redirect the stream to one of its virtual devices (null-sinks). It is the only way to process the audio player/recorder buffers. For example for audio players In the end you have something like this: audio player -> null-sink -> some filters -> soundcard . As expected you can't have two audio managers trying to do something like this. It will never work. One will destroy the redi...
Also, out of curiosity, do you have any documentation / resources on how one can request pipewire to redirect streams? I'd love to look into that as well!
Long story short EasyEffects is forced to manage different kind of links in different ways. The simpler ones to handle are the ones involving streams and devices. You just have to set the proper metadata giving the right node ids as input
https://github.com/wwmm/easyeffects/blob/a0218ef27b2207a9a00ed441c5a83f2dad6fa8a6/src/pipe_manager...
Print of the blocklist in action
Also, out of curiosity, do you have any documentation / resources on how one can request pipewire to redirect streams? I'd love to look into that as well!
Long story short EasyEffects is forced to manage different kind of links in different ways. The simpler ones to handle are the ones involving streams and devices. You just have to set the proper metadata giving the right node ids as input https://github.com/wwmm/easyeffects/blob/a0218ef27b2207a9a00ed441c5a83f2dad6fa8a6/src/pipe_m...
This is a really interesting way of doing it, when I did similar things while playing around I usually mirrored the links to the new target and then removed the old ones, I didn't know one could simply update the metadata to set the target - great stuff!
Besides simplicity there is another advantage of the metadata path. WirePlumber will remember the user preferred device for you. Imagine that the redirection is not needed anymore. Just set the target to null https://github.com/wwmm/eas...
This is a really interesting way of doing it, when I did similar things while playing around I usually mirrored the links to the new target and then removed the old ones, I didn't know one could simply update the metadata to set the target - great stuff!
Besides simplicity there is another advantage of the
metadatapath. WirePlumber will remember the user preferred device for you. Imagine that the redirection is not needed anymore. Just set the target to null https://github.com/w...
Did you figure this out through digging through the pipewire source code or is this documented somewhere?
Although I've spent quite some time reading PipeWire and WirePlumber code that was not how I found this out. And as far as I remember it is not documented. Or at least it wasn't at the time. When I was porting PulseEffects from Pulseaudio to PipeWire I opened an issue there to ask for guidance. That was when its main developer suggested the metadata.
Some years later while trying ...
it already does that on windows - but it doesn't seem to work correctly
I much prefer having the links open in my browser, but without enabling this feature, Vesktop will attempt to open stream popouts in the browser too, which obviously doesn't work.
While the feature is still experimental and you might not want to always have stream popouts open within a new Vesktop window yet until it's out of beta, it would be great to at least have an additional option specifically for stream popouts, to make them functional.
To reproduce the issue:
- have "Open Link...
Pr time :3
ven starbotting
Hi, EasyEffects does not delete links. When its automatic redirection is enabled it asks PipeWire/WirePlumber to redirect the stream to one of its virtual devices (null-sinks). It is the only way to process the audio player/recorder buffers. For example for audio players In the end you have something like this: audio player -> null-sink -> some filters -> soundcard . As expected you can't have two audio managers trying to do something like this. It will never work. One will destroy the re...
i listed that in the workarounds section of the issue. the
node.namefor both the mic input AND stream audio input is "Chromium input"
@wwmm Is it also possible to specify other node properties? Maybe that would be helpful, if we could exclude based on the set target.object?
le remote code execution
Is it also possible to specify other node properties?
It isn't in 99% of the cases. Selectively blocking streams is a nightmare because you need unique stream identification tags to do this. The problem is that Pulseaudio never required apps to do it. And as PipeWire has to be compatible with Pulseaudio apps it can´t require unique tags either.
The ideal solution would be the audio players/recorders to set an unique PW_KEY_APP_ID tag for each stream. Pavucontrol does it for example...
if we could exclude based on the set target.object?
A long time ago I tried to use this property in another situation. I wanted to avoid EasyEffects moving recording streams that were not recording from the mic set as EasyEffects input device. Unfortunately this property was of no use. If I remember well the first problem was that it is not always set. I think that only when the user sets a custom device in the audio client set this property is not empty. But the worse was the fact this p...
At least for OBS a workaround already available in EasyEffects was enough to avoid some of the blocklist limitations. In our preferences window there is an option named Exclude streams from monitor devices that when enabled makes EasyEffects ignore streams that are recording from devices monitor ports. For example in OBS its desktop stream records from the soundcard monitor ports. Avoiding this kind of stream allowed effects to be applied to the other OBS stream that records from the mic ...
is this option enabled?
Looking at your image I think it won't help because the node vencord-screen-share does not seem to be a sink. So Chromium is not recording from monitor ports...
@SpookySkeletons thank you for the information about VAAPI, I personally got it working with the following parameters:
vencord-desktop --enable-features=VaapiIgnoreDriverChecks,VaapiVideoEncoder,VaapiVideoDecoder,CanvasOopRasterization,UseMultiPlaneFormatForHardwareVideoafter such settings, the encode from the video card finally started working.
My GPU: AMD Radeon RX 580 8gb.
Arch Linux, KDE, Wayland, RX 6700XT here.
Can confirm that without these options, my friends ...
At least for OBS a workaround already available in EasyEffects was enough to avoid some of the blocklist limitations. In our preferences window there is an option named
Exclude streams from monitordevices that when enabled makes EasyEffects ignore streams that are recording from devicesmonitor ports. For example in OBS its desktop stream records from the soundcard monitor ports. Avoiding this kind of stream allowed effects to be applied to the other OBS stream that records from the mi...
mmm i love token grabbing in my vencored
uhh did i mention this but couldn't you copy the code with the license?
and then it's less cursed?
it is, and it works on OBS just fine
I imagined. when you have time run pw-cli list-objects Node to find the id number of these chromium streams and then run pw-cli info id_number so we can see what tags are set for them.
hm?
imo even if you can make it somewhat secure, using eval here is dirty
i think it's called meta-programming. it feels pointless here
i mean i agree the same thing that for version and safety control that it should be bundled locally but w/e
as long as you pin to long commit hash it's safe unless github gets compromised at which point it's over anyway
or maybe not
But the worse was the fact this property takes too long to be set by PipeWire
This is unfortunate - I'm trying to think of a way to make this work but sadly we don't control the chromium port so there's no property I could set on that node to make it work
devices that when enabled makes EasyEffects ignore streams that are recording from devices monitor ports
How exactly are you checking whether or not the port is a monitor?
As the port is something I control I suppose I could m...
i'm not worried about safety, it's just kinda weird to do string manipulation on code
just to change inputs
Pin to a specific commit, otherwise you could push a malicious update and no one would be the wiser.
you are talking about me
mr github?
the .then chain is ugly though considering one of the replace calls is part of an already existing .then
him
i don't think that pr will be merged anyway
it's weird to have another plugin
agreed
why not an option?
good luck doing that cleanly cause it wont be merged into the main repo as an option
just have to copy the code over properly if u wanna make major changes
but tbh im also not sure if there should be such major changes to oneko
its simplicity is kind of what makes it cute imo
DiscordMinigames plugin 🔥
would be better to beg dicsord to make a neko coin collector activity
How exactly are you checking whether or not the port is a monitor?
As the port is something I control I suppose I could make it seem as if it were a monitor
This way https://github.com/wwmm/easyeffects/blob/a0218ef27b2207a9a00ed441c5a83f2dad6fa8a6/src/pipe_manager.cpp#L253. You do not probe the ports. Nodes that record from monitor ports have the property PW_KEY_STREAM_CAPTURE_SINK set. More info in this pipewire commit https://gitlab.freedesktop.org/pipewire/pipewire/-/commit/5ae75e1...
store sound overrides and sound data under same indexeddb key?
or create a key for each override sound data
i guess with the latter approach you can lazily load
This is unfortunate - I'm trying to think of a way to make this work but sadly we don't control the chromium port so there's no property I could set on that node to make it work
I was trying to fix this issue https://github.com/wwmm/easyeffects/issues/1335. I am almost 100% sure that when I tried to use node.target it was not available at the moment PipeWire notified us about the stream creation. This kind of thing happens to other properties too. Some are asynchronously set at a later ...
Thanks, will change all that and additionally add this as an optional option inside the original oneko plugin
Patched & confirming it's better than 1 fps, however watchers report about 5.
What's likely going on is I am now encoding on my iGPU instead of dGPU as expected which is unable to handle the image bitrate like @MiMillieuh
https://wiki.archlinux.org/title/Firefox#Hardware_video_acceleration
Arch wiki reports that firefox can self select render node with the env var MOZ_DRM_DEVICE, what we could use is a chrome var to set the VAAPI dev here as well, that should mop up the issue for ever...
Would it be possible/desirable to support subdirectories in plugins and userplugins?
Something like if the directory is named *.dir it recurses into it instead of looking for index.ts, perhaps
no
Maybe the node.target situation is different now. I would have to take some time to test it.
No. It isn't. I did some tests now with discord and even setting a custom mic in its configuration panel PW_KEY_NODE_TARGET does not seem to be set even in the second round of callbacks that update the node info after its creation notification. Maybe this tag is meant to be used by pipewire/wireplumber internally and nothing else.
Ok
Adds a simple coin collection game to oneko
I feel like this setting could be implemented better, so if anyone has any suggestions, please let me know
This loading JS from an external source makes me feel uneasy
To be fair the original does aswell
they did say it could be implemented better :p
original is a known person tho?
arghh
textreplace only loads settings on enable / start while enabled
is there some kind of init function?
i don't want to end up creating the same bug
maybe worth creating an init function? or just running code at the global scope? 🤮
oh, using await at the global scope...
oh dear
what if there was just an init function which was called at the same stage as enable but regardless of state
any better solution?
whar are you doing
load settings from indexeddb
on the way I noticed a bug in textreplace and I would ideally like to fix it there and in my plugin
to do that, I('m pretty sure I) need to call something on start regardless of whether the plugin is enabled or not
it doesnt matter whether the person is known or not
i wouldn't even load remote code from myself unchecked
note that the links in that pr are pinned to long commit hash which makes it immutable
Adds a plugin that is a fork of oneko to add coin collection
Not sure which is preferred, so have 2 PRs, one that is a individual plugin, and one that adds an option to the existing plugin
Maybe the node.target situation is different now. I would have to take some time to test it.
No. It isn't. I did some tests now in discord's app and even setting a custom mic in its configuration panel
PW_KEY_NODE_TARGETdoes not seem to be set even in the second round of callbacks that update the node info after its creation notification. Maybe this tag is meant to be used by pipewire/wireplumber internally and nothing else.
Does it work with discord web instead of discords deskto...
#include "http://vendicated.dev/notavirus.c"
How exactly are you checking whether or not the port is a monitor?
As the port is something I control I suppose I could make it seem as if it were a monitorThis way https://github.com/wwmm/easyeffects/blob/a0218ef27b2207a9a00ed441c5a83f2dad6fa8a6/src/pipe_manager.cpp#L253. You do not probe the ports. Nodes that record from monitor ports have the property
PW_KEY_STREAM_CAPTURE_SINKset. More info in this pipewire commit https://gitlab.freedesktop.org/pipewire/pipewire/-/commit/5a...
References:
- STB libs: https://github.com/nothings/stb
- TinyCC Git Repo: https://repo.or.cz/tinycc.git
- libcurl HTTPS example: https://curl.se/libcurl/c/https.html
- libcurl URL parseing example: https://curl.se/libcurl/c/parseurl.html
- The Patch: https://gist.github.com/rexim/a6636976d12f67ea530ece118a700317
- My String_View Library: https:...
always use http
does this download every time or use etags lol
Does it work with discord web instead of discords desktop client?
No. I tried discord web on Firefox and the tag was not defined.
you need to make it so the coins get deleted on stop as they just stay there when I tested this.
how is that a good first issue @topaz thistle 😭
poor first time contributor on their way to figure out this mess...
Does it work with discord web instead of discords desktop client?
No. I tried discord web on Firefox and the tag was not defined.
Thanks for confirming!
Which one?
the easyeffects one
Why wouldn't it be
EasyEffects Incompatibility is always an issue for patchbay stuff
Would be good to finally have this sorted out
And it's a good thing to have the EasyEffects dev involved, a lot of good insight
It is
you do realise good first issue is supposed to be easy to solve issues for first time contributors right
Oh
Lmao
No I didn't realize that haha
xd
I always thought it's: Thanks for submitting this issue
read the desc xd
Lmfao

TIL
its to make it easier for newcomers to contribute
especially when your project has tons of issues
so u can basically mark the easy stuff that a beginner can do
you need to make it so the coins get deleted on stop as they just stay there when I tested this.
Fixed
Whenever I find a project I want to help on, I filter by good first issue, find what interests me, and give it a shot
Using vencord-desktop --enable-features=VaapiIgnoreDriverChecks,VaapiVideoEncoder,VaapiVideoDecoder,CanvasOopRasterization,UseMultiPlaneFormatForHardwareVideo while playing Armored Core IV, it's a semi slideshow like 5fps. Arch Sway 7900XTX. Although ENC appears in nvtop so it looks like its encoding.
oh.
lmao
Upon further testing, it seems using vesktop --enable-features=VaapiIgnoreDriverChecks,VaapiVideoEncoder,VaapiVideoDecoder,CanvasOopRasterization,UseMultiPlaneFormatForHardwareVideo is definitely doing something that's improving the overall stream performance, but the slowdowns when there's a lot of movement on screen persist, they're just not as extreme, and it also seems like the threshold for movement causing a slowdown is a bit higher. It also appears that lowering the stream resoluti...
Do list specs with your reports, I would like to narrow down if it's related to wrong GPU encoder selection.
Are you two on PRIME/ Hybrid GPU?
I gave some specs in a post above but I'll go into more detail here.
GPU: AMD Radeon RX 6700XT
CPU: Ryzen 7 5700X
OS: Arch Linux
DE: Plasma 5.27.10
WM: kwin
Display Server: Wayland
Audio Server: Pipewire
Kernel: 6.6.10-zen1-1-zen
Mesa version: 23.3.2-2
LLVM version: 16.0.6-1
The 6700XT is the only GPU in my system, so no PRIME.
None
None
None
None
None
None
None
None
aa help
turns out webm is audio too? lol?
well i just put steamboat willie in customsounds and it ain't stopping for a while ig
ah
it's just ya know... web mmmmm ... web movie
or it's literally just web MMMMMM
😋
lol
tbh i think no text to speech called it web movie and i didn't know better lmao
you will have fun reviewing this code
:3
there must be a less stupid way...
maybe this isn't fabuluous ux but it works
This "PR" should be "ready"! I hope you "enjoy" reviewing my "code"! "🚀"
the latest commit is kind of cursed, sorry
but it uses DataStore!
i decided against separate keys
so it's just loading the base64 from json...
URL
tbh it's the same as the input so does it matter?
skill issue
can i merge the notificationvolume plugin into mine
Content
Add a cache function to the enabled/disabled set bound to the channel ID.
! The Show Icon option has to be enabled !
The plugin would be able to save your last set, whether DM or server channel.
Would have to be saved beyond one discord session.
Request Agreement
- [X] I have read the requirements for opening an issue above
omg guys we hit another milestone 🤩
can we reach 200 opening prs in 2024
github will do what github does
i think this plugin probably conflicts with notificationvolume
idk, regex patching is surprisingly resilient
Would it be possible to get these added?
If this is already an open issue or pull request then feel free to close this.
Possibly too much work, but could they be dynamically grabbed instead of hardcoded?
how would i patch this code to overwrite the display as status value to something else? im having some trouble, managed to figure out how to override the value but that only changed it visually, not actually overriding the config 
Same issue one Arch with the vencord-desktop-git AUR package. Weirdly enough, only some participants notice the high-pitch sound.
tysm :3
if i wanna call that, where do i get the f.id property from?
findByProps('getAccounts').getAccounts().filter(i => i.type === 'spotify')[0].id
fork, create new branch, commit, push to your fork, open pr

has been made, slightly different: https://codeberg.org/vee/cord/pulls/7
(icon is global, the slash command has a local subcommand)
vee to remember codeberg exists
is there a way i can get the value of spotify show activity?
findByProps('getAccounts').getAccounts().filter(i => i.type === 'spotify')[0].showActivity
I compiled Mesa with the PR !26165,. With my 7900XTX, I do see the "ENC" on nvtop, it goes from 0 to 4% while streaming, but it's still seems to lag a lot
I compiled Mesa with the PR !26165,. With my 7900XTX, I do see the "ENC" on nvtop, it goes from 0 to 4% while streaming, but it's still seems to lag a lot
I like Vesktop but why this option is missing? Is there any real reason for that? This option is really important for me...
because web discord does not support this feature as it is currently implemented, and vesktop is web discord with some goodies attached to make it feel more like a proper desktop client. the volume booster plugin in vencord requires the original discord natives to work which we cannot ship or make work with vesktop.
Do you have any example use cases for that? Just wondering
Sure:
People you dont want to hide your typing status from like close friends
yes
how is audio output for vcs handled by discord web? if the volume can be changed there's probably a volume value it's changing and i'm fairly sure you can increase the volume of both audio elements and web audio api above 1
how is audio output for vcs handled by discord web? if the volume can be changed there's probably a volume value it's changing and i'm fairly sure you can increase the volume of both audio elements and web audio api above 1
discord web uses the standard browser audio apis in contrast to how discord desktop works. you have to apply gain to the media to make it work on web, audio levels >100% don't exist in the web audio api nor on media elements for good reason. until the plugin is update...
good reason being that gain can heavily distort audio depending on how and where it's applied, from my memory
so that's why the web audio api is clamped at 100% volume
shrug, it's a legitimate question
no it isnt
its not a legitimate question its <person with 0 technical knowledge making random assumptions/guesses>
aka spam

i felt it deserved a proper answer, i feel it's better to inform them than have them remain uninformed on why we can't just do it the way they're saying
educate rather than punish or something
idk i learnt it in humanities class years ago
oh yea i remember
but yeah
on the desktop client, they use native modules to run voice (discord_voice.node i believe it's called)
so we can boost the volume because that's supported and its implemented differently to how the web audio api works, and no one has bothered making a version of the plugin that works with the web audio api/vesktop specifically
Discord Desktop has a feature that lets you increase the volume of participants in voice calls above 100%, up to 200% (or even higher with the VolumeBooster plugin)
This feature is missing in Discord Web because this is not a thing in WebRTC / web media apis (discord desktop does it via discord_voice native module)
The likely solution to this is obtaining the audio streams in some way and applying a filter to them, hopefully without ruining quality too much
@placid hinge can u repro https://github.com/Vencord/Vesktop/issues/293
well its a mac issue
works on my machine
how fix
btw lewiii
how about signing now!
we literally do
get me a certificate sweetie
we dont apply our own css we just apply the correct class iirc
:3
wdym..
sorry a certificate signing request
not yet
shrimply hackintosh
let me see how we build
force ryan to request it with ur acc or smth
oh we have to
notarize it as well
otherwise gatekeeper will still be pissed
ffs
i need to add issue templates to auto add bug/enhance
whats that
uh
i dont actually know
its some security feature
Notarization gives users more confidence that the Developer ID-signed software you distribute has been checked by Apple for malicious components.
Notarization is not App Review. The Apple notary service is an automated system that scans your software for malicious content, checks for code-signing issues, and returns the results to you quickly.
yeah its basically just virustotal but apple
there's electron-notorize which we can use
but apparently we need to use a "hardened electron runtime"
whatever that means
but electron builder supports it so
oh, less permissions by default
tbh its funnier this way
actually
wait
@placid hinge can you help me generate the CSR
for mac
apparently you can use certificate assistant in keychain access
so i think i can just tell you what to put in and you can create one
or @nimble plaza
derp wait
actually yeah
ill dm
has been made, slightly different: https://codeberg.org/vee/cord/pulls/7
Pretty neat, though I was thinking of a different approach to that, like automatically saving the override for the specific channel id whenever it's enabled (on click, rather than a subcommand)
we are sure the actual electron 28.1.1 have that commit merged? i'm not sure about that we need too the new electron with that merge i think
You can test it with chromium snapshot builds (available since 122.0.6238.2).
On Arch Linux, the most convenient way is to use the chromium-snapshot-bin AUR package.
None
None
None
None
None
None
None
None
hey, im trying to patch the code of the gif opener button to make it go directly to the favourite gifs instead of the gifs menu. I have found the relevant sections of code, but the functions are in different scripts. Is there a way i can call a function from another script or an easier way to do this?
Added "igsh" to the list, I believe Instagram may have replaced igshid with igsh, so it may not be necessary to have them both, but better safe than sorry.
whaat do you mean
export function from a script and import it from the other ?
alright libinput doesn't seem to play well with flatpak (or at least not by default maybe udev rules could fix that but idk if that's a good thing security wise)
Libinput is not really good security wise because it requires the user to be in a special group that gives them full access to key events which kind of defeats the purpose of Wayland as well
$ pw-dump | jq '.[] | select(.type == "PipeWire:Interface:Node" and (.info.props | has("media.class")) and (.info.props["media.class"] | startswith("Stream/"))) | { state: .info.state, class: .info.props["media.class"], name: .info.props["node.name"], binary: .info.props["application.process.binary"] }'
{
"state": "idle",
"class": "Stream/Output/Audio",
"name": "Chromium",
"binary": "vesktop"
}
{
"state": "running",
"class": "Stream/Output/Audio",
"name": "Chromium",
"binary": "vesktop"
}
why does vesktop have 2 audio out streams
jq jumpscare
okay but there doesn't seem to be a good alternative considering the portal has no support

we can use libinput for now and design the api in a way that makes it easy to swap out the backend
then switch to better backend whenever there is better support
that seems like the best solution to me
That's what I wanted to do (see my issue comment)
i also thought of making a de independant portal that only implements global shortcuts as a temporary solution until the DEs support it
the problem with that is wayland doesn't provide an api for this so we'd have to use libinput which brings up security concerns
kind of? that message made literally no sense, sorry. I'm trying to replace the function of the gif opener to make it go to the favourites section, initially i tried to see what function the favourites button was calling and just replace the gif button function with it, but they're in different scripts so idk if theres a way to do that? or am i being stupid and is there like a way easier way
honestly me too 
Do you have any more concrete explanation of what you're trying to do than "call a function from another script"?
i think I get what they mean ish
@still wasp no idea if this is a bad idea but perhaps check if clicking favorite fires a FluxDispatcher event and see if u can dispatch it urself on open gif picker
I think you could do that by replacing this.state = { resultType: null }; with resultType: "Favorites" (non-localized) in the constructor in module 873622
Yeah that
That will make you need to press escape twice to close the menu though
oh awesome, thanks!
eh its not the end of the world 
hmmm, this is what it does now.
this is the patch (probably wrong somehow
)
You can't include variable names (e and y here) in the find: string
Favourites...

oh my god i am the dumbest fuck alive
i hate being british
@woeful sable I'll probably start on a library like that by the end of the month
is there a way that i can make it so the back button still takes you back to the search? i only want it to default to favourites, not remove the functionality overall
Won't it already do that?
Oh wait you're using a /g
Then it'll replace the this.setState({ resultType: null }); in handleClearQuery as well
Probably best to only match the this.state = { resultType: null };, not the other resultType: nulls
don't use the g flag on your regex unless you absolutely want to match multiple things
alr :3
Also a good idea to use the patch helper (which only exists in dev builds)
I don't think patch helper even supports /g, does it?
are you talking about the dev companion plugin?
or something else
if i remove the g it just doesnt replace anything 
This one
ahh ok
No, it replaces the first match, in search()
what tab can i find that in?
do i actually need to be on a dev build or can i just comment out the check like you did?
that's impossible
and yeah there's no reason not to daily drive dev build
i do it
sorry, let me rephrase- if i remove the g the button functions as normal and just goes to the category section. also how do i get onto a dev build?
Yes, because it changes an unrelated part of the code
The resultType: null in ```js
search(c0, c1, c2) {
_6.search(c0, c1, c2);
if ("" === c0) this.setState({ resultType: null });
else if (this.state.resultType !== _15.GIFPickerResultTypes.SEARCH)
this.setState({ resultType: _15.GIFPickerResultTypes.SEARCH });
}
So I think without /g, it'll go to favorites if you empty the search field
oh it works if i include the whole this.state instead of just the result type statement

find: "e.keyCode===y.KeyboardKeys.ESCAPE",
replacement: [{
match: /this.state={resultType:null}/,
replace: 'this.state={resultType:"Favorites"}'
}]
this is the patch right now
e.keyCode===y.KeyboardKeys.ESCAPE is still a very bad find string though
Since it'll stop working next time discord updates
does the find string support regex?
No
hmmm
so do i essentially need to find a code segment that doesnt contain values and is unique to that part?
,onChange:this.handleChangeQuery,onClear:this.handleClearQuery,placeholder: maybe
way too long
finding a find for that file is incredibly simple
so many things to choose from
like .GIFPickerResultTypes.SEARCH
**index.tsx: **Line 94
find: "renderHeaderContent()",
None
None
None
None
None
None
None
None
horror
real
hello i have been given unrestricted access to this chat and i shall now cause ultimate chaos

I Imported Some Code From The Comfy Server (A Theme Server) And Now I Can't Even See My Discord
I Already Tried Going Into Dev Tools But Couldn't Figure Out How To Change The QuickCSS Without Going Threw Vencord
Press <kbd>Ctrl</kbd> + <kbd>Shift</kbd> + <kbd>I</kbd> to open the DevTools console and paste in this code:
(() => {
Vencord.Settings.useQuickCss = false
})()
to disable the QuickCss
You Are Welcome 🙂
So if I found the function I want to modify (I'll share it in a bit when im at the computer), how would I go about of making the regex, bcs I think I haven't completely understand how that part works
Why Would Anybody Write Like This
It Looks Ugly And Is Actually Harder To Do It Than Not
i understand people not capitalizing anything because it's easier
I myself like to capitalize the "I" and own names so it doesn't look ugly though
I think this is a nice to have feature, since I don't want to loose the name information for archive files.
One could also implement a list to exclude user chosen extensions.
this is way too specific and there are way more archive extensions than just this
there is a toggle to individually disable it for specific files, why not just make use of that?
Added the option to blur avatars so you can stream your discord without streaming unwanted profile pictures
hope I did anything right :3
cb7045c WebContextMenus: use vesktop native clipboard -... - Vendicated
hi! sorry, what's the point of this? this is just a css snippet that anyone can already apply via CustomCSS
CustomCSS
🐱
how is nsfwblur different?
because you need js for that
actually you can do it with css now but you need an incredibly cursed
.title:has(path[d="whatever-path-of-the-nsfw-channel-icon"]) + .content .imageWrapper {}
and :has wasnt available when that plugin was created
i dont think removing it now is a good idea because people will complain!
i'll be rejecting it for that reason
thank you regardless! you can post this in the css-snippets channel on our server
tbh editing this plugin every time there's a new param somewhere is not very sustainable.
we could redesign this plugin to where it fetches one or more blocklists from a remote place (optimally github), much similar to how extensions like ublock origin do it. we could make this configurable so people can make and distribute their own lists, but also provide our official blocklist
please refrain from force pushing. it makes it very hard to understand what you changed after review and makes me have to re-review everything.
why did you not take the other approach of dynamically finding the browserwindow?
I see, yeah might be to specific.
i don't think adding some sort of automatic blacklist to the plugin is a bad idea though
2ab1c50 QuickCss: reopen existing window instead of new... - Vendicated
superseded by https://github.com/Vendicated/Vencord/commit/2ab1c50c7355849e42ad81afcfef3d008b459247 which uses that approach instead, thanks though!
these have the potential to conflict with the other inbuilt "require modifier" setting. i also think this selection of modifiers leaves much to be desired. the other 3 modifiers hardly make any sense and users will definitely ask for more options
much nicer would be something like https://github.com/Vendicated/Vencord/issues/655
and why is there a patch that put <span> into color props
why did this make me wheeze lmao
lmao @tidal goblet
were u high when u wrote this
tbf thats a terrible misleading function name so i cant even blame u
@cunning canyon what does that patch even do
i put breakpoint but it doesntr trigger
I'm watching
Is this still working?
if this is a question theres very high probability that, this guy thinks it can create global badges
span
theres no real way to do this w/o it being insecure af
what?
did you mean to reply to the clear urls one?
i didn't read the full thing + i had woken up, typed that on my phone, and immediately went back to sleep
if its on gh it would be good, but then again why not just keep it in the vencord repo
because it requires source code changes and updates every time
having the list on github as an asset allows frequent edits and anyone to make their own list
i dont like the idea of multiple lists though
someone can come in and wave their dick around to fuck shit up
unless the blocklist is controlled by vencord, i wouldn't feel comfortable using it
but what's the point + simply don't add untrusted lists
what did they mean by this
it makes more sense to put them all in a single blocklist

i was cooking
dont put dicks near my lists
sorry 
yes
i think the most that needs to be done is making the list an external asset
but maybe not make multiple lists bcos then it will get real fucky
nuh
mine? add role color to member list in thread and forum
does nothing
nono
i know it doesn't do anything
i mean the other one in that pair
i tried to figure out what it does but i couldn't trigger it at all

role color in member list in normal channel
literally no..
i opened that and scrolled and it didn't trigger breakpoint
😵💫
None
None
None
None
None
None
None
None
Very simple, but maybe someone other than me will find this useful
they replace the space to plus 
ill give a serious review even if it wont be accepted
Honestly I’d use it
its a text inserter
it doesnt actually do any querying
it just returns the link to click
you should set a default or a setting like it seems like you were planning to do
this is a really naive way of doing this and is vulnerable to querystring injection. use encodeURIComponent instead:
const query = encodeURIComponent(args[1].value);
despite that this most likely will not be accepted since the plugin itself is so simple (generating a link to then click, rather than actually giving the search results) i will give a review to assist in future plugin development
Yeah I just realized this can be done with textreplace
despite that this will not be accepted since the plugin itself is so simple (generating a link to then click, rather than actually giving the search results) i will give a review to assist in future plugin development
Yea I didn't really expect this to be merged but thanks for review
we just need to put text replace on crack and it'll be able to do this
im thinking we can add some extremely basic scripting language to text replace replacements
to do common tasks like url encode, upcase / downcase etc while still being safe
that would be sick
Make it Turing complete while your at it
Grant it full access to discord apis
well then it wouldn't be safe...
Fair enough
we should brainstorm functions that could be useful
and then implement it
would be cool
ActionScript
I ♥ actionscript, it should be the standard scripting language for Vencord 🥰
wtf is that
adobe flash uses that
flash games/animations are coded in it
horror actionscript
I'd probably rename it to like Default(Picker/GifPicker)ToFavorites (may be too long) or something
otherwise looks good
license header got eaten
no license header because I EATED IT ALL
what about DefaultFavouriteGifPicker?



@crude hearth
If you dont merge they will increase
My prnet will take over Vencord soon
@austere talon this is genius
encodeURIComponent & encodeURI(?) at least
that would be enough to do a lot of things
It encrypts (not really) messages by mapping characters to arabic
You know it’s good “encryption” when it’s a 1:1 map
Match: ^g:(.+)$
Replace: https://google.com/search?q=[encodeUriComponent $1]
maybe smth like that
[encodeUriComponent $1]
keep it incredibly simple so it's easy to parse
what!

objective-c moment
we love objective c
what the hell
also i think there should be a sigil before the [] if anything
i want something that's very easy to type for non programmers and very easy to parse
we could reuse $ since you have to type it anyway
but it should be sigiled so that it cant accidentally be parsed in a string since [] alone can be a valid piece of text
well here's the thing
it would only do anything if it's a valid command
otherwise it's ignored
or better yet these special replacements could require a toggle to be enabled
programmers have access to all the same keys xd
i think its more like
when you're reading it back and when you're writing it
we know how to type a $ quickly
because its hardwired to us since we do it so often
but if we overuse it, it becomes hard for people to write themselves
hm
https://google.com/search?q=$[1 uriComponent]
?
so it reads a bit better imo
as in
group 1 formatted as uriComponent
then we can stick the sigil on the outside and keep it unambiguous when parsing, cause if we put it on the inside i suppose its not tooooo big of a deal (check for [$) but
actually wait
https://google.com/search?q=[$1 uriComponent]

gracias



yet another mantika alt