#🧩-plugin-development
1 messages · Page 47 of 1
VencordNative.pluginHelpers.yourPluginFolderName (with the first letter capitalized)
^
so i need to import it through pluginHelper?
tried doing it and im getting 2 errors now.
first are
Property 'readdirSync' is incompatible with index signature.
Type '{ (path: PathLike, options?: { encoding: BufferEncoding | null; withFileTypes?: false | undefined; } | BufferEncoding | null | undefined): string[]; (path: PathLike, options: { ...; } | "buffer"): Buffer[]; (path: PathLike, options?: BufferEncoding | ... 2 more ... | undefined): string[] | Buffer[]; (path: PathLike,...' is not assignable to type '(event: IpcMainInvokeEvent, ...args: any[]) => any'.
Types of parameters 'path' and 'event' are incompatible.
Type 'IpcMainInvokeEvent' is not assignable to type 'PathLike'.
is that in main file cause dont
oh it's not, it's a class.
what's in the native file
anyways
native folder/native.ts = native code
everything else = plugin code (including the native import)
-> Native.whatevermethod
just this:
/*
* Vencord, a Discord client mod
* Copyright (c) 2024 Vendicated and contributors
* SPDX-License-Identifier: GPL-3.0-or-later
*/
export { readdirSync } from "fs";
export { join } from "path";
instead export a method that calls those
alr
Now it doesnt accept arguments
// native/index.ts
import { readdirSync } from "fs";
import { join } from "path";
export function nativeReaddirSync(path: any) {
return readdirSync(path);
}
export function nativeJoin(path: any) {
return join(path);
}
// changed to
export function nativeReaddirSync(path: any, ...args) {
return readdirSync(path, ...args);
}
export function nativeJoin(...path: any) {
return join(...path);
}
oh nvm
hi
find: "g.default.Messages.EMOJI_MATCHING",
replacement: {
match: /autocompletes:t/,
replace: "autocompletes:t.filter(emoji => emoji.guildId != null)"
}
im trying to patch the autofill so that default emojis aren't included in the autofill, only custom ones. This patch works with the autofill visually but when i press tab, it sends the default emoji with the same name 🤔
I did it

Woooo
pov: you updated a workflow 50 times and it still can't find glfw3 even though its right there https://github.com/Vintagemotors/imgui-docking1.90.1glfw_opengl2/actions/runs/7681737726
👍
Ur fake 😥
working on a (much simpler) discord mod with a couple friends rn just as a side project. We've been looking into making custom settings sections for plugins, themes, etc. So I took a look at vencords source (Vencord/src/plugins/_core/settings.tsx Line ~76) and to me it looks like they're injecting react into alr compiled html. Am I missing something?
it's injecting into the settings sidebar's react props
should i make a plugin that allows you to like view github issues and PRs within discord
ill work on it rn then
why
maybe better github embeds would be useful but i don't see the purpose of in-app issues
it'd be pretty funny if there was a way to automatically turn #68 into an issue link... xd
the text replace in question:
text replace works
but what about a plugin that lets you set a github repo for every server
and when you do #68 it uses that link

or a more rich embed that shows more stuff
that too
i meant like the one that MessageLinkEmbeds does
i checked in console and this error pops up every time i try to screenshare, and second pic is what my screenshare looks like when i open it. any mods causing this?
happened to me too pretty sure discord broke something
sharing entire screen instead of app fixed it
is there a vencord developer documentation (i tried to find one but i couldnt find any)
do i keep my vencord stuff?
can you just answer me rq
kinda but not really i would recommend just reading other ppls code and trying to understand it
it dont work
Still on this, i literally still have no clue somehow 
by kinda d oyou mean like unfinished?
if so could you send it
there is on how to setup the project kinda but not on the real stuff
coding 👍

v+ needy @strong tide
hello you beautiful people is there a way to prevent a message from being sent ive got addPreSendListener but other than that im confumbled
i think its here
shouldNotifyForSelectedChannel: function() {
return D
},
//...
function D(e, t) {
var n;
let l = g.default.getChannelId(I.default.getGuildId());
if (l !== t)
return !1;
let a = C.default.getChannel(t);
e.type === x.MessageTypes.THREAD_STARTER_MESSAGE && (a = C.default.getChannel(null == a ? void 0 : a.parent_id));
let s = N.default.getCurrentUser()
, i = N.default.getUser(null === (n = e.author) || void 0 === n ? void 0 : n.id);
return !(null == a || null == s || null == i || a.isManaged() || i.hasFlag(x.UserFlags.SPAMMER) || E.default.isBlocked(i.id) || i.id === s.id || S.default.getStatus() === x.StatusTypes.DND /*<------ here*/ || _.default.allowNoMessages(a)) && !0
}
mojang the type of devs to make a getter for a public field
ok literally what the fuck is this
is this actual minecraft source
that's a bit depressing
Maybe that’s why they take so long to add anything
average java moment
uh, minecraft's source is not available
you can't see the comments they wrote
if there's something wrong with the decompiled version it's not their fault
it's still missing the actual deprecated interface on the first one
There's official deobf mappings too
I think most modders avoid them to avoid legal issues, though I never understood what's those issues would be
I think they just don't want to have to rename all function calls in their code
I thought fabric used them
No idea, I never looked into the major apis much
No
fabric uses it’s own mappings called yarn
the license is very restrictive
proprietary
apparently the issue is that its too vague
(when a license doesn't cover something it means all rights are reserved to the copyright holder)
idk why they didn't go with a normal license if their intention is clearly to make it available for everyone
average forge
i dont rly know what im doing cuz i dont know any js, but how would i go about making a plugin that would allow a local rpc client to specify the application name and activity type when sending a SET_ACTIVITY packet for personal use?
(use customrpc plugin) flux dispatcher
@wide obsidian
this is actually nice
rust if it was good
soon
oi you got a loicense for that
the syntax is a bit 
is there a way to see logs of ppl i accepted friend reqs of?
?
not talking about pending friend requests
yk when u accept someone's friend req
it shows "you accepted x's request"
but goes away after reloading
anyway to see it again?
decor not let me sign up pls f*cking hellllllllllllllllllllppppppppppppppppppppppppppppppp
v+ needy @glass elbow
Wtf does that do lmao
adds needy for support role on the person and locks them into support channel
anyhow I can get all common members between two guilds using webpack?
GuildMemberStore from common doesn't seem to give me what I want which is all mutual members
you need certain permissions to be able to fetch all members from a server
I forgot which specifically
so no, you can't
you can get the mutual members that are cached
but it will be incomplete if the servers aren't small
if you have audit log (iirc) permissions in both then you can fetch all members
I don't in one of them so I guess I'll leave this now
what is this for anyway?
someone ddos'd decor for like 2h
im surprised this was the only complaint here
how'd it even get ddosed by some kid
i have no idea it's behind cf
reviewdb often gets attempted to be ddosed but it usually doesn't do much unless caddy shits itself but we're gonna switch back to nginx soon to fix it
go is so efficient that it doesn't affect it much
only caddy explodes sometimes for some reason
mfw oom killed at 20gb ram usage
i really don't know wtf was up right bc
i checked unifi and there was nearly no traffic
as in the ddos almost wasn't reaching my network
but cf says this
they managed to get the cf tunnel down
idk its all weird
I wish cloudflare could just say what you’re allowed to use the tunnel for
I kinda want to route my Plex through it but it feels sketchy
the tunnel is set up in a docker system to only go to decor
280m horror
i thought it was manage server?
const stream = createReadStream(file, { autoClose: true });
await finished(stream.pipe(hash));
why does this never resolve
if (string.length === 0)
return [];
const splitPoint = string.indexOf(" ");
if (splitPoint === -1 || splitPoint === string.length - 1)
return [string];
return [string.substring(0, splitPoint), string.substring(splitPoint + 1)];
😍
worst thing i've written in my life
interesting, this works
const stream = createReadStream(file);
await pipeline(stream, hash);
hmmm
const splitPoint = string.indexOf(" ");
return [splitPoint === -1 ? string : string.substring(0, splitPoint), splitPoint !== -1 && string.substring(splitPoint + 1)].filter(str => str && str.length > 0);

what the hell
when did this channel exist it just appeared for me now
it used to be called coding and was changed for whatever reason
pro gamming
lets go
WHERE DID IT GO
i wrote this generic helper btw
export function splitn(s: string, delim: string, limit: number) {
const res = [] as string[];
let lastIndex = 0;
for (let i = 0; i < limit - 1; i++) {
const index = s.indexOf(delim, lastIndex);
if (index === -1) break;
res.push(s.slice(lastIndex, index));
lastIndex = index + delim.length;
}
res.push(s.slice(lastIndex));
return res;
}
but i didnt end up needing it anymore 
ah that’s why i didnt recognize it and that’s why the coding channel appeared to be gone
i renamed it in hopes that it will reduce the amount of idiots asking for support
i would’ve too tbh
theres a typo 👺
pro gamming
mb, fixed
thats better
halp pls why is my jvm taking so much ram????
Can’t soundboard be imitated by transmitting the requested sounds directly into the microphone; bigger upload size be imitated by uploading the file to an external source and sending the link instead; and animated avatars be imitated via a custom server that will send avatars to other people with the plugin installed 
Just use Soundux at that point
It isn't but it's unnecessary
Why would you go through so much effort when you can literally just use a normal soundboard
It's no different from a normal soundboard at that point
You know that the FAQ Message is talking about unlocking the actual features
Not immitating them
You can also reverse the Discord API and make your own instance
Uh no?
But that's not what people want when they talk about "free nitro"
Emotes are imitated with fakenitro
Yeah but in a sane way
If you're so keen on "it's possible though" then just contribute it
Nah I have other shit to do
The message should just say it would be unnecessary or insane or whatever the fuck
Cause not possible is wrong 
I can't belive I'm having this conversation lmfao
It's possible
But really fuckin clunky and pointless
https://github.com/Vendicated/Vencord/pull/2137 I hope anyone could look into this
this is horrible practice, you should really avoid this
Please don't tell me it's better to hook it multiple times in multiple plugins
you should not modify network requests
No one is forcing you to, it's a optional feature
no one should
Doesn't mean no one will, I don't get your point
what the fuckk
worst idea ive seen in a while
just do it properly and only modify the request you care about
what she said
How you want to do that without hooking
Also you still have to check the URL for the request you want to modify, this is simply wrapper for it
vencord has a really cool feature called patching
Adding that much code with patching is the most stupidest idea I heard
have you looked at like any plugin
just call a method within your plugin from a patch?
They mostly use patches to modify behavior and not to hook something
because you dont need to hook into functions like that if you patch properly
Why I would patch RestAPI functions...
Sometimes you don't know what calls the requests exactly
skill issue
then just patch whatever makes or recieves the request https://xyproblem.info
hi
basically doing what I made but harder for no reason
no you're wrong.
playing sound through the microphone is not possible on discord desktop. only on web
and uploading to external file host is not the same as uploading to discord
You can make it look the same kinda like with emotes 
false
discord won't even embed media above a certain size
and it'll always just be a link
Yeah ik that but it won’t embed those with nitro either right
Also this is just for images/video/audio
Text files just get embedded with a simple file icon and name
That can easily be imitated
it will
You just detect that specific url and replace the link with an embed 
the entire point of fake nitro is that it works without requiring the receiver to have the plugin
Well for receivers they would just be able to click the link
Like with emotes
Fakenitro users see an discord emote they can click on and stuff
And regular users just see an image
I don’t even need these 
which requests are you trying to find?
maybe i can help
Whenever you reply to a message, the API responds with the message object and the referenced message, I want to change something in the response before it being sent back to discord client
ah
then yea you don't need to hook into the http calls for that
there's a convenient function addInterceptor() which lets you intercept and modify flux events
no wait that wasn't the name
one sec
nvm yeah it's addInterceptor()
you can just patch the MESSAGE_CREATE handler
or that
adding global flux interceptors seems like a bad idea
that is going to still cause discord to reload and fetch message from api, effectively reverting the changes
but if he's absolutely unwilling to use patches and only wants it for himself then interceptor is always a solution
shouldn't
vencord patches modify the client scripts before they're ran
so if you make a proper patch then it will work even after you reload
which field do you want to change exactly?
Also what do you mean patch MESSAGE_CREATE handler? You mean patch the function that listens to MESSAGE_CREATE?
search discords code for MESSAGE_CREATE:
How 
open devtools, press ctrl shift f
that will search for elements
nop
you can also view JS in the Devtools
Ctrl Shift F will also search them
what exactly is it you're trying to do anyway
thats nice i found ittt but like what 💀
assuming you want to change how the message is displayed in chat, you should find the handler that's responsible for that functionality and make a patch which lets you modify the data
honestly i don't know, breakpoint it and see
you can breakpoint?
yes
^
ye you can click the bar on the left
then you can use the console to modify the variables, just like if you were inside that function
don't break for too long or your discord will reload 
ok just saw it happen
?
uhhhhh
anyways if i wanted to create patch to like insert my code into the function how i would do that
what is it you're trying to do
modify content to turn some stuff into other stuff
im guessing you're trying to spoof other people's messages?
be more descriptive
then what
find certain strings and replace them
so text replace but for other people's messages?
i don't think actually changing the message objects is a good idea. it'd be better to patch the message renderer
wouldn't that mean it would break replying since it would show original message
?
use react devtools to inspect a message then find the highest element in the tree that is still the message and see its code
if I only modify the code to render messages, the content you see when you reply wouldn't be modified
i dont have that
then enable it?
how?
its usually very far to the right
requires a full restart
now select a message, then find the highest parent which is still the message component
now click dis
and you should have the function responsible for the message component
ok I do have
now you should be able to patch it to change what's being rendered
yeah once I understand how to patch then yes
this thing helped me https://patchhelper.nexpid.xyz/
i will try to explain, maybe you will even understand xd
a patch consists of find and one or more combinations of match and replace
find is any unique string that's only present in the webpack module that you're targeting
online patch helper 
cursed
a little
i didnt have vesktop set up in dev mode when i started playing around
for example in the message component module, it could be something like Message must not be a thread starter message
or .default.Messages.MESSAGE_A11Y_ROLE_DESCRIPTION
(just examples, might not actually be unique enough)
tbh patching is a really simple concept you just
- find a
findwhich is a unique string in your module. pick any string that seems unique in your target module (and test that is indeed unique) - regex replace the source code in your target module
why do we need it
because you don't want your regex to accidentally break 30 other scripts
makes sense
seems to be unique enough
yep
regex replace can do that
how
have you never used replace in your life
i did
do you want me to match a code and just replace it with the code and new lines
"hello world".replace(/hello/, "hello banana") // => hello banana world
you can also reference the capture group and insert that
pretty much, except instead of replacing with new lines you only need to add a call to your own function
that way your regex isn't cluttered
vencord has a convenient identifier $self which you can use to make it reference your module in the replace text
could you help with example of that, for example I want to add code after "var t, n, l;"
ye
you can't match that
whar
show the code you want to patch
you can match the stuff after it
here you could match the let {id: g, message: I, object
and insert your call in front of it
seems complicated but why
assuming it's not repeated in other functions of the same module
why not the first line
best to match things that are not minified so that it doesn't break as easily
because you can't match random minified identifiers
because then you will match every 3 variable declaration in the module
t, n, l may be completely different random names in the next version
oh
its not
^
these specific names not of course
but when matching, you will ignore variable names
since they can change
uhhh
vencord has a \i regex identifier for matching a variable name
so i can match let {id: g, message: I and infront of it call my function?
ye
how do you know its message
by reading the code
it says it
message: I
oh this calls into their parser, passing the raw message object
you might want to patch that D.default instead
so if I wanted to call my method between let r; and let {id: g, message: I how I would exactly do that
eslint what is your problem
well for demo purposes, you'd do something likejs match: /(function\((\i\)){var \i,\i,\i;let \i;)(let{id:\i,message:\i)/, replace: "$2$self.yourFunction($1)$3"but this is kinda bad and would match 2 other functions in the module, so it's better to do what vee said 
what in the world is that
it matches the non-prettified version of that code, so this
and inserts your function call between let r; and let{id
why the $2 thing
what
uhh have you used regex before
do you read anything at all? ^
:)
yes
and u never used capture groups?
okay so imagine u have the text i like trains
and u want to insert dis before `like
you make a match like this
then take the first one
then put "dis" between them
then take the 2nd one
that's basically what you do with code patches
so umm
(function\((\i\)){var \i,\i,\i;let \i;) is first group
(let{id:\i,message:\i) second group
and the $2 means we replace in between those groups?
Doesn't seem to get patched
each $n refers to one of the () capture groups
so in your new code it'd be $1$self.yourFunction()$2 if anything
second of all
that regex will match a lot of random things
you should ideally go with vee's suggestion and match the D.default call further below
also you kept in the spaces from the prettified version, those aren't there normally
you can and should check in patch helper if your patch matches anything
yea if you build vencord with pnpm watch you will get a Patch Helper section in settings
is this error stopping me from building bc it seems like
whats the error when you hover over it
have u tried pnpm lint --fix
just tried
didn't help
Patch helper says it would work but wasnt patched weird
did you install dependencies with npm or pnpm
pnpm
yo, would it be possible to make a plugin to replace discords file uploader with a custom one? like the ui and stuff stays the same, but it uploads to a custom server and just sends a link
not to bring down your idea or anything, but why would you want that
larger file sizes
i have a self hosted file server and i absolutely hate the 25mb limit
Theoretically possible using a few patches
Why are my patches just not applying (changes arent even seen in source), patch helper said it found and know where to place things so I'm confused
Is your plugin enabled
Btw your patch does remove important stuff it probably shouldn’t
Also your changes appear in a file called WebpackModule(module id)
Not whatever it was before the patch
its working...
somehow
it deleted the one thing but doesnt seem to be issue uh oh
seems to be working
how I would regex this to insert new line?
(get\(\i\)\{)(return this\._cachedMessages\.get\(\i\))
$1console.log(“whatever”);$2
Those are capture groups
Basically inserts whatever’s in the ()
$1 is the first group, $2 is the second
then what are you inserting into the second
And there’s some other ones, look in patch helper
wait wouldnt you replace the get()
1: get(e){
2: return whatever
you said you are inserting into 1 (get(e){) the console.log(“whatever”);
The result of this is
get(e) { console.log(“whatever”); return …
Yeah
Yes
That’s called a capturing group
Define it in the regex with () and use it with $index
no i was only confused about the $ use
Well now you know hopefully
👍
finally i made it work 😭
dont use variable names in finds
cause as soon as discord updates your patch will break
anytime you see a variable like a, t, N, use \i
for finds you cant use that though, find something else
you complained about lack of documentation yet you didn't even read the documentation that is available
you confuse me
because it specifically tells you how to write patches without hardcoding minified names
azur lane player
i like that
Average whitename:
I have a script that is being fetched from discord, is that possible to patch?
Hi, how to pin discord servers ?
youre in the programming channel
so i basically want to, when a new message is sent, replace the content of the message with it’s raw content (document.getelementById("message-content-MESSAGEID").text="RAWCONTENT")
that or for every message, replace the content of the message with it’s raw content (document.getelementById("message-content-MESSAGEID").text="RAWCONTENT") but that would probably be too laggy
now i don't know how to do an event on a new message, then i don’t know how to get the id of that message, then i don’t know how to get the raw content. i tried looking into the code of https://vencord.dev/plugins/ViewRaw but i didn’t get anything out of that (well skill issue probably)
it has some code like that
addButton("ViewRaw", msg => {
return {
label: "View Raw (Left Click) / Copy Raw (Right Click)",
icon: CopyIcon,
message: msg,
channel: ChannelStore.getChannel(msg.channel_id),
onClick: () => openViewRawModal(msg),
onContextMenu: e => {
e.preventDefault();
e.stopPropagation();
copyWithToast(msg.content);
}
};
});
``` (from <https://github.com/Vendicated/Vencord/pull/275/files>) and i can’t figure out where the fuck that `msg` comes from (well the frist one is just a variable that is set to the return value of that anonymous function but the rest??? <https://github.com/Vendicated/Vencord/blob/main/src/plugins/viewRaw/index.tsx>)
can someone help me?
btw, it doesn’t necessary need to be a vencord plugin, it could just be a tampermonkey plugin
anyone know how to make tampermonkey scripts
im trying to make one for https://neal.fun/infinite-craft/
JSON.stringify(this.$nuxt.$children[2].$children[0].$children[0].elements)
is this like
good wayo f doing things
var that = this.$nuxt.$children[2].$children[0].$children[0];
var crafter = that.craft;
that.craft = (e, n) => {
crafter(e,n);
console.log('uwu');
};```
you could probably get raw content from discord messages cache
how do i do that?
MessageStore 
where can i find documentation about that?
i think i want to do MessageStore.addChangeListener()?
how to run tampermonkey on window.onload
it's not the same as
@run-at
@require
h
m
i tried MessageStore.addChangeListener(MessageEvent, alert("test")) to test, it showed an alert once and then reloaded discord in a loop
what is this
@dull magnet is crystalline broken cause it just does nothing when i set the extension to use it
you're calling alert() immediately
() => alert("test")
thanks
it doesn’t do what i want and makes discord reload forever tho
i don’t know what i’m doing
oh i think i would need to try to catch when discord renders the message and replace that with rendering it raw
i found that this.renderMessages = new u("\uD83C\uDFA8","React Render Messages",!0), but i don't think it’s usefull
yes, i’m trying to make it so there is no rendering done on the messages, so all messages are “raw”
i want to see the messages as they were typed, exactly
the problem is that i can’t use react devtools for that right? so i’ve been trying to find the function that renders the message with ctrl+shift+f in dev tools
oh i can pause script execution, send a message with an alt, and then step through the function calls
i don’t even need an alt
you can
inspect message component
see code
i see, thanks. that led me to some var h = i.memo(function(e) { in a file that has been patched by messagelogger. so i’m not too far
“Webpack Module 497880”
@austere mauve :)
how to inject a function to run when nuxt is ready: window.onNuxtReady is not a function when DOMContentLoaded
window.onload
okay
cool
no
why does it not work
i know why but
ok
also require isnt working
ugh im just gonna setTimeout
okay maybe it was because i didnt have // @grant unsafeWindow
IT WORKS
// ==UserScript==
// @name Infinite Craft autosave
// @namespace http://ow0.me/inf
// @version 2024-02-01
// @description Yuri Empire [First Discovery]
// @author Ina
// @match https://neal.fun/*
// @icon https://ow0.me/inf/icon.png
// @grant GM_getValue
// @grant GM_setValue
// @grant unsafeWindow
// @require https://neal.fun/_nuxt/992eef7.js
// @require https://neal.fun/_nuxt/dcc1889.js
// @run-at document-idle
// ==/UserScript==
var yuri = () => {
'use strict';
console.log('establishing yuri empire');
var that = unsafeWindow.$nuxt.$children[2].$children[0].$children[0];
// load
var savedElements = GM_getValue("elements", null);
if (savedElements !== null) {
that.elements = savedElements;
}
var savedDiscoveries = GM_getValue("discoveries", null);
if (savedDiscoveries !== null) {
that.discoveries = savedDiscoveries;
}
// save
var crafter = that.craft;
that.craft = (e, n) => {
crafter(e,n);
GM_setValue('elements', that.elements);
GM_setValue('discoveries', that.discoveries);
};
console.log('yuri empire established');
}
window.addEventListener("load", yuri);```
Autosave script for Infinite Craft on neal.fun.
this is where the content is parsed @shrewd yacht https://github.com/Vendicated/Vencord/blob/620c127b58e94ce4bf0b78d7e55fbce8e4f376e2/src/plugins/fakeNitro/index.ts#L290
**index.ts: **Line 290
match: /(?=return{hasSpoilerEmbeds:\i,content:(\i)})/,
search for the find and you will see the code that does it
Hi, im trying to make a script that uses the shiggy api that when i type /shiggy it gets a url then embeds it here to discord, but i get an error and i cant see it cuase it says this
Send the script
ok
Import definePlugin from "../utils/types";
import { Devs } from "../utils/constants";
async function getShiggyPicture(): Promise<string> {
const res = await fetch('https://shiggy.fun/api/v3/random');
const pictureUrl = await res.text();
return pictureUrl;
}
export default definePlugin({
name: "Shiggy Pictures",
authors: [
Devs.echo
],
description: "Fetches random pictures from Shiggy",
dependencies: ["CommandsAPI"],
commands: [{
name: "shiggy",
description: "Fetches a random picture from Shiggy",
execute: async opts => ({
content: await getShiggyPicture()
})
}]
});
I dont know how to send it in the message.txt format sorry, lol
The pictureURL is being returned as whatever the fuck this is
O shit, how do i fix that?
O
You're probably getting the wrong property or using the wrong method
I also made a scipt to get quotes using the quotes api
"All difficult things have their origin in that which is easy, and great things in that which is small." -Laozi
Use the same method works fine
Or that that gets pictures of the sunset
But its not really sunsets lol
How about just
commands: [{
name: "shiggy",
description: "Fetches a random picture from Shiggy",
execute: async opts => ({
content: 'https://shiggy.fun/api/v3/random'
})
}]

Works fine for me lmao
lol
Thanks
That’s the picture
The api url itself embeds a random image, it's kinda useless to make a request anyway
You could probably do it using a file upload but I have no idea how to do that…
This is saviour
At that point could you not just send the link
There's no real practical use for a command that just pastes text
No, considering Discord doesn't cache the specific image returned
Ah
ok!
that looks very close to what i’m looking for yeah
i did
find: '["strong","em","u","text","inlineCode","s","spoiler"]',
replacement: {
match: /.*/,
replace: ""
}
to test and it didn’t do anything :(
are you sure it didnt do anything because the patch failed since it generated invalid js, instead of failing cause it didn't find anything
yo need help
I want these to just be beside each other
but it aint going beside each other
This is the code I have for it
im highly confident it isnt my tooltip code, i just cant figure out what would be causing them to do this
Why don't you just use title attribute for tooltips
That's what it's for
Also use flex
sadly using flex just makes them snap together vertically
divs by design stack vertically
change the flex flow
no, i don’t know
how could it not find anything though. i used the same find as fakenitro and literally matched .*
i’m not getting Vencord PluginManager Starting plugin RawMessages though
Then set flex-direction
Did you enable the plugin
yeah i’ve been experimenting with that
not sure what i did but now it started for real!
debugging by bleh!
works everytime
still doesn’t do anything tho
good but now
i need them to be in there not going out of the window
ok so i did
find: '["strong","em","u","text","inlineCode","s","spoiler"]',
replacement: {
match: /.*/,
replace: "console.log(\"bleh\")"
}
and it does log bleh in the console
ah it’s simply because i set a start(). obvsly pluginmanager does not start rawmessages if i only patch
like here ^
hey
so i guess that means that wasn’t the module i was looking for
because messages are still rendered the same
it does create empty messages for fake nitro emojis
you're late
i am NOT your pookie!!!!
Smash
what
she is dirty minded
For real
inlinecode s ||spoiler||
ok that’s not what i’m looking for either
it is right
you have to make it not call the render function
and instead use the content directly
🤔 isn’t that what i did here: #🧩-plugin-development message ? it didn’t stop the rendering of all messages though
mmh
only problem is that i can’t manage to single out this render function XD
thanks for the help btw
well of course i assume it wouldn’t be called function renderMessage(…) but smt like function e(…)
so yeah i have to understand well the code
in that file there is a svg path that looks like that. i think it’s the svg when you scroll up and the messages are loading
exported methods are usually declared as function x() then exported as this.render = x or { render: x }
/run
const (
one = (iota + 1) & 1 == 0
two
three
)
println(two)```
@potent fox I only received go(1.16.2) error output
true
Wait wrong
/run
const (
MathHomework = string(iota)
TurkishHomework
CookingHomework
)
println(CookingHomework)
@potent fox I only received go(1.16.2) error output
damn i’m going nowhere with my plugin
how can it be faster
idk but i thought it was funny af so i shared it
yeah. i don’t think i can do it, can’t find this render function. the worse would be if there isn’t a single one but multiple separated and i think that might be the case
oh i know what i could do actually. i could search for strings that are set in the html of a message
||like for spoilers||
or for timestamps <t:1706953811>
damn look what i found
i think https://discord.com/assets/41490.cdbd6b7d417e115c9d91.js might be what i’m looking for
i’ll block it with ublock origin to see
breaks everything
yeah this is literally it
😔
so close
arent those just css classnames 
@potent fox whats up with the weird timestamps on some reviews
{
"id": 227760,
"sender": {
"id": 6178,
"discordID": "574669003755356162",
"username": "nebuawa",
"profilePhoto": "https://cdn.discordapp.com/avatars/574669003755356162/a_7b52c7fed24b53dee880170d7948b31f.gif",
"badges": []
},
"comment": "develope r",
"type": 0,
"timestamp": -62135596800
},
for some time timestamp system was broken
which resulted with every review having timestamp 0 in the database
idk why its -62135596800 though
overflow :^)
bruh, vencord got hacked..
yeah, i saw that.. the whole source code got leaked.... the situation is pretty bad right now
Oh shit
😔
hello
im tryin to fix this
but idk how
This snippet banishes users back to Message Requests when you close their DM.
Snippet:
channelId="DM Channel ID Here"
;try{await(webpackChunkdiscord_app.push([[""],{},e=>{m=[];for(let a in e.c)m.push(e.c[a])}]),m).find((e=>e?.exports?.default?.getAPIBaseURL)).exports.default.delete(`/channels/${channelId}/recipients/@me`),(webpackChunkdiscord_app.push([[""],{},e=>m=Object.values(e.c)]),m).find((e=>e.exports?.default?.showAlert)).exports.default.openAlertModal({title:"Success",body:"DM has successfully been removed, and added back to Message Requests queue!",confirmText:"OK"})}catch(e){console.log("%c Error!\n%cChannel ID may be invalid (use DM Channel ID. not UserID), or script may be outdated. More information:","font-size: 50px","color: red; font-size: 18px",e)}
i know nothing about plugin dev (tho i do know js) but ima try 🙏
im trying to copy someone's id when clicking someone's message avatar
this is the relevant code, (useClickMessageAuthorAvatar is not passed the author id)
let f = a.memo(function(e) {
let {message: t, channel: n, compact: i=!1, groupId: r, isGroupStart: o, usernameProfile: f, avatarProfile: h, setPopout: C, author: p, repliedMessage: m, roleIcon: E} = e
, g = (0,
d.useContextMenuUser)(t.author.id, n.id)
, S = (0,
d.useClickMessageAuthorUsername)(t, n, f, C)
, A = (0,
d.useClickMessageAuthorAvatar)(h, C)
, _ = a.useCallback(()=>C({
usernameProfile: !1,
avatarProfile: !1,
referencedUsernameProfile: !1
}), [C]);
this uses the following functions:
useClickMessageAuthorAvatar: function() {
return P
},
function P(e, t) {
let n = g("avatarProfile", e, t);
return v(n)
}
and this function's call back is called when i actually click the messae
function v(e) {
return l.useCallback(t=>{
// this is where I wanna call my own function
t.preventDefault(),
t.stopPropagation(),
e()
}
, [e])
}
the problem is i only have access to the mouseevent (t), and i don't have any access to the user's id
ALEXIA???
hiii
we will fix null timestamps
set to random date

set to like 2089
people will think they travelled to the future

wrong channel
should i post it in #🏥-vencord-support-🏥 ?
i thought programming is the right channel i dont really know
vending.machine user reviews
rini 66 years from now
this guy built skynet and were all fucking dead
it's not that hard
had it disabled sry
whar isn't it open source
well now it is… i guess…
well aren’t we all. all of the contributors are trying to find out how it hapened. the leak is pretty severe, like everything is released now…
i dont like being trolled https://cdn.discordapp.com/emojis/996053681898278922.webp?size=256&name=Cryori&quality=lossless
I'm pretty sure its possible to get the sound board working with freenitro, because of Sound-mojis.
In order play the sound it must send said sound the server must send the audio file to the client.
So basically you request the audio file from discord's servers then you route the audio from the sound-moji to the voice call.
try it and see
I lack the experience to do so.
Rip
The best i can do would be to have 2 instances of discord open then routing the audio output of one instance to audio input of the olther using QPWgraph.
And i don't see why that wouldn't work.
Trust me, it’s not possible. There is code on their servers that blocks the request if it’s a sound that the user cant play
Here's a demo of me playing a sound-moji that i "Can't play".
Do the exact thing you just said i can't do with this command: mpv https://cdn.discordapp.com/soundboard-sounds/(SOUND-ID-HERE)
what about storing the sound on github
Here i am bypassing that code... USING MPV.
Here is a clip of me doing the exact thing you just said i couldn't.
I meant bypassing the api wasn’t possible, but yes putting it through your own mic is
is there a reason why playing soundboard sounds on your own mic with a plugin isn't a good idea?
blah blah selfbot blah blah
other than that not rly
IIRC hard
? no?
And you cant take care of that in app?
on your own mic
ig not api call but request
¯_(ツ)_/¯
so its fair game
i guess
I’m not saying it’s impossible just hard
Go for it if you want to
Actually this looks promising https://www.npmjs.com/package/naudiodon
discord made their own thing for recording and playing audio on the desktop app
you can play stuff over the mic on web fine and it has been partially done before but its impossible on the desktop app
howdo progam plugn
If you want to play sounds over your mic use soundboards like soundux
VB-Cable or a custom driver (the latter requires an expensive certificate)
I asked Discord Experiments to help me bring back the amoled boolean setting
cool
yeah that's what i did
Literally the first one looks fine
lol
Help
I want to make a script that when used it sends a differen mewing gif
Form giphy
But it always sends this
I have the parameter set as 10 but it doesnt help
Dont steal my api key please
@steady knot i see that
If anyone responds ping me, i might respond after a few hours cuase i aint home
I get the same issue with the same picture with the shiggy api
I dont rlly know how to code so if someone can explain how to make it be different everytime i use the command, it will be very helpful
^
hi...
- Someone here is most definitely stealing that api key, delete the image
- The api returns 10 images as you specified in the query parameter, which means you’ll get ten back. Why don’t you use a different one the api returns?
If you don't know how to code then why are you trying to code 😭
Also try watching some tutorials
^
I want to learn.....
O
Lemme change it
Watch tutorials
Also, it would probably be
data.data.images[0]
(maybe)
(dont quote me on that)
Best way to learn, trust me
Yessir I'll do that
Change the 0 on the line where you’re getting the image to the index of the one you want
Is that how to make it appear a different image everytime I use it?
I'll send a picture when I get home, I'm at a park 😭
Ok sorry, I'll be back 😔
Is there a way i can check if a user has a specific permission in the channel they're currently tabbed into?
I think there is I can check for u when I get home if no1 answers u before I get home
Thanks :3
I tried looking myself but i couldn't really make sense out of any of it
A few things
Oooo
But mainly i want to make a plugin that hides the gif button if you don't have embed perms
Oh that shouldn't be that hard
I'll see if I can find the code for the perms checking when I'll get home
School is killing me lol I finish in an hour (5:30pm) and I've been here since 8:30am
Awesome, gracias :P
Rip 
5:30? That's really long, are you french?
no im from israel
god fucking damn it
Most functioning madeline css 🗣️

What's that one plugin guide that shows how to make a send button on emojis?
I need to totally very much not steal the code for the send message function
🔥
DAWG THIS IS YOUR CSS
IT DISRESPECTS ITSELF
AT LEAST IM SPENDING HOURS TO FIX IT
Gracias :3
Why do you not just host it on github pages
It's so much better
- a non stinky domain 🔥

@balmy sky sry for the ping i just had vodka, it looks like this?
Surely there's a better endpoint than that
A random gif getter or smth?
If you're searching the same term every time, you'll get the same result
Ye a random mewing gif
O how do i make it that everytime i use it i get a different one?
L
@balmy sky i fucked up my code and now it wont work help me
Lmao
Here when you use it it just shows /mewing
The GIPHY Developer Portal is how you integrate the world's best GIF API into your business, app or project.
i’m sure they can help as long as you’re not asking for them to spoon feed it to you
I just want them to tell me why it wont work now because earlier today
It worked fine
lol
I just add a parameter and it broke it
lol
Ping me when you respond im reviewing the docs
please don’t tell me his file name is the fucking api key
ah my fucking god
Wtf are you even doing
I just read the api docs
You're getting the wrong value
Im trying to make a script that whenever i use /mewing it sends a different mewing gif everytime lol
Fuck, ill reread it
We know
We know
Cause i had to fi.l it with smth and didnt want my id
Ish
Wdym?
Why do you not want your id in the author
Cause i dont know if imma put it on github and dont want everyone knowing my discord
Maybe its just me being paranoid
lol

fine then, have the plugin made by @shadow ruin then
The issue is with the parameters and the tag
because Dev.echo is their ID
Yessir i got it from the neko thing lol
If you change the tag to something more common like "cat"






