#๐Ÿ‘พ-core-development

1 messages ยท Page 292 of 1

charred monolithBOT
twilit vector
#

the app-region thing seems to have extended to even catppuccin themes (which was fine on canary until today)

charred monolithBOT
gritty iris
charred monolithBOT
#

Summary

Adds OnlineThemeInstaller โ€” browse the BetterDiscord theme store and install themes into Vencord's Online Themes with one click. Resolves stylesheet URLs from GitHub source / @import when available.

Test plan

  • [x] Built with pnpm build and injected on Discord Stable
  • [x] Enabled plugin, opened theme browser, installed and removed a theme
  • [x] Verified themes appear under Settings โ†’ Themes โ†’ Online Themes

Here are s...

#

Code Review

This pull request introduces the 'OnlineThemeInstaller' plugin, which allows users to browse and install BetterDiscord themes directly within Vencord. The implementation includes logic for fetching the theme catalog, resolving stylesheet URLs from GitHub, and handling local file operations for themes that cannot be linked directly. I have reviewed the code and provided a suggestion to improve error handling in the file deletion logic to ensure that only 'file not found' errors...

#

medium

The empty catch block will suppress all errors during file deletion, including permission errors, not just the expected "file not found" error. This can hide potential problems and make debugging difficult. It's better to explicitly check for the ENOENT error code and allow other errors to be reported.

await unlink(path).catch(err => { if (err.code !== "ENOENT") throw err; });
gritty iris
#

Ill submit a language modal tho not ai code

chrome coral
#

builds also expire in 90 days so people wont be able to use outdated builds.. which may be good

#

auto updates are still available as well

torpid mason
#

Theres an option to load it from zip or smth right?

chrome coral
#

alright I finished the workflow for uploading to testflight, but I haven't tested (and the workflow makes it kinda annoying its on my fork and not the main repo)

torpid mason
# chrome coral wdym

As in you can turn on developer mode or smth and load it locally, it not being on the AppStore

#

I know chrome allows for smth like this

chrome coral
#

just use the testflight

#

it works fine

#

and yes u can do that too

torpid mason
chrome coral
chrome coral
torpid mason
#

thanks twin :3

#

love

charred monolithBOT
#
[Vendicated/Vencord] New branch created: no-more-aislop-plox
torpid mason
#

no way

#

vee

#

you will be vibe coding degen now

twilit vector
charred monolithBOT
prime dew
austere talon
#

I stole it from equicord

twilit vector
#

of course you did

austere talon
#

Also I think that style guide was partially ai generated

chilly gyro
charred monolithBOT
charred monolithBOT
charred monolithBOT
elder plinth
austere talon
#

is greptile better

twilit vector
elder plinth
#

according to prism and thor just listens to prism so possibly

charred monolithBOT
#

Code Review

This pull request refactors the project's issue and contribution workflows by removing the blank issue template, updating the bug report template, and introducing a new feature request template. It also establishes a pull request template and updates CONTRIBUTING.md with a strict policy against AI-generated contributions and revised guidelines for major changes. Feedback from the reviewer focused on ensuring that all agreement checkboxes in the bug report and feature request t...

#

medium

These checkboxes should be marked as required: true to ensure users acknowledge these conditions before submitting. Note that the checkbox on line 68 is also missing this property and should be updated to maintain consistency with the previous version of the template.

              - label: I installed Vencord via an official method (download from vencord.dev or from source), not via something like AUR or Nix p...
#

medium

These checkboxes should be mandatory (required: true) to ensure the requester confirms they have followed the guidelines and are willing to contribute, as mentioned in the updated CONTRIBUTING.md (line 22).

            - label: I've searched existing issues and this hasn't been suggested before
              required: true
            - label: This is a **core modification feature**, not a plugin request (tho...
elder plinth
#

greptile edits the original pr message with reviews though which is ass and @gritty iris refuses to turn it off

twilit vector
elder plinth
#

you can be 5 stages deep in a review and it'll edit the pr message rather than leave a new comment at the bottom

#

actual buns

austere talon
#

but my ass will not look at that shit

gritty iris
elder plinth
#

let it ignore them all. this 1 is not worth compromising

twilit vector
gritty iris
#

ima prob just remove greptile eventually

#

idk if I like it

elder plinth
#

back to gemini hooray

gritty iris
#

gemini is peak

austere talon
#

i hate that this doesnt do suggestions

elder plinth
#

gemini does have like a 30-40 pr limit daily I think

#

could tell it to in the style guide no?

#

arent suggestions just a formatting thing on the code block

austere talon
# charred monolith

I deliberately made them not required so we can immediately see if someone is stupid

#

based gemini

#

forcing feature request openers to work on their suggestion themselves

#

based ngl

charred monolithBOT
torpid mason
#

false, pledging to fix stuff and taking the workload of from you is very bad

charred monolithBOT
twilit vector
#

Some plugins may sometimes break, but we have automatic tracking for that

#

ehhhhhhhhhh

#

what about the 6 or so half-broken-half-unbroken plugins currently

gritty iris
gritty iris
#

๐Ÿ”ฅ

austere talon
#

but the ai can tell people off for you

gritty iris
#

"this is most likely ai" - gemini

austere talon
#

name something more aura than gemini telling you your pr is aislop

gritty iris
#

I know right ๐Ÿ˜ญ

austere talon
gritty iris
#

I was laughing so hard when I saw it comment that

jagged cloak
#

its certainly funnier than ai trying to detecting other ai's writing (turnitin etc)

#

mfw fully human written paper is 10% plausible but the teachers dont know how to interpret that

chrome coral
#

@austere talon btw what r we gonna do with credentials do would I need to just give them to u to add HuTaoNervous2

austere talon
#

i mean yeah xD

#

have u even managed to publish it to safari store yet

chrome coral
#

the appstore reviewer needs to login to discord for every submission, and it changes reviewer every time

#

I cant approve login requests every time, so i opted to publish on testflight since theyre super lenient

austere talon
#

isnt that size limited etc

chrome coral
#

auto updates are still available and such, and with how often vencord updates I dont think the expiry issue will be a problem

#

much lower than I thought, but honestly I dont know if I want to suffer trying to get the reviewers to login to an account just to test each update

#

I'll try once again to get them logged in but its so annoying

austere talon
#

how many people would even be able to install from testflight

#

isnt that an alpha thing dont u have to opt into smth for that

austere talon
#

if safari ext is going to be pain then i dont really want it tbh nyanehehe

#

i have ptsd from mozilla maintainers ๐Ÿ˜ญ

chrome coral
austere talon
#

isnt that use case against testflight rules though

#

I'm sure they didn't mean it to be used as standard distribution channel

#

they might ban no?

chrome coral
#

idk if it really matters tbh

#

I was thinking if theyre able to login the first time and they approve it'll be fine afterwards because there are discord clients on the appstore

#

we can wait a few days and see what happens

austere talon
# charred monolith

I prefer minimising third party dependencies

lowkey just fee the action's code into claude + your input variables and tell it to give you bash script that does the same

#
# Setup Certificates
KEYCHAIN_NAME="build.keychain"
KEYCHAIN_PASSWORD=$(openssl rand -base64 32)
P12_FILE=$(mktemp)

# Decode base64 p12 certificate and save to temp file
echo "${{ secrets.APP_STORE_CONNECT_P12 }}" | base64 --decode > "$P12_FILE"

# Create temporary keychain
security create-keychain -p "$KEYCHAIN_PASSWORD" "$KEYCHAIN_NAME"

# Set keychain timeout to 6 hours
security set-keychain-settings -lut 21600 "$KEYCHAIN_NAME"

# Unlock the keychain
security unlock-keychain -p "$KEYCHAIN_PASSWORD" "$KEYCHAIN_NAME"

# Import certificate into keychain
security import "$P12_FILE" \
  -k "$KEYCHAIN_NAME" \
  -f pkcs12 \
  -T /usr/bin/codesign \
  -T /usr/bin/security \
  -T /usr/bin/pkgbuild \
  -T /usr/bin/productbuild \
  -T /usr/bin/productsign \
  -P "${{ secrets.APP_STORE_CONNECT_P12_PASS }}"

# Set partition list
security set-key-partition-list \
  -S apple-tool:,apple: \
  -k "$KEYCHAIN_PASSWORD" \
  "$KEYCHAIN_NAME"

# Update keychain search list
security list-keychains -d user -s "$KEYCHAIN_NAME" login.keychain

# Clean up temp p12 file
rm -f "$P12_FILE"

# Optional: At the end of your workflow, delete the temporary keychain
# security delete-keychain "$KEYCHAIN_NAME"
jagged cloak
#

how many mac vesktop users do u think even exist

#

i doubt its over 10k

chrome coral
#

vencord safari*

jagged cloak
#

ah extension too?

#

then thats more than i thought stare

chrome coral
#

we're only talking about vencord for safari in this convo

jagged cloak
#

icic

chrome coral
#

but its at least 3

charred monolithBOT
chilly gyro
twilit vector
chrome coral
#

go look at that

#

unsurprisingly mac is the least

fossil inlet
chrome coral
#

something electron builder generates idk

signal sundial
nimble pendantBOT
# signal sundial vai

An exe blockmap is a metadata file, usually in XML format, that describes the blocks of data within an executable or application package. It contains cryptographic hashes for each data block and file locations. Its main purposes are to enable efficient differential updates, allowing only changed parts of a file to be downloaded, and to verify file integrity.

-# Response generated by gemini-2.5-flash. AI may be incorrect or misleading.

twilit vector
#

@signal sundial

#

fix shc lock

charred monolithBOT
limber skiff
#

how does one fix the drag issue

twilit vector
#

la css

#

or is that a genuine question cus then it's just body {app-region: no-drag;}

limber skiff
#

ya I got it

austere talon
#

bookies caught not updating..

fossil inlet
#

bookies

limber skiff
#

havent pulled in 2 days ๐Ÿ˜ญ

charred monolithBOT
#

Code Review

This pull request introduces the ModularCollapse plugin, which provides a modular UI for Discord by allowing users to collapse, resize, and float various interface panels. The implementation includes dynamic CSS management, lazy-loaded module selectors, and a customizable settings system. Feedback focuses on a critical security vulnerability involving the use of eval() for conditional logic, performance optimizations for mouse and keyboard event listeners to prevent layout thr...

twilit vector
#

mate please it's ai slop

elder plinth
#

me when I review a comment: why am I a reviewer

torpid mason
#

what even is that pr bro

torpid mason
twilit vector
#

thorogoat

gritty iris
#

lowkey forgot it was from friendssince tho

#

half of that pr is useless to vencord but its whatever Joe_Shrug

charred monolithBOT
#

Code Review

This pull request updates the patch anchors in the fakeProfileThemes and friendsSince plugins to refine how code is matched. In fakeProfileThemes, the find string was extended to include an onClick handler. In friendsSince, the anchor was changed from an internationalization key to a hardcoded string. Feedback suggests that using a hardcoded string for the anchor is less robust and recommends using an internationalization key instead to ensure better maintainability.

#

medium

Using a hardcoded string like "UserProfileSidebar" as a find anchor is less robust than using an internationalization key, as it's more likely to appear in multiple modules or be changed/removed by Discord. Since the match regex already depends on #{intl::USER_PROFILE_MEMBER_SINCE}, using that as the find string would be more specific and maintainable.

            find: "#{intl::USER_PROFILE_MEMBE...
gritty iris
#

do we have a vencord icon svg prayingcar

twilit vector
#

well lmao

charred monolithBOT
#

Code Review

This pull request introduces several new SVG icons and integrates them into the betterSettings plugin to provide visual indicators for different settings sections. The review feedback points out that the Menu.MenuItem component should use the icon prop instead of iconLeft to ensure icons are rendered correctly. Furthermore, it is recommended to use a group element with the evenodd fill rule in the VencordIcon component to correct rendering artifacts and simplify the code.

#

medium

To address the rendering issues mentioned (weird holes) and improve code maintainability, you should wrap the paths in a <g> element with fillRule="evenodd". Design tools often require the evenodd fill rule to correctly render subtracted shapes (holes). This also allows you to define the fill prop once for the entire group.

export function VencordIcon(props: IconProps) {
    return (
        <Icon
           ...
gritty iris
#

you sure lmfao

austere talon
gritty iris
#

its what I threw at adobe

#

thats what adobes thing did

charred monolithBOT
charred monolithBOT
austere talon
#

@gritty iris if u feel like fixing more

FullSearchContext doesnt work, CallTimer doesnt work sometimes due to some voice panel experiment

austere talon
gritty iris
#

that stuff just isnt in a category

#

do you want me to add it too one?

austere talon
#

it should be

gritty iris
#

also what experiment

austere talon
#

its just a bug

austere talon
gritty iris
#

I was checking for them when I was logging item they werent there

#

what should I name the section?

austere talon
#

but still it should be in category lol

gritty iris
#

name of it??

#

just Account?

austere talon
#

probably

gritty iris
#

ill do account settings

#

wait it does have one

#

its just getting ignored ๐Ÿ˜ญ

#

why did it log until I logged list wtf

#

oh label is undefined

gritty iris
#

do you want me to leave as is?

#

idk how to get rid of the bar but if I map both profiles will do it Edit Profiles and the 2 bottom settings into Misc...

#

idk how to spell misc fully

#

im thinking leaving profiles out is fine

#

just ignore the equicord settings

#

used intl keys

#

fullsearchcontext seems fine?

#

oh wait

#

I read the wrong line

twilit vector
gritty iris
gritty iris
#

dev://experiment/2026-05-rtc-connection-functional

#

that breaks call timer

charred monolithBOT
#

medium

The find string includes a leading backtick (`). This makes the patch brittle because minifiers may convert template literals into regular strings (using " or ') depending on the build configuration and whether the string contains interpolations. Removing the backtick and searching for the string content directly is more robust as it will match both template literals and regular strings.

       ...
gritty iris
#

@austere talon above has calltimer and fullsearchcontext

twilit vector
#

vee's gaming xdd

gritty iris
#

๐Ÿ”ฅ

austere talon
gritty iris
#

anymore bugs??

#

:)

#

I dont want to fix our betterfolders stuff so I will do literally anything else nvm all of our bugs were fixed

hybrid blaze
#

stop the cap

austere talon
#

I'll play some more later

#

either trapper or pig

twilit vector
#

i've been a menace with ghoul

#

thank god they just refuse to nerf him

austere talon
#

he doesn't need nerfs tbh

#

he's fine

twilit vector
#

spoken like a true killer main

austere talon
#

why would he need nerfs ๐Ÿ˜ญ

#

ultimately he still needs to m1 chase to down you

#

he's only oppressive if the player is crazy and gets insane bodyblocks

twilit vector
#

he's able to ignore dead hard (especially if ur healthy), and can deep wound you from like the opposite side of a rock

#

well ngl i'm larping as a surv main cus i LOVE doing that

austere talon
#

legion also does that and he still sucks balls

twilit vector
#

legion got no mobility ๐Ÿ’”

austere talon
#

legion has mobility bro

#

he can just run across the map

gritty iris
#

so this is funny

#

r is playground and r is overrides and whatever else

austere talon
#

the only reason ghoul is "broken" is because the average survivor is terrible at the game so you can follow up the free injury in like 15 seconds and because he can do this while having good map control

twilit vector
#

i guess bro but being able to launch yourself across the map (especially if you have 3 charges/you're doing a flinging trick off a rock ledge or sth) is way crazier than Murderous Teen Go Stab

austere talon
#

play ghoul against actually good players and it won't be as easy blobcatcozy

twilit vector
#

that one trickster vaultblock perk has been doing wonders xdd

gritty iris
#

ghoul is good on some maps and walled maps hes bad imo

austere talon
#

crowd control

twilit vector
austere talon
#

oh yeah that too lmao

#

have fun with ghoul on something like lerys

gritty iris
#

v any idea whats adding the line?

austere talon
#

is it a separator or a group

gritty iris
#

removed map for util section

#

so just push

#

should I move them to actual menu items?

austere talon
#

ghoul definitely strong but not broken

gritty iris
#

I got him because of tokyo ghoul I dont play him tho

twilit vector
#

i got him because of the ridiculous hits during reveal ptb & awesome feedback from perfect timing on m2 hits

austere talon
#

I don't like ghoul because he's so fucking corny ๐Ÿ˜ญ

#

he makes me cringe so hard

gritty iris
#

im so sorry vee this looks like ass

austere talon
#

oh

twilit vector
#

*cracks finger for some reason*
-# i might be making every tg fan frown oops

gritty iris
#

does this even work ๐Ÿ˜ญ

#

fixed it

austere talon
gritty iris
#

should i ...c tho

#

answer is yes

austere talon
#

dont spread inside patch

#

pass to your function raw

gritty iris
#

alr

gritty iris
gritty iris
#

but it works

twilit vector
#

mountain icon is cute

gritty iris
#

I needed to patch section onto it for that

#

and had to add a key to build overrides

twilit vector
#

yeah this would be a good merge

somber ginkgo
austere talon
#

who tf deving web

somber ginkgo
#

was just an inconsistency i noticed

charred monolithBOT
#

medium

By unhardcoding IS_STANDALONE in commonOptions, this value is now inherited by all build targets in this file, including the extension and userscript. Since these targets are not 'standalone' environments (they are injected into Discord), they should ideally have IS_STANDALONE set to false.

You should consider explicitly overriding IS_STANDALONE: "false" in the define blocks for the extension (lines 92-95) and userscrip...

signal sundial
somber ginkgo
austere talon
somber ginkgo
#

already did xdd

austere talon
somber ginkgo
#

yeah i noticed in the blame

#

still though

#

blame tom nook

charred monolithBOT
charred monolithBOT
#

When I have the FakeNitro plugin enabled (enabled it before I got a Nitro subscription) while my Nitro is activated, and I use for example - an external sticker from another server, FakeNitro gets prioritized over the real Nitro, and it will send a FakeNitro hyperlink instead of a regular sticker. This becomes annoying for some users at some point, and will eventually lead them to disable the extension altogether. To combat this, I've:

  • Disabled FakeNitro when the current user already has a...
#

Code Review

This pull request introduces a hasNitroSubscription helper and an isActive method to ensure that fake Nitro features are only enabled for users without an active subscription. The implementation involves adding predicates to various patches and early returns in several utility methods. The review feedback points out multiple instances of redundant !hasNitroSubscription() checks in nested replacement objects where the parent patch already handles the condition. Additional...

fossil inlet
jagged cloak
#

who are you that video is muted

charred monolithBOT
charred monolithBOT
#

added a plugin that appends a ping counter to the title of the window
it replicates the functionality of the default website and vesktop

this is useful for small taskbar + visible labels setup on windows 10 (and windows 11 26h2 once its released) where the badge is invisible, maybe also some linux setups
hidden on non-desktop clients since its already visible

one difference with my implementation of this from the default discord one is that it only counts pings, not friend requests to...

#

Code Review

This pull request introduces the TaskbarPingCounter plugin, which prepends the unread mention count to the window title for Discord desktop clients. Feedback includes correcting a version typo in the documentation, expanding the Flux event subscriptions to ensure the counter remains synchronized during message deletions or bulk acknowledgments, and a suggestion to include pending friend requests for consistency with native Discord behavior.

#

medium

The current list of events is missing several cases where the mention count might change. Consider adding MESSAGE_DELETE, MESSAGE_DELETE_BULK, MESSAGE_UPDATE, and BULK_ACK (for 'Mark as Read' on folders/guilds) to ensure the counter stays in sync with the actual state.

const EVENTS = ["MESSAGE_CREATE", "MESSAGE_ACK", "MESSAGE_DELETE", "MESSAGE_DELETE_BULK", "MESSAGE_UPDATE", "BULK_ACK", "CHANNEL_SEL...
charred monolithBOT
jagged cloak
charred monolithBOT
charred monolithBOT
charred monolithBOT
#

Code Review

This pull request refactors the HiddenChannelLockScreen component to use BaseText, improves accessibility with image alt text, and updates plugin settings for better clarity. It also introduces a fallback lock icon and fixes SVG attribute casing. Feedback highlights critical issues regarding the execution of React components as functions within patches, which could cause runtime crashes, and a dangerous comma operator in a replacement string that might hide icons for non-hidde...

#

high

Calling a React component as a function (e.g., $self.LockIcon()) is an anti-pattern that bypasses React's reconciliation and lifecycle management. Additionally, the previous version returned the component reference ($self.LockIcon). If the patched code expects a component to be rendered later (e.g., <Icon />), returning an element here will cause a runtime crash. If an element is truly required, use `React.createElement...

#

medium

Including permissionOverwrites (an object) in the useEffect dependency array can lead to unnecessary re-executions of the effect. In Discord, channel objects are frequently recreated, meaning permissionOverwrites might have a new reference even if its content hasn't changed. Since this effect dispatches a Flux action and updates state, this could impact performance. Consider using a more stable dependency or a deep ...

#

high

The use of the comma operator here (${m},$self.isHiddenChannel...) is potentially dangerous. If this patch targets a property value (e.g., icon: originalValue), the expression will evaluate to the last part. This means for non-hidden channels, the expression evaluates to null, which would hide the icon for all normal channels. If the goal is to replace the icon when hidden, a ternary is safer: `$self.isHiddenChannel(${c...

charred monolithBOT
#
  • Replaced Forms components with new BaseText, Heading, and Paragraph components for consistency in styling.
  • Updated Button imports to use the new Button component from @components/Button.
  • Adjusted various sections in plugins such as ignoreActivities, imageZoom, messageLinkEmbeds, and others to improve readability and maintainability.
  • Fixed type definitions in imageZoom plugin for currentMagnifierElement.

this took me ages... 4 hours to be exact
there shouldnt be any plugin relat...

twilit vector
#

vee would just ctrl + h

charred monolithBOT
#

Code Review

This pull request performs a large-scale refactoring of UI components across numerous plugins, replacing legacy Discord form and text components with standardized Heading, Paragraph, BaseText, and Button components. It also removes deprecated settings sections and updates various event handlers for better consistency. The review feedback identifies inconsistencies in import styling and component usage, as well as a potential visual regression caused by an incorrect button vari...

hollow musk
#

so like are we gonna address the gemini in the room

charred monolithBOT
#

This pull request introduces a new "AntiBadWords" plugin for Discord, which filters inappropriate words in messages using a system inspired by the Roblox chat filter. It also adds a new developer entry to the constants file. The main focus is on providing two filtering modes and integrating the plugin with Discord's message event system.

AntiBadWords Plugin Implementation:

  • Added a new AntiBadWords plugin (src/plugins/antiBadWords/index.tsx) that filters banned words from messa...
#

Code Review

This pull request introduces the 'AntiBadWords' plugin, which provides message filtering through a comprehensive banlist and two distinct redaction modes. Several critical issues were identified, including a configuration error where both filtering modes shared the same setting value, and significant performance bottlenecks caused by re-compiling regex patterns for every message. Feedback also highlighted logic flaws in how messages are splitโ€”potentially bypassing multi-word f...

#

medium

The Flux interceptor runs for every single action dispatched in the client. To minimize performance impact, you should check the event type and settings at the very beginning of the callback to avoid unnecessary overhead for unrelated events.

        findByProps("_dispatch").addInterceptor(e => {
            if (e.type !== "MESSAGE_CREATE" && e.type !== "MESSAGE_UPDATE") return;
            switch (settings.store.ver...
#

high

The banlist processing, sorting, and regex compilation are currently performed inside the message handlers, meaning they run every time a message is created or updated. This is a significant performance bottleneck. Additionally, the setup logic is duplicated between robloxVersion and hardVersion.

Refactor the code to pre-compile the patterns at the top level of the file. Important: Remove the g (global) flag from t...

prime dew
torpid mason
#

holy

#

bro hard coded them all......

brazen bone
#

Love when prs explicitly list "It also adds a new developer entry to the constants file." as if anyone gives a shit

austere talon
#

that's their claude output

#

they just copy pasted or maybe even made Claude create the pr

brazen bone
#

I know

#

It's just funny

austere talon
#

they also often include a "test plan" which basically is just ai telling a human how to test it

charred monolithBOT
chilly gyro
torpid mason
#

๐Ÿ˜ญ

charred monolithBOT
bright island
twilit vector
#

oh wow

jagged cloak
#

nuke

#

specifically gemini and copilot

#

claude costs too much for dumb people to use nowadays

jagged cloak
#

nop

#

i will keep hating on gemini because i dont like google

#

xd

#

does ur gemini do this i didnt think so

twilit vector
#

nyako on a roll

charred monolithBOT
#

Pull request overview

[!NOTE]
Copilot was unable to run its full agentic suite in this review.

This PR updates the permissions viewer modal so the inner โ€œselected itemโ€ container stays height-synced with the modalโ€™s scroller, improving layout/scroll behavior.

Changes:

  • Add refs for the modal scroller and the selected-item container.
  • Add a ResizeObserver effect to sync the container height to the scroller height.
  • Pass scrollerRef into the modal to access the scroller DOM...
#

This effect only runs once ([] deps) but containerRef.current is null on any render where the selected-item container isnโ€™t mounted yet (itโ€™s conditionally rendered). If the user selects an item after the first render, the effect will early-return and never re-run, so the height will never sync. Fix by re-running the effect when the selected-item view mounts (e.g., include the selected-item state in dependencies), or switch to a callback-ref/state approach so the effect runs when `contain...

#

The inline cast to an augmented HTMLDivElement with an optional getScrollerNode makes the ref contract unclear and hard to maintain. Consider introducing a named type for the scroller-ref target (e.g., a union of HTMLDivElement and a scroller instance interface exposing getScrollerNode()), or isolate this into a small helper function so the component logic isnโ€™t dominated by type coercion.

#

Updating container.style.height unconditionally inside a ResizeObserver callback can cause resize feedback loops (and โ€˜ResizeObserver loop limit exceededโ€™) if changing the container height affects the scrollerโ€™s layout. Consider guarding the write (only set when the computed height differs from the current height), and/or schedule the write with requestAnimationFrame to avoid synchronous resize-observer feedback.

#

Code Review

This pull request introduces a mechanism to synchronize the height of the modal container with the modal's scroller node using a ResizeObserver. The review feedback correctly points out a potential runtime TypeError if modalScroller does not resolve to a valid DOM Element before being passed to ResizeObserver.observe(). A code suggestion was provided to defensively check that modalScroller is an instance of Element.

#

high

If modalScrollerRef.current is a React component instance rather than a DOM element (and does not implement getScrollerNode), modalScroller will resolve to that component instance. Passing a non-Element to ResizeObserver.observe() will throw a runtime TypeError.

To prevent potential runtime crashes and ensure defensive programming, we should verify that modalScroller is an instance of Element before observing...

fossil inlet
#

holy slop

austere talon
#

aiception

charred monolithBOT
charred monolithBOT
charred monolithBOT
astral bone
#

โญ

charred monolithBOT
charred monolithBOT
twilit vector
#

"v2" we are witnessing a new era ๐Ÿ‘€

spice python
#

vendroidenhanced competition

charred monolithBOT
#

Discord writes shortcuts as keyboard keys one after another, like "CTRL K" with its own styling. The plugin already uses this styling but it combines it with the plus symbol, like you do in text, e.g. CTRL+K.

However, Discord doesn't use the plus sign when displaying keybinds, as the custom display buttons make this intuitively unnecessary, so this change just standardizes that display to be more in line with other Discord menus. See imgur link below for comparison.

https://imgur.com/a...

errant nacelle
chilly gyro
charred monolithBOT
charred monolithBOT
#

What?

Adds a ClearRecentMentions plugin with a Clear Recent Mentions action in the Inbox > Mentions filter dropdown. The plugin fetches recent mentions, optionally marks the fetched channels as read, then dismisses the fetched mentions.

Why?

Discord can leave stale entries in Inbox > Mentions, and clearing them one-by-one is tedious. This adds a single manual action in the menu where users already manage Mentions filters.

How?

Patches the Mentions filter menu (`navId:"mentions-fi...

#

Code Review

This pull request introduces a new plugin, ClearRecentMentions, which allows users to mark recent mentions as read and dismiss them from the Inbox Mentions tab. It also registers a new developer, TheLonelyDevil, in the constants file. The code review feedback suggests several key improvements: using Vencord's built-in contextMenus API instead of raw string patches to avoid fragile patching and React lifecycle issues, deduplicating channels by channelId before dispatchi...

#

high

Use Vencord's built-in contextMenus API instead of raw string patches.

Raw string patches on menus are fragile and prone to breaking when Discord updates. Additionally, calling the React component renderClearMentionsMenuItem() as a function inside the patch is a React anti-pattern that breaks the React lifecycle and prevents the ErrorBoundary from catching errors.

Using the contextMenus API is much cleaner, more rob...

#

medium

Deduplicate the channels by channelId before dispatching BULK_ACK.

Currently, if there are multiple mentions in the same channel, this sends redundant ack requests for the same channel. Since the API returns mentions in reverse chronological order (newest first), we can keep only the first occurrence of each channelId to ack the latest message and mark the channel as read. This reduces the payload size and avoids r...

#

medium

Add a guard to check if RecentMentionUtils.deleteRecentMention is a function before calling it.

Since RecentMentionUtils is loaded lazily via findByPropsLazy, it might be undefined or missing the method if Discord updates its internal modules. Adding a check prevents a generic TypeError and allows throwing a descriptive error.

async function dismissMention(messageId: string) {
    try {
        await RestAPI...
#

Code Review

This pull request introduces a new plugin, ClearRecentMentions, which allows users to bulk-dismiss and mark recent mentions as read from the Inbox Mentions tab. It also registers a new developer in the constants file. The review feedback suggests an optimization in the ackMentions function to deduplicate channel IDs before dispatching the BULK_ACK action, which avoids redundant processing when multiple mentions occur in the same channel.

#

medium

If a user has multiple recent mentions within the same channel, mapping all of them directly will result in duplicate channel entries being dispatched in BULK_ACK. Since acking a newer message automatically marks all older messages in that channel as read, we can optimize this by deduplicating the channels and only keeping the latest mention per channel. This reduces redundant dispatches and unnecessary processing overh...

twilit vector
#

hi lyssa??

#

lurker of the year wow

charred monolithBOT
jagged cloak
twilit vector
#

truthnuke

#

well

jagged cloak
#

where merg

twilit vector
#

just search no-more-aislop-plox in here tbh

kindred tree
#

probably that's why

charred monolithBOT
gritty iris
#

so im gonna have to anchor them

charred monolithBOT
#

Code Review

This pull request refactors the betterSessions plugin by introducing a class name utility (cl) to replace hardcoded class names and moving inline styles to styles.css. It also updates the webpack patches to target AUTH_SESSIONS_OS_UNKNOWN and replaces renderTimestamp with renderDescription to handle both labels and timestamps. The review feedback highlights a critical issue in the webpack patch where the description variable is not captured, which will lead to a ru...

#

critical

The patch does not capture the local variable representing the description text (matched by \i), which means description is not passed to renderDescription and will be undefined. This will cause a runtime TypeError when calling description.split(...) inside renderDescription.

We should capture the variable name using a capture group (\i) and pass it as description:$2 in the replacement.

                ...
gritty iris
#

I dont think it can actually be null

#

I just forgot to remove it

twilit vector
#

beat these people with heavy hammers

charred monolithBOT
charred monolithBOT
gritty iris
#

the deletion is intended

#

ill ss the module rq

#

it needs to replace from i the n

#

both are labels

#

i is label n is sublabel

#

ill cap it rq

#

alright just fixed it

charred monolithBOT
charred monolithBOT
gritty iris
#

themeattributes ๐Ÿฅ€

#

all of them are in that pr

#

also I dont think bettersessions was on main yet ๐Ÿ˜ญ

charred monolithBOT
#

Small edge case I noticed while reading through this: if the permissions array changes after a user has selected an item near the end, selectedItemIndex can point past the new array length. That would make selectedItem undefined even when permissions still has entries, so the modal could briefly render the empty state instead of clamping back to an available row. Might be worth resetting or clamping selectedItemIndex when permissions.length changes, especially now that the scroller height syn...

jagged cloak
#

who is that

charred monolithBOT
#

A clear and concise description of the feature you'd like to see

Enabled plugins should show up at the top in alphabetical order before the rest of the plugins.

This makes turning plugins off / getting plugin info / changing plugin settings more streamlined.

Implementation Notes

No response

Additional context

No response

Request Agreement

  • [ ] I've searched existing issues and this hasn't been suggested before
  • [ ] This is a core modification feature, not a p...
twilit vector
#

vencloud seems to be exploding

gritty iris
#

failed ssl

twilit vector
#

vencloud has exploded*

gritty iris
#

I dont think anything is actually wrong just funny

#

ye same 525

rotund canopy
twilit vector
#

in due time

rotund canopy
#

technically

charred monolithBOT
charred monolithBOT
#

Describe your Changes

Bump GitHub actions
Bump Node to latest LTS (24) in actions

Fixes warnings on action runs

ref https://github.com/Legcord/Legcord/commit/fbc9d723920eed86303f046f964625725154f9e3
(MacOS and cache saves fail for unrelated reasons)

Checklist before submitting

  • [x] I have read the CONTRIBUTING.md file and made sure this pull request complies with it
  • [x] This pull request was written by me, and not an AI agent
chrome coral
#

To me action/dep bumps just seem lile contribution farming claude if the actions work they work

fossil inlet
chrome coral
#

I dont doubt

twilit vector
#

oh it's aspy
yeah doubt it was farming

twilit vector
#

unable to click out of server owner popup in serverinfo, tapping esc fixes

#

even if clicking outside the modal

gritty iris
#

it just seems to keep calling on click

#

every click it will log again

twilit vector
#

fun

gritty iris
charred monolithBOT
chrome coral
#

good question

#

what would there be to add

charred monolithBOT
twilit vector
#

Heh.

rotund canopy
twilit vector
#

to vencloud (look at the repo the issue is in)

rotund canopy
twilit vector
#

known bugs so far

  • TypingTweaks (everyone, stable)
  • AccountPanelServerProfile (occasionally)
  • BetterSettings (some plugins missing from context menu -> plugins)
hybrid blaze
#

2.5k

fossil inlet
#

guhhhhh

twilit vector
#

client update yop like 2hrs ago

grave mangoBOT
twilit vector
#

oh lewi you're adorable

jagged cloak
#

hi youve just paused the client

hybrid blaze
#

how dare you

gritty iris
#

call timer and fullsearchcontext are both pred already

twilit vector
gritty iris
#

experiment I wonder

gritty iris
#

or all?

#

dm sidebar was edited last week by me

#

idk if my pr fixes bettersettings

twilit vector
#

oh wait shit i never updated

#

LOL

gritty iris
#

?

twilit vector
gritty iris
#

so whats actually broken?

gritty iris
twilit vector
#

customrpc

gritty iris
#

A

twilit vector
#

A

#

not even in search

gritty iris
austere talon
#

deliberately filtered out

twilit vector
#

oh

austere talon
#

the menu only includes plugins with settings because otherwise it'd be too long

twilit vector
#

why not make it show, but clicking opens its full settings?

#

i find that easier than having to click & scroll a bunch for the same goal

#

thoro typing out entire rewrite of vencod

gritty iris
twilit vector
#

i knew it ๐Ÿ˜ญ

gritty iris
#

keeping it going so I can test typing tweaks gulp

#

I got the rewrite dw

#

its uh

#

when discord opens it install teamspeak 6

#

well I meant I got it to align this time

#

I have no idea what its doing but I mean hey

gritty iris
#

those dots dont seem right

twilit vector
#

they seem ight as rain to me

gritty iris
#

alr

twilit vector
#

pic is on the other side of the planet but otherwise looks good to me

gritty iris
#

I dont have the caffeine for that

#

oh the gap?

twilit vector
#

idk the right word for it but it's just floating

#

misaligned

gritty iris
#

not the gap?

#

aw

#

๐Ÿ˜”

twilit vector
#

nah gap is normal i think

gritty iris
#

its ugly tho

gritty iris
twilit vector
#

oh now it looks good

gritty iris
#

can I remove that gap

twilit vector
#

i'd say no because it would just look ugly

gritty iris
#

alr

#

ill throw this in the pr

twilit vector
#

everything's perfectly aligned as is so yknow

twilit vector
gritty iris
#

or smth flex

#

ill look

twilit vector
#

i think it'd be nice to put friendsince right beside their registration date

#

^ side profile in dm

gritty iris
#

am I touching better settings or no?

twilit vector
#

guess not

#

functions As Vee Intended ig

gritty iris
#

whats wrong with AccountPanelServerProfile

twilit vector
#

just explodes sometimes

gritty iris
#

wtf

#

oh wait

#

I remember that

twilit vector
#

i sent that when i was outdated tho but i'll try something

#

yep still happening

gritty iris
#

I mentioned it awhile ago

#

you have to open a profile for it lol

#

idk why I never looked lol

charred monolithBOT
twilit vector
#

why is ReactErrorDecoder not even a core plug

#

or do we love react

austere talon
#

because its useless

gritty iris
#

^

twilit vector
#

incredible

gritty iris
#

it only decodes like 5 of the errors I get

#

in the past month ive been able to find the file 5 times

#

its like githubs status page

gritty iris
#

I'm looking at account server something something rn btw

austere talon
#

it just needs to load lazy module probably

#

these issues are hard to find if you use BetterSettings because it preloads a lot of modules

gritty iris
#

Also it happens with better settings

gritty iris
#

what the fuck did I do ๐Ÿ˜ญ

austere talon
gritty iris
#

aw I cant extract lazy?

grave mangoBOT
# austere talon do like this https://github.com/Vendicated/Vencord/blob/main/src/plugins/shikiCo...

Highlighter.tsx: Lines 46-63

let didLoadHljs = false;
export const HighlighterContainer = (props: HighlighterProps) => {
    const [_, _err, isPending] = useAwaiter(requireHljs);

    useEffect(() => {
        if (!isPending) didLoadHljs = true;
    }, [isPending]);

    if (!didLoadHljs && isPending) return null;

    return (
        <pre className={cl("container")}>
            <ErrorBoundary>
                <Highlighter {...props} />
            </ErrorBoundary>
        </pre>
    );
};
gritty iris
#

I think I got it it decided to error after reloading

#

@dense frigate

gritty iris
#

I realized I didnt need to load it

#

I dont want to talk about it

austere talon
#

tf

#

just bad find?

gritty iris
#

we were finding solely user profule

#

one 1s canary is lagging its heart out

#

I just made it go for this

#

589022

#

ill check if its fine without bettersettings

#

ye its good without it

#

this module uses 4 different profiles

#

insane amount but anyways

#

d is userprofile

austere talon
#

so u have to load it yeah

#

or have the wrapper load it for u

gritty iris
#

I mean atleast it doesnt need extract chunks

gritty iris
#

๐Ÿ˜ญ

charred monolithBOT
austere talon
#

iull push this for now

gritty iris
#

there was no promise in the profile so it was annoying me

twilit vector
#

v1.15 when

gritty iris
#

15 years from now

#

I hate git

austere talon
gritty iris
#

oh no its easy conflicts lol

#

type of conflicts tho

#

it got mad over equicorddevs being in typingtweaks import

gritty iris
#

yk it feels great to not have gemini in my email

fossil inlet
gritty iris
#

I was never told there was a program called git when I started coding

#

So I googled GitHub repo manager and found gh desktop

#

And I just never stopped using it because it's easy

fossil inlet
#

time for me to shill

gritty iris
#

Terrible for anything off gh tho

fossil inlet
#

So good

gritty iris
#

Nah I'd only use smth like gh desktop at this point

#

I literally just type gh into my search bar lol

#

It's kinda ingrained into my flow

fossil inlet
#

The custom patch feature of lazygit is invaluable to me

#

You can create a custom patch from a commit and then apply or revert it anywhere

gritty iris
#

I just open up cmd run the cmd atp

fossil inlet
#

The custom patch can be whole files, lines or anything in between

fossil inlet
charred monolithBOT
elder plinth
#

lol. lmao even

charred monolithBOT
#

Describe your Changes

The "View Role Members" button didn't work because PermissionsViewer relied on the RoleMemberPopout patch from BetterRoleContext. If BetterRoleContext was disabled, the popout rendered empty.

Duplicated the patch in PermissionsViewer so it works independently.

Checklist before submitting

  • [ ] I have read the CONTRIBUTING.md file and made sure this pull request complies with it
  • [ ] This pull request was written by me, and not an AI...
elder plinth
#

make a bot that auto closes when the checkboxes aren't checked

charred monolithBOT
#

Describe your Changes

Summary

  • Adds a PasscodeLock plugin that locks Discord with a passcode
  • Press Ctrl+Shift+L or use the toolbox action to lock
  • Includes auto-lock timer, recovery key, and settings panel
  • Passcode is hashed with SHA-256 + salt before storage

Features

  • Set/change/remove passcode from Vencord settings
  • Lock screen overlay with passcode input and "Forgot passcode?" recovery key
  • Auto-lock after configurable inactivity period (off, 1m, 5m, 15m,...
#

What happens when the bug or crash occurs?

The hidden channels now just show as No Access, and only owner + admin roles appear to be able to view them

What is the expected behaviour?

I expect to see the hidden channels in their categories with their names

How do you recreate this bug or crash?

  1. go to any server where you have channels you don't have access to with the plugin installed
  2. observe No Access spamming the top of the channel list

Errors

No errors.

R...

gritty iris
#

I went out of my way to delete the entire description

charred monolithBOT
#

What happens when the bug or crash occurs?

It was working fine till today, I see the hidden channels but they are all named "No Access"

What is the expected behaviour?

It used to show the names of the hidden channels

How do you recreate this bug or crash?

.

Errors

No response

Request Agreement

  • [x] I've searched existing issues and this hasn't been reported before
  • [x] I am using Discord Stable or tried on Stable and this bug happens there as well
  • [x] I in...
twilit vector
#
  • [x] I've searched existing issues and this hasn't been reported before
charred monolithBOT
#

A clear and concise description of the feature you'd like to see

hello i thought about new feuture "streamer mode" when u have streamer mode on or streaming on dc u have a switch which blurs messeges

Implementation Notes

No response

Additional context

No response

Request Agreement

  • [ ] I've searched existing issues and this hasn't been suggested before
  • [ ] This is a core modification feature, not a plugin request (those go in Discord)
  • [x] This feature would...
signal sundial
#

@austere talon how do you expect illiterate users to distinguish between a modification feature vs a plugin request

charred monolithBOT
twilit vector
charred monolithBOT
#

This plugin allows users to schedule messages to be sent at specific dates and times.
It is fully client-side, uses a secure background heartbeat interval, and integrates cleanly into the chat bar.

  • Added a custom-styled, native-looking clock icon and tooltip next to the chat bar buttons.
  • Provides an elegant modal to pick date/time and draft messages.
  • Includes a built-in "View List" panel to manage or cancel scheduled items.
  • Safe for direct messages and groups (utilizes purely r...
errant nacelle
#

Author set to 1400hertz.
so kind of them

signal sundial
hybrid blaze
austere talon
#

need to make a bot that uses ai to determine if a pr/issue is stupid and auto closes

twilit vector
#

make gemini do it

weak thistle
#

shrimply auto close prs by randoms and if it ends up being worth merging reopen

signal sundial
#

or with invalid/ too old license header

twilit vector
#

old being anything under current year

#

REAL coders take great PRIDE AND CARE in their submission

gritty iris
#

also feed it vencords prs be like
this list bad:
this list good:

#

@twilit vector I hope it auto closes yours if you ever make any </3

#

harassment I need an adult

signal sundial
#

thororen is like eleven

charred monolithBOT
charred monolithBOT
charred monolithBOT
charred monolithBOT
charred monolithBOT
#

Description

A plugin that automatically corrects grammar and spelling before sending a message. Click the wrench icon in the chat bar then type your message โ€” the content gets corrected on send.

Features

  • Multiple providers: LanguageTool (free), OpenAI, Anthropic, or any OpenAI-compatible API
  • Local PT-BR corrections: accent fixes, commas, sentence-ending punctuation for Portuguese (Brazilian)
  • Local English corrections: common typos, contractions ("don't" โ†’ "don't"), ...
prime dew
#

"don't" -> "don't"

signal sundial
charred monolithBOT
signal sundial
#

well do i have a choice

charred monolithBOT
#

PS @Vendicated you should change your contributor guidelines.

Every contribution to improve vencord is NOT welcome here. I'm sure I blasphemed in using AI, but still sad and hurt about this. I rest my case anyway.

<img width="1022" height="382" alt="Screenshot From 2026-05-31 17-21-17" src="https://github.com/user-attachments/assets/45edca83-3df9-4156-9906-9f69cec24caf" />

<img width="666" height="42" alt="Screenshot From 2026-05-31 17-21-27" src="https://github.com/user-attachment...

twilit vector
#

"anyone" and not "anything"

charred monolithBOT
#

Describe your Changes

DiscordKit is a client-side integration for PluralKit.

Current features:

  • Retrieve PluralKit system information (/system)
  • Retrieve other system's information (/system id:[system id / username / user id])
  • Activate autoproxy in member mode for the current guild (/autoproxy member:[member id / name])
  • Deactivate autoproxy in current guild (/autoproxy mode:off)
  • Autoproxy changes the banner colour, display name, and bio.

To-do:

  • [ ] M...
twilit vector
#

i guess bro

signal sundial
charred monolithBOT
chrome coral
#

lets hope this doesnt end up in an unnecessary argument

charred monolithBOT
signal sundial
twilit vector
charred monolithBOT
twilit vector
#

2642 ๐Ÿ˜ญ

weary bolt
twilit vector
#

funny ancient pr still being fixed with love

weary bolt
#

almost 2 years going!