#🧩-plugin-development

1 messages · Page 70 of 1

cyan pendant
#

I fixed it with the help of AI, I fed it 3 examples of voice related snippets, im learnin a lot from this thing

#

DAWG dont judge me, I needa figure out something Ive never tried figuring out before, if this could be done via python I wouldve just done it like that

#

I just need to fix like one or two things and this should work

green vessel
#

can someone help me understand what dispatch method of FluxDispatcher does

#

im still learning the Flux Pattern

cyan pendant
#

Ok It doesnt show errors in the vccodes but when I run it on my client its not actually doing what i need it to do

#

anyone know how I can look for errors concerning the plugin

#

(I mean the one im creating)

vast karma
#

Devtools

cyan pendant
#

do I just filter errors

vast karma
#

Or search your plugin name, or just scroll

cyan pendant
#

its just not showing errors at all though

#

even if I dont search its just showin stuff unrelated

green vessel
#

how can i find out what a flux action takes as arguments

#

for example js FluxDispatcher.dispatch({ type: "GUILD_JOIN", // ????? })

vast karma
#

Check how discord uses it

brittle apex
#

It says "DevCompanion is only for the developer version" and I did ran "C:\Users\user\Documents\Vencord>pnpm build --dev" + my custom plugins arn't working

#

UHHHHHHHHHHHHH

#

OMG I FIXED ITTT

brittle apex
#

how do I add options to the ChannelAttachButton thingi

#

?

flint bronze
#

Look at the VoiceMessages plugin

brittle apex
#

I tried to but it's to complicated

brittle apex
brittle apex
#

tf is that message

flint bronze
#

it means "DO NOT INSTALL RANDOM STUFF INTO YOUR CLIENT AND BLAME IT ON THE MAINTAINERS"

green vessel
#

Real

halcyon moat
#

Is it possible to run a command via some api?

I want to be able to right click a channel click a button then have it run a command.

flint bronze
#

Is it possible? Yes
Has the idea been thought of before? Yes
Has anyone committed to doing this before? I don't actually know?

halcyon moat
flint bronze
#

you might want to consider setting a breakpoint on command xhr/fetch calls and working through the call stack to find a send command function or something like that

flint bronze
# halcyon moat 👍 💜

if that doesnt end well just use RestAPI and send the API request yourself (look for existing examples in other Vencord plugins that use RestAPI) do note the pending command might not appear if you do click into the channel

brittle apex
#

Btw someone knows how do I insert text to the textbox?

brittle apex
#

?

small lily
#

Hello I am new to vencord plugin development and I would like some guideance on how to achieve this:

Problem:

When I block users, they are not muted in voice channels -> If I block a person and he is in another voiceChannel/in no voiceChannel at all, I do not see a "muted" symbol on them / as soon as they join a voiceChannel.
I have had this problem now multiple times on public servers where I hang out a lot and it frustrates me.

Solution:

I want to create a muteBlockedUsers plugin with a toggle, which automatically mutes blocked users for you.

I want the plugin to work like this:
If the toggle is set to "ON", then all blocked and future blocked users get automatically muted.
If the toggle is set to "OFF", then the user can right-click any blocked user in the "Friends > Blocked" tab and mute them manually.

I already followed everything on https://docs.vencord.dev/plugins/ and the last thing I did after adding my name in the Devs object was to save the file to automatically format it.

This is my current index.ts file: https://sourceb.in/vi6Jnux6Yx

brittle apex
#

const file = await chooseFile("/");

if (file) {
    const filePath = file.path || "File path is not available";
   // Why filePath is undefine???? 
}
return null;
#

Can someone help me with this?

hushed loom
#

Look how other plugins get files

#

Voice messages for one

brittle apex
#

I tried

#

but this line:
const Native = VencordNative.pluginHelpers.VoiceMessages as PluginNative<typeof import("./native")>;
isn't working on my code to export from the native

brittle apex
#

I FIXED IT

#

OMG IT FEELS SO GOOD

brittle apex
#

yo guys can someone please tell me is there anyway to add a custom svg? insted of using "@components/Icons"

vast karma
#

Check what dozens of other plugins are doing

#

Translate, toolbox, preview, and silent typing are a few that come to mind

brittle apex
#

thanks man

brittle apex
#

I FINISHED MAKING THE PLUGIN

#

OMG IT TOOK FOREVERRR

brittle apex
#

can someone please help me how to make a function that mutes somone on the vc by id?

rose fiber
rose fiber
#

enable react devtools in vencord settings (or install it as an extension if on web) and look at it

#

there's an example in the pins

brittle apex
#

how tf do I open this tool?

brittle apex
# rose fiber there's an example in the pins

toggleLocalMute(e) {
let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : f.Yn.DEFAULT;
!T() && r.Z.dispatch({
type: "AUDIO_TOGGLE_LOCAL_MUTE",
context: t,
userId: e
})
},

tf am doing with it?

rose fiber
brittle apex
#

OHHHH

#

thanks

#

Well now the final thing.

#

how do I get all of the people in the call?

brittle apex
rose fiber
brittle apex
#

how do I chack for it?

rose fiber
#

first of all ctrl shift f and look for the handler for that flux event

#

this one

#

now find that module by typing wreq(345953) in your devtools console

#

then, go to that function

#

now we have a nicely named function

brittle apex
#

findByProps("isLocalMute").toggleLocalMute(userId)?

#

findByProps("isLocalMute").isLocalMute(userId)?

rose fiber
#

those 2 functions arent in the same module

brittle apex
#

so how do I refrence it in my script?

rose fiber
#
const { toggleLocalMute } = findByProps("toggleLocalMute");
const { isLocalMute } = findByProps("isLocalMute");
brittle apex
#

Thanks

#

const { toggleLocalMute } = findByProps("toggleLocalMute");
const { isLocalMute } = findByProps("isLocalMute");
if (isLocalMute === false){
toggleLocalMute(userId).toggleLocalMute(userId)
}
right?

brittle apex
#

cuz it's kinda not working

#

maby it's like

const { toggleLocalMute } = findByProps("toggleLocalMute");
const { isLocalMute } = findByProps("isLocalMute");
if (isLocalMute(userId) === false){
toggleLocalMute(userId).toggleLocalMute(userId)
}

#

nuh that's just crashing my discord

rose fiber
#

replace toggleLocalMute.toggleLocalMute with toggleLocalMute

brittle apex
#

so like toggleLocalMute(userId?)

rose fiber
#

yup

brittle apex
#

and the isLocalMute is just fine?

#

thanks man ur the best

#

can I add u to my friends please @rose fiber ?

#

also i've used this line:
patches: [{
find: "renderConnectionStatus(){",
replacement: {
match: /(?<=renderConnectionStatus(){.+.channel,children:)\i/,
replace: "[$&, $self.alertChannelId(this.props.channel.id)]"
}
and it works and all but the only problem is that if ur also using the call timer plugin because the plugins from the plugins folder are starting first it cannot find the function so it's not working

#

is there anything I can do to prevent it?

cedar olive
#

you need to use findByPropsLazy

small lily
small lily
cyan pendant
#

I cant figure out the issue with my plugin can I just post the full source here or no

cyan pendant
#

ill take this as a yes sigma I can

#

This is the source of my plugin that I cant figure out what the flip is wrong with it

#

its suppose to auto local deafen when I am server muted and auto local mute when I am server deafened, to combat admin abuse in voice chats, when debating or conversating

vast karma
#

Using a timer like that is one thing that's wrong, at least

#

And returning a function from start, that's not how you do it (but maybe it should be)

cyan pendant
#

ok thanks you

#

when I want to diagnose the steps of my code I put console.log("HI this happened") but where do I look to find hi this happened, it wont show in the console (ctrl shift I)

cedar olive
#

then that code is not running due to something in your code

#

```js
const VoiceStateStore = findStoreLazy("VoiceStateStore");
const userStore = UserStore;


no need to re-assign UserStore to userStore, just use UserStore directly
#

remove these

  if (!VoiceStateStore || !userStore) {
    console.log("VoiceStateStore or UserStore is not initialized");
    return false;
  }

they don't work how you would expect because the return of lazy functions (and UserStore) are never nullish

cyan pendant
#

oh ok

#

thank you, I think I figured it out let me test it

cyan pendant
#

For some reason still not reacting to the server mute

vast karma
#

Where do you expect it to react to anything

#

It checks when the plugin is started, that's it

cyan pendant
#

IM SUCH A GOOF BALL

cyan pendant
#

its suppose to automate local deafening when server muted

#

and local muting when server deafened

#

and undo those things when the servermute/deafen is undone as well

vast karma
#

You'll probably want to subscribe to the VoiceStateStore to find when it changes

cyan pendant
#

how do I do that...

vast karma
#

Well, there's an addChangeListener method so maybe use that?

cyan pendant
#

sigma, thank you

cyan pendant
#

ok yeah im lost still bro im adding several credits by the end of this

#

also not until like 9 am today I wasnt using dev companion 😭

#

This whole time I manually rebuilt and reinjected LOL

vast karma
#

Just pnpm watch

cyan pendant
#

But now that I got dev companion is really useful much love for it

vast karma
#

Reinjecting is unnecessary

cyan pendant
#

I didnt know about it earlier though before today

cyan pendant
# cyan pendant

so I tried console.log thingy to see if stuffs being called but it doesnt seem to be should I be usint a print statement instead or

#

does that even work in typescript

#

nvm looked it up

vast karma
#

print() opens a printer dialog

cyan pendant
#

oh

vast karma
#

Which is very funny

small lily
#

So I really don't like to ping people but I really want some help cause its my first plugin and there are no docs on how to do stuff.
So I am sorry in advance for future pings but could any1 help me out by chance?

How do I know when a user blocks / unblocks someone?
This is my code so far: https://sourceb.in/lLDaS56yWP

cyan pendant
#

your code checks to see if a user is blocked and automutes them locally right?

#

if I am reading that code correctly

small lily
#

Yes cause blocking a user on discord only restrains them from messaging you etc. but for voicechat nothing happens

cyan pendant
#

you sigma

#

Im trying to do something similiar on voice state changes though

small lily
#

xd nice

cyan pendant
#

so like if I am server muted ill auto deafen myself locally and if Im server deafened ill auto mute myself locally

small lily
#

ok

cyan pendant
#

I asked it how I could check if a user is blocked and it gave this example code block, try this if you want

#
import { RelationshipStore } from "@webpack/common";

const relationshipStore = RelationshipStore.getStore();

function isBlocked(userId: string) {
  const relationship = relationshipStore.getRelationship(userId);
  return relationship?.type === "BLOCKED";
}
small lily
#

well that tells me if a user is currently blocked, but how do I know when a new block/unblock happens

#

cause this checks also for blocked people
Object.entries(RelationshipStore.getRelationships()).filter(([k, v]) => v === 2).map(([k]) => UserStore.getUser(k).id);

cyan pendant
#

ok just use that

#

I think the code block it gave is trashy uhm give me a min

#

ok yeah im not sure on that part

#

Bro theres like no documentation I cant help my bad LOL

#

If anyone can help me and this dude

small lily
#

haha i also hate the fact no docs are available

azure fossil
#

how would i do smth like this now ?
i've looked in the update commit but no official plugins seems to have been using getLocale unless i'm F blind and i can't find it
i18n?.getLocale?.() ?? "en-US"

cedar olive
#

i18n.intl.currentLocale

azure fossil
#

tyvm

#

idk but the currentLocale wasn't showing in the hints

hushed loom
#

go to console and just read the values from there

azure fossil
#

ic

#

so all of this come from the types

small lily
#

how can I detect if a user block/unblock happens

hushed loom
small lily
#

ok thanks finally an aswer <3

small lily
#

so this is what I found out in chrome f12 when clicking on blocking a user:

onConfirm: () => {
null == p || p(),
o.Z.addRelationship({
userId: E,
context: {
location: g
},
type: _.OGo.BLOCKED
})
}

with that how do I block a user in my plugin?

fathom pivotBOT
#

@hushed loom, <t:1730247495:R>: …

dull magnet
#

addRelationship is an exported function, use findByProps to find it

#

for the other values, put a breakpoint and trigger it to see what they are

fathom pivotBOT
#

@hushed loom, <t:1730249336:R>: …

cyan pendant
#

im lost

empty echo
#

where can i find the module that contains the main flux dispatcher? before some update it was Vencord.Webpack.findByProps("DispatchBand", "default"), but that doesn't work anymore...

#

i basically want to run some function whenever a message is received in a specific channel

flint bronze
#

It's already found for you

#

You can just import FluxDispatcher

#

However for what you are trying to do, you might want to use the flux object of event handlers in your plugin object rather than registering manually

empty echo
halcyon moat
#

There might be a better place to put this but i'm placing it here.

When using the User type from discord-types/general it's missing a bunch of data. When I console.log user it has soo much more and there is missing stuff that "should" be clear and "should" be added be default.

Stuff like clan, banner, globalName and most likely more.

Is there a way to get the package updated to support new data so I can stop getting errors or should I be importing User from a different package?

halcyon moat
# halcyon moat There might be a better place to put this but i'm placing it here. When using t...

I spent some time looking into this. The package we are using is not just out of date but is also abandoned. Would it not be better to use something like discord-api-types from discord.js

Using discord-api-types would mean going to be more up to date and will stay around for "sometime" considering it's made by the same people who made discord.js.

I'm willing to look more into this and maybe make a pr with a swap over but I'm wanting to know if i'm missing something first before putting my time and effort into this.

dull magnet
#

discord api types is incredibly different from what the data structures you're working with are

halcyon moat
#

Is that because we are parsing it in some way and not just using the raw API data?

hushed loom
#

Vencord is a unofficial client mod

#

There is a pr somewhere to migrate to our own types for discord, but that has been lost in the weeds for a while

halcyon moat
halcyon moat
halcyon moat
hushed loom
halcyon moat
vast karma
#

discord-types describes api responses, which are json. Discord itself, and thus vencord, uses actual data objects, with methods and shit

#

Plus, api responses are stable, while internal objects can be changed whenever an employee feele sufficiently bored

dull magnet
#

Discord has classes for most data structures and deserialise the json elements into an instance of those classes

#

these classes have useful helper methods and camelCase names, thus their structure differs vehemently from the api types

rocky lynx
#

I figured it out. I did this instead of just using sendMessage and uploadFiles because I thought it would be easier.

FluxDispatcher.dispatch({
    type: "SLOWMODE_SET_COOLDOWN",
    channelId,
    slowmodeType: 0,
    cooldownMs
});
small lily
#

like for knowing when a user is blocked/unblocked, I can add a "addChangeListener()" to the RelationshipStore

How would I do it when I get server muted/deafened?

small lily
#

is it like normal discord events?

vast karma
#

Define "normal discord events"

rose fiber
#

^

small lily
#

like for example

MESSAGE_REACTION_ADD
MESSAGE_REACTION_REMOVE
MESSAGE_REACTION_REMOVE_ALL
MESSAGE_REACTION_REMOVE_EMOJI

halcyon moat
#

is there a list of of contextMenus somewhere?

dull magnet
#

no

#

open the menu you want and use inspect elements to get the menu id

rose fiber
#

flux events arent documented anywhere

#

youll have to look in discord's code for (something).dispatch({ type: fluxEventYoureLookingFor, whatever: "something" })

small lily
rose fiber
#

you have to look at discord's code

small lily
#

Can I implement features to existing plugins? Or is that not allowed and I need to create a new plugin for that?

small lily
#

cause idk what to do with my plugin. I get told that it "adds" a feature to an existing plugin but I cannot find an existing plugin which does that.
Its about muting blocked people for voicechat automatically etc.

hushed loom
#

noblockedusers

small lily
#

there is no plugin named like that

#

there is one called noblockedmessages

hushed loom
#

yea
that one

small lily
#

what would you do if you were to be me?
Add as new plugin or add as feature and maybe rename to noBlockedUsers the whole plugin

hushed loom
#

avoid renaming imo

#

id prob make a new one

small lily
#

so what now

hushed loom
#

in the end, it doesnt matter

#

maintainers will decide if it goes in its own or in an existing plugin

small lily
#

hmm if you say so..

#

thanks btw

dull magnet
iron knoll
#

Hey I am trying to make a plugin to hook the file upload function if its above the upload limit upload it to catbox and send that as a link is there any way to hook that function?

humble tulip
#

There's only one setting on that plugin but still

vast karma
#

You guys ever notice that the forward menu explicitly omits the current channel

swift delta
humble tulip
#

Ah

swift delta
#

for example…
migratePluginSettings("AlwaysExpandRoles", "ShowAllRoles");

vast karma
#

And the search function sucks, prioritizing users you've never interacted with

humble tulip
swift delta
small lily
#

Aha thanks

swift delta
#

prolly really doesn’t matter, but just thought you’d like to know

hushed loom
thick sparrow
#

daily reminder to update pnpm

thick sparrow
#

is it even possible to enable/disable vencord plugins through the toolbox

#

?

vast karma
#

You can put just about anything in the toolbox

flint bronze
#

The toolbox does not work like context menu API

#

You can put buttons

#

but thats about it

vast karma
#

Buttons that can do anything

flint bronze
#

if you want more menu options then you'll have to edit the code

flint bronze
thick sparrow
#

where is the vencord docs

#

i gotta figure shit through inspect element console

flint bronze
#

the docs are mostly just typescript types

thick sparrow
#

Vencord.Plugins.plugins.SigmaLanguage.start

flint bronze
#

look at how DevCompanion does it

hushed loom
thick sparrow
hushed loom
thick sparrow
#

i have a dev version yet it still says its only for dev versions

hushed loom
#

Go to src/plugins/devcompanion.dev

#

And read

thick sparrow
#

wait so nobody

#

can use it

#

?

#

just saw

#

also im slow if u disable the plugin it disappears from toolbox

vast karma
#

Yes, disabling a plugin disables all parts of it

craggy latch
#

I'm unable to find the vencord settings, im on a dev branch because of my custom plugin (it is not causing this)

#

It was working literally until a few mins ago when I updated discord

#

Vencord seems to be getting injected (I see the features from other plugins on), it's just the settings are missing

oak sundial
#

We don't provide support for devinstalls at all, even in this channel

#

this is a problem with your dev install, not vencord, not dev installs as a whole, not the plugin lib

craggy latch
#

I did not touch anything tho

#

Also if i build without --dev does it count as dev install

oak sundial
#

Buliding from source is not supported, stop asking

craggy latch
#

Ah okay, sorry

#

How can I submit my plugin to be added into offical plugins then?

#

It's just "sortFriendList"

/*
 * Vencord, a Discord client mod
 * Copyright (c) 2024 Vendicated and contributors
 * SPDX-License-Identifier: GPL-3.0-or-later
 */

import { definePluginSettings } from "@api/Settings";
import { Flex } from "@components/Flex";
import { Devs } from "@utils/constants";
import definePlugin, { OptionType } from "@utils/types";
import { RelationshipStore } from "@webpack/common";
import { User } from "discord-types/general";

const settings = definePluginSettings({
    showDates: {
        type: OptionType.BOOLEAN,
        description: "Show dates on friend list",
        default: true,
        restartNeeded: true
    }
});

export default definePlugin({
    name: "SortFriendList",
    authors: [Devs.CallMeGii],
    description: "Sorts friends by date of addition",
    settings,

    patches: [{
            find: "getRelationshipCounts(){",
            replacement: {
                match: /\}\)\.sortBy\((.+?)\)\.value\(\)/,
                replace: "}).sortBy(row => $self.wrapSort(($1), row)).value()"
            }
        }, {
            find: "peopleListItemRef",
            replacement: {
                predicate: () => settings.store.showDates,
                match: /(?<=children:.*user:(\i),.*subText:).+?(?=,hovered:\i,showAccountIdentifier)/,
                replace: "$self.makeSubtext($1, $&)"
            }
        }        
    ],

    wrapSort(comparator: Function, row: any) {
        return row.type === 3 || row.type === 4
            ? -this.getSince(row.user)
            : comparator(row);
    },

    getSince(user: User) {
        return new Date(RelationshipStore.getSince(user.id));
    },

    makeSubtext(user: User, origSubtext: any) {
        const since = this.getSince(user);
        if (isNaN(since.getTime())) {
            return null;
        }
    
        return (
            <Flex
                flexDirection="column"
                style={{ gap: "0px", flexWrap: "wrap", lineHeight: "0.9rem" }}
            >
                <span>{origSubtext}</span>
                <span>
                    <div className="" style={{ display: "flex", alignItems: "center" }}>
                        <svg
                            aria-hidden="true"
                            role="img"
                            xmlns="http://www.w3.org/2000/svg"
                            width="8"
                            height="8"
                            fill="none"
                            viewBox="0 0 24 24"
                            style={{ marginRight: "4px", display: "inline-block" }}
                        >
                            <path
                                fill="var(--input-placeholder-text)"
                                fillRule="evenodd"
                                d="M12 23a11 11 0 1 0 0-22 11 11 0 0 0 0 22Zm1-18a1 1 0 1 0-2 0v7c0 .27.1.52.3.7l3 3a1 1 0 0 0 1.4-1.4L13 11.58V5Z"
                                clipRule="evenodd"
                            ></path>
                        </svg>
                        <span>Added &mdash; {since.toDateString()}</span>
                    </div>
                </span>
            </Flex>
        );       
    },
});```
oak sundial
#

you would open a PR for it

craggy latch
#

Okay, thank you very much

#

Done, thank you

humble tulip
flint bronze
humble tulip
#

I'm aware the custom path option is dangerous as-is but that's a later problem

humble tulip
#

I need to make a plugin that tells me I'm a dumbass when I only ctrl+r reload after changing a native.ts file instead of fully restarting discord

unkempt dove
#

is there an easy way to reference or get a variable using a regex earlier in the module?

#

for example, one of my patch replacements needs a minified variable earlier in the referenced module, and i'm not sure how to get it

cedar olive
#

yes

#

lookbehind after your match

#

/match(?<=channel:(\i).+?)/

#

for example

humble tulip
#

I don't wanna make all my plugins about embeds and links lol
But what if I made a plugin that previews embeds as you type links in the chat box, kinda like how whatsapp or messenger previews them

gloomy terrace
#

Would be fire ngl

steady knot
humble tulip
#

Change the find to "#{intl::MESSAGE_EDITED_TIMESTAMP_A11Y_LABEL}" to fix what the update broke

steady knot
#

oh?

#

oh shit it works 🥰

cedar olive
humble tulip
#

So are we expecting the existing keys to always correspond to their existing hashes?

#

And then new keys we just won't know what the original key was to get the hash

cedar olive
#

hash is calculated at runtime so yes

#

existing keys will match their hash

#

and new keys we wont know unless we guess

#

some have been guessed already

humble tulip
#

Sorry by always I meant going forward but I guess there's no way we'd know that lol

cedar olive
#

yeah

#

we should just use hash now

#

but primarily avoid message keys as finds

humble tulip
#

Got it thumb

cedar olive
#

since they aren't as reliable anymore

#

(or maybe they are)

humble tulip
steady knot
#

yeah a former vencordian made the patch and had hardcoded the formats, I added options to it with some help from chatgpt because I don't know any js/ts but I got most of it

azure fossil
steady knot
#

really?

azure fossil
#

I forgot the name of the experiment but i think you can find it by searching for time

steady knot
humble tulip
azure fossil
#

Yep this

humble tulip
#

I'm surprised that didn't break the patch tbf

azure fossil
#

I found it today when looking into discord hashing stuff

#

I was looking for stuff in the js and randomly found that

steady knot
#

oh yeah it adds this under appearance, pretty cool

azure fossil
#

But alr better than nothing to be able to use system api for date time

humble tulip
#

Specific format strings is exactly what the plugin is

steady knot
#

I know the settings aren't intuitive, just using the moment.js format names

vast karma
#

Should include an example timestamp using the confugured formats

green vessel
#

anyway to develop plugins faster than rebuilding & injecting and restarting discord?

cedar olive
#

pnpm watch and no need to inject again

#

F5 in devtools to reload faster

green vessel
#

thanks man

hushed loom
cedar olive
#

F5 is faster

sullen ermine
#

Hello! Does anyone know an alternative to usedrag and usedrop that used to be in @webpack/common ?
I want to update the channeltab plugin (for I18-n) that was created by sunnniee but im not even sure they'll update it anymore

steady knot
green vessel
#

any possible way to use NavigationRouter in native.ts?

hushed loom
azure fossil
lucid girder
#

How to make an button next to your microphone button?

humble tulip
#

Is there a way to use setValues in a custom settings component without it rerendering the entire thing?

#

It seems like the only way to actually save values when the user clicks save and close (rather than editing settings immediately as the value changes) but it makes it impossible to type because you lose focus after every letter

vast karma
#

Are settings components not like, regular components?

#

Which you can useState() and the like in

#

Or do you mean that you want the setting to save instantly, unlike every other setting which only save when you press save?

humble tulip
#

When you use the setValue function passed in the props of the custom component it sets the values to be saved when you click save & close, but doing so also tells something further up the chain to rerender the whole settings component as far as I can see

#

So you have to have it save the new value instantly as you type because if you call setValue after every letter typed it keeps rerendering the modal and the input you're typing in loses focus before you can type the next letter

#

Basically my point is just that trying to use this function

#

But I could very well just be stupid

vast karma
#

Considering the regular SettingTextComponent works, you're probably doing something fishy

humble tulip
#

I'll look into it more, I probably am just being dumb

vast karma
#

Oh, and have you considered having a selector where you can choose presets corresponding to each available momentjs locale?

humble tulip
#

Figured it out, it was because I was defining the Row component inside the custom settings component, thanks for the sanity check

tropic ice
cedar olive
#

yes

#

run canonicalizeMatch with that to see

tropic ice
#

ah cool
where do you get that variable from

hushed loom
#

they're hashed now

#

so you cant get new ones

tropic ice
#

internationalization keys?

hushed loom
#

yea

tropic ice
#

how do you find them?

hushed loom
#

thats the fun part

#

you dont

#

thats all the known ones

tropic ice
#

do those hashes not reroll?

flint bronze
dull magnet
#

it's constant

tropic ice
#

oh yeah hash

#

what are the random chars in class names called

flint bronze
#

I dont know

dull magnet
#

do u mean these one letter names

flint bronze
#

the class name modules

#

these kinda things

#

i think is what @tropic ice is talking about

tropic ice
#

yeah these

#

didn't know that existed though

flint bronze
#

they all have the same suffix for each webpack module

dull magnet
#

they are also semi constant

flint bronze
dull magnet
#

they only change if discord changes their css

tropic ice
#

yeah
i'm mostly a css person, so that's how ik of them

flint bronze
flint bronze
tropic ice
flint bronze
#

It's probably just random

green vessel
#

Okay so I have an object defined inside native.ts and I want to add RouteNavigator to a key what can I do I’m confused?

#

For example

hushed loom
#

why do you have a native.ts

#

what is your end goal

green vessel
#

I’m using electron touchbar API

hushed loom
#

alr, i have no idea what that is, sorry

green vessel
#

And im trying to set give a callback to a touchbar object which will use RouteNavigator

green vessel
hushed loom
#

idk what routenavigator is

#

couldnt find any mentions of it in vencords codebase

green vessel
#

It switches to server with passed server id

hushed loom
#

you mean navigation router

green vessel
#

Yes my bad Lol

hushed loom
#

its all good

green vessel
#

I’m so tired

#

Do you have any idea how I could do that?

hushed loom
#

tbh you would prob want to look at electrons docs

#

dont know much, but these seem to be of note

green vessel
#

Kk I’ll take a look thank u

steady knot
quaint cipher
#

is there somewhere a list of known intl message keys

#

update: i found from the apk

hushed loom
#

which patch is better

#
{
    find: "peopleListItemRef",
    replacement: {
        match: /(?<=subText:).+?\}\)(?<=user:(\i).{0,100})/,
        replace: "$self.makeSubtext($1, $&)"
    }
}
#
        {
            find: "peopleListItemRef",
            replacement: {
                predicate: () => settings.store.showDates,
                match: /(?<=children:.*user:(\i),.*subText:).+?(?=,hovered:\i,showAccountIdentifier)/,
                replace: "$self.makeSubtext($1, $&)"
            }
        }
humble tulip
#

Probably the first lol, I just threw the second one together without much thought into making it good

hushed loom
#

@craggy latch fixed the bad logic in your plugin

hushed loom
#

not talking about the patch

#

the plugin just didnt work

humble tulip
green vessel
#

any possible way to use invoke webpack functions from native.ts?

dull magnet
#

look at other plugins

green vessel
flint bronze
#

call a native function in your plugins' start function and save the webContents from the ipcmaininvokeevent

inner pawn
#

I have a button patch working now, but I am not sure how I would add a modal callback to that

flint bronze
#

I need advice.

I have a few closely related ideas for plugins.
1: Events calendar in app, in DM sidebar near friends/shop/nitro/library/etc and replacing the events button in servers
2: Automatically exporting all events to a file with a native script
3: Fixing Discord's existing "Download ICS file" button to add more (better) metadata to the file

#

@hushed loom @hoary pilot can you help me decide

#

I intend to PR this shit eventually

hushed loom
#

events in discord are so useful

flint bronze
flint bronze
#

I have acknowleged that a "events from every server" option is a shitty idea

inner pawn
#

2 and 3 might work goood together

#

1 seperatetly

flint bronze
#

hmm

#

I don't really want to duplicate logic in multiple plugins

flint bronze
inner pawn
#

actually this is one with different settings might work

flint bronze
#

to start

#

I will build a definitive "Route API"

rocky lynx
#

i forgot about being able to import css files and just did an animation with css using dom manipulation husk

flint bronze
#

Wait until you find out about the managed CSS API for cases where you do changes outside of your plugin

green vessel
flint bronze
#

Do not rely upon ConsoleShortcuts being enabled

#

How much do we wanna bet old route API stuff still works

rocky lynx
hushed loom
#

minkyapi

#

@remote kestrel

flint bronze
# flint bronze
poll_question_text

events plugins

victor_answer_votes

4

total_votes

5

victor_answer_id

1

victor_answer_text

All in one plugin

flint bronze
flint bronze
#

we need

swift delta
flint bronze
#

vmink

shrewd tundraBOT
unkempt kindle
craggy latch
rocky lynx
rocky lynx
rocky lynx
rocky lynx
#

I will add a settng for the image source and more sources

flint bronze
#

we need better minky api

#

@granite wharf when will you add endpoints to minky api to get each image, to list all images, etc

hushed loom
#

@granite wharf you will zip and send all the images of minky to me

flint bronze
#

i need it as well

#

i think i have a 3GB archive of minky pics from @safe glade already though

hushed loom
#

i will scrape all minky channels

flint bronze
flint bronze
#

should I make trolley

hushed loom
#

@granite wharf send me the minkers

granite wharf
flint bronze
#

i know

flint bronze
granite wharf
#

i dont have time to do myself

flint bronze
#

bruh

#

can we have downloadable archive of the minker pics

granite wharf
#

nop

#

drip feeding minky pics

#

vmink

shrewd tundraBOT
hushed loom
#

@remote kestrel can you send me the minky pics

hushed loom
flint bronze
remote kestrel
#

who ping

granite wharf
remote kestrel
#

updatee

flint bronze
remote kestrel
#

thjeres been at least 300

flint bronze
#

300 MINKY PICTURES?

remote kestrel
#

yes

rocky lynx
#

I have over 500 of gary

flint bronze
#

you can iterate that api though

#

@rocky lynx I am downloading every gary photo right now.

flint bronze
#

are there supposed to be duplicates

#

no

rocky lynx
#

Yeah

flint bronze
#

they're just very similar photos

rocky lynx
#

I got better about not putting too similar pictures in

flint bronze
rocky lynx
#

I need to clean up some of the older pictures

flint bronze
#

Can I confirm there's no rate limit on your server?

rocky lynx
#

Yes

flint bronze
#

(too late anyways)

rocky lynx
#

Its just a nginx web server

#

Didnt really do much except add cors headers

flint bronze
#

guhhh cloudflare will kill me

#

maybe

#

check your logs if you dare idk

#

wget is a piece of shit

rocky lynx
#

Several people have done this befor lol

flint bronze
#

good

rocky lynx
#

I got several thousand requests in a few minutes once

rocky lynx
#

is this good or should i add any more sources

hushed loom
rocky lynx
#

cat api doesnt have CORS headers husk

jagged briar
rocky lynx
#

time for native.ts i guess

#

i dont want to use a proxy

flint bronze
rocky lynx
rocky lynx
#

i made it so the tooltip changes based on the selected source, but it doesnt update until you change channels or click it. i do not know how to fix that

swift delta
#

Like let’s say hypothetically, I had a goose one or a raccoon one

flint bronze
flint bronze
rocky lynx
#

i spent about an hour trying to figure out why my native wasnt working to realize i misspelt the plugin name

flint bronze
rocky lynx
#

i have updated the code on the github repo

weak haven
green vessel
hushed loom
rocky lynx
green vessel
weak haven
tropic ice
green vessel
tropic ice
#

you can't feel them though

rocky lynx
#

I think the touchbar is a cool enough concept that i wouldn't mind not having f keys

hushed loom
humble tulip
#

That's quite the plugin

hushed loom
#

wrong channel 😭

cedar olive
#

insaneeee plugin

#

when is it getting pred

hushed loom
#

😭

steady knot
#

can be done in css

tropic ice
#

you can just assign the actions to your f keys

green vessel
tropic ice
#

keyboard can be dynamic too

#

the actions at least

#

look now i can type different characters øåæ¨

#

and question mark isnt in the normal place_

green vessel
#

i meant the touchbar has things like volume adjusting with a scroller and autocorrection word display etc anything that something without a screen cant do

tropic ice
#

word display like on mobile?

#

ig that's kind of cool

green vessel
#

Yea

tropic ice
#

but i like being able to feel keys

#

does it at least have haptic?

green vessel
#

Me too it'd be cool if they just added the fn row above or below it

#

No

#

its oled though at least

tropic ice
#

also if it's a screen, it would get so smudgy

#

same problem with touchscreen

green vessel
#

I havent noticed any smudgyness yet ive only had it for a month or so im use to the fn keys but i saw the touchbar and it looked so cool i had to cop it

tropic ice
#

whoa

#

maybe that's just my hands

#

if i touch my screen once, it gets a smudgy fingerprint

green vessel
#

Maybe or it might just be noticable when the screen isnt lit

green vessel
#

how can i pass plugin settings native? it says its not cloneable

hushed loom
#

what are you trying to do

green vessel
# hushed loom what are you trying to do

the touchbar is created in native so im trying to pass the settings as an argument to a native function so i can create the touchbar based on the settings they set

hushed loom
#

settings is a proxy

dull magnet
#

lookat other native.ts scripts multiple use settings

green vessel
hushed loom
#

forgot about that blobcatcozy

green vessel
#

thanks yall

hushed loom
#

tbh its not intuitive given you cant import native in index

green vessel
#

maybe that is a bad idea im not sure

cedar olive
small lily
cedar olive
#

maybe if you click to edit the post it shows the links too, I'm not sure

cedar olive
cyan pendant
#

is there a plugin for adding captions to gifs

#

im asking if it exists not for someone to make it )

amber basin
#

no there isnt, use a userapp

hushed loom
#

might be crazy, but whenever i try to use the datastore, the returned promise never resolves

hushed loom
dull magnet
#

works on my machine

hushed loom
#

shouldnt i also be able to see the other entries here, or am i in the wrong space

humble tulip
#

I have entries in there

#

Yours seems broken

hushed loom
#

how the fuck

#

yea

#

nothing that uses datastore works

#

for me

dull magnet
hushed loom
dull magnet
#

there's a good chance you have multiple vesktop processes

#

close every single vesktop instance and make sure there's nothing in tray / task manager

hushed loom
dull magnet
#

skill issue sadly I think

#

you could reset your vesktop data

hushed loom
#

deleting the VencordData entry in idb

dull magnet
#

via tray context menu

hushed loom
#

worked

#

but i still dont know how this happened

inner monolith
#

How do I get the "developer version of vencord"?

#

I am running from source, yet I still don't see devcompanion

#

I know that someone was working on something that made devcompanion obsolete but i'm trying to test my patches in vscode

humble tulip
#

Build with the watch or dev flag

inner monolith
#

where do i set the flag?

#

Ty

#

i think

humble tulip
#

Yeah, sorry, I couldn't remember if it needed - or not lol

#

If not, try without

inner monolith
#

well, what now, i'm not getting much other than

humble tulip
#

Also you don't need watch and dev, watch includes dev but not vice versa

inner monolith
#

how do i test if my patches are applying

humble tulip
#

If you mean in vscode then you need to enable the devcompanion plugin which you should be able to see in the list now and have the companion vs extension installed

#

Then above your patches you should see buttons to test

inner monolith
#

I have the devcompanion extention installed and

#

when i try to install it on vencord it says that

#

let me try to inject it again

#

oh, weird

humble tulip
#

Sweet

#

I think I saw jetbrains made webstorm free for personal use recently so I should really get off my ass and finish/polish the intellij port of devcompanion

inner monolith
#

also, are the vencord docs extremely incomplete?

hushed loom
#

the apis you use are ultimate only

#

(unless they changed that too)

humble tulip
#

Aren't they ultimate only because webstorm was paid?

hushed loom
#

nope

humble tulip
#

Ah, well still I should pick that back up

hushed loom
#

could be wrong there, you should double check

#

this is just what i remember from when i played with it

humble tulip
#

Yeah that's cool. I think the only thing I really need to do from memory is make the reporter results look pretty, which is probably why I haven't got round to it in ages lol

inner monolith
#

I remember there was a command you can put in the discord console to force load the lazyloaded stuff

#

what is that again?

#

loadLazyChunks()

#

nevermind

humble tulip
#

Maybe this?

inner monolith
humble tulip
#

Ah

inner monolith
#

Why does it highlight pink though, that's weird lol

dull magnet
#

cause some discord module does that lmao

#

by loading everything you load that

inner monolith
#

looks cool

#

in some places

cedar olive
#

it's a debug thing lol

inner monolith
inner monolith
#

big fan

inner monolith
humble tulip
#

Force load everything means everything

inner monolith
#

You're technically right

#

😠

#

lol

inner monolith
#

I'm tryinig to fix a plugin I have because an update to discord broke it's finder

#

but i have no clue where the original string could have been

#

is there a way for me to roll back my discord?

#

I'm already on the default branch of discord

cedar olive
#

whats the find

chrome elbow
#

how to make <a href="osu://edit/00:00:000">text</a> works on discord app, it works fine on vesktop but does nothing when clicked on discord app

edit: done with native.ts

shrewd tundraBOT
hushed loom
#

not sure tho

inner monolith
cedar olive
#

change that to "#{intl::ACCOUNT_A11Y_LABEL}"

#

run canonicalizeMatch with that as the argument to see what it's actually being transformed to

cedar olive
#

canonicalizeMatch("#{intl::ACCOUNT_A11Y_LABEL}")

#

in console

inner monolith
#

ah, okay

flint bronze
#

you might need ConsoleShortcuts

inner monolith
#

I have

cedar olive
#

because discord now hashes their message keys

inner monolith
flint bronze
#

also this is a relatively recent change (about a week ago this was implemented)

inner monolith
#

Yeah, the find works now

cedar olive
#

you will find it

flint bronze
#

dont blame Vencord for this blame Discord for implementing their new library

inner monolith
#

few matches

rocky lynx
#

what was the point of discord adding this? i dont really understand what benefits it has

inner monolith
#

interesting

#

they're adding an AI voice assistant?

cedar olive
#

huh

flint bronze
#

no

inner monolith
#

an app icon that speaks to you

humble tulip
#

It's a figure of speech

inner monolith
#

oh

#

😭

humble tulip
#

An icon that suits you

inner monolith
#

I see

flint bronze
#

It means "special app icons are available for nitro subscribers"

inner monolith
#

yeah

#

Thank you for the help!

inner monolith
#

I don't understand why there's just a bunch of variables created to just not be used

#

I'm trying to see how this is set

#

and i only have that one part referencing this function

#

oh wait i'm stupid

#

that's destructuring e

humble tulip
#

Yeah, it's used in 830447 under case"groupend"

inner monolith
#

How did you find that?

humble tulip
#

Which itself is exported as ZA in 788314 and that's used in 830447

inner monolith
humble tulip
#

I copy the module into an actual ide to read it better personally

inner monolith
#

oh wait it is exported again

#

you're right

#

Ayyy

#

Thank you

humble tulip
#

np thumb

lucid girder
#

I cant build vencord it return
You can mark the path "@vencord/patcher" as external to exclude it from the
bundle, which will remove this error.

hushed loom
#

send full code

lucid girder
# hushed loom send full code
import { Plugin } from "vencord";
import { React } from "@vencord/ui";
import { findByProps } from "@vencord/webpack";
import { after } from "@vencord/patcher";

export default new Plugin({
    name: "Button",
    description: "Adds a button next to the microphone",
    version: "1.0.0",
    author: {},
    async start() {
        const ChannelTextAreaButtons = findByProps("ChannelTextAreaButtons");
        const unpatch = after("ChannelTextAreaButtons", ChannelTextAreaButtons, (args, res) => {
            const button = (
                <button
                    className="button"
                    onClick={() => {
                        
                    }}
                    style={{ marginLeft: "8px", padding: "0" }}
                >
                    <img
                        src="/click.png"
                        alt="Click"
                        style={{ width: "24px", height: "24px" }}
                    />
                </button>
            );

            const micButtonIndex = res.findIndex(
                (btn: any) => btn.props.id === "mic-button"
            );
            res.splice(micButtonIndex, 0, button);
        });

        this.unpatch = () => {
            unpatch();
        };
    },
    stop() {
        this.unpatch();
    },
});
lucid girder
#

I found this code

#

I am testing it

flint bronze
hushed loom
#

@lucid girder if you actually want to make a plugin, please look at what other plugins do and copy them

you will not get any help with AI code and will lose access to these channels if you keep asking for help with it

dull magnet
#

(yes you did)

#

that code is just plain wrong, there are no such modules or functions in Vencord

#

there is also no version field

#

there is no way you would come up with this code except AI hallucinations

hoary pilot
steady knot
#

imagine devilbro switching to vencord

hushed loom
#

is there an API for the banner that is here

#

idk what its called

#

not sure if any plugins use it

cedar olive
#

nop

hushed loom
#

src/api/Notices.ts

cedar olive
#

ohh

#

you didnt explain well blobwob

hushed loom
#

😭

raven peak
#

so, the plugin I'm editing has this patch that adds the indicator component to the message.:

patches: [
        {
            find: "#{intl::MESSAGE_EDITED}",
            replacement: {
              match: /let\{className:\i,message:\i[^}]*\}=(\i)/,
              replace: "try {$1 && $self.INV_REGEX.test($1.message.content) ? $1.content.push($self.indicator()) : null } catch {};$&"
        }
    },
],

I also created a flux event to try to activate this patch. I had already predicted that it wouldn’t work since it's a FluxDispatcher, but I tried it anyway:

flux: {
    async MESSAGE_CREATE({guildId, message }) {
      const INV_REGEX = new RegExp(/( \u200c|\u200d |[\u2060-\u2064])[^\u200b]/);
      if (INV_REGEX.test(message.content)) {
        const msg = message;
        const dec = await decrypt(msg.content, 'hardcoded_pass', false);
          
        msg.content = dec;
        FluxDispatcher.dispatch({
          type: "MESSAGE_UPDATE",
          message: msg,
          guildId
        });
      };
   }
},

I want to know how to add the component to the message in the context of the flux event

flint bronze
#

hm

#

maybe that might not work?

#

I need to see the component itself

raven peak
#

flux in my case I think it would be necessary since I need to edit the content of the message and send the dispatch for it to appear edited with the new content for me, unless a patch takes its place, I don't know, I don't know how to work with it yet

reef gate
#

I noticed that one has to code the interfaces themselves! Like this one:

interface ChannelSelectEvent {
    type: "CHANNEL_SELECT";
    channelId: string;
    guildId: string;
}
#

But how do I know which event provides which keys and value types?

vast karma
#

You find how they're used in the code, or intercept them and look at the object

reef gate
vast karma
#

console.log is an excellent way to find how objects look at runtime

#

Or debugger but who has time for that

reef gate
#

The problem is that one has to rebuild and inject after every change! Then the Discord client has to be restarted every time...

vast karma
#

One of three correct

#

And that one only half

reef gate
#

?

vast karma
#

cargo watch rebuilds automatically as soon as you save
You do not need to reinject, it's already injected
You do not need to restart the client, just f5

flint bronze
#

this isnt rust

#

this is typescript

vast karma
#

...Duh

#

pnpm watch

flint bronze
#

you mean pnpm

vast karma
reef gate
vast karma
#

For example

reef gate
#

No reaction

#

Forgot it! Looked in the wrong console (looked in the terminal instead of the console of the Discord client 🤣)

cedar olive
#

you can subscribe to an event using the console too

#

to inspect its data

#

Vencord.Webpack.Common.FluxDispatcher.subscribe("CHANNEL_CREATE", event => console.log(event))

inner monolith
#

that looks similar to a discord bot

vast karma
#

I don't think you're gonna get flux events in a discord bot

inner monolith
vast karma
#

You mean, it looks like an event listener

inner monolith
#

a discord.js event listener to be specific

vast karma
#

Makes sense that an event listener would look like an event listener

inner monolith
#

since CHANNEL_CREATE is snake case for channelCreate

#

i think you need some chill

#

very agressive

flint bronze
keen lynx
#

for a hypothetical adblock plugin e.g. to remove nitro nags, are there any roadblocks to fetching external data (updated blocking rules) at runtime? i was thinking either technical or perhaps vencord policy issues if the plugin were to be an official one.

and what about if the rule updates affect the plugin's settings page... is it ok for that to change without waiting for a full vencord update? i was considering some granular options to let users choose what to block, and new ideas for stuff to block do sometimes happen.

otherwise, users would have to wait for vencord updates to get rule updates, right?

#

if the question seems dumb, it probably is. consider that i have no familiarity yet with vencord's codebase or plugin dev. i just wanted to try to evaluate the plugin's feasibility before i started on it.

flint bronze
#

ughhhhhhhh do i really have to reimplement this myself 575175

keen lynx
flint bronze
keen lynx
#

i wonder what the significance of those numbers is in the await expression

flint bronze
flint bronze
#

that is a request to lazy load something

#

as a plugin developer: i hate lazy loading

keen lynx
#

it is already being done as css, but feature creep is setting in, and we are now potentially interested in going beyond the limits of display: none lol

bronze dove
keen lynx
#

but maybe we should just make a plugin for those specific things instead of shoehorning all of that into an adblock plugin. i.e. just have adblock css and try to live with that and then make a simpler plugin for what really needs to be a plugin

flint bronze
#

i need that for deafen

#

should i just call toggleSelfDeaf directly trolley

keen lynx
flint bronze
#

they just wont publish it

keen lynx
#

is vencord in the chrome web store somehow?

flint bronze
#

yes

keen lynx
#

i had no idea

#

i see. so basically there is just one vencord and not a separate web store version, so such a plugin could never be an official one

#

thanks

flint bronze
#

there is one vencord codebase though

keen lynx
#

would you guess that such a plugin would be officially accepted for vencord desktop (whatever regular vencord is called) and whatever vesktop uses?

#

authoritative answer obviously not needed

#

just wondering

flint bronze
keen lynx
#

where is it? i mean, i'd probably use it

#

don't remember seeing it

flint bronze
#

its on my github if you want to install as userplugin

#

idk how to bomb quests yet though trolley

tropic ice
flint bronze
tropic ice
#

but why do you need to fetch external data

tropic ice
flint bronze
#

you can totally use your own styles

keen lynx
#

mostly, but for example, it would be nice to let users pick which types of stuff they want to block from a settings page with explanations. that gives the user granular control that persists across rule updates without any maintenance burden on his part.

flint bronze
#

its more of a "why isnt this in vencord itself yet"

keen lynx
#

i don't think i articulated that reason yet in here

#

so you're all good

flint bronze
tropic ice
#

cws?

#

css typo?

gloomy terrace
#

Chrome web store

tropic ice
#

oh

gloomy terrace
#

Whenever the extension gets updated and it takes a while to get approved

keen lynx
flint bronze
keen lynx
#

nice

#

thanks

keen lynx
flint bronze
#

to put it simply

#

discord realised the vc funding is drying up so they are now doing interactive advertising

keen lynx
#

it looks like class^=questsIcon_ is already being blocked, but idk if that's enough to explain why i've never seen this crap

flint bronze
#

maybe? maybe not

#

i mean quests are highly effective at selling things to people

#

its usually just stuff like "stream a game to a friend for 15 minutes to earn an avatar decoration for 2 months"

#

this is their latest quest

#

it forces you to watch a video

#

fortunately

#

you can set the playback speed in devtools to 15x

keen lynx
#

what the

#

i have absolutely heckin' not seen anything like that

flint bronze
#

do you have global discovery (looks like this)

#

do you see the quests page?

#

if not, then you must have a decent adblock theme

keen lynx
#

idk how to even get to that discover thing. although i did accidentally navigate to it when i looked at your profile trying to find your github before. you have some dumb quest badge (so much for hating quests......)

#

lol

flint bronze
#

oh

#

does the xcloud fortnite quest count as legit

#

they had a generic "play game for 15 minutes on console" quest at one point

keen lynx
#

yes, i am def adding div[aria-label="Completed a Quest"] to the blocking rules

flint bronze
keen lynx
#

which is your quest badge

#

lol

#

what is the normal way to get to that discover page

flint bronze
#

the button down here

#

if you have the new global discovery it should stay sticky on the screen at all times

#

idk why they did that its stupid

keen lynx
#

oh ok thanks. i never even noticed that button in the lower left. never clicked it once. that's why. i'll def add that to the blocking rules as well.

fwiw, i'm using this thing which is just css. maybe you've seen it https://github.com/CroissantDuNord/discord-adblock

#

ok yeah i see it's supposed to look like a compass. took me 30s of staring at it to understand

#

ew

vast karma
keen lynx
flint bronze
keen lynx
#

it's not my project but sure

flint bronze
#

well you can also discuss that and other themes there

flint bronze
#

?remindme 1h remake these

fathom pivotBOT
#

Alright @flint bronze, in 1 hour: remake these

small lily
#

is there a limit on max number of users muted and blocked?

fathom pivotBOT
#

@flint bronze, <t:1731927712:R>: remake these

fathom pivotBOT
#

@flint bronze, <t:1731931558:R>: remake these

flint bronze
humble tulip
#

remake these

solid onyx
#

Hi

solid onyx
#

?rtfm

fathom pivotBOT
solid onyx
#

LOL it still works

pale heart
#

discord's new obfuscated string keys are persistent across builds, right?

rocky lynx
#

Yes

#

Its a hash

fresh jetty
#

Hello guys, is there something to add timezone for specific user name and display also the timestamp of the current utc when sending a msg ?

humble tulip
fresh jetty
#

any chance to merge it to prod Mpray

humble tulip
#

Doesn't look like there's a PR for it so suffoPeepoShrug you'd have to ask the author to submit it

#

There is a timezone plugin PR'd but it's a different one I haven't tried

amber mantle
#

i think that one is from the beginning of vencord lol

#

someone could probably make a new plugin that wouldn't need a billion changes and be fine

steady knot
#

timedones must live

swift delta
#

Why isn’t it possible to require restart on a plugin that doesnt use patches?

vast karma
#

Isn't it?

#

Thought it was

#

Though there's usually little reason to require restart other than for patches

swift delta
#

but the problem is, it doesn’t actually disable unless you restart

dull magnet
#

why

#

fix ur code

swift delta
#

I DONT WHY ITS DOING THAT THOUGH 😭

vast karma
#

You're passing the same function object, right?

#

Not just an identical one

swift delta
#

Ik, channelId is unused, i have a plan for that

vast karma
#

Yep, that's two different objects

#

Don't do that

swift delta
#

Fuck it is?

#

I didn’t notice

vast karma
#

Pet peeve: remove functions (and any other function) that silently ignore errors

dull magnet
#

you need to pass the same function for remove

#

you're creating a new function

swift delta
dull magnet