#๐พ-core-development
1 messages ยท Page 5 of 1
๐ฟ
๐ฒ aliucord desktop real???? โผ๏ธ ๐ฑ
discount tire
i just kanged Aliucock workflow
someone pr bad code i wanna test lint 
there u go
horror
i will merge
i will
๐
i was joking 
does that even build ๐คจ
good point unfortunately
didn't i horribly mangle the plugin definition to the point where typescript hates it
esbuilt doesn't check types
does eslint?
damn
horror
lol
okay i made tsc happy now i will also add tsc to build script
i guess somone made that the webhook likes the number 5
just tell people to pnpm i --frozen-lockfile when installing
it'd stop git from breaking
it's not the greatest but idk what the point of the lockfile even is when it updates it instead of using it to lock the versions of packages
oh nvm its the same person
lockfile is for npm ci
pnpm doesn't update it by default
only sane package manager
it has a setting to not touch lockfile if all requested versions are met and that's on by default
the issue was just that it was updating the lockfile version lmao
sure but installing a new dependency with npm i shouldn't update all my other deps too
I don't think the default of npm install (or whatever package manager) should also update things, if I wanted that to happen I should explicitly use a command to update dependencies
good that pnpm doesn't update by default
ba6414e Installer: add custom path option - Vendicated
Probably not implemented the best way but it works fine
idk megu made it return win32
probably mistake trolley
i just did it like it was
trol
24 million weekly downloads 
str.replace(/\n\r?$/, "");

124d1ad Plugin that removes canary subdomain from messa... - somerandomcloud
hell even if you don't know regex you can str.replace("\r", "").replace("\n", "") instead of adding a wholeass package
this is your brain on nodejs
that doesn't strip the final newline 
but yeah i know what u mean
thats literally what that package does
They even provide professional support :wheeze:
if (s[s.length - 1] === "\r") s = s.slice(0, -1);
if (s[s.length - 1] === "\n") s = s.slice(0, -1);
this is literally all the package does
also gotta love how it's not even optimised
slice twice? that's wasteful since you're copying the string twice
it's more optimised than the regex but like come on at least if u make a micro package like that make it be fully optimised
Front end devs will need this 
if (s.at(-2) === "\n") return s.slice(0,-2)
else if (s.at(-1) === "\n") return s.slice(0,-1)
return s```
Uhh
You missed the point
They have two slices for the windows newline
Which is \n\r
function stripFinalNewline(s) {
if (s[s.length -1] === "\n")
return s.slice(0, 2.length -2);
if (s[s.length -1] === "\r" && s[s.length - 2] === "\n")
return s.slice(0, s.length - 2);
return s;
}```
no i'm just saying in general that their implementation is goofy regardless of how you implement it
Even then, I can't figure out why you would want to remove the last newline instead of just trimming
yeah
function stripFinalNewline(s) {
if (s.at(-2) === "\n" && s.at(-1) === "\r")
return s.slice(0,-2)
else if (s.at(-1) === "\n")
return s.slice(0,-1)
return s
}``` ez
.at is shorter and easier to read 
thats just a less optimised version of mine 
Imagine if that package updated to instead append a newline
Would that break software?
trimEnd u mean
Yeah that
On mobile rn
Too bad the js trim does not accept a character
Unlike python/kotlin/a billion languages
what if you were code golfing and regex wasn't allowed*
๐
i mean its not hard to make ur own
Yes but I am complaining about the built-ins
Making ur own is not an excuse for bad built-ins
function removeSuf(s, suf) {
for (let i = s.length - 1; i > 0; i--) {
if (s[i] !== suf) return i === s.length - 1 ? s : s.slice(0, i + 1);
}
return "";
}
Typescript could introduce better built-ins that transpile to normal function calls
Sadly it doesnt
Ig overwriting the trim method would not be an issue if it keeps the old behavior
No args? Normal trim
overwriting prototypes is kinda ugly
and doesn't play well with typescript
also why do that when u can just use a function
there u go
Still very much in progress, this is just currently some code that'll make it remotely work.
@austere talon reason why I didn't know what you meant with types is because I don't use typescript
me reference
I'm lazy and replace \r\n with \n and then just handle \n
shouldnt the \r and \n be switched there
since \r comes first
yeah i didnt test i just wrote this in like 3 seconds
fixed it here
ah

there's currently no way to "hot reload" plugins are you have to restart from tray every time you make a change, right?
you just need to ctrl r if you use regex patches, not a full restart
fart
fart
@austere talon merge
do not merge
@austere talon you will do css modules
- VxTwitter || Uses VxTwitter to fix embeds from twitter on send
- Added
Dev.Samutosrc/utils/constants.ts
this is definitely not ready for a merge
- no support for actual embeds
- no support for videos or tenor gifs
- some other really bad code
will try to fix all of these today, worst case tomorrow
woah
dual forking
i guess not trippel
best plugin
intrestuing plugin i will never use it
you will
i would prefer to not share my discord token ^^
why
making a new discord account is annoying
why would you make a new one
becouse i am not in the mood to give my account away by randomly
u should mark the plugin as required
fr
That sounds like a great plugin to use on public discord server :)
bro wtf is this plugin :sob:
just one that makes you randomly share/giveaway your discord account
Exactly! Great fun, I love that plugin.
Can this plugin also give away my address with a 1/10000 chance?
Can this plugin sell my soul to the devil with a 6/666 chance?
At that point it is a 1/111 chance

Got trolley in embed
addPrefix(msg: MessageObject) {
this.preSend = addPreSendListener((_, msg) => this.addPrefix(msg));
@long heart meanie
real
regex replace != string replace
msg.content.replace("https://twitter.com", "https://fxtwitter.com")
replaceAll if you're using a string
the best plugin
but it would be better if it sent your social security number also
yeah true
Dont wanna do this, because there are some twitter urls that shouldnt have fx thing
namely, profile urls
skill issue
eat ball issue

https://twitter.com/joebiden embed where
Bru
thought fxtwitter did same shit as vxtwitter
This doesn't appear to be a twitter URL
This fixes the bug (not sure how good the code is tho lol)
Why did you remove dist from git ignore ๐
Why did you remove dist from git ignore skull
nix is fucky and that's what im currently tryna get around doing lol
I was thinking of just making the folder pre-build for nix but pnpm would need internet to install and that's not allowed w/ the way this all works
why not use a separate repo for nix configs? I'm not a fan of the idea of adding scripts for every distro to the root of this project ๐
Nix is a special case w/ flakes and it's much easier to work with it in-repo than making a completely new one specifically for it
That plus I don't think there's any other distros out there that would need this treatment
perhaps you could put this stuff in a scripts/nix folder and then make a prepare:nix command that moves files to root or something, to keep the base of the project tidy for most people.
Good idea
yeah people stupid and will actually use that plugin 
github mobile app shit tho
Why though? If anybody actually enables it after reading the description it's their fault
The flake.nix and flake.lock are required to be in the root, but everything else can be in that scripts/nix folder
something something discord will get pissed off if we include a token leaker in our mod ๐
NO
the idea of the scripts/nix folder is that the flake goes in there too, and the prepare:nix script (in package.json) will copy the flake files to root, where the user can then do stuff with it.
just make a store that fetches an unofficial http api that users can input and can download from that yes yes
no need to bundle the plugin in the client
๐๐
the idea of the scripts/nix folder is that the flake goes in there too, and the prepare:nix script (in package.json) will copy the flake files to root, where the user can then do stuff with it.
I'm not sure that's possible, since the first thing nix looks for on building is the flake and if it's not there it'll just fail
๐
I'm on my phone but from what I gather through docs and guides...
git clone vencord
go into vencord folder
pnpm install
pnpm prepare:nix
nix-build
horror
Mars, Mars, Mars, megumin, Mars
you forgot ...
who sent megu to mars 
then the last patch should also be removed because its only purpose is fixing isStaff() now returning true
nop
yop
This patch does not matter because the function it's patching gets defined again a few lines later. The last patch is for that. You could keep this patch and set it to a random string and it would still not make a difference. You can try the fork to see it yourself.
nop
e685e39 fix(plugin): fix isStaff returning true for all... - BanTheNons
whats that other guys discord
@half shell (dont mind the ping)
@austere talonexplain what css modules even are
scoped css
/* messageLogger.module.css */
.message {
display: none;
}
/* otherPlugin.module.css */
.message {
display: inline;
}```
these would usually conflict but css modules mangle all classNames
Hi
so instead of .message it'd be .message-jsja819s
that's why discords classes are all like this
that's css modules
just a way to not have to worry about making ur css classNames unique
they're cool
but mmh also now that i think about it maybe we actually shouldn't use these
how do you modify discord classes then
yeah exactly
but you can just not name ur thing .module.css
just force plugin devs to prefix classes with plugin names
foo.module.css -> module
foo.css -> not module
oh
ig
// messageLogger.ts
import "./messageLogger.css";
this should be all you have to do
and it automatically handles loading it for u
add on plugin start?
when plugin enabled
i think the best approach would be simply creating an object
{
messageLogger: "someCss{}",
baller: "someCss{}"
}```
horror ven is actually doing css modules
conflicts have been farted :trollface:
yeah sure
lol cypwn guy
who
its one of those goofy app repos

I'm on my phone but from what I gather through docs and guides...
git clone vencord go into vencord folder pnpm install pnpm prepare:nix nix-build
did the best i could do from this comment
which is really hard w/ nix
ok cool, dist no longer needs to be in the repo for nix to work
NOOOOoo its such a good plugin tho
vencord bad
bruh the checks so spammy lmao
me when github actions checks action required on main
i removed checks
still works ok
love
I personally believe that plugins shouldn't depend on external services unless the service is deemed reliable by consensus (ex: GitHub, self-hosted alternatives to social media (as long as the base URL is configurable))
^
i dont think im ever gonna merge smth using some weird api
if it's a trusted/popular service then sure like if u wanna do ebay integration sure man 
you will merge aperii connection plugin
now i wanna see someone make an ebay integration
it will put ebay banners everywhere
can you even do so serverside yet
yea
maybe i will make a plugin once I finish the moderation tools for it
What if I make a plugin that adds adsense
(it's a reliable api)
neon green
nop
b273eb correct color (real)
I did banana yellow
it is nice and soft and cool 
#f2da80
ebay my beloved
LOL
omg the inline lint works now
so strange, I didn't change anything except switch from github node to @actions/setup-node
i really need to get editorconfig plugin for neovim
or figure out how to get what im using already to use it
the {spacing} is dictated by eslint I'm pretty sure
vscode Editorconfig sadly very limited ๐
i just need to configure ale better then
oh wait it's just editor config being so limited
that's a pain, it's such a cool thing
but ig it makes sense, you gotta stay minimal if you want maximum support
what does ensureModule() do, does it just check if it exists?
yeah
probably no need to nop that as well then
it basically is nop after that since it returns a promise
and everything discord does with it was in the .then()
ensureModule: function(e) {
return l.embedded ? __OVERLAY__ && D.has(e) ? Promise.resolve() : y.nativeModules.ensureModule(e) : Promise.reject(new Error("not embedded"))
},```
DiscordNative.nativeModules.ensureModule
async function ensureModule(name) {
if (modulePromises[name] == null) {
modulePromises[name] = electron.ipcRenderer.invoke(NATIVE_MODULES_INSTALL, name);
}
const moduleInstall = modulePromises[name];
await moduleInstall.catch(e => {
modulePromises[name] = null;
return Promise.reject(e);
});
module.paths = getSanitizedModulePaths();
}```
yeah I was just asking about ensureModule since I wasn't sure what it does
does disabling rpc actually improve performance noticeably?
idk i didnt write it for performance increase 
i wrote it cause i got tired of my other clients stealing my presence when developing
lmao
but maybe some weird paranoid person or someone in the same situation will find it useful
you test on all branches? or just different mods
should be testing on all branches but im really not
for swc i have a client with a reverted set of scripts
so i would just compare whats changed and find what i need post-swc
i just do stable
I also only test on electron 19 so maybe I should test on 13
and if im in a call or something ill use another client to dev
yeah I do that as well but I have the sources saved locally I just use that
ripgrep nicer than devtools search
lmao
reminds me of me trying to figure out why my plugin doesn't work but also doesn't error only to realise 30 minutes later that I forgot to enable it
the smartest ven known to man
mood
opens bloons since youve been neglecting it
stupid merge commit why is that there 
yippee
coco pops
guh I am trying to make pronoundb but the patch isn't working
nothing gets changed
even though the regex matches in devtools
oh nevermind vencord just is dumb and so am I
reading console helps sometimes
ok I fixed it
we do a little trolling
@austere talon hi help idk how to react
I managed to replace the component by simply doing this but how do I add a component after something else
like you want both?
presumably to have both the timestamp and pronouns in same thing this is why traditional patchers are still useful for react stuff ๐
you can just return an array
i will port username api eventually
or pass the thing as prop to ur component and incorporate it somehow
or store it in the plugin object after finding with webpack and accessing it under the global or whatever
whats the best way to capture that entire function then to wrap it with an array
I can't just (.+)} because that would end too early
really there are a multitude of ways to do this
use .+?
I guess I can just match the triple parens
it not being greedy will lead to it capturing up to the last one
that might work
.+?})))
you can use this
/\((\(.+?\)|.+)+\)/```
yeah
haven't tested but should work
I like your funny words magic man
mmh not really
(regex is easy but reading it is horrible)
but something similar to that could work
rusher wrote smth like that once
smart kid
I find it funny I am having this conversation when all of the timestamps are replaced with "deez fucking nuts"
anyway the easiest way is to match the end
amazing chat list
and the (edited) thing is replaced too
test 2
no
oh
not sure how to filter that
it was in this screenshot ๐
its probably in a var
are you in the timestamp element itself?
yeah
guh
probably not if the edited thing is being replaced, if they are then ๐คจ what is discord on today
my plugin has answered your question
I could just append to username instead
but that might be confusing
especially with people who already have it in their nickname
look at the code before swc
and find some keywords
and then search
pro ven strategy
yes but im on mobile rn
time to clone giant discord files repo

ok well thats kinda progress
its in the wrong place but it got appended appropriately
youre going to use useEffect to fetch pronouns right?
yes I already was told how to handle that
ok good
@mortal fractal ok so this works but the issue is I can't get deep enough in the tree without editing the timestamp itself
which is what I was doing originally
can I just somehow check if the outside is MessageHeader instead
right here
I replaced r.createElement with an array
and appended my own
but its not deep enough
u = showTimestamp
c = compact
whats qe.Z look like?
I assume that is the timestamp component
my div gets added right after it
yeah it is
the same component I was patching earlier
wait I have an idea
is it possible to pass the timestamp component to my component, and then patch it from my component
tbh if you want you could just add a prop to it here just to designate this timestamp should include pronouns
i think that would be the least convoluted solution
hm that would work
but if its easy enough to just modify component text then I would prefer that
let me console.log it to see how complicated that would be
if its just a child you could just add another child to it probably
That's bad out of context
youd also need to pass down message author
idk for sure
genuinely i dont like the idea of touching props after the element is rendered tho
because of cases like if react development is loaded, props are frozen
uh well it worked lmao
mostly
it replaced the text
ok yeah I am just going to do the passing down props method
The creators of regex did not have this in mind when they created it
this is horrible
Ok well I need to sleep
Trying to figure out what the heck the regex is doing later is not going to be fun
Maybe we can reuse the automod embed for this? Would look a lot better if that's possible
Worrying that both these plugins were made in 10 minutes
the sus plugin is the most useful plugin added so far
(correction: 2nd most useful after ๐ฟ)
add your author info to src/utils/constants.ts instead, import it and use it. So you don't have to write your name and user id for every plugin you make/have been credited in.
add your author info to src/utils/constants.ts instead, import it and use it. So you don't have to write your name and user id for every plugin you make/have been credited in.
Done
Maybe we can reuse the automod embed for this? Would look a lot better if that's possible
I've never seen an automod embed (i've never seen anything related to discord's automod) so idk. good idea though
The automod embed is beautiful
don't think it's possible, as the author of the automod message is the user that sent the message which got blocked, and there's no way to get it to show another user than the author. plus the message only has content and no image embeds/attachments/etc.
Le features:
- Builds latest bundle and extension
- Puts it into one release allowing easy downloads without touching the API and it's much cleaner!
- Really fast!
run: pnpm install --frozen-lockfile
Unless I'm blind this doesn't seem used anymore
Yeah, thanks for pointing out!
sus plugin is very useless so please remove it, the google one should url encode the input and please fix the typos
"is very useless"
has moyai plugin
moyai is at least funny
this one is just a shitty copy of another plugin

also I say we merge all the single command plugins into one
yeah but then you cant finetune what commands you want enabled
add plugin settings first 
why would u want that
like just register all commands who care
i dont but someone probably does
please use receiveMessage(). This is acually what sendBotMessage calls under the hood and is more customisable
this requires a lot more options to be specified. There used to be a createBotMessage() that created such a message for you but it's no longer a named export.
here's the old code to find it again. loggingName is only used for tracking btw which we disable so you can just ignore it
t.createBotMessage = function (e) {
var t = e.channelId,
n = e.content,
a = e.embeds,
r = e.loggingName;
return {
id: c(),
ty...
wp.find(wp.filters.byCode('username:"Clyde"'))
The component for it (pre-swc name: ChatMessageEmbedCard) isn't exported anymore due to module flattening.
don't think it's possible, as the author of the automod message is the user that sent the message which got blocked, and there's no way to get it to show another user than the author. plus the message only has content and no image embeds/attachments/etc.
you have to parse markdown and create message accessories yourself, which the client has helper functions to do
non exported members aren't a biggie just patch the module
i checked and we dont wrap the module in a function with better names to access module, exports and require but i could be wrong
i guess you could like
attach it to your plugin class
ah
and as for the first part?
what about it
ChatMessageEmbedCard doesn't do the blocked highlighting by default
it uses the message prop to get the author
and then the highlighting and stuff is done in content
thus why you need to reparse markdown yourself
Didnt really know what to put there, means Guild And Channel. Changed to ctx as that is what is mentioned in src/api/Commands.ts
Just removes F1 from the bind, still keeps Ctrl+Shift+H
Missing BigInt notation (n) on ID (thus why linter is complaining)
516f8c4 Switch to standalone-electron-types, -200MB npms - Vendicated
should maybe disable tags logging now
anything bad in that?
cuz i can change it
easier downloads for client
eh it's nicer than having 3 billion tags
but that's also why u should pin 3rd party actions to commit hash
cause otherwise they could replace the tag with malware
love
buildWeb doesn't make a zip, you should clarify that you have to run buildWeb:zip to make a zip
Closing PR, both plugins are more than useless. Sorry to have wasted your time.
lmao
the Google one isn't even useless lmao
Closing PR, both plugins are more than useless. Sorry to have wasted your time.
WRONG.
OBJECTION! The Google Plugin is not useless! It clearly has a use.
As you can see from its description, this plugin is different than uwuifier because it owoifies channels, guilds, and even menus. I've renamed the uwuifier plugin to "UwUify command" (with permission from @exhq) to help distinguish them. This was originally a console script written by @Benricheson101 a few months ago, I just turned it into a Vencord plugin with a few tweaks.
best plugin ^
At this point half of the plugins will just be joke plugins
Does it owoify the chat list
it owoified every language string
channel
and guild
awwwww
actually wait nobody merge it pls
it needs to inject into guild create, guild update, channel create and channel update
currently in only owofies those on startup
I don't like this api, please make it
function sendBotMessage(channelId: string; message: Message)
then you can merge the two objects with a function very similar to the mergeDefaults function except you should use ||= instead of ??=
Also as I said before, please cache the webpack search via lazyWebpack/waitFor
since the json is fairly large, how about turning it into a github gist and fetching it on demand? Or if that's too tedious to implement, on plugin start
@austere taloncan you elaborate on the two object merge??
actually u can just use mergeDefaults
const botMessage = createBotMessage({ channelId, embeds: [], content: "" });
receiveMessage(channelid, mergeDefaults(msg, botMessage));
it recursively merges the objects (second object into the first)
that's also how I fill settings defaults
mergeDefaults({ foo: 12, author: { name: "hi" }}, { foo: 12, bar: 42, author: { name: "hi", id: "12" }})
=> { foo: 12, bar: 42, author: { name: "hi", id: "12" } }
lazyWebpack(filters.byCode('username:"Clyde"'))
should work
This approximately how lazyWebpack works?
yes
Alright
yes
otherise you're doing a search that may take up to 40ms every time it's called
cpu waste
Then I should drag _receiveMessage to top as well
yes
Also
Reason why I have the whole author embed is because it is customizeable
Would be interesting to see it be used to have a "Vencord" in-client bot sort of
@obsidian lintel
its possible
yeah but it works fine with mergeDefaults
basically for every property in arg2 (recursively), if arg1 doesn't have the property, add it to arg1
Confused asf
you're merging the defaults on a string??
make it an object 
sendMessage(channelId, msg)
@austere talon I will close my css pr and remove css traces from ff pr
horror
I still dont understand
oh
export function sendBotMessage(channelId: string, content: string) {
let botMessage = createBotMessage({ channelId, content: "", embeds: [] });
console.log(mergeDefaults(content, botMessage));
_receiveMessage.receiveMessage(channelId, mergeDefaults(botMessage, { content: content }));
}
this?
Nope, still broken asf
bro ```ts
export function sendBotMessage(channelId: string, msg: Message) {
const botMsg = createBotMessage({ channelId, content: "", embeds: [] });
Messages.receiveMessage(channelId, mergeDefaults(msg, botMsg));
}
sendBotMessage("182188201001822", { content: "hi", author: { username: "me" }})```
webhook
not only a webhook
a โ
WEBHOOK
@mortal fractal why don't u just check if the message has a webhookId?
or do u want it to detect clyde messages
didnt even realize that
071508c fix(Webhook Tags): Don't mark clyde messages as... - Vendicated
at least its not qr code login
fuck u github
why do they have to be one event
do i really have to add it to ghwp
yop
yop
...maybe trying to get nix working w/ pnpm instead of yarn is a useless endeavour
I do have Node.js installed, which was the first thing I thought to double-check, and running node in the terminal does in fact work fine. Devtools console has this object logged but nothing else:
{
cmd: "node build.mjs",
code: "ENOENT",
errno: -2,
path: "node",
spawnargs: [ "build.mjs" ],
stderr: "",
stdout: "",
syscall: "spawn node",
}
Update seems to otherwise go smoothly, as if I open the directory up in the terminal, rerun pnpm build, and ...
Depending how you've installed node, node may not be in your path at the time Discord is started. This can happen if you're using fnm or other tools, or even if your path is just configured incorrectly.
I didn't even see this, let me try editing my fork to reflect this
The component for it (pre-swc name: ChatMessageEmbedCard) isn't exported anymore due to module flattening.
That ain't an issue since we can export it via a patch.
That is if we can find it via regex that is....
If we can find it via regex that is....
find: "().embedCard,", then figure out which function it is an export it.
Is there a way I can check what PATH the app is using?
Should be all good, finally got everything working w/ pnpm
after so much suffering
Open Devtools (CTRL + Shift + i), click the dropdown in the second bar on the top where it says "top". Now switch to Electron isolated context and run process.env.PATH
they/them
its a placeholder while I make stuff work
figured
clearly you didnt
they/themedited
LOL
my method of editing properties did not go as planned
they use one component for all timestamps
i read !1 as true
I have to patch the timestamp component
why cant you just make a span and style it to look like a timestamp
bro
the releases kinda annoying cause I get an email every time

github make better webhook and notification categories when
nvm they have
because it adds a newline for some reason
its dumb
as a span???

idk how to web dev lmao
lmao
web dev sucks
span = inline div
find: ".Messages.GUILD_COMMUNICATION_DISABLED_ICON_TOOLTIP_BODY",
replacement: {
match: /\.timestamp,className:.}\)/,
replace: (orig) => `${orig},Vencord.Plugins.plugins.PronounDB.createPronounElement(arguments[0])`
}```
im p sure you can just have $1 instead of a function
Launched discord in the morning only to see the error
A JavaScript error occurred in the main process
Uncaught Exception:
Error: Cannot find module '/home/shiroe/Downloads/Vencord/dist/patcher.js'
Require stack:
- /opt/discord/resources/app/index.js
-
at Module._resolveFilename (internal/modules/cjs/loader.js:887:15)
at Function.n._resolveFilename (electron/js2c/browser_init.js:261:1128)
at Module._load (internal/modules/cjs/loader.js:732:27)
at Function.f._l...
Seems like I had deleted the Vencord folder, following install steps worked again.
Smartest vencord user
I literally just disabled cors
In electron
Not the best method but fuck cors anyways
Anyways time to finish this tomorrow
I am making a method of bulk fetching pronouns every 1.5 seconds because I got ratelimited in like 2 seconds
are you not caching per user?
are you hitting a race condition because parallel requests???
yes but that looks ugly, verbosity is better to understand 
is this Cynthia being dumb and not putting cors on 404s
Just kang api stuff from her old plugin
@austere talon have you tried owoifier yet
As you can see from its description, this plugin is different than uwuifier because it owoifies channels, guilds, and even menus. I've renamed the uwuifier plugin to "UwUify command" ...
@quick ibex can you finish up #66 or do you still need more help?
Just woke up and on the shitter
I'll finish it once at pc
I think I know what the issue is, but not 100%
Issue that I was running into*
@austere talon why this is still not merged
Im just wondering why the name
guy who's infamous for always typing with punctuation
You clearly havent met Chrome Beretta
Dudes a maniac
Why did you call me a retard.
First of all
Its a question, so question mark
Second of all, why punctuate if you are about to throw hands
1 sec
wait is his name kyza agan
I thought he changed it because he had different name in alicord
Dudes a little weird
I am but not if it errors lol
I could fix that but still using bulk requests would be a better idea probably
Oh probably
deranged api
I was getting a ratelimit error
you love
Idk where the ratelimit comes from but probably doesn't have cors
hm idk why I hit the ratelimit
I literally just spammed it with 1k http requests and hit no ratelimit
Hi, i'm sharing you an error that I got while I tried to build, do you know how to fix it ?

I'm so close to disabling issues why does everyone treat them like they're a support channel
you're probably using an ancient nodejs version, use the support channel please
current issue long image loading becuz bad website also dirty regex :husk:.
@austere talonFinished 
export function sendBotMessage(channelId: string, message: Message) {
There's a type for this in discord-types
const MessageSender = lazyWebpack(filters.byProps([ "receiveMessage" ]));
Thing with using the Message type is that it requires a lot of stuff, which would be bothersome to add for small messages.


enabled a bunch of branch protecton rules to test them
little do they know people will start trying to use PRs as issues 
whaaa how does this wokr
Partial<Message>. Might make sense to make it a DeepPartial, you can add https://www.npmjs.com/package/type-fest for that
yes
dev dependency
it's sindresorhus so usually hard pass but this one has no dependencies so it's gud
@quick ibex do u not know how to merge?
click on resolve conflicts and then it looks like this
i think the accept buttons are an extension (https://github.com/refined-github/refined-github)
BRU I DIDNT SEE THE BUTTONS ๐ญ
anyway you just need to delete all the lines with arrows on them, that's to indicate the differences
it's to show you the comparison
so you would delete line 26 28 and 29
and keep line 27
it's weird in this case cause you're just deleting github added stuff but when there's more complex conflict both sections will contain many changes that might conflict so thats what they're for
const botMessage = createBotMessage({ channelId, content: "", embeds: [] });
Im just wondering why the name
I assume the name stuck from the BD plugin
Which might be named after a person that was a grammar Nazi
(I am making assumptions, nothing I said is confirmed)
Forgot to change that :headstone:
there is an api for dismissing botMessages: dismissAutomatedMessage({ channelId, id }). Thus, it would make sense to return botMessage.id to be able to dismiss the message








