#👾-core-development

1 messages · Page 50 of 1

quaint sapphire
#

the same code?

lime stone
#

would it just be there to hold the enabled status?

#

oh

quaint sapphire
#

what enabled status?

#

what are you talking about?

lime stone
#

i thought you were just using the plugin for the toggle

quaint sapphire
#

what toggle?

lime stone
#

to enable and disable the tab

quaint sapphire
#

a tab provided by a plugin

lime stone
#

is there an api now?

quaint sapphire
#

no

lime stone
#

ah, so i guess the only issue is it's a tiny bit hacky

quaint sapphire
#

that screenshot is just html inspect

#

i havent done anything yet

quaint sapphire
lime stone
#

well it's plugins referencing one-another

quaint sapphire
#

the theme settings aint a plugin

lime stone
#

ah, i see

#

oh well i don't think there's anything i haven't already said then

#

your pr looks very nice

lime stone
#

i mean yours

#

not that

#

wait... actually i think these (tags and query) should be swapped if i didn't already say

#

otherwise it's inconsistent with the plugin filtering ui

royal bane
#

you could combine them

quaint sapphire
#

@umbral hedge

#

i was thinking smth like this

lime stone
quaint sapphire
lime stone
#

i've managed to get this working on channel tabs (before it said unknown)
@verbal pumice should i open a pr on your fork or would it be better if you invited me?

charred monolithBOT
stark flint
#

^ also against the rules

charred monolithBOT
quaint sapphire
# charred monolith

and iirc it was already made as a third party plugin, dunno if its deleted

quick ibex
#

its an omega old pr

lime stone
#

i don't understand why anyone would want it though...

quick ibex
#

And it was rejected

quick ibex
lime stone
#

unless you're trying to manipulate people or something nasty

quaint sapphire
#

I never use deafen, i just mute
i dont see the point of it

quick ibex
grave mangoBOT
# quick ibex https://github.com/sneksnake/Vencord/blob/b7b405ba0579bdb59068155e3a77e4e44961e2...

**fakeVoiceOptions.ts: **

import definePlugin from "../utils/types";
import { ApplicationCommandInputType, ApplicationCommandOptionType, sendBotMessage, Argument } from "../api/Commands";
import { Toasts } from "../webpack/common";

const config = {
    fake_mute: false,
    fake_deafen: false,
};

const optionChanged = (option: string, value: boolean) => {
    Toasts.show({
        message: option,
        id: Toasts.genId(),
        type: value ? Toasts.Type.SUCCESS : Toasts.Type.FAILURE,
        options: {
            position: Toasts.Position.BOTTOM,
            duration: 1000
        }
    });
}

export default definePlugin({
    dependencies: ["CommandsAPI"],
    name: "Fake Voice Options",
    description: "Fake mute, deafen",
    authors: [{
        name: "SaucyDuck",
        id: 1004904120056029256n
    }],
    patches: [
... (50 lines left)
quick ibex
#

This is the old file

#

cant believe discord is so dumb

verbal pumice
lime stone
#

ah, i just want to make more changes so it may get a bit noisy

#

I personally think the style should be closer to either chromium or firefox

#

but in terms of functionality it is quite nice!

#

it seems the settings page crashes

verbal pumice
lime stone
#

if you open the settings for tabs

verbal pumice
lime stone
lime stone
verbal pumice
#

oh that

lime stone
#

any clue why it occurs?

verbal pumice
#

i rewrote how settings are stored and didnt bother writing migration code

lime stone
#

oh, i've never run it before though

#

so maybe the defaults are broken?

verbal pumice
#

yeah probably

#

i'll check

#

probably tomorrow as i have a bunch of stuff to do today

lime stone
#

things which i think would be nice and i may be able to help implement (if i'm not too stupid) is ctrl+t, ctrl+w (if you can capture it somehow since it seems to close the whole app) and ctrl+tab (maybe even with an option have a firefox-style overlay with tab previews :P maybe too hard)

#

(maybe just the overlay without previews)

verbal pumice
#

ctrl+t is ctrl+n atm since i have no idea how to replace discord's one
and ctrl+w is a thing but i didnt know that closes the app lol
wow i never knew ctrl+tab was a thing thank you

lime stone
#

is that sarcastic or did you genuinely not know?

verbal pumice
#

i actually didnt know

lime stone
#

oh

#

wow

#

yes it's very handy!

#

wait, i know

#

i think the default should be {}

verbal pumice
#

currently i went with ctrl+➡️ and ctrl+ ⬅️ for switching between tabs

#

but thats better imo

lime stone
#

currently it's one of js's many nulls

verbal pumice
lime stone
verbal pumice
#

keybinds would be in settings if they didnt crash shiddohwell

lime stone
#

(well I think it may be quite easy to, I think I used about:config for some reason though xD)

verbal pumice
#

also something to not conflict with browser shortcuts would be needed

#

if you actually run discord in a browser

lime stone
#

i do, but this plugin is less useful in the browser

#

vencord desktop is a lot more useable

verbal pumice
#

dont ask to ask

lime stone
lime stone
#

your status doesn't make me want to help tbh...

quaint sapphire
#

can we hook into discord's internal keybinds or is that not possible?

#

found smth

charred monolithBOT
lime stone
#

(that this feature exists)

#

xD

quaint sapphire
#

lmao

#

Ctrl + /

quaint sapphire
#

i think I figured how keybinds work

#

I will make an API for them ig

charred monolithBOT
austere talon
austere talon
quaint sapphire
#

can you assign it to me?

austere talon
#

you have to reply to it for that

lime stone
#

they're online

austere talon
cunning canyon
quaint sapphire
#

pretty simple ngl

austere talon
quaint sapphire
#

ill try

austere talon
#

I mean to the _ object

#

if that wasn't obvious

umbral hedge
quaint sapphire
quaint sapphire
#

found how to insert values to the dropdown for the keybind add menu

austere talon
#

be nice to discord

quaint sapphire
#

anyways, imma go out with the boys, will continue this in the evening

charred monolithBOT
lime stone
lime stone
charred monolithBOT
#
[Vencord/Website] New branch created: plugins\-svelte
#

Deploying with  <a href="https://pages.dev"><img alt="Cloudflare Pages" src="https://user-images.githubusercontent.com/23264/106598434-9e719e00-654f-11eb-9e59-6167043cfa01.png" width="16"></a>  Cloudflare Pages

<table><tr><td><strong>Latest commit:</strong> </td><td>
<code>c4eccaf</code>
</td></tr>
<tr><td><strong>Status:</strong></td><td> ✅  Deploy successful!</td></tr>
<tr><td><strong>Preview URL:</strong></td><td>
<a href='https://67e12d74.vencord-website.pages.dev'...

jagged cloak
#

horror

austere talon
#

pick ur fighter

lime stone
#

i think i broke the

#

thing

austere talon
#

F

jagged cloak
#

lol

#

cloudflare moment

austere talon
austere talon
#

and you can only disable it with manual api requests

#

10/10 UX cloudflare Clueless

#
Cloudflare Community

Given the lack of a straightforward solution, I will give it here after this happening to me twice. PLEASE NOTE THAT I AM NOT RESPONSIBLE FOR ANY DAMAGE DOING THE BELOW STEPS HAPHAZARDLY MAY DO. BLAME CLOUDFLARĘ FOR NOT PROVIDING AN UI FOR THIS. You want to call the following commands. Ignore <>, only copy the pure strings or numbers mentioned...

jagged cloak
#

It’s disappointing that a restrictive feature that can be enabled from the dashboard can only be disabled by an api call or adding payment info.

#

average cloudflare ux

#

sorry pay us

austere talon
#

nono

#

its literally free

#

but

#

u gotta provide payment info to enable it

#

so dumb

#

you can enable it without adding payment method but cant disable it again and the default settings are restrictive lmao

jagged cloak
#

oh bruh

austere talon
#

honestly doubt it's on purpose considering u can fix it with manual api request

#

probably just an oversight

charred monolithBOT
#

Title may be a bit vague, Let me explain.

This idea is for the addition of a toggle to the FakeNitro plugin's emoji category.

If there is nothing in the messagebar, and then a user does : and start's typing for an emoji, show the nitro emojis too. If there is already content in the messagebar, and then the user is adding an emoji, don't show the nitro emojis and show only default emojis and guild emojis. This is so that a message doesn't look like this

![image](https://user-imag...

royal bane
#

no

fleet depot
#

why

#

just remember not to add an emoji if you have text

austere talon
charred monolithBOT
jagged cloak
#

???

#

what autocomplete

royal bane
#

emote suggestions with :

#

id think

jagged cloak
#

doesnt make sense considering what theyre asking but i dont usethe plugin so ok

fleet depot
#

i think they're asking for the plugin to stop working if there's already text in the message bar

#

but... it's really not that hard to remember to send a message and then send an emoji right after it to avoid the link

quaint sapphire
#

or you can just cut the emoji, send the message and paste the emoji

jagged cloak
#

TIL discord reuses their context menu names in places they shouldnt

#

lmfao

royal bane
#

small indie company

jagged cloak
#

me when this is "image-context"

#

silly discord this is a link you moron

austere talon
#

lmaoo not the imagezoom controls

jagged cloak
#

lmao

#

look in devtools its literallly got a navid of image context

#

??? discord on drugs

charred monolithBOT
lime stone
#

I think this looks cute

#

apart from the new tab placement

#

maybe i should've tried to improve it while sticking to the chromium style

#

I think having the tabs attached looks weird because it doesn't match the colour though

quaint sapphire
#

for the love of god center the plus icon

lime stone
#

this was an issue before i tried to pr on the pr :P

charred monolithBOT
austere talon
#

my hatred

#

wait i fixed it and it was super easy @turbid hatch

quaint sapphire
#

did you just add padding on the right when the scroller is off?

turbid hatch
#

hmm?

limber skiff
royal bane
#

no thats too much effort

lime stone
#

I think this looks a bit nicer than before

royal bane
#

i quite like it

#

is there a possibility to like

#

have a white underline

#

to the whole tab

#

when unread messaged are present for that tab

lime stone
#

maybe i should ask the sun what he thinks so far

#

before the spacing was kind of buggy

royal bane
#

ah

#

i’ll show what i mean in a sec

lime stone
charred monolithBOT
austere talon
#

we love deprecated values

#

the html spec authors carefully deprecating the best properties ever

austere talon
jagged cloak
#

\✔ Has commands

Fart2

#

idk a time when people would be looking for web only plugins

#

considering 99% of plugins will work on both web and desktop tonguecat

charred monolithBOT
charred monolithBOT
desert cosmos
#

someone else needs a diet

austere talon
#

u

desert cosmos
#

fuck

austere talon
#

i pushed to wrong place

desert cosmos
#

smart

charred monolithBOT
austere talon
#

wow adding this was super easy

charred monolithBOT
golden gulch
# charred monolith

i normally just do overflow-y: scroll so the scrollbar is always there and so margin/padding will be visually consistent regardless of if it's there or not

#

but i suppose the scrollbar-gutter property exists now too

desert cosmos
#

i love this cat

austere talon
golden gulch
#

but overlay means that some of your margin will be eaten up on one side when the scrollbar is there

charred monolithBOT
austere talon
#

it just makes the scrollbar overlap with the ui yeah

golden gulch
#

yeah, so there will visually be a bit less margin on one side and on narrow viewports it'll be more clear that things look off center

austere talon
#

ig

#

there isnt really a good solution to this

#

scrollbars suck

#

gonna never show scrollbar /s

#

it's kinda funny that i have to pass an unused parameter or it doesn't update on filter & leaves stale tooltips

#

what is astro cooking with [0,false]

grave mangoBOT
austere talon
charred monolithBOT
#
[Vencord/Website] branch deleted: cloudflare
lament nimbus
austere talon
#

it's just a redirect to github raw clueless

lament nimbus
#

Ah it makes a JSON file when you build it

austere talon
grave mangoBOT
# austere talon it's generated with this script via github workflows https://github.com/Vendicat...

**generatePluginList.ts: **

/*
 * Vencord, a modification for Discord's desktop app
 * Copyright (c) 2023 Vendicated and contributors
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <https://www.gnu.org/licenses/>.
*/

import { Dirent, readdirSync, readFileSync, writeFileSync } from "fs";
import { access, readFile } from "fs/promises";
import { join } from "path";
import { BigIntLiteral, createSourceFile, Identifier, isArrayLiteralExpression, isCallExpression, isExportAssignment, isIdentifier, isObjectLiteralExpression, isPropertyAccessExpression, isPropertyAssignment, isStringLiteral, isVariableStatement, NamedDeclaration, NodeArray, ObjectLiteralExpression, ScriptTarget, StringLiteral, SyntaxKind } from "typescript";

interface Dev {
    name: string;
    id: string;
}

interface PluginData {
    name: string;
... (162 lines left)
lament nimbus
#

Nice

charred monolithBOT
#

The plugin would allow the user to get an in app or desktop notification when a word or ping has been typed, the uses would be for instance you have a server you don't look at often but you want to get notified if they ever say your name or if you're modding a server, you could have a keyword for "help" "where mods" and there'll be many other uses.
The notification could be something like "Keyword () in channel, server".

jagged cloak
#

i already use this

#

lo

jagged cloak
#

i didnt know u could search the prs with the hashtag lmao

charred monolithBOT
jagged cloak
#

i mean tbf thats the first discussion about that it was just never finished lmao

#

@cunning bobcat finish wen

charred monolithBOT
robust basin
austere talon
#

VEN

charred monolithBOT
quick cosmos
frail skyBOT
#
Bad Patches

PronounDB (had no effect):
ID: 507250
Match: /\(0,.\.jsx\)\((?<PronounComponent>[A-Za-z_$][\w$]*\..),(?<pronounProps>{currentPronouns.+?:(?<fullProps>[A-Za-z_$][\w$]*)\.pronouns.+?})\)/

UserVoiceShow (had no effect):
ID: 1764
Match: /,{user:\w{1,2}}\)(?!;case)/

WebContextMenus (had no effect):
ID: 638525
Match: /(?<=showApplicationCommandSuggestions;)if\(![A-Za-z_$][\w$]*\.[A-Za-z_$][\w$]*\)/

WebContextMenus (had no effect):
ID: 638525
Match: /("submit-button".+?)(\(0,[A-Za-z_$][\w$]*\.jsx\)\([A-Za-z_$][\w$]*\.MenuGroup,\{children:[A-Za-z_$][\w$]*\}\),){2}/

PronounDB (found no module):
ID: -
Match: .Messages.USER_POPOUT_PRONOUNS

Bad Starts

None

Discord Errors

#
Bad Patches

PronounDB (had no effect):
ID: 507250
Match: /\(0,.\.jsx\)\((?<PronounComponent>[A-Za-z_$][\w$]*\..),(?<pronounProps>{currentPronouns.+?:(?<fullProps>[A-Za-z_$][\w$]*)\.pronouns.+?})\)/

UserVoiceShow (had no effect):
ID: 1764
Match: /,{user:\w{1,2}}\)(?!;case)/

WebContextMenus (had no effect):
ID: 638525
Match: /(?<=showApplicationCommandSuggestions;)if\(![A-Za-z_$][\w$]*\.[A-Za-z_$][\w$]*\)/

WebContextMenus (had no effect):
ID: 638525
Match: /("submit-button".+?)(\(0,[A-Za-z_$][\w$]*\.jsx\)\([A-Za-z_$][\w$]*\.MenuGroup,\{children:[A-Za-z_$][\w$]*\}\),){2}/

PronounDB (found no module):
ID: -
Match: .Messages.USER_POPOUT_PRONOUNS

Bad Starts

None

Discord Errors
Cannot use SettingsStoreAPI without setting as dependency.

charred monolithBOT
junior olive
jagged cloak
#

snooper

cunning bobcat
jagged cloak
#

trol

cunning bobcat
#

altough

#

with the new notification log feature, the thing im working on that isnt done might be useless

jagged cloak
#

you mean vencords?

#

cause pretty sure that was just for vencords notifications

cunning bobcat
#

yeah but KeywordAlerts uses vencord notifs, no?

#

okay yeah, ping me in about 5 hours and i'll see what i can do

jagged cloak
#

ye

#

wdym useless then i thought you meant the plugin would be useless

#

this works fine

cunning bobcat
#

this patch adds a button top right, for this button

jagged cloak
#

oh the recent highlights thing thats commented out

#

i rember

cunning bobcat
#

also this is just a plain lie

#

anyway i gtg

jagged cloak
#

lol

charred monolithBOT
#

your theme is boldly assuming there will always only be 3 elements. Adding the game activity toggle adds a fourth so your theme breaks. This is simply your theme at fault. Complain to the author, fix it yourself, use a different theme or don't use the plugin.

and the problem only exist in Vencord, i no think that autor of theme can help..

jagged cloak
#

and why do you think the problem only exists in vencord

charred monolithBOT
charred monolithBOT
quaint sapphire
lime stone
#

findByCode("().mentionsBadge") doesn't seem to work

#

i'm trying to get this function

charred monolithBOT
#

https://github.com/tsukasa/BdBrowser

So, if you can to modify that chrome extension to get more mobile-friendly UI (similar to react-native app) and your app to be based on chromium with extension support by kiwi browser chrome extension support project, you can make the best modded Discord client for Android that can replace every modded Discord client for Android in the whole history and the future.

Just tell me, what you think about that extension ...

lime stone
#

oh, the function doesn't seem to be included in the search

#

because it's not exported

#

doh

quaint sapphire
#

one could argue that findByCode should have worked

#

alas

limber skiff
#

It shouldnt have worked

#

findByCode checks exports code

#

you wouldnt be able to access that function anyways tonguecat

quaint sapphire
#

which isn't explicitly stated anywhere
well, it makes sense since you can't find a function that is not exported

quaint sapphire
limber skiff
#
find: "().mentionsBadge",
replacement: {
  match: /\(\)\.mentionsBadge.+?}(?=var)(?<=function (\i)\(.+?)/
  replace: (m, method) => `${m};$self.method=${method};`
}
#

seems pretty useless though

#

just make it manually

quaint sapphire
#

or

{
    find: "().mentionsBadge",
    replacement: {
        match: /\(\)\.mentionsBadge.+?}(?=var)(?<=function (\i)\(.+?)/
        replace: "$&$self.method=$1;"
    }
}
limber skiff
#

grab this

#

and the mentionsBadge class

quaint sapphire
limber skiff
#

why when you can use named parameters

#

way more readable

quaint sapphire
#

shorter

limber skiff
#

I have to look at the match to understand what's $1

quaint sapphire
quaint sapphire
violet hazel
#

Guys, get how to sideload a plugin?

#

do i have to copy the built file into Vencord\dist every time pnpm watch gives a new build

lime stone
quaint sapphire
#

iirc

jagged cloak
#

ye

quaint sapphire
#

thirdparty plugins arent mature yet

violet hazel
quaint sapphire
#

nope

#

the vencord installer only patches discord, discord loads the files from the build folder

#

wait, did you not clone the repo?

violet hazel
quaint sapphire
#

not the plugin template

violet hazel
quaint sapphire
#

but vendicated/vencord

#

ok

#

did you run pnpm inject?

violet hazel
#

oh should i run it

#

i only run pnpm watch

quaint sapphire
#

ok so, the vencord installer, makes discord load vencord when it starts
depending on how you installed vencord, it will load it from a different place

#

for us devs, it should be the build folder

#

for that we do pnpm inject

violet hazel
#

cool

#

got it

#

thanks

quaint sapphire
#

but first remove the other installation

violet hazel
#

sure

quaint sapphire
#

oof uses svelte

#

instead of port I'd suggest you remake it

#

i can help if you want

jagged cloak
#

svelte in a fucking bd plugin

quaint sapphire
#

woohooo, got a keybind to work!

violet hazel
charred monolithBOT
charred monolithBOT
austere talon
#

that plugin is really good, I was just waiting for array settings types because currently there's a lot of plugins implementing their own logic for that

cunning canyon
#

oh i changed branch name lol

austere talon
#

oh AyameXD

austere talon
#

vap was working on it I think but probably not anymore

austere talon
#

I'm so confused

#

I think he doesn't understand the stack at all, because he also opened an issue for armcord to use xposed on android??

quaint sapphire
#

fucking finally

#

so many patches just to get this to show up in the settings

#

wooohooooooo

charred monolithBOT
quaint sapphire
#

@austere talon keybinds can only be created when discord loads

that means that the keybinds api must iterate over all the plugins to gather their keybinds, if a plugin gets disabled, I cant remove the keybind w/o reloading

charred monolithBOT
#

what? That extension is just BD for web, how does that in any way relate to the mobile app

Because that extension literally injects every feature and support for BetterDiscord client in the web version of Discord so if that extension gets modifications i to those scripts to be optimized for mobile phones lile the optimizations (modifications) of the injected both Discord standard and BetterDiscord UI, elements, animations and etc to be more mobile-friendly, it's possible.

It takes time t...

quaint sapphire
#

anyways, a plugin should just be able to add this

#

and it would work

stark flint
#

just imagine Vencord android version with full support of desktop BetterDiscord API
what are they thinking

quaint sapphire
#

can we just make it a requirement to not make dumb issues?

#

like a checkmark

#

and if the issue is dumb we delete w/o warning

tame escarp
charred monolithBOT
tame escarp
austere talon
#

yes

#

walling our documentation and issues and stuff behind an iq test

tame escarp
#

only allowing certain results on a myers-briggs to open issues

charred monolithBOT
round gust
#

why would you close the issue

#

i sense something

jagged cloak
#

I sense 13 year olds being less than smart

#

guys you should use vendetta for Vencord mobile api

spark cove
#

i took a break cus i realize it would require making the setting inputs a lot more modular/generic than they are right now

quick ibex
#

But issues and discord server for sure

spark cove
#

real

#

i'll resolve the conflicts for u rq at least

charred monolithBOT
charred monolithBOT
quaint sapphire
#

@austere talon best way to iterate over all the plugins within a plugin?
(cause technically APIs are plugins)

#

it won't cause a circular import, right?

#

or I guess, I could just modify the code a bit to avoid doing that

#

yeah I'll do that

charred monolithBOT
austere talon
#

u cant use it on top level but u can use it in a deferred function call, like start() or even inside a setTimeout(..., 0)

quaint sapphire
#

...

#

well

#

I just have a global for it

#

made an export in Vencord.Plugins

austere talon
#

Vencord.Plugins.plugins exists

#

its an object containing all plugins

quaint sapphire
#

yeah I realized that just now

#

is it ok if I keep the global?

austere talon
#

what global

quaint sapphire
austere talon
#

but why

quaint sapphire
#

why are you asking me why?

quaint sapphire
quaint sapphire
#

realized too late

#

and asked if its ok to keep it the way it is

#

and you ask me why?

#

forget it

#

no global

#

ffs, cant just say no to a yes/no question

quaint sapphire
#

I just finished what I was working on so I am free to help

charred monolithBOT
frail skyBOT
#
Bad Patches

PronounDB (had no effect):
ID: 507250
Match: /\(0,.\.jsx\)\((?<PronounComponent>[A-Za-z_$][\w$]*\..),(?<pronounProps>{currentPronouns.+?:(?<fullProps>[A-Za-z_$][\w$]*)\.pronouns.+?})\)/

UserVoiceShow (had no effect):
ID: 1764
Match: /,{user:\w{1,2}}\)(?!;case)/

WebContextMenus (had no effect):
ID: 638525
Match: /(?<=showApplicationCommandSuggestions;)if\(![A-Za-z_$][\w$]*\.[A-Za-z_$][\w$]*\)/

WebContextMenus (had no effect):
ID: 638525
Match: /("submit-button".+?)(\(0,[A-Za-z_$][\w$]*\.jsx\)\([A-Za-z_$][\w$]*\.MenuGroup,\{children:[A-Za-z_$][\w$]*\}\),){2}/

PronounDB (found no module):
ID: -
Match: .Messages.USER_POPOUT_PRONOUNS

Bad Starts

None

Discord Errors
Cannot use SettingsStoreAPI without setting as dependency.

charred monolithBOT
cunning canyon
charred monolithBOT
frail skyBOT
#
Bad Patches

PronounDB (had no effect):
ID: 507250
Match: /\(0,.\.jsx\)\((?<PronounComponent>[A-Za-z_$][\w$]*\..),(?<pronounProps>{currentPronouns.+?:(?<fullProps>[A-Za-z_$][\w$]*)\.pronouns.+?})\)/

UserVoiceShow (had no effect):
ID: 1764
Match: /,{user:\w{1,2}}\)(?!;case)/

WebContextMenus (had no effect):
ID: 638525
Match: /(?<=showApplicationCommandSuggestions;)if\(![A-Za-z_$][\w$]*\.[A-Za-z_$][\w$]*\)/

WebContextMenus (had no effect):
ID: 638525
Match: /("submit-button".+?)(\(0,[A-Za-z_$][\w$]*\.jsx\)\([A-Za-z_$][\w$]*\.MenuGroup,\{children:[A-Za-z_$][\w$]*\}\),){2}/

PronounDB (found no module):
ID: -
Match: .Messages.USER_POPOUT_PRONOUNS

Bad Starts

None

Discord Errors
Cannot use SettingsStoreAPI without setting as dependency.

charred monolithBOT
charred monolithBOT
charred monolithBOT
tight yacht
#

I want to make a plugin
But I have zero idea how to compile it so it runs on web
I don't really "do" the proton

Is there a guide or something that could help me?

verbal pumice
#

what

#

you mean how to compile vencord for web?

#

or what cause i actually dont understand

quaint sapphire
#
git clone https://github.com/Vendicated/Vencord
cd Vencord
pnpm install
pnpm buildWeb
#

Those are the steps

#

And just run the last command every time you want to build it for web

cedar leaf
#

lil idea here, do you think a "fast voice messages playback" plugin could be a thing? would love to listen in 2x those 3 minutes vocal messages........

quaint sapphire
#

Wrong channel to ask

lime stone
charred monolithBOT
shut verge
# charred monolith

Tbh if Vibe doesn't get added, I'm gonna say that I'll learn everything necessary to get it added to my own copy and then maybe try to get it integrated and pulled
Only to just not do that because I'm lazy asf- Thumsup

quaint sapphire
#

vibe is not published on npm, and no binaries are on github releases
that means the user must build the project

that also means that we have to build it for all the architectures, since it is a native library

#

not very convenient

charred monolithBOT
charred monolithBOT
quaint sapphire
#

nvm

#
#

@shut verge

#

they are just too lazy to provide an npm link in the readme

#

nvm

#

it does not include binaries

#

useless package

#

smh

shut verge
charred monolithBOT
quaint sapphire
#

@silver shoal that looks like KDE

#

we are talking about GNOME

silver shoal
#

ik

#

i just deleted the message

charred monolithBOT
pure skiff
#

how do i reverse engineer discord's new markdown feature?

#

like

#

where is the parser that does it etc

#

how can i find the correct modules that do it?

charred monolithBOT
quaint sapphire
#

discord uses hljs

#

so search for hljs in discord

#

look at the shikicodeblocks plugin for some info

verbal pumice
#

bad idea?

pure skiff
stiff cove
verbal pumice
#

yeah

#

#499

stiff cove
#

yo i love that plugin

charred monolithBOT
#

Discord Account

The Prodigy#0001

What is it that you'd like to see?

The MessageClickActions Plugin works similarly like the "Double Click To Edit" BetterDiscord Plugin .(https://betterdiscord.app/plugin/Double Click To Edit), But it lacks one amazing addition to it, Which is the ability to double click to reply as well, it is mentioned in the link I provided above and already added there, so it would be awesome if it gets added here on Vencord too!

Request Agreement

  • [...
quaint sapphire
#

I gave you what to search

#

not what to patch

desert cosmos
#

comedy

cunning canyon
#

nuh uh beocord

jagged cloak
#

nuh uh beocord

austere talon
#

MaCoS

jagged cloak
#

MACoS

untold carbon
desert cosmos
#

why is apple so complicated

austere talon
#

deliberately messing up the MAcoS capitalisation cause I know it upsets apple fanboys

austere talon
untold carbon
#

i dont even like apple that much
i am just annoyed at things being obviously wrong ;w;

untold carbon
#

i am in pain ;w;

desert cosmos
#

apple sucks

jagged cloak
#

nuh-uh-beocord-no-lol

charred monolithBOT
lime stone
verbal pumice
#

i swear i looked yesterday and there were no open prs

#

guess im blind

lime stone
#

arhghhH!!!

verbal pumice
#

i do have to say that looks way better!

lime stone
#

thank you!

#

i wonder where i got the inspiration ;)

#

i removed a bit of duplication for the preview and the actual tab

#

luckily github has a merge conflict solver

#

in the web ui!!

#

yay so easy

#

you can merge now!

#

i don't think you need to review because it's already a pr

#

umm, i haven't got the icon for server discovery working because it's not a channel... and clicking back on the tab goes to friends

#

hopefully you can fix this

lime stone
#

i just made it display friends if it doesn't know

verbal pumice
#

still ty

lime stone
#

i also wanted to add middle click to close

#

couldn't get it to work :c

charred monolithBOT
lime stone
#

@verbal pumice it doesn't compile any more! xD

verbal pumice
#

yeah i realized lol

#

fixing rn alongside other minor things

lime stone
#

i ignored this

#

i thought it had pulled

verbal pumice
lime stone
#

how does it look?

verbal pumice
#

tried to undo changes to take a before screenshot and lost the changes i made gon
well too bad then it's staying like this for now

austere talon
#

/ commit them

verbal pumice
#

no

lime stone
#

you could've stashed

austere talon
#

what'd u do

verbal pumice
#

forgor

lime stone
#

oh

verbal pumice
#

when you both have an unread and someone is typing it's still pretty bad
will probably shrink down just the emoji then (or maybe hide it when someone is typing?)

lime stone
#

gen

charred monolithBOT
charred monolithBOT
charred monolithBOT
charred monolithBOT
tight yacht
#

Haven't really touched anything similar to this, so I have zero idea what to do 😅

quaint sapphire
#

uhh

#

nope

#

you have to reload the extension from the browser

charred monolithBOT
charred monolithBOT
austere talon
#

@knotty horizon btw we can also talk here

#

that's probably nicer PaPaTuTuWaWa

knotty horizon
#

yeah it is lol

austere talon
#

talking on github is kinda painful haha

knotty horizon
#

nya>.<pj+QGVp/9Hc=>.<Oq309LCX6H3jJLwU/sQHiQ==>.<bptMjBSamgyjvv9cwIDewkbQW+o=

#

this is what it outputs with what it was before

austere talon
#

Yeah the reason the TextEncoder one doesn't work is because it uses every codepoint whereas the .split() version only uses the first codepoint of each character

#

But I think only using the first one is not ideal anyway, doesn't that mean it only supports ascii?

#

so emojis and non latin characters won't work i think?

knotty horizon
#

lets find out

austere talon
#

i'm not fully sure, utf8 is confusing ChocolaHehe

knotty horizon
#

nya>.<catSQbva6vs=>.<I0c76W0VnGfEV4Yc2nvFNA==>.<jomuguEIe7G4H5i9L12xRRJuEAGBMdgVn228S8R2

#

apparently those arent latin-1

austere talon
#

try an emoji

#

🧑🏽‍🎨

knotty horizon
#

can't think of any that arent twemojis on discord

austere talon
#

\🧑🏽‍🎨

#

send the escaped version

knotty horizon
#

nya>.<adoH3rn1Jq0=>.<l25Us+3JJ1UF/GpfXgaD6A==>.<h8ttmrYDh6VdD5yajVANZNhKkolN9kN+ylQ+nSaRozU=

austere talon
#

huhhh

#

that's really confusing how does that work HaatoXD

austere talon
#

but well just keep using ur .split().map() version then!

knotty horizon
austere talon
#

I just recommended the TextEncoder version cause it's generally cleaner and faster

knotty horizon
#

but thats probably just me

austere talon
#

ohhh

#

it's not actually deprecated

#

it's only deprecated in nodejs

knotty horizon
#

oh and vscode thinks its node?

austere talon
#

you can get rid of the deprecation warning by explicitly using the web version

#
- btoa()
+ window.btoa()
knotty horizon
#

yeah that removed the warning

austere talon
knotty horizon
#

the node and web differences confused me too

austere talon
#

btoa/atob are just terrible, that's why node deprecated them AzuLaugh

knotty horizon
#

I thought that plugins were in node

knotty horizon
austere talon
#

i wish they made better versions that supported utf8 for web

#

also the fact that atob returns a string instead of a uint8array

#

is just so bad

charred monolithBOT
knotty horizon
#

is it possible to have like an array in a plugin settings

austere talon
#

unfortunately no for now, you have to do it yourself or make the comma enter a comma separated list or similar

#

but planned

#

what kind of data do u wanna store?

knotty horizon
#

like encryption profiles:
Public: blah
Test: whatever
Another Profile: skdfjbdhjsfbdjkh

austere talon
#

so multiple strings?

knotty horizon
#

yeah

#

I could just make the syntax like this Public:blah,Test:whatever,Another Profile:skdfjbdhjsfbdjkh

austere talon
#

thats kinda horrible but yeah

knotty horizon
#

seems like the only way

#

I could make a command to add them so it doesnt have to be manually modified like that

austere talon
#

werent u gonna do right click menu for that

knotty horizon
#

yeah to select them

#

wait

#

i could just

#

add a button

austere talon
#

you could just add it there yeah

#

like use a context menu

knotty horizon
#

yeah makes sense... how would i store the data though

austere talon
#

smth like this and then an add button at the bottom

knotty horizon
#

lmao

#

because then you can right click to delete/edit

austere talon
#

huhhh?

#

im not fully sure what u mean

#

ohhh wait i do lmao

#

i think that's not a thing no

austere talon
#

where "Message" would be the name of the selected profile

knotty horizon
#

oh yeah delete selected could work

#

where should i store the profiles

somber ginkgo
#

stolen code for you to re-steal if you care ```js
function lurk(id) {
findByProps("joinGuild").joinGuild(id, {lurker: true})
.then(() => {setTimeout(() => patchGuild(id), 100)})
.catch(() => {throw new Error("Guild is not lurkable")});
}

function patchGuild(id) {
findByProps("getGuildsTree").getGuildsTree().root.children.unshift({type: "guild", id, unavailable: false, children: []});
findByProps("getGuildCount").getGuild(id).joinedAt = new Date;
findByProps("lurkingGuildIds").lurkingGuildIds().pop();
findByProps("joinGuild").transitionToGuildSync(id);
}

lurk("guildid");

austere talon
#

wtf does that do

#

O_o

somber ginkgo
#

try with guild id 1090311153802031315

austere talon
#

nuh uh

somber ginkgo
#

it lurks a guild

#

have you never seen guild lurking before

royal bane
#

token steler!!1!1!!11

austere talon
somber ginkgo
#

uses other snippets that arent here afaik

#

but can be adapted

knotty horizon
austere talon
#

wha?

austere talon
#

but its async

knotty horizon
#

i can just use a

(async () => {

})();```

or something
somber ginkgo
#

i thought i had it findByProps from a different script

austere talon
#

ya but make sure the snippet works without consoleShortcuts on

somber ginkgo
#

husk

knotty horizon
#

looks like MessageTags does almost exactly what I want with DataStore

#

I like that all plugins are just here because you can use them for reference

austere talon
#

yeah lmao

charred monolithBOT
shut verge
knotty horizon
#

how could I add a right click event to a button

austere talon
#

i already told u dummy

#

onContextMenu!!

knotty horizon
#

sorry twemojipleading

austere talon
#

:3

median rapids
#

so mean

median rapids
austere talon
#

doesnt really matter HaatoXD

median rapids
knotty horizon
#

is there a better way to update plugin changes than pnpm run build and pnpm run inject every time

austere talon
#

and you can use pnpm watch to autorebuild :P

knotty horizon
#

how can i use async functions in a component

charred monolithBOT
austere talon
charred monolithBOT
calm shore
#

@woeful sable

#

lmao

somber ginkgo
woeful sable
somber ginkgo
#

stealing is my passion

charred monolithBOT
woeful sable
#

crazy jup

calm shore
#

mhm

#

you will make it spoko

woeful sable
#

how about you make it 🔥

calm shore
somber ginkgo
#

someone that isnt me will make it

#

i just steal code

woeful sable
#

same

somber ginkgo
calm shore
#

click button > run that script posted above

#

ez pz

median rapids
jagged cloak
#

jup do you own a switch

calm shore
#

no thank you

#

like

#

the gaming thing

jagged cloak
#

no? alr

#

just wondered

calm shore
#

nah not to u

#

that was to dolfies

#

idk what a switch is

jagged cloak
#

yeah i meant nintendo switch

calm shore
#

i do not

median rapids
#

one day 💯

calm shore
median rapids
#

😭

calm shore
#

srs

median rapids
#

you wouldnt even have to regex here

#

just patch lurk function

calm shore
#

just remove the bit that like unlurks u when u unfocus?

#

to the mappers we go

median rapids
#

or do what the snipper does

somber ginkgo
calm shore
#

it aint mines lmao

#

i stole it

somber ginkgo
limber skiff
#

It lets you permanently lurk it?

#

even when unfocusing?

calm shore
#

that script does yes

limber skiff
#

guh explain your snippet better @somber ginkgo

#

that aint just lurk with id

median rapids
#

it makes the client think you joined it

limber skiff
#

makes sense

somber ginkgo
knotty horizon
#

Error: Rendered fewer hooks than expected. This may be caused by an accidental early return statement.

#

hate this

charred monolithBOT
knotty horizon
#

i got it fixed

#

this is just annoying lol

knotty horizon
#

@austere talon got add profile working!!!!!

quaint sapphire
knotty horizon
quaint sapphire
#

Don't mind me, just backreading

austere talon
#

we should put discord colourpicker into webpack commons

knotty horizon
#

!

austere talon
#

hehe

knotty horizon
#

I'm adding functionality first

quaint sapphire
knotty horizon
#

hmm why isnt the contextmenu updating after checking one of the boxes

#

you have to go out then go to it again

quaint sapphire
#

Some parts of discord have a weird non-updating react state.

Try making a separate component with all ur states and use it in the context menu

#

(if that ain't the issue, then you are doing smth wrong)

knotty horizon
#

I'm probably doing something wrong because it works for ven's plugin that's similar

#

yeah I know why

#

nvm

quaint sapphire
#

Did you forget to update the state?

#

Or was there no state and you directly read settings?

knotty horizon
#

there was no state it was just a let

#

actually, how do i turn a string returned from a function into a state

#

i have a getCurrentProfile and setCurrentProfile

quaint sapphire
#
const [str, setStr] = React.useState("")

// If the function that returns the string is not async, then pass it instead of an empty string, otherwise use useEffect
knotty horizon
#

I know that but I'd like to use the function to set and get, since it saves it to a DataStore

quaint sapphire
#

I can understand each and every word in that sentence, but not the sentence.

#

What?

knotty horizon
#

uhh

#

ok so

#
const getCurrentProfile = () => DataStore.get(CURRENT_KEY).then<string>(c => c ?? "Public");
const setCurrentProfile = (name: string) => DataStore.set(CURRENT_KEY, name);
quaint sapphire
#

Which function?

knotty horizon
#

i have these 2 functions

quaint sapphire
#

Ok

knotty horizon
#

and in the component I'd like to call them, but since they're not states

#

the component wont update

quaint sapphire
#

Yes

#
const [profile, setProfile] = React.useState<string | null>(null);

React.useEffect(()=>{
    getCurrentProfile().then(setProfile);
},[]);
#

I think you can figure out the rest

knotty horizon
#

so like this?

quaint sapphire
#

For the loading part, yes

knotty horizon
#

yeah now how would i set it with the original function

quaint sapphire
#

Can I see the original function?

limber skiff
#

why are you doing that

#

ven told you to use useAwaiter

quaint sapphire
knotty horizon
#

yeah true

#

I forgot about that

limber skiff
#

you should use that instead

quaint sapphire
#

Actually, can you set state on useAwaiter?

#

It returns a tuple of the data, the error and pending

#

No set stuff

#

Ig a force update could solve this?

knotty horizon
#

this should work

limber skiff
#

what

#

no

quaint sapphire
#

Nooo

limber skiff
#

search for useAwaiter and see how it's done

#

(how another plugin uses it)

quaint sapphire
#

useAwaiter replaces the snippet I sent

#

But you can't set state on it

knotty horizon
#

right

quaint sapphire
#

So it might be useless

knotty horizon
#

im so stupid

#

useAwaiter is a state isnt it

quaint sapphire
#

Yes

limber skiff
#

why would you setState?

quaint sapphire
#

But only read

quaint sapphire
#

It fetches the stored data and updates it

quaint sapphire
knotty horizon
#
function ProfilesMenu() {
    const [currentProfile] = useAwaiter(getCurrentProfile);

    const [profiles] = useAwaiter(async () => {
        const p = await getProfiles();
        let matchedPublic = false;
        p.forEach(async profile => {
            if (profile.name === "Public") matchedPublic = true;
        });
        if (!matchedPublic) {
            const p2 = await addProfile(publicProfile);
            console.log(`not p: ${p2}`);
            return p2;
        }
        console.log(p);
        return p;
    }, { fallbackValue: [publicProfile] });

    return (
        <Menu.Menu
            navId="meowcrypt-profiles"
            onClose={() => FluxDispatcher.dispatch({ type: "CONTEXT_MENU_CLOSE" })}
            aria-label="Meowcrypt Profiles"
        >
            <Menu.MenuGroup label="Profiles">
                {profiles.map(profile => (
                    <Menu.MenuRadioItem
                        key={profile.name}
                        group="meowcrypt-profile"
                        id={"meowcrypt-profile-" + profile.name}
                        label={profile.name}
                        checked={profile.name === currentProfile}
                        action={() => setCurrentProfile(profile.name)}
                    />
                ))}
            </Menu.MenuGroup>

            <Menu.MenuSeparator />

            <Menu.MenuGroup
                label="Options"
            >
                <Menu.MenuItem
                    key="add-profile"
                    id="meowcrypt-add-profile"
                    label="Add Profile"
                    action={() => buildAddProfileModal()}
                />

                <Menu.MenuItem
                    key="delete-profile"
                    id="meowcrypt-delete-profile"
                    label="Delete Current Profile"
                    action={async () => await removeProfile(currentProfile as string)}
                />
            </Menu.MenuGroup>
        </Menu.Menu>
    );
}
quaint sapphire
#

Nope

#

useAwaiter returns a list with three items

#

The first is the data

#

The 2nd is an error if it errored

#

And the third is a bool indicating if the promise resolved

knotty horizon
#

I know

#

the const [profiles] part has been tested before and it works

quaint sapphire
knotty horizon
#

good to know

austere talon
#

ah u already figured it out

quaint sapphire
#

Not really

austere talon
#

u gotta use state for anything u want to be reactive

knotty horizon
#

I figured out the issue but didnt figure out how to fix it yet

quaint sapphire
#

Close but not there yet

#

The fact that I'm on mobile certainly doesn't help

quaint sapphire
knotty horizon
#

is there a way to force an update 💀

#

i cant think of another way to fix it

quaint sapphire
#

The way I sent you first is the default way of fixing this

knotty horizon
#

unless i use Settings for the current profile

quaint sapphire
#

By default I meant standard

knotty horizon
#

or.. somehow have the component to save it on change

limber skiff
#

use the old way arjix told u

#

then make a function that sets the state and updates the datastore

quaint sapphire
knotty horizon
#

oh yeah that could work

limber skiff
#

put it outside action please

#

then just call it inside action

quaint sapphire
#

Yeah that, and call it smth like saveProfile()

austere talon
#

we should make a useDataStore hook :3

quaint sapphire
#

That would be epic

knotty horizon
#

how do i take the value from the useAwaiter and set it for the state

#

somehow I'm creating a loop

quaint sapphire
#

Don't use the useAwaiter

frail skyBOT
#
Bad Patches

PronounDB (had no effect):
ID: 507250
Match: /\(0,.\.jsx\)\((?<PronounComponent>[A-Za-z_$][\w$]*\..),(?<pronounProps>{currentPronouns.+?:(?<fullProps>[A-Za-z_$][\w$]*)\.pronouns.+?})\)/

UserVoiceShow (had no effect):
ID: 1764
Match: /,{user:\w{1,2}}\)(?!;case)/

WebContextMenus (had no effect):
ID: 638525
Match: /(?<=showApplicationCommandSuggestions;)if\(![A-Za-z_$][\w$]*\.[A-Za-z_$][\w$]*\)/

WebContextMenus (had no effect):
ID: 638525
Match: /("submit-button".+?)(\(0,[A-Za-z_$][\w$]*\.jsx\)\([A-Za-z_$][\w$]*\.MenuGroup,\{children:[A-Za-z_$][\w$]*\}\),){2}/

PronounDB (found no module):
ID: -
Match: .Messages.USER_POPOUT_PRONOUNS

Bad Starts

None

Discord Errors

quaint sapphire
#
useEffect(async ()={
    // Async code here
},[])
#

The empty array is to say to react that this useEffect should run only once

quaint sapphire
frail skyBOT
#
Bad Patches

ViewIcons (had no effect):
ID: 74188
Match: /style:.{0,10}\{\},([A-Za-z_$][\w$]*)\)/

PronounDB (had no effect):
ID: 507250
Match: /\(0,.\.jsx\)\((?<PronounComponent>[A-Za-z_$][\w$]*\..),(?<pronounProps>{currentPronouns.+?:(?<fullProps>[A-Za-z_$][\w$]*)\.pronouns.+?})\)/

UserVoiceShow (had no effect):
ID: 1764
Match: /,{user:\w{1,2}}\)(?!;case)/

WebContextMenus (had no effect):
ID: 638525
Match: /(?<=showApplicationCommandSuggestions;)if\(![A-Za-z_$][\w$]*\.[A-Za-z_$][\w$]*\)/

WebContextMenus (had no effect):
ID: 638525
Match: /("submit-button".+?)(\(0,[A-Za-z_$][\w$]*\.jsx\)\([A-Za-z_$][\w$]*\.MenuGroup,\{children:[A-Za-z_$][\w$]*\}\),){2}/

PronounDB (found no module):
ID: -
Match: .Messages.USER_POPOUT_PRONOUNS

Bad Starts

None

Discord Errors
Cannot use SettingsStoreAPI without setting as dependency.

austere talon
#

WebContextMenus isnt actually broken

austere talon
#

what r u trying to do

knotty horizon
#

call an async function and save the value to a state

austere talon
#
useEffect(() => {
  (async () => {
  
  })();
}, [])
#

u can do this but its really ugly

knotty horizon
#

i figured

austere talon
#

uhh

#

use .then

austere talon
#

cant u just use that

knotty horizon
# austere talon this is literally what useAwaiter does

somehow creates an infinite loop```ts
const [currentProfile, setCurrentProfile] = React.useState<string | null>(null);
const [p] = useAwaiter(async () => {
const current = await getCurrentProfile();
if (!current) {
return "Public";
}
return current;
}, { fallbackValue: "Public" });
setCurrentProfile(p);

#

saving it to a separate state because I need to be able to set it later

austere talon
#

because you're calling setCurrentProfile

#

on top level

#

calling any state setter will rerun ur component

#

get rid of currentProfile