#👾-core-development

1 messages · Page 156 of 1

lofty notch
#

so true (i am also using x11)

lime stone
#

wayland support is important though

#

😵‍💫

lime stone
lofty notch
#

i use x11 because nvidia
but also i haven't checked if i can use wayland in a while

lime stone
#

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

lofty notch
#

through the power of bad regex i seem to already be doing this

charred monolithBOT
#

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).

charred monolithBOT
verbal pumice
#

IS_WEB is true for vesktop right?

austere talon
#

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

still wasp
#

is there a documentation of any type for imports? or do you kinda just have to read the code

austere talon
#

read the code

#

and everything has jsdoc

still wasp
still wasp
#

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 joeshrug

#

ill just do that lmao

austere talon
mortal fractal
#

all animated ugc asset hashes will start with a_

still wasp
#

whar 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?

brazen bone
#

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

still wasp
#

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

charred monolithBOT
jagged cloak
#

just use the regular replace functions

still wasp
jagged cloak
#

strings

#

textreplace is your friend btw

still wasp
#

well yeah, but i mean how do i actually find all messages/media sent by users in a channel?

jagged cloak
#

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

austere talon
#

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

jagged cloak
#

mhm

still wasp
#

my bad, ill search around more before asking next time :P

charred monolithBOT
weak thistle
#

shh I def didn't forget 3 months ago blobcatcozy

charred monolithBOT
charred monolithBOT
frail skyBOT
#
Bad Patches

None

Bad Webpack Finds

None

Bad Starts

None

Discord Errors

None

#
Bad Patches

None

Bad Webpack Finds

None

Bad Starts

None

Discord Errors

None

charred monolithBOT
charred monolithBOT
oak hull
charred monolithBOT
charred monolithBOT
charred monolithBOT
charred monolithBOT
turbid hatch
#

not yet because i couldnt work out a good way of doing it

#

ill take a look when im home

charred monolithBOT
lofty notch
#

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??

lofty notch
#

nope it doesn't

#

kde has an option to fix it but besides that discord doesn't officially support it

charred monolithBOT
#

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?

topaz thistle
# charred monolith

@austere talon maybe it would be good if we had a library like that which supports all kinds of hotkey implementations

charred monolithBOT
lofty notch
topaz thistle
charred monolithBOT
charred monolithBOT
charred monolithBOT
charred monolithBOT
#

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

austere talon
#

what now

#

i dun understand

topaz thistle
#

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

austere talon
#

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

verbal pumice
#

im talking about obscure locations like Windows.old or another letter drive

austere talon
#

nerd

#

the aria label not enough?

placid wave
#

@austere talon vesktop will rebrand to veesktop soon blobcatcozy

austere talon
#

horror

#

so true

charred monolithBOT
charred monolithBOT
jagged cloak
#

true

#

veesktop

charred monolithBOT
lime stone
#

veetop

#

veelectron

frail skyBOT
#
Bad Patches

None

Bad Webpack Finds

None

Bad Starts

None

Discord Errors

None

#
Bad Patches

None

Bad Webpack Finds

None

Bad Starts

None

Discord Errors

None

charred monolithBOT
charred monolithBOT
charred monolithBOT
charred monolithBOT
charred monolithBOT
lofty notch
charred monolithBOT
charred monolithBOT
#

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

  1. Install Vesktop on Windows
  2. Attempt to link a Spotify Account (Fresh Discord)

Active Plugin List

  • Cras...
charred monolithBOT
charred monolithBOT
lofty notch
#

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

austere talon
#

reeding the basic description it seems this is exactly what we need

#

it has a C api for getting events

lofty notch
#

it does seem promising

brazen bone
#

Why is there a view raw in the notifications menu

austere talon
#

because discord calls that "channel-context"

brazen bone
#

Ah, discord's fault

#

That explains it

charred monolithBOT
austere talon
#

this fixes it

#

WAIT

#

THAT FIX ONLY WORKS FOR ENGLISH

verbal pumice
#

you will pull a devilbro and do another case for every language

charred monolithBOT
spark pivot
crude hearth
#

@austere talon I have came back

mortal fractal
#

womp womp

crude hearth
#

insaneeee

#

wait I also forgot to rename folder

lime stone
#

unsaneee

crude hearth
#

ıkoay fixed

charred monolithBOT
limber skiff
#

seems like virus

charred monolithBOT
charred monolithBOT
turbid hatch
junior olive
#

it doesn't look like the client recieved the right changes..?

#

naw it did

turbid hatch
#

okay

jagged cloak
#

reviewdb real

#

this makes it like 20% more bearable at least

charred monolithBOT
frail skyBOT
#
Bad Patches

None

Bad Webpack Finds

None

Bad Starts

None

Discord Errors

None

#
Bad Patches

None

Bad Webpack Finds

None

Bad Starts

None

Discord Errors

None

charred monolithBOT
charred monolithBOT
austere talon
dapper crest
#

I thought that was just normal for discord screenshare.

austere talon
#

no

#

low bitrate yes

#

low framerate no

dapper tiger
#

vaapi blobcatcozy

#

@austere talon could you do something about multiple instances

spark pivot
dapper tiger
#

currently if you start vesktop and one is already running

#

it opens another instance, asking to login

austere talon
#

it doesn't

dapper tiger
#

it does for me

austere talon
#

skill issue

dapper tiger
#

die

#

i can record video

austere talon
#

it has single instance lock

#

it can't open two instances

#

unless lock broken

dapper tiger
#

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

grave mangoBOT
dapper tiger
#

it breaks cause of suspension

#

resuming from pc after suspending

austere talon
#

love

#

open issue on electron repo

dapper tiger
#

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

charred monolithBOT
charred monolithBOT
charred monolithBOT
charred monolithBOT
charred monolithBOT
charred monolithBOT
high oracle
#

@austere talon hiiiiiiiiii isn't there a way for vencord to inject into discord updater and reinstall itself after the update completes

charred monolithBOT
#

@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,UseMultiPlaneFormatForHardwareVideo

after 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...

charred monolithBOT
charred monolithBOT
#

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...
topaz thistle
charred monolithBOT
charred monolithBOT
#

✍️ 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...
nimble plaza
#

its in a file named injectWin32Updater.ts or something close

charred monolithBOT
#

@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

crude hearth
#

Nop

charred monolithBOT
charred monolithBOT
#

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...

#

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 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/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 ...

austere talon
charred monolithBOT
charred monolithBOT
#

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...
charred monolithBOT
charred monolithBOT
crude hearth
#

ven starbotting

charred monolithBOT
#

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...

austere talon
#

le remote code execution

charred monolithBOT
#

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 ...

#

@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,UseMultiPlaneFormatForHardwareVideo

after 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 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 mi...

crude hearth
verbal pumice
#

mmm i love token grabbing in my vencored

lime stone
#

uhh did i mention this but couldn't you copy the code with the license?

#

and then it's less cursed?

charred monolithBOT
lime stone
#

imo even if you can make it somewhat secure, using eval here is dirty

austere talon
#

it's fine

#

the normal oneko plugin also fetches the code from github and evals it

lime stone
#

i think it's called meta-programming. it feels pointless here

mortal fractal
#

i mean i agree the same thing that for version and safety control that it should be bundled locally but w/e

austere talon
#

as long as you pin to long commit hash it's safe unless github gets compromised at which point it's over anyway

lime stone
#

or maybe not

charred monolithBOT
#

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...

crude hearth
#

ven

#

are you not forgetting something

lime stone
#

i'm not worried about safety, it's just kinda weird to do string manipulation on code

#

just to change inputs

crude hearth
#

oh my god github fix your bandwidth I am gonna cry

#

why is it so slow

austere talon
#

that guy is so helpful

#

nice guy

crude hearth
#

you are talking about me

lime stone
#

mr github?

mortal fractal
#

the .then chain is ugly though considering one of the replace calls is part of an already existing .then

austere talon
austere talon
#

i don't think that pr will be merged anyway

lime stone
#

it's weird to have another plugin

mortal fractal
#

agreed

lime stone
#

why not an option?

charred monolithBOT
mortal fractal
austere talon
#

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

charred monolithBOT
lime stone
#

DiscordMinigames plugin 🔥

#

would be better to beg dicsord to make a neko coin collector activity

charred monolithBOT
#

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...

lime stone
#

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

charred monolithBOT
#

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 ...

#

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...

brazen bone
#

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

austere talon
#

no

charred monolithBOT
#

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.

brazen bone
#

Ok

charred monolithBOT
dusky sonnet
#

To be fair the original does aswell

slim marsh
junior olive
lime stone
#

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?

jagged cloak
#

whar are you doing

lime stone
#

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

charred monolithBOT
austere talon
#

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

charred monolithBOT
#

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_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.

Does it work with discord web instead of discords deskto...

lime stone
#

#include "http://vendicated.dev/notavirus.c"

charred monolithBOT
#

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/5a...

lime stone
#

always use http

#

does this download every time or use etags lol

charred monolithBOT
austere talon
#

how is that a good first issue @topaz thistle 😭

#

poor first time contributor on their way to figure out this mess...

charred monolithBOT
austere talon
#

the easyeffects one

topaz thistle
#

Why wouldn't it be

#

EasyEffects Incompatibility is always an issue for patchbay stuff

#

Would be good to finally have this sorted out

austere talon
#

yea but i mean

#

that seems like a very hard issue to solve

topaz thistle
#

And it's a good thing to have the EasyEffects dev involved, a lot of good insight

topaz thistle
austere talon
#

you do realise good first issue is supposed to be easy to solve issues for first time contributors right

topaz thistle
#

Lmao

#

No I didn't realize that haha

austere talon
#

xd

topaz thistle
#

I always thought it's: Thanks for submitting this issue

lime stone
#

read the desc xd

austere talon
topaz thistle
#

Lmfao

austere talon
topaz thistle
#

TIL

austere talon
#

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

topaz thistle
#

Good to know

#

I literally read every description except for that one

charred monolithBOT
dapper crest
#

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

charred monolithBOT
median rapids
#

lmao

charred monolithBOT
#

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...

charred monolithBOT
frail skyBOT
#
Bad Patches

None

Bad Webpack Finds

None

Bad Starts

None

Discord Errors

None

#
Bad Patches

None

Bad Webpack Finds

None

Bad Starts

None

Discord Errors

None

charred monolithBOT
charred monolithBOT
lime stone
#

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

lime stone
#

ah

#

it's just ya know... web mmmmm ... web movie

#

or it's literally just web MMMMMM

#

😋

#

lol

charred monolithBOT
austere talon
#

its technically WebM

#

i think it literally just means web matroska

#

it's joever

charred monolithBOT
lime stone
#

tbh i think no text to speech called it web movie and i didn't know better lmao

lime stone
#

you will have fun reviewing this code

#

:3

#

there must be a less stupid way...

#

maybe this isn't fabuluous ux but it works

charred monolithBOT
lime stone
#

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

lime stone
#

can i merge the notificationvolume plugin into mine

charred monolithBOT
nimble plaza
#

omg guys we hit another milestone 🤩

cunning canyon
#

can we reach 200 opening prs in 2024

lime stone
#

github will do what github does

#

i think this plugin probably conflicts with notificationvolume

#

idk, regex patching is surprisingly resilient

charred monolithBOT
still wasp
#

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 bruhcat

charred monolithBOT
cunning canyon
#

findByProps('setShowActivity').setShowActivity('spotify', f.id, boolean);

charred monolithBOT
still wasp
cunning canyon
still wasp
#

Catyes gracias

#

how do i do a pr? i havent done one before whahuh

cunning canyon
#

fork, create new branch, commit, push to your fork, open pr

still wasp
charred monolithBOT
olive aurora
#

vee to remember codeberg exists

patent flint
charred monolithBOT
still wasp
cunning canyon
#

findByProps('getAccounts').getAccounts().filter(i => i.type === 'spotify')[0].showActivity

charred monolithBOT
charred monolithBOT
charred monolithBOT
charred monolithBOT
charred monolithBOT
charred monolithBOT
spark cove
#

is that true

#

i was gonna respond with just 'nobody made it yet'

charred monolithBOT
austere talon
charred monolithBOT
#

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...

turbid hatch
# charred monolith

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

austere talon
#

why even reply

#

i just marked it as spam

turbid hatch
#

shrug, it's a legitimate question

austere talon
#

no it isnt

#

its not a legitimate question its <person with 0 technical knowledge making random assumptions/guesses>

#

aka spam

turbid hatch
#

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

spark cove
#

oh yea i remember

turbid hatch
#

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

charred monolithBOT
#

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

austere talon
#

well its a mac issue

#

works on my machine

#

how fix

#

btw lewiii

#

how about signing now!

#

we literally do

turbid hatch
#

get me a certificate sweetie

austere talon
#

we dont apply our own css we just apply the correct class iirc

turbid hatch
#

:3

austere talon
turbid hatch
#

sorry a certificate signing request

austere talon
#

cause u dont have mac?

turbid hatch
#

not yet

austere talon
#

shrimply hackintosh

turbid hatch
#

let me see how we build

austere talon
#

force ryan to request it with ur acc or smth

turbid hatch
#

oh we have to

#

notarize it as well

#

otherwise gatekeeper will still be pissed

#

ffs

austere talon
#

i need to add issue templates to auto add bug/enhance

austere talon
turbid hatch
#

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

charred monolithBOT
austere talon
#

LMAO i should have probabled changed these

#

nah this is fine

turbid hatch
#

yop

#

lmfao

austere talon
#

tbh its funnier this way

turbid hatch
#

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

charred monolithBOT
turbid hatch
#

derp wait

#

actually yeah

nimble plaza
#

oki

#

what do i need to do

turbid hatch
#

ill dm

charred monolithBOT
charred monolithBOT
charred monolithBOT
charred monolithBOT
charred monolithBOT
charred monolithBOT
charred monolithBOT
charred monolithBOT
charred monolithBOT
charred monolithBOT
frail skyBOT
#
Bad Patches

None

Bad Webpack Finds

None

Bad Starts

None

Discord Errors

None

#
Bad Patches

None

Bad Webpack Finds

None

Bad Starts

None

Discord Errors

None

charred monolithBOT
charred monolithBOT
charred monolithBOT
still wasp
#

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?

charred monolithBOT
charred monolithBOT
charred monolithBOT
charred monolithBOT
inland fable
#

export function from a script and import it from the other ?

lofty notch
topaz thistle
livid heath
#
$ 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

olive aurora
#

jq jumpscare

charred monolithBOT
crude hearth
#

good idea tbh

#

soon

#

it will have changing rgb color on donors

charred monolithBOT
charred monolithBOT
austere talon
#

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

charred monolithBOT
topaz thistle
lofty notch
still wasp
# inland fable export function from a script and import it from the other ?

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

inland fable
#

i am confused

#

uhh

#

im not on pc so I can't help rn

still wasp
brazen bone
#

Do you have any more concrete explanation of what you're trying to do than "call a function from another script"?

inland fable
#

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

still wasp
#

alright, how do i check that? anguish

#

sorry for being an idiot NAH

limber skiff
brazen bone
#

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

limber skiff
#

lmao

#

yep

#

dang same time

#

I took a while to find it

brazen bone
#

That will make you need to press escape twice to close the menu though

still wasp
#

hmmm, this is what it does now.

#

this is the patch (probably wrong somehow NAH )

brazen bone
#

You can't include variable names (e and y here) in the find: string

still wasp
#

hold on my brain is loading

#

😔

charred monolithBOT
still wasp
still wasp
#

i hate being british

brazen bone
#

You should quit then

#

Could call it brexit

charred monolithBOT
still wasp
#

getting out of this place asap kek

charred monolithBOT
charred monolithBOT
charred monolithBOT
topaz thistle
charred monolithBOT
still wasp
brazen bone
#

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

austere talon
#

don't use the g flag on your regex unless you absolutely want to match multiple things

still wasp
#

alr :3

brazen bone
#

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?

still wasp
#

or something else

still wasp
brazen bone
#

This one

still wasp
#

ahh ok

brazen bone
still wasp
brazen bone
#

It only exists in --dev builds

#

(I commented out that check on my local copy though)

still wasp
#

do i actually need to be on a dev build or can i just comment out the check like you did?

olive aurora
#

just always be on a dev build

#

no reason not to

austere talon
#

and yeah there's no reason not to daily drive dev build

#

i do it

still wasp
brazen bone
#

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

still wasp
#

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

brazen bone
#

e.keyCode===y.KeyboardKeys.ESCAPE is still a very bad find string though

#

Since it'll stop working next time discord updates

still wasp
#

does the find string support regex?

brazen bone
#

No

still wasp
#

hmmm

#

so do i essentially need to find a code segment that doesnt contain values and is unique to that part?

brazen bone
#

,onChange:this.handleChangeQuery,onClear:this.handleClearQuery,placeholder: maybe

still wasp
#

yeah that works

#

thanks for all the help :3

austere talon
#

finding a find for that file is incredibly simple

#

so many things to choose from

#

like .GIFPickerResultTypes.SEARCH

limber skiff
#

just use the one from FavoriteGifs

#

it patches the same module

#

favGifSearch*

grave mangoBOT
frail skyBOT
#
Bad Patches

None

Bad Webpack Finds

None

Bad Starts

None

Discord Errors

None

#
Bad Patches

None

Bad Webpack Finds

None

Bad Starts

None

Discord Errors

None

austere talon
#

horror

median rapids
#

real

icy quest
#

hello i have been given unrestricted access to this chat and i shall now cause ultimate chaos

charred monolithBOT
charred monolithBOT
charred monolithBOT
charred monolithBOT
charred monolithBOT
inland fable
#

You Are Welcome 🙂

charred monolithBOT
charred monolithBOT
fair wolf
#

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

thick kestrel
#

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

charred monolithBOT
charred monolithBOT
charred monolithBOT
charred monolithBOT
charred monolithBOT
charred monolithBOT
spark pivot
#

CustomCSS

charred monolithBOT
austere talon
#

🐱

lime stone
austere talon
#

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!

charred monolithBOT
austere talon
#

wtf is electron cooking

#

void

charred monolithBOT
austere talon
#

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

charred monolithBOT
charred monolithBOT
crude hearth
#

I'm watching

charred monolithBOT
crude hearth
#

if this is a question theres very high probability that, this guy thinks it can create global badges

charred monolithBOT
jagged cloak
#

span

icy quest
austere talon
#

did you mean to reply to the clear urls one?

charred monolithBOT
icy quest
# austere talon what?

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

austere talon
#

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

icy quest
#

i dont like the idea of multiple lists though

#

someone can come in and wave their dick around to fuck shit up

austere talon
#

?

#

the worst they could do is sabotage your links

icy quest
#

unless the blocklist is controlled by vencord, i wouldn't feel comfortable using it

austere talon
#

but what's the point + simply don't add untrusted lists

icy quest
#

i guess

#

i mean 99% of that people wont have a clue about adding new blocklists

turbid hatch
icy quest
#

it makes more sense to put them all in a single blocklist

turbid hatch
icy quest
turbid hatch
#

dont put dicks near my lists

icy quest
icy quest
#

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

austere talon
#

nuh

cunning canyon
austere talon
#

no

#

the one you changed

cunning canyon
#

does nothing

austere talon
#

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

cunning canyon
#

role color in member list in normal channel

icy quest
#

this is me if you even care

austere talon
#

i opened that and scrolled and it didn't trigger breakpoint

#

😵‍💫

cunning canyon
frail skyBOT
#
Bad Patches

None

Bad Webpack Finds

None

Bad Starts

None

Discord Errors

None

austere talon
#

HUHHH

#

maybe im just dumb..

frail skyBOT
#
Bad Patches

None

Bad Webpack Finds

None

Bad Starts

None

Discord Errors

None

charred monolithBOT
still wasp
#

ah

charred monolithBOT
cunning canyon
turbid hatch
#

ill give a serious review even if it wont be accepted

spark pivot
#

Honestly I’d use it

turbid hatch
#

its a text inserter

#

it doesnt actually do any querying

#

it just returns the link to click

charred monolithBOT
spark pivot
#

Yeah I just realized this can be done with textreplace

charred monolithBOT
austere talon
#

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

spark pivot
brazen bone
#

Grant it full access to discord apis

austere talon
spark pivot
#

Fair enough

austere talon
#

we should brainstorm functions that could be useful

#

and then implement it

#

would be cool

charred monolithBOT
lime stone
#

I ♥ actionscript, it should be the standard scripting language for Vencord 🥰

austere talon
#

wtf is that

slim marsh
#

flash games/animations are coded in it

jagged cloak
#

horror actionscript

#

I'd probably rename it to like Default(Picker/GifPicker)ToFavorites (may be too long) or something
otherwise looks good

cunning canyon
#

license header got eaten

jagged cloak
#

oh true

#

run autofix to sort these imports headers

spark pivot
still wasp
jagged cloak
still wasp
spark pivot
charred monolithBOT
charred monolithBOT
charred monolithBOT
austere talon
#

@crude hearth

crude hearth
#

It has reviewdb love

austere talon
#

posttroll yet another mantika alt

#

this really needs to stop

crude hearth
#

My prnet will take over Vencord soon

#

@austere talon this is genius

turbid hatch
#

that would be enough to do a lot of things

crude hearth
#

It encrypts (not really) messages by mapping characters to arabic

turbid hatch
#

idk how you would do the syntax though

#

${1:uri}

dusky sonnet
austere talon
#

maybe smth like that

turbid hatch
#

[encodeUriComponent $1]

austere talon
#

keep it incredibly simple so it's easy to parse

austere talon
turbid hatch
austere talon
turbid hatch
#

objective-c moment

austere talon
#

we love objective c

lime stone
turbid hatch
#

also i think there should be a sigil before the [] if anything

austere talon
#

i want something that's very easy to type for non programmers and very easy to parse

turbid hatch
#

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

austere talon
#

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

lime stone
turbid hatch
#

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

turbid hatch
#
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]