Compare commits

...

744 commits

Author SHA1 Message Date
Nuckyz 7fcd9c3f06
why 2024-08-24 04:35:16 -03:00
Nuckyz 8bfacc139a
Clarify mapMangledModule can be used for primitive values 2024-08-24 02:34:50 -03:00
Nuckyz a9a8c338a6
token not required anymore 2024-08-23 20:26:37 -03:00
Nuckyz 262319a97c
who cares about logging in :) 2024-08-23 20:26:03 -03:00
Nuckyz 0379beb0ba
Merge branch 'dev' into immediate-finds-modules-proxy 2024-08-23 20:11:44 -03:00
Nuckyz 13ada86934
Ignore another useless error 2024-08-23 19:10:06 -03:00
Nuckyz fae5f9bfab
Merge branch 'dev' into immediate-finds-modules-proxy 2024-08-23 19:06:45 -03:00
Nuckyz 7d4fc5e8e1
more cleanie 2024-08-23 05:11:07 -03:00
Nuckyz 26a71caced
minor cleanup 2024-08-23 04:55:09 -03:00
Nuckyz b1ad0a0d58
Clarify loading of chunksLeft 2024-08-23 03:35:06 -03:00
Nuckyz 4a9f258e34
Merge branch 'dev' into immediate-finds-modules-proxy 2024-08-23 03:09:04 -03:00
Nuckyz 301b0e7dfc
Merge branch 'dev' into immediate-finds-modules-proxy 2024-08-22 19:56:04 -03:00
Nuckyz 2f806dde95
of course I forgot this 2024-08-20 17:04:38 -03:00
Nuckyz 30ef53403b
Make findModuleFactory reporter testable 2024-08-20 16:58:10 -03:00
Nuckyz ade9a523ac
Merge branch 'dev2' into immediate-finds-modules-proxy 2024-08-20 04:15:02 -03:00
Nuckyz 464dddff13
Only add ifs if IS_DEV 2024-08-20 04:09:39 -03:00
Nuckyz e8965866e6
Restore with value instead of getter/setter 2024-08-20 04:06:47 -03:00
Nuckyz e3d9b2001f
Fix persisting $$vencordPatchedSource when a module is loaded again 2024-08-20 03:56:59 -03:00
Nuckyz e4bc7f2add
Merge branch 'dev' into immediate-finds 2024-08-18 17:16:31 -03:00
Nuckyz edc87ac75e
fix for real now 2024-08-18 17:10:55 -03:00
Nuckyz 5c7773c7bb
apply suggestion and fix bug 2024-08-18 17:00:34 -03:00
Nuckyz 3546632bbf
Remove dead workaround 2024-08-18 01:19:34 -03:00
Nuckyz 9a48454a9f
better like this 2024-08-18 01:13:33 -03:00
Nuckyz 0e2c0b9bfb
Cleanup extractAndLoadChunksLazy error handling 2024-08-18 01:09:54 -03:00
Nuckyz 84c78a4262
Deprecate more unused apis 2024-08-18 01:02:58 -03:00
Nuckyz cfbe4affc0
Merge branch 'dev2' into immediate-finds-modules-proxy 2024-08-18 00:52:31 -03:00
Nuckyz e8f017b15e
bruh 2024-08-18 00:30:43 -03:00
Nuckyz 22a81ab142
Merge branch 'dev2' into immediate-finds-modules-proxy 2024-08-18 00:28:42 -03:00
Nuckyz 93d450a600
Make it dev only 2024-08-18 00:24:21 -03:00
Nuckyz 50bb6d867b
Add $$vencordPatchedSource 2024-08-18 00:22:02 -03:00
Nuckyz 6cc2f53501
Merge branch 'dev2' into immediate-finds-modules-proxy 2024-08-17 01:32:40 -03:00
Nuckyz f9776ce1ae
NoTrack: Fix another issue related to proxies 2024-08-14 19:41:31 -03:00
Nuckyz 18c5ca216c
Merge branch 'dev' into immediate-finds-modules-proxy 2024-08-14 19:40:21 -03:00
Nuckyz 3f0d915c75
NoTrack: Fix on encoded assets 2024-08-14 19:25:59 -03:00
Nuckyz a8f77a12df
Merge branch 'dev' into immediate-finds-modules-proxy 2024-08-13 01:53:44 -03:00
Nuckyz 44785d3498
Merge branch 'dev' into immediate-finds-modules-proxy 2024-08-11 18:57:47 -03:00
Nuckyz 473109b1d9
idk anymore 2024-08-05 13:25:25 -03:00
Nuckyz f398a1c871
fix breaking settings 😭 2024-08-03 21:56:33 -03:00
Nuckyz 9871e16e28
fix error spam in non app discord websites 2024-08-03 17:11:03 -03:00
Nuckyz b22d4622ed
for real now 2024-08-03 16:32:28 -03:00
Nuckyz f05d462a73
last one 2024-08-03 16:23:42 -03:00
Nuckyz c183018fb1
fix logged in dependant find 2024-08-03 15:28:18 -03:00
Nuckyz f9c11a1149
unexplode console shortcuts 2024-08-03 15:13:27 -03:00
Nuckyz 45a876a0d5
more fixes 2024-08-03 15:02:19 -03:00
Nuckyz 4d88a13f5e
clean 2024-08-03 14:54:12 -03:00
Nuckyz eeb4d26812
forgot this 2024-08-03 14:48:05 -03:00
Nuckyz 2429c283aa
this should be webpackDependantLazy 2024-08-03 14:43:21 -03:00
Nuckyz 1f1e3e8456
rename find 2024-08-03 14:42:05 -03:00
Nuckyz 64e1f294e6
Merge branch 'dev' into immediate-finds-modules-proxy 2024-08-03 14:34:31 -03:00
Nuckyz e801c71fdf
Add back top level destructuring for backwards compabitlity 2024-08-03 14:33:03 -03:00
Nuckyz 4677ac779a
Add findComponentByFields and filters.componentByFilter 2024-08-03 14:01:52 -03:00
Nuckyz ed32b7964d
Merge branch 'dev' into immediate-finds-modules-proxy 2024-08-03 13:29:02 -03:00
Nuckyz 76f8b0e38e
Make getUserSetting not return undefined 2024-08-03 13:27:46 -03:00
Nuckyz e24bdc2b6f
Merge branch 'dev' into immediate-finds-modules-proxy 2024-08-02 21:32:11 -03:00
Nuckyz 4bcefb744d
Merge branch 'dev' into immediate-finds-modules-proxy 2024-08-02 21:19:25 -03:00
Nuckyz 4d03a695aa
Fix broken patches 2024-08-02 21:17:47 -03:00
Nuckyz ca3768ca5d
🧹🧹🧹🧹🧹🧹 2024-08-02 20:48:44 -03:00
Nuckyz 6bdd0ba4a9
L overload react 2024-08-02 19:53:37 -03:00
Nuckyz 633a84581d
fix lint 2024-08-02 19:48:49 -03:00
Nuckyz 4a590d3d0a
Merge branch 'dev' into immediate-finds-modules-proxy 2024-08-02 19:46:57 -03:00
Nuckyz 1905aa0ae8
e 2024-07-25 21:37:37 -03:00
Nuckyz 026e716710
aaaaa 2024-07-24 18:03:21 -03:00
Nuckyz 9e6f24cc92
work 2024-07-24 18:02:02 -03:00
Nuckyz 75a8098590
I love not having a linter 2024-07-24 17:59:53 -03:00
Nuckyz 1f20074d4e
🧹🧹🧹 2024-07-24 17:55:35 -03:00
Nuckyz fb394c6e1a
it didnt 2024-07-24 15:20:12 -03:00
Nuckyz 465dd15e2c
boop (please work I cant test) 2024-07-24 15:18:24 -03:00
Nuckyz f676613173
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-07-20 19:37:54 -03:00
Nuckyz be6209ee44
why is this still here 2024-07-20 19:37:45 -03:00
Nuckyz 15a3694533
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-07-20 19:33:45 -03:00
Nuckyz 9fd16825e2
oops 2024-07-20 19:32:41 -03:00
Nuckyz 129b770ffa
fixes 2024-07-20 19:30:24 -03:00
Nuckyz 42353373db
mapMangledModule: Properly support component finds 2024-07-20 19:17:05 -03:00
Nuckyz 5f7c44f478
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-07-19 01:01:48 -03:00
Nuckyz 2df13a2e17
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-07-19 01:01:32 -03:00
Nuckyz dc116fc3b1
Merge branch 'dev' into modules-proxy-patches 2024-07-19 01:00:37 -03:00
Nuckyz cd3534f6fc
Merge branch 'dev' into immediate-finds 2024-07-19 00:59:35 -03:00
Nuckyz 01bd41413d
FriendsSince: Fix broken patch 2024-07-19 00:57:03 -03:00
Nuckyz 654a271eae
eeee 2024-07-19 00:46:48 -03:00
Nuckyz efd48e0364
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-07-17 17:03:53 -03:00
Nuckyz 09447d562e
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-07-17 17:03:48 -03:00
Nuckyz e57c99399d
Merge branch 'dev' into modules-proxy-patches 2024-07-17 17:03:12 -03:00
Nuckyz a3612dd4ee
Merge branch 'dev' into immediate-finds 2024-07-17 17:02:56 -03:00
Nuckyz e9328cadea
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-07-17 16:08:06 -03:00
Nuckyz 8fa19656ae
fix grammar 2024-07-17 16:07:50 -03:00
Nuckyz d58d8aea71
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-07-17 15:59:51 -03:00
Nuckyz 5462bb1438
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-07-17 15:59:48 -03:00
Nuckyz 9dadde6884
Merge branch 'dev' into modules-proxy-patches 2024-07-17 15:59:31 -03:00
Nuckyz 81a1822e70
Merge branch 'dev' into immediate-finds 2024-07-17 15:58:34 -03:00
Nuckyz 974953ba01
Fix mapMangledModule for primitives 2024-07-17 15:58:10 -03:00
Nuckyz 27fd143318
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-07-15 00:44:48 -03:00
Nuckyz 3bc71c688a
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-07-15 00:44:44 -03:00
Nuckyz d869b2ddbb
Merge branch 'dev' into modules-proxy-patches 2024-07-15 00:44:21 -03:00
Nuckyz fb3ae98419
Merge branch 'dev' into immediate-finds 2024-07-15 00:44:12 -03:00
Nuckyz 70df451e64
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-07-15 00:42:20 -03:00
Nuckyz 2fb616ebf1
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-07-15 00:42:16 -03:00
Nuckyz bd25e0cd75
Merge branch 'dev' into modules-proxy-patches 2024-07-15 00:42:07 -03:00
Nuckyz 62d4add6c1
Merge branch 'dev' into immediate-finds 2024-07-15 00:41:44 -03:00
Nuckyz 3f5491d379
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-07-14 00:29:48 -03:00
Nuckyz e35d0f680f
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-07-14 00:29:45 -03:00
Nuckyz 187ece1905
Merge branch 'dev' into modules-proxy-patches 2024-07-14 00:29:29 -03:00
Nuckyz 2b99f4ece3
Merge branch 'dev' into immediate-finds 2024-07-14 00:29:05 -03:00
Nuckyz 8bf98be472
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-07-12 16:43:20 -03:00
Nuckyz 0506505449
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-07-12 16:43:18 -03:00
Nuckyz 3edc36d5e0
Merge branch 'dev' into modules-proxy-patches 2024-07-12 16:43:06 -03:00
Nuckyz 6ffa969955
Merge branch 'dev' into immediate-finds 2024-07-12 16:42:46 -03:00
Nuckyz 6213fca9ed
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-07-11 17:36:22 -03:00
Nuckyz 56477d4e96
Fix testing factory filters on non factories 2024-07-11 17:32:36 -03:00
Nuckyz 104f193a76
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-07-11 17:17:37 -03:00
Nuckyz 293b90a6d2
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-07-11 17:17:34 -03:00
Nuckyz 8159937827
Merge branch 'dev' into modules-proxy-patches 2024-07-11 17:17:12 -03:00
Nuckyz aa35602827
Merge branch 'dev' into immediate-finds 2024-07-11 17:16:15 -03:00
Nuckyz 42c4845261
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-07-10 04:36:22 -03:00
Nuckyz 710f627016
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-07-10 04:36:19 -03:00
Nuckyz 4389b78410
Merge branch 'dev' into modules-proxy-patches 2024-07-10 04:36:05 -03:00
Nuckyz fde823fabf
Merge branch 'dev' into immediate-finds 2024-07-10 04:35:57 -03:00
Nuckyz cce8f14d72
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-07-07 15:15:58 -03:00
Nuckyz c8356570a3
crazy 2024-07-07 15:15:45 -03:00
Nuckyz 021baa54d3
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-07-07 15:11:00 -03:00
Nuckyz ddd5d9e0c3
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-07-07 15:10:52 -03:00
Nuckyz 920fb20d8e
Merge branch 'dev' into modules-proxy-patches 2024-07-07 15:10:41 -03:00
Nuckyz 438b3e0598
Merge branch 'dev' into immediate-finds 2024-07-07 15:10:21 -03:00
Nuckyz 763b24aa92
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-07-05 04:06:04 -03:00
Nuckyz 65013f0149
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-07-05 04:06:01 -03:00
Nuckyz 24795ba9f8
Merge branch 'dev' into modules-proxy-patches 2024-07-05 04:05:52 -03:00
Nuckyz aa29e479b9
Merge branch 'dev' into immediate-finds 2024-07-05 04:05:42 -03:00
Nuckyz dd25044afd
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-07-05 04:05:02 -03:00
Nuckyz 8c1979481e
Add patch timings testing to reporter 2024-07-05 04:02:34 -03:00
Nuckyz 2a1684d902
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-07-03 04:50:32 -03:00
Nuckyz b377cad1e6
fix reporter trying to JSON.stringify regex 2024-07-03 04:50:08 -03:00
Nuckyz 4e09e347e2
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-07-03 03:55:33 -03:00
Nuckyz ea6fccb54e
fix setting parsed regex as filter logging props 2024-07-03 03:47:01 -03:00
Nuckyz c784bc5dbd
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-07-03 00:12:49 -03:00
Nuckyz edba931afe
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-07-03 00:12:45 -03:00
Nuckyz 208882e8ec
Merge branch 'dev' into modules-proxy-patches 2024-07-03 00:12:08 -03:00
Nuckyz e0cb7242d6
Merge branch 'dev' into immediate-finds 2024-07-03 00:11:29 -03:00
Nuckyz b3ab32180c
Merge branch 'dev' into immediate-finds 2024-07-03 00:07:01 -03:00
Nuckyz 2506ba1b2e
feat(plugins): ConsoleJanitor (#2659) 2024-07-03 00:06:12 -03:00
Nuckyz 0d0c63f596
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-07-02 21:53:20 -03:00
Nuckyz 8abb68c553
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-07-02 21:53:06 -03:00
Nuckyz f6147c6c13
Merge branch 'dev' into modules-proxy-patches 2024-07-02 21:52:50 -03:00
Nuckyz b5fdb43cbf
Merge branch 'dev' into immediate-finds 2024-07-02 21:51:41 -03:00
Nuckyz 30057985c4
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-07-02 20:21:41 -03:00
Nuckyz a95037d80a
cleanup 2024-07-02 20:21:26 -03:00
Nuckyz 99e21ad284
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-07-02 20:17:34 -03:00
Nuckyz d90bcdb063
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-07-02 20:17:16 -03:00
Nuckyz 771d51bcc3
Merge branch 'dev' into modules-proxy-patches 2024-07-02 20:12:21 -03:00
Nuckyz c7e49672f5
Merge branch 'dev' into immediate-finds 2024-07-02 20:07:16 -03:00
Nuckyz 3331ed2155
forgot this 2024-07-02 20:01:15 -03:00
Nuckyz bc34d72b57
Support regex in webpack finds 2024-07-02 20:00:05 -03:00
Vendicated b333deb731
improve settings ui (again) 2024-07-02 18:51:51 +02:00
Nuckyz 614cbc1146
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-07-02 00:05:13 -03:00
Nuckyz a985286c88
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-07-02 00:05:10 -03:00
Nuckyz 1297408171
Merge branch 'dev' into modules-proxy-patches 2024-07-02 00:05:03 -03:00
Nuckyz cc536bdbf4
Merge branch 'dev' into immediate-finds 2024-07-02 00:04:54 -03:00
Nuckyz ea859f59b0
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-06-29 19:18:06 -03:00
Nuckyz a04ccd0d11
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-06-29 19:18:02 -03:00
Nuckyz c1b4eb5b04
Merge branch 'dev' into modules-proxy-patches 2024-06-29 19:17:50 -03:00
Nuckyz 3f059e17be
Merge branch 'dev' into immediate-finds 2024-06-29 19:17:35 -03:00
Nuckyz 48442aee1d
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-06-29 04:45:09 -03:00
Nuckyz 9ca13d1250
boop 2024-06-29 04:45:00 -03:00
Nuckyz 2c3be4533e
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-06-29 02:24:53 -03:00
Nuckyz 7bf2152353
bleh 2024-06-29 02:24:45 -03:00
Nuckyz a6f4622837
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-06-29 02:24:36 -03:00
Nuckyz 2f55c7b126
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-06-29 02:23:50 -03:00
Nuckyz 14d1a2d1ea
Merge branch 'dev' into immediate-finds 2024-06-29 02:23:23 -03:00
Nuckyz 332f3e532b
Dont depend on modules being an object again 2024-06-29 02:21:44 -03:00
Nuckyz 28a7fbb309
Merge branch 'dev' into modules-proxy-patches 2024-06-29 01:33:59 -03:00
Nuckyz 4caf86b60e
Merge branch 'dev' into modules-proxy-patches 2024-06-29 01:28:17 -03:00
Nuckyz 5a85d6e78e
Harder conditions for Sentry patching 2024-06-29 01:26:03 -03:00
Nuckyz 20cfa932a4
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-06-28 19:03:18 -03:00
Nuckyz 9e998db456
typings 2024-06-28 19:03:09 -03:00
Nuckyz 3d4a7638a4
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-06-28 18:56:02 -03:00
Nuckyz ab8da19e23
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-06-28 18:55:58 -03:00
Nuckyz b8335108e4
Merge branch 'dev' into modules-proxy-patches 2024-06-28 18:55:44 -03:00
Nuckyz 403276d307
Merge branch 'dev' into immediate-finds 2024-06-28 18:55:36 -03:00
Nuckyz 748a456cfb
Delete patching properties after used 2024-06-28 18:54:37 -03:00
Nuckyz 0cd0c813f2
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-06-28 18:43:31 -03:00
Nuckyz f647ff0ee9
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-06-28 18:43:27 -03:00
Nuckyz c2d708a621
Merge branch 'dev' into modules-proxy-patches 2024-06-28 18:43:03 -03:00
Nuckyz 35343bd790
Merge branch 'dev' into immediate-finds 2024-06-28 18:39:49 -03:00
Nuckyz cc5d4a7b3a
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-06-28 00:58:26 -03:00
Nuckyz ae655111de
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-06-28 00:58:19 -03:00
Nuckyz b768c61ef8
Merge branch 'dev' into immediate-finds 2024-06-28 00:57:55 -03:00
Nuckyz d95367b31d
Merge branch 'dev' into modules-proxy-patches 2024-06-28 00:57:36 -03:00
Nuckyz 1e4ad4db4c
Fix for latest webpack change 2024-06-28 00:42:36 -03:00
Nuckyz d8ba959d1e
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-06-27 22:21:08 -03:00
Nuckyz 0742cecd41
clean commons 2024-06-27 22:20:58 -03:00
Nuckyz ed4a797ad3
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-06-27 19:19:29 -03:00
Nuckyz 505246954b
why 2024-06-27 19:19:22 -03:00
Nuckyz eecc21db91
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-06-27 19:00:23 -03:00
Nuckyz 962eaa9df7
this was too hacky and causing issues already 2024-06-27 18:57:57 -03:00
Nuckyz 0190ada1a1
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-06-27 18:47:52 -03:00
Nuckyz b5a1b3a124
a little more 2024-06-27 18:47:29 -03:00
Nuckyz 1f3b8cdfd8
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-06-27 18:43:04 -03:00
Nuckyz 1f2c26cdba
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-06-27 18:42:57 -03:00
Nuckyz 3b6bef1cda
Merge branch 'dev' into modules-proxy-patches 2024-06-27 18:41:24 -03:00
Nuckyz 858b0e3dd7
oops 2024-06-27 18:40:58 -03:00
Nuckyz 718ebd56ac
Allow mapMangledModule to be destructured again 2024-06-27 18:39:57 -03:00
Nuckyz 1511260666
Merge branch 'dev' into immediate-finds 2024-06-27 17:50:41 -03:00
Nuckyz 4ff7c22505
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-06-27 06:42:40 -03:00
Nuckyz 057ccfde11
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-06-27 06:40:56 -03:00
Nuckyz edf4e75ae2
Merge branch 'dev' into modules-proxy-patches 2024-06-27 06:38:08 -03:00
Nuckyz 62d9d1310d
Merge branch 'dev' into immediate-finds 2024-06-27 06:37:17 -03:00
Nuckyz e592a50d7c
Fix broken patches 2024-06-27 06:35:01 -03:00
Nuckyz c785053b86
Deprecate proxyLazy and proxyInner top level destructure 2024-06-27 06:01:13 -03:00
Nuckyz e9081d2a52
No longer destructure at top level 2024-06-27 05:45:06 -03:00
Nuckyz 98c67e1165
add findByPropsAndExtract; allow other finds to parse result 2024-06-27 05:29:07 -03:00
Nuckyz 6c7d4259e1
Merge branch 'dev' into immediate-finds 2024-06-27 05:04:55 -03:00
Nuckyz d8e3381fb3
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-06-23 19:48:34 -03:00
Nuckyz bdb9c75c74
e 2024-06-23 19:48:15 -03:00
Nuckyz a67b7847b1
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-06-23 16:48:26 -03:00
Nuckyz bab081d4a9
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-06-23 16:48:23 -03:00
Nuckyz 0e5099416c
Merge branch 'dev' into modules-proxy-patches 2024-06-23 16:48:17 -03:00
Nuckyz 20efa661b0
Merge branch 'dev' into immediate-finds 2024-06-23 16:48:09 -03:00
Nuckyz 94ba593be9
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-06-23 16:29:03 -03:00
Nuckyz c9295d3a85
of course... 2024-06-23 16:28:39 -03:00
Nuckyz d55770797a
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-06-22 06:16:36 -03:00
Nuckyz b4b67a98da
fix proxies not being constructable 2024-06-22 06:14:43 -03:00
Nuckyz 453c0b62f4
ff 2024-06-22 05:50:09 -03:00
Nuckyz a3fa74735f
e 2024-06-22 05:40:34 -03:00
Nuckyz a3cab94a68
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-06-22 02:57:46 -03:00
Nuckyz c4e7233604
check for bundlePath value again 2024-06-22 02:57:36 -03:00
Nuckyz 889eb311f9
remove stuff I forgot 2024-06-22 02:50:34 -03:00
Nuckyz 03120d5a98
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-06-22 02:49:08 -03:00
Nuckyz 9446efadd5
a little more 2024-06-22 02:44:44 -03:00
Nuckyz 9c21c23364
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-06-22 02:39:26 -03:00
Nuckyz ba6d3c7e60
organize 2024-06-22 02:37:40 -03:00
Nuckyz cb1fff8d86
Merge branch 'dev' into immediate-finds-modules-proxy 2024-06-21 22:58:11 -03:00
Nuckyz c400db41c3
Merge branch 'dev' into modules-proxy-patches 2024-06-21 22:58:02 -03:00
Nuckyz de4743828a
Merge branch 'dev' into immediate-finds 2024-06-21 22:57:49 -03:00
Nuckyz 700a442ee4
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-06-21 22:55:20 -03:00
Nuckyz dd3904badd
fix issues related to nested proxyInner 2024-06-21 22:54:18 -03:00
Nuckyz 0d360fb7e7
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-06-21 19:52:16 -03:00
Nuckyz 2429231965
Merge branch 'dev' into modules-proxy-patches 2024-06-21 19:51:36 -03:00
Nuckyz 570137040c
actually fix oops 2024-06-21 19:51:11 -03:00
Nuckyz ad3bb91bc1
Merge branch 'dev' into immediate-finds 2024-06-21 19:50:09 -03:00
Nuckyz 161be30b2b
Fix dateFormat filter 2024-06-21 19:50:05 -03:00
Nuckyz 0a4bcd5ccd
fix cache find 2024-06-21 19:47:44 -03:00
Nuckyz 3a5859b815
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-06-21 18:57:31 -03:00
Nuckyz 1ea5f56549
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-06-21 18:57:28 -03:00
Nuckyz a7b02f2f1f
Merge branch 'dev' into modules-proxy-patches 2024-06-21 18:57:16 -03:00
Nuckyz 32306cc6c3
Merge branch 'dev' into immediate-finds 2024-06-21 18:56:24 -03:00
Nuckyz 8cfb289dc7
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-06-21 18:32:58 -03:00
Nuckyz 220062acdb
fix broken find 2024-06-21 18:32:49 -03:00
Nuckyz e5d5bc2d34
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-06-21 18:22:19 -03:00
Nuckyz 17cc81f15d
add findByFactoryCode to console shortcuts 2024-06-21 18:21:42 -03:00
Nuckyz eba42489e9
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-06-21 18:14:54 -03:00
Nuckyz 51dee70ced
update error message 2024-06-21 18:14:41 -03:00
Nuckyz 11561e50f9
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-06-21 18:06:08 -03:00
Nuckyz 2095cc8d03
update flux events 2024-06-21 18:06:02 -03:00
Nuckyz 6e61ef297c
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-06-21 17:58:45 -03:00
Nuckyz 58e810dfbe
Merge branch 'dev' into immediate-finds 2024-06-21 17:57:45 -03:00
Nuckyz b2497373f0
what is this doing here 2024-06-21 05:06:56 -03:00
Nuckyz 18841f4551
and also this 2024-06-21 05:06:11 -03:00
Nuckyz da6ceb8479
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-06-21 05:05:56 -03:00
Nuckyz 6b811dce55
forgot to export this 2024-06-21 05:05:44 -03:00
Nuckyz 8982a53b47
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-06-21 05:01:44 -03:00
Nuckyz 3cf702a2ba
fixes 2024-06-21 05:01:35 -03:00
Nuckyz cd79150a84
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-06-21 04:58:43 -03:00
Nuckyz 343e2802c3
boop 2024-06-21 04:52:08 -03:00
Nuckyz dc8b579488
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-06-21 04:51:45 -03:00
Nuckyz 066001c57a
Add wreq.j 2024-06-21 04:45:16 -03:00
Nuckyz 24a0f62801
Merge branch 'dev' into modules-proxy-patches 2024-06-21 04:38:27 -03:00
Nuckyz ef512e6ea1
forgot this 2024-06-21 04:30:12 -03:00
Nuckyz c6b2eeb86d
Merge branch 'dev' into immediate-finds 2024-06-21 04:24:13 -03:00
Nuckyz e457e58b49
Merge branch 'dev' into immediate-finds 2024-06-21 04:00:35 -03:00
Nuckyz cac0398276
ReverseImageSearch: Fix duplicate find 2024-06-21 03:59:38 -03:00
Nuckyz e93562b95b
Test mapMangledModule with new api 2024-06-21 03:53:39 -03:00
Nuckyz f6dbcb7709
lazy extractAndLoadChunks result 2024-06-21 03:05:30 -03:00
Nuckyz a82a0636cf
Merge branch 'dev' into immediate-finds 2024-06-21 03:03:07 -03:00
Nuckyz 2fc814124f
add new webpack apis 2024-06-21 02:23:04 -03:00
Vendicated a43d5d595a
Plugin Page: add indicator for excluded plugins 2024-06-20 19:56:14 +02:00
Nuckyz ceaaf9ab8a
Reporter: Test mapMangledModule 2024-06-20 01:00:07 -03:00
Nuckyz a01ee40591
Clean-up related additions to mangled exports 2024-06-19 23:50:04 -03:00
Nuckyz 26c2674652
Merge branch 'dev' into immediate-finds-modules-proxy 2024-06-18 17:20:00 -03:00
Nuckyz 9595f75a9a
Merge branch 'dev' into modules-proxy-patches 2024-06-18 17:19:52 -03:00
Nuckyz 2189ce407b
Merge branch 'dev' into immediate-finds 2024-06-18 17:19:42 -03:00
Nuckyz 7b4f97fa08
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-06-16 20:07:59 -03:00
Nuckyz f208472841
\n 2024-06-16 20:07:48 -03:00
Nuckyz 4e4a9f806f
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-06-16 19:57:31 -03:00
Nuckyz afe6d9f7b3
Separate wrapFactory and patchFactory 2024-06-16 19:53:31 -03:00
Nuckyz 2dac66d7c6
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-06-14 18:15:32 -03:00
Nuckyz 83b09a8073
Merge branch 'dev' into modules-proxy-patches 2024-06-14 18:15:23 -03:00
Nuckyz 13d47d91bf
Merge branch 'dev' into immediate-finds 2024-06-14 18:15:14 -03:00
Nuckyz 004f764c2b
Merge branch 'dev' into immediate-finds-modules-proxy 2024-06-13 23:31:30 -03:00
Nuckyz a815122e3c
Merge branch 'dev' into modules-proxy-patches 2024-06-13 23:31:20 -03:00
Nuckyz b88e7faa72
Merge branch 'dev' into immediate-finds 2024-06-13 23:31:10 -03:00
Nuckyz bb22355a57
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-06-13 00:03:39 -03:00
Nuckyz 591f433135
forgot the comment 2024-06-13 00:00:15 -03:00
Nuckyz f726376ab8
avoid circular dependency 2024-06-12 23:59:42 -03:00
Nuckyz 74bd89b721
Make all plugins use new settings API 2024-06-12 23:56:02 -03:00
Nuckyz aa4c6e5496
Update permissions 2024-06-12 22:50:25 -03:00
Nuckyz e8d696c18c
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-06-12 22:32:52 -03:00
Nuckyz d473d52047
update comment 2024-06-12 22:32:42 -03:00
Nuckyz 36c8058920
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-06-12 22:20:52 -03:00
Nuckyz 8d31f3cf62
Use $$vencordOriginal as fallback 2024-06-12 22:14:52 -03:00
Nuckyz 5021d2e344
Merge branch 'dev' into immediate-finds-modules-proxy 2024-06-12 19:16:04 -03:00
Nuckyz 92653eaf96
Merge branch 'dev' into modules-proxy-patches 2024-06-12 19:15:47 -03:00
Nuckyz 2f6e39c0bd
Merge branch 'dev' into immediate-finds 2024-06-12 19:15:40 -03:00
Nuckyz 5e52ecf42e
Merge branch 'dev' into immediate-finds-modules-proxy 2024-06-12 18:31:38 -03:00
Nuckyz b2ae33344b
Merge branch 'dev' into modules-proxy-patches 2024-06-12 18:31:23 -03:00
Nuckyz b24e8cb9e6
Merge branch 'dev' into immediate-finds 2024-06-12 18:31:14 -03:00
Nuckyz 73b1c7b811
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-06-12 17:50:28 -03:00
Nuckyz 210fada19a
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-06-12 17:49:52 -03:00
Nuckyz 002a1cfc16
grrr 2024-06-12 17:46:37 -03:00
Nuckyz e9e25306eb
grrr 2024-06-12 17:45:54 -03:00
Nuckyz 5931a72de2
More re-ordering 2024-06-12 17:37:16 -03:00
Nuckyz 3d0ce5449d
move down 2024-06-12 17:37:15 -03:00
Nuckyz 31c39bc761
guh 2024-06-12 17:37:15 -03:00
Nuckyz 1d2b8a43c0
Decouple factoryListeners from patchFactory 2024-06-12 17:37:15 -03:00
Nuckyz 6d587e6530
More re-ordering 2024-06-12 17:36:43 -03:00
Nuckyz 853585c0bc
move down 2024-06-12 17:33:26 -03:00
Nuckyz 6826fe003c
guh 2024-06-12 17:31:05 -03:00
Nuckyz c3bbc92fa2
Decouple factoryListeners from patchFactory 2024-06-12 17:30:26 -03:00
Nuckyz ed35c496dc
Merge branch 'dev' into modules-proxy-patches 2024-06-12 17:13:21 -03:00
Nuckyz dc8ac98a6e
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-06-12 17:11:04 -03:00
Nuckyz 337850c33a
Merge branch 'dev' into immediate-finds 2024-06-12 17:09:10 -03:00
Nuckyz 08f1b6a3c9
LazyComponents: Allow accessing inner; Improve typings 2024-06-12 17:06:20 -03:00
Nuckyz c8ad68c80b
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-06-10 20:29:26 -03:00
Nuckyz 7b056364da
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-06-10 20:29:03 -03:00
Nuckyz 7f3cad2528
Merge branch 'dev' into modules-proxy-patches 2024-06-10 20:28:45 -03:00
Nuckyz 5d290ecd35
Merge branch 'dev' into immediate-finds 2024-06-10 20:28:31 -03:00
Nuckyz b702b31744
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-06-07 23:29:21 -03:00
Nuckyz 3dbe621059
blehh 2024-06-07 23:29:13 -03:00
Nuckyz 55195676b8
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-06-07 23:25:28 -03:00
Nuckyz 76cb49c381
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-06-07 23:25:24 -03:00
Nuckyz 95c4cc09af
Merge branch 'dev' into modules-proxy-patches 2024-06-07 23:25:17 -03:00
Nuckyz a5b30e762a
Merge branch 'dev' into immediate-finds 2024-06-07 23:24:57 -03:00
Nuckyz 5bbf467be0
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-06-06 00:50:57 -03:00
Nuckyz 46c771f351
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-06-06 00:50:44 -03:00
Nuckyz 94ea4f8e5c
Merge branch 'dev' into modules-proxy-patches 2024-06-06 00:50:09 -03:00
Nuckyz fc8a0e4904
Merge branch 'dev' into immediate-finds 2024-06-06 00:49:36 -03:00
Nuckyz 9eb77cb7fd
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-06-05 23:58:09 -03:00
Nuckyz e1bbd67a9a
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-06-05 23:57:59 -03:00
Nuckyz 625b248a95
Merge branch 'dev' into modules-proxy-patches 2024-06-05 23:57:32 -03:00
Nuckyz 94c365b1c3
Merge branch 'dev' into immediate-finds 2024-06-05 23:57:26 -03:00
Nuckyz f70e9290ce
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-06-05 22:36:40 -03:00
Nuckyz 57b011aea7
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-06-05 22:36:36 -03:00
Nuckyz c8097f0f1a
Merge branch 'dev' into modules-proxy-patches 2024-06-05 22:36:29 -03:00
Nuckyz 5999af76c6
Merge branch 'dev' into immediate-finds 2024-06-05 22:34:55 -03:00
Nuckyz 05717d6bc3
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-06-02 18:49:21 -03:00
Nuckyz 53dd86fa6e
Improve typings and other stuff 2024-06-02 18:46:03 -03:00
Nuckyz 363f2e84fb
Merge branch 'dev' into immediate-finds-modules-proxy 2024-06-01 23:42:20 -03:00
Nuckyz 066ce07512
Merge branch 'dev' into modules-proxy-patches 2024-06-01 23:41:58 -03:00
Nuckyz f5b1b65db8
Merge branch 'dev' into immediate-finds 2024-06-01 23:41:49 -03:00
Nuckyz 6e6ee4db68
NoPendingCount: Fix for message requests 2024-06-01 23:40:05 -03:00
Nuckyz ac1c417e1c
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-06-01 19:53:07 -03:00
Nuckyz 4e14232b5a
Fix patching pre-populated factories 2024-06-01 19:52:17 -03:00
Nuckyz eddfca06ab
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-06-01 19:38:36 -03:00
Nuckyz 61e1eada01
Fix not restoring some original factories 2024-06-01 19:38:01 -03:00
Nuckyz 85322f9e90
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-06-01 18:42:44 -03:00
Nuckyz d329d74fec
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-06-01 18:42:40 -03:00
Nuckyz ac6a21374f
Merge branch 'dev' into modules-proxy-patches 2024-06-01 18:42:18 -03:00
Nuckyz b385be51d6
Merge branch 'dev' into immediate-finds 2024-06-01 18:40:33 -03:00
Nuckyz d8524b087c
Add shortcut for lazy loading chunks 2024-06-01 18:39:01 -03:00
Nuckyz c491122937
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-06-01 18:18:24 -03:00
Nuckyz 13337950dc
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-06-01 18:16:40 -03:00
Nuckyz 281ab9194b
Merge branch 'dev' into modules-proxy-patches 2024-06-01 18:13:49 -03:00
Nuckyz a1881bff3d
Merge branch 'dev' into immediate-finds 2024-06-01 18:12:22 -03:00
Nuckyz c50208b019
Add shortcut for lazy loading chunks 2024-06-01 18:10:45 -03:00
Nuckyz a8974f01eb
Merge branch 'dev' into immediate-finds 2024-06-01 18:09:19 -03:00
Nuckyz b79a0dadcb
Merge branch 'dev' into modules-proxy-patches 2024-06-01 18:06:38 -03:00
Nuckyz c4c92ed366
Add shortcut for lazy loading chunks 2024-06-01 17:51:50 -03:00
Vendicated 78fd37a4c6
fix(css): brand-experiment is now brand-500 2024-06-01 19:13:27 +02:00
Nuckyz 9de6e67cf1
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-06-01 05:03:56 -03:00
Nuckyz 33d5753ca7
fix grammar issues 2024-06-01 05:03:47 -03:00
Nuckyz 8d3feef9a1
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-06-01 01:45:03 -03:00
Nuckyz 8580332c82
cleanup 2024-06-01 01:44:18 -03:00
Nuckyz 4d8c56689c
Future proof against array modules 2024-06-01 01:40:44 -03:00
Nuckyz 5cbb816c1c
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-06-01 00:36:36 -03:00
Nuckyz b6594051d9
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-06-01 00:36:33 -03:00
Nuckyz 50415a949d
Merge branch 'dev' into modules-proxy-patches 2024-06-01 00:35:34 -03:00
Nuckyz 4b03454bce
Merge branch 'dev' into immediate-finds 2024-06-01 00:35:24 -03:00
Nuckyz f1b649e996
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-06-01 00:22:38 -03:00
Nuckyz db5397f41a
sdfdsf 2024-06-01 00:22:17 -03:00
Nuckyz c34f40e30d
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-06-01 00:17:26 -03:00
Nuckyz dd4d80872e
fix reporter part 2 2024-06-01 00:17:15 -03:00
Nuckyz eb381767cd
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-06-01 00:11:16 -03:00
Nuckyz 0aff3c29bc
Fix reporter 2024-06-01 00:11:00 -03:00
Nuckyz e7fdb3881a
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-06-01 00:06:39 -03:00
Nuckyz 5977ff8f6b
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-06-01 00:06:34 -03:00
Nuckyz dd13b96728
Revert "cya webpackChunkdiscord_app part 2"
This reverts commit a1e72e78d7.
2024-06-01 00:05:36 -03:00
Nuckyz 01fdeb7292
cya webpackChunkdiscord_app part 2 2024-06-01 00:05:15 -03:00
Nuckyz 6a3831c437
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-06-01 00:01:07 -03:00
Nuckyz c485864ee8
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-05-31 23:58:20 -03:00
Nuckyz 2ab7d3209e
Merge branch 'dev' into modules-proxy-patches 2024-05-31 23:57:07 -03:00
Nuckyz 654b2e8398
Merge branch 'dev' into immediate-finds 2024-05-31 23:47:31 -03:00
Nuckyz 3f573c9af3
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-05-31 19:58:36 -03:00
Nuckyz cbd9a9312c
don't depend in the value of bundlePath 2024-05-31 19:58:26 -03:00
Nuckyz 2656b60347
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-05-31 17:36:03 -03:00
Nuckyz fbb7ee50dd
Revert indexOf change 2024-05-31 17:34:32 -03:00
Nuckyz 4187932aa7
\n 2024-05-31 06:27:02 -03:00
Nuckyz a19fb71c70
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-05-31 06:20:17 -03:00
Nuckyz e21a6be4b6
sfdsfdsfdsf 2024-05-31 06:19:57 -03:00
Nuckyz b53c78c2ba
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-05-31 06:16:12 -03:00
Nuckyz db63fffe18
I should still be defining this 2024-05-31 06:16:01 -03:00
Nuckyz 41ab8da5ad
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-05-31 05:55:51 -03:00
Nuckyz f68effc7e2
more robust find 2024-05-31 05:50:34 -03:00
Nuckyz f21bfb9d78
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-05-31 05:30:36 -03:00
Nuckyz f4cc95da5a
Use indexOf in more places 2024-05-31 05:29:01 -03:00
Nuckyz 3a32490937
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-05-31 05:20:21 -03:00
Nuckyz 545d69aa6d
Use indexOf instead of includes; reset global find regex state 2024-05-31 05:19:34 -03:00
Nuckyz aa5ca42676
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-05-31 00:21:32 -03:00
Nuckyz 5197170b3d
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-05-31 00:21:29 -03:00
Nuckyz 47eec049fc
Not needed anymore and breaks interpolated strings with newlines 2024-05-31 00:21:15 -03:00
Nuckyz 022a0497c3
Merge branch 'dev' into modules-proxy-patches 2024-05-31 00:20:22 -03:00
Nuckyz e2f936538e
Merge branch 'dev' into immediate-finds 2024-05-31 00:20:06 -03:00
Nuckyz b323fbb486
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-05-30 18:39:39 -03:00
Nuckyz 0c4e265530
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-05-30 18:39:32 -03:00
Nuckyz 111a4f2aa8
Merge branch 'dev' into modules-proxy-patches 2024-05-30 18:39:14 -03:00
Nuckyz 46710bf8cb
Merge branch 'dev' into immediate-finds 2024-05-30 18:38:41 -03:00
Nuckyz 1f938211a8
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-05-30 18:12:07 -03:00
Nuckyz 8d362fc394
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-05-30 18:11:51 -03:00
Nuckyz 79849fd37d
Merge branch 'dev' into modules-proxy-patches 2024-05-30 18:11:23 -03:00
Nuckyz a838d587ae
Merge branch 'dev' into immediate-finds 2024-05-30 18:11:10 -03:00
Nuckyz 3a25da5f14
Fix wrong external files and clean up build script; Remove non used stuff 2024-05-30 18:03:00 -03:00
Nuckyz a1e72e78d7
cya webpackChunkdiscord_app part 2 2024-05-30 17:32:54 -03:00
Nuckyz 48fb6ecd1a
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-05-30 13:38:39 -03:00
Nuckyz 3c62e393a3
edit another license header 2024-05-30 13:38:22 -03:00
Nuckyz 034ef554fb
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-05-30 05:24:05 -03:00
Nuckyz 2da9bf8f0e
fix typo 2024-05-30 05:23:53 -03:00
Nuckyz eb5fb0df29
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-05-30 05:16:41 -03:00
Nuckyz 479a4069b2
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-05-30 05:16:27 -03:00
Nuckyz e22575805b
Merge branch 'dev' into modules-proxy-patches 2024-05-30 05:15:44 -03:00
Nuckyz c0984db612
Merge branch 'dev' into immediate-finds 2024-05-30 05:13:13 -03:00
Nuckyz 9a9c1b0487
Reporter: Properly implement reporter build of Vencord; Test more plugins; Fix running in wrong pages 2024-05-30 04:44:13 -03:00
Nuckyz 072619e539
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-05-30 01:10:48 -03:00
Nuckyz 9084459933
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-05-30 01:10:26 -03:00
Nuckyz 36f9eda3a8
Merge branch 'dev' into modules-proxy-patches 2024-05-30 01:09:11 -03:00
Nuckyz 99160638df
sdfgdsfdsds 2024-05-30 01:04:44 -03:00
Nuckyz 2574d5311d
Merge branch 'dev' into immediate-finds 2024-05-30 01:03:24 -03:00
Nuckyz 7816727e26
Merge branch 'dev' into immediate-finds 2024-05-30 01:02:25 -03:00
Nuckyz 892de53603
Fix extractAndLoadChunks issue with 2 match groups; Improve testing of lazy extractAndLoadChunks 2024-05-30 00:51:23 -03:00
Nuckyz 8de1ca86a9
I only understood today the reason for the Object.assign 2024-05-29 23:42:14 -03:00
Nuckyz 01ba87cd76
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-05-29 06:48:48 -03:00
Nuckyz 83222631ab
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-05-29 06:48:36 -03:00
Nuckyz b74581908e
Merge branch 'dev' into modules-proxy-patches 2024-05-29 06:48:14 -03:00
Nuckyz 896b8970b6
Merge branch 'dev' into immediate-finds 2024-05-29 06:47:23 -03:00
Nuckyz c8602ef52b
Fix reporter breaking because of ConsoleShortcuts 2024-05-29 06:45:44 -03:00
Nuckyz ac1423f90c
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-05-29 06:07:02 -03:00
Nuckyz d0e4ec0ad5
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-05-29 06:06:40 -03:00
Nuckyz 7509f203cc
Merge branch 'dev' into modules-proxy-patches 2024-05-29 06:05:44 -03:00
Nuckyz 17b575070f
Merge branch 'dev' into immediate-finds 2024-05-29 06:05:20 -03:00
Nuckyz 4a872236e1
Fix reporter breaking because of ConsoleShortcuts 2024-05-29 06:03:31 -03:00
Nuckyz d5440349c9
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-05-29 05:12:14 -03:00
Nuckyz 0f9b5f2d09
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-05-29 05:11:52 -03:00
Nuckyz 4db6c4b88a
Merge branch 'dev' into modules-proxy-patches 2024-05-29 05:10:24 -03:00
Nuckyz 6e1094a5d1
Merge branch 'dev' into immediate-finds 2024-05-29 05:08:19 -03:00
Nuckyz 15df3485d1
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-05-28 18:11:40 -03:00
Nuckyz ea86df7174
Merge branch 'dev' into modules-proxy-patches 2024-05-28 18:11:03 -03:00
Nuckyz 66c466c9f0
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-05-28 18:03:41 -03:00
Nuckyz 96d5e1b89b
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-05-28 18:03:35 -03:00
Nuckyz 4b4caa798a
onceReady -> onceDiscordLoaded 2024-05-28 18:02:57 -03:00
Nuckyz 73503945fb
Add WebpackInstances shortcut 2024-05-28 17:58:54 -03:00
Nuckyz 43b679d676
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-05-28 17:51:36 -03:00
Nuckyz 011b375d02
fix reporter 2024-05-28 17:49:20 -03:00
Nuckyz 9f1f2b15a4
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-05-28 17:46:58 -03:00
Nuckyz a1309ea897
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-05-28 17:45:36 -03:00
Nuckyz a4073703fd
explain UNCONFIGURABLE_PROPERTIES better 2024-05-28 17:44:36 -03:00
vee 84b9e3fec1
ConsoleShortcuts: Fix autocomplete on lazies, add more utils (#2519) 2024-05-28 17:44:36 -03:00
Nuckyz 6bbd91fafc
Merge branch 'dev' into immediate-finds 2024-05-28 17:41:34 -03:00
Nuckyz d78f1c8000
where did this come from? 2024-05-28 17:15:25 -03:00
Nuckyz 64262001e8
boop 2024-05-28 17:14:35 -03:00
Nuckyz 6b648f3d38
oops! 2024-05-28 17:12:36 -03:00
Nuckyz 1eeadbcd97
export all webpack instances 2024-05-28 17:11:17 -03:00
Nuckyz f016d277b7
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-05-28 04:27:52 -03:00
Nuckyz 9c2545ab16
undo explosion 2024-05-28 04:27:36 -03:00
Nuckyz b36d3b4385
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-05-28 04:00:41 -03:00
Nuckyz acbc932542
give name to PatchedFactory 2024-05-28 03:57:56 -03:00
Nuckyz 3590d5abff
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-05-28 03:35:52 -03:00
Nuckyz c9c09b95a3
fix typo 2024-05-28 03:35:38 -03:00
Nuckyz 9128eb5760
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-05-28 03:34:51 -03:00
Nuckyz 513d9f4209
I knew I was forgetting something 2024-05-28 03:34:40 -03:00
Nuckyz 06393211b1
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-05-28 03:32:02 -03:00
Nuckyz ac3130d37e
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-05-28 03:31:54 -03:00
Nuckyz 3e2952890f
Merge branch 'dev' into modules-proxy-patches 2024-05-28 03:31:37 -03:00
Nuckyz a0751a0f84
Merge branch 'dev' into immediate-finds 2024-05-28 03:27:17 -03:00
Nuckyz fa45beb8ca
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-05-27 23:33:43 -03:00
Nuckyz 539b70cd52
lmao oops 2024-05-27 23:32:40 -03:00
Nuckyz e96458fafa
fixes for if we use prototype proxy in the future 2024-05-27 23:31:08 -03:00
Nuckyz a1542bcec5
okay codium agent 2024-05-27 23:21:51 -03:00
Nuckyz e00da485e8
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-05-27 18:28:22 -03:00
Nuckyz 513eea8d14
Prepare for in case modules object is accessed directly in the future 2024-05-27 18:27:21 -03:00
Nuckyz 490e9131b5
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-05-26 21:17:18 -03:00
Nuckyz 9ceb0ae7cb
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-05-26 21:17:15 -03:00
Nuckyz 6d59a943da
Merge branch 'dev' into modules-proxy-patches 2024-05-26 21:17:02 -03:00
Nuckyz 00d71fbeab
Merge branch 'dev' into immediate-finds 2024-05-26 21:16:46 -03:00
Nuckyz 4459d11a97
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-05-26 20:57:55 -03:00
Nuckyz 1eab0146dd
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-05-26 20:57:07 -03:00
Nuckyz f345484e5b
Merge branch 'dev' into modules-proxy-patches 2024-05-26 20:56:31 -03:00
Nuckyz 65adaf335c
adjust size 2024-05-26 20:55:33 -03:00
Nuckyz 437e4eae44
Update flux events again 2024-05-26 20:53:08 -03:00
Nuckyz f7d12d209c
Merge branch 'dev' into immediate-finds 2024-05-26 20:47:52 -03:00
Nuckyz 8a5678bec5
update more licenses 2024-05-26 20:41:28 -03:00
Nuckyz 1f99162b5a
update patchWebpack license 2024-05-26 20:38:57 -03:00
Nuckyz 8c5f2c897e
Document patchWebpack better 2024-05-26 20:22:03 -03:00
Nuckyz 9ada9bc1a9
e part 2 2024-05-26 19:51:34 -03:00
Nuckyz 8fd22f6deb
e 2024-05-26 19:50:47 -03:00
Nuckyz c1e78b4397
hasOwn != in 2024-05-26 19:50:16 -03:00
Nuckyz 32a2c90761
fix typing of the global 2024-05-26 19:40:33 -03:00
Nuckyz dae3841f10
ughh 2024-05-26 19:38:25 -03:00
Nuckyz 4d27643d39
type more 2024-05-26 19:37:47 -03:00
Nuckyz c2047e5f3b
fix typos 2024-05-26 19:27:52 -03:00
Nuckyz 18142ecccb
fix doc 2024-05-26 19:26:26 -03:00
Nuckyz 440cb1f29c
Properly document wreq.a 2024-05-26 19:25:06 -03:00
Nuckyz 64b1ab1112
Properly document wreq.a 2024-05-26 19:24:59 -03:00
Nuckyz 3da88100df
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-05-26 07:00:21 -03:00
Nuckyz 3e3201ad0d
improve wreq docs 2024-05-26 07:00:03 -03:00
Nuckyz a2bda05211
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-05-26 05:47:45 -03:00
Nuckyz 1ed956114f
fix logic 2024-05-26 05:46:53 -03:00
Nuckyz 2e27a513ac
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-05-26 05:30:32 -03:00
Nuckyz a8fa685cfa
Add back running modules without patches 2024-05-26 05:29:05 -03:00
Nuckyz b2036762b5
Add back running modules without patches 2024-05-26 05:28:34 -03:00
Nuckyz 067a16c9dc
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-05-26 05:24:55 -03:00
Nuckyz 265cf12d39
I love 2024-05-26 05:24:03 -03:00
Nuckyz b580d6dcfb
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-05-26 05:20:39 -03:00
Nuckyz affd527bc1
Make factory wrapper a little more future proof 2024-05-26 05:19:52 -03:00
Nuckyz 7d928e53aa
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-05-26 01:14:13 -03:00
Nuckyz b10afebc98
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-05-26 01:14:01 -03:00
Nuckyz 1a8a901e0a
Merge branch 'dev' into modules-proxy-patches 2024-05-26 01:13:24 -03:00
Nuckyz d936604f35
Merge branch 'dev' into immediate-finds 2024-05-26 01:12:22 -03:00
Nuckyz 4dcc265be0
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-05-26 00:30:58 -03:00
Nuckyz 3e6e399544
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-05-26 00:29:49 -03:00
Nuckyz 9af63b362d
more future proof 2024-05-26 00:27:13 -03:00
Nuckyz 090a3bc0a8
this formatter is stupid 2024-05-25 23:58:42 -03:00
Nuckyz 3331723496
fix the linting 2024-05-25 23:57:23 -03:00
Nuckyz 999d6c812f
better types? no ts-ignore, also filters.componentByCode is recursive now 2024-05-25 23:51:59 -03:00
Nuckyz c9c1e0c6c5
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-05-24 18:46:52 -03:00
Nuckyz 1e55ae5327
this is more clean 2024-05-24 18:46:36 -03:00
Nuckyz 5b96881177
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-05-24 08:24:56 -03:00
Nuckyz daa1a35fc3
Factories are called with a this 2024-05-24 08:23:41 -03:00
Nuckyz ef895e787a
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-05-24 08:02:04 -03:00
Nuckyz 2f16cdf77b
Make toStringTag non enumerable 2024-05-24 07:59:56 -03:00
Nuckyz e990795783
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-05-24 07:41:52 -03:00
Nuckyz 8dde496757
one more name cuz why not 2024-05-24 07:40:36 -03:00
Nuckyz 35f950c6e3
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-05-24 05:24:59 -03:00
Nuckyz 5fbabb0b70
sob 2024-05-24 05:24:37 -03:00
Nuckyz ff9cc2e9e5
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-05-24 05:19:20 -03:00
Nuckyz 3793acd9bb
forgot the comment 2024-05-24 05:19:12 -03:00
Nuckyz ebae259f5d
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-05-24 05:17:17 -03:00
Nuckyz 3296ee1c4b
Remove onChunksLoaded patch 2024-05-24 05:14:27 -03:00
Nuckyz 2f87363b89
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-05-24 03:58:15 -03:00
Nuckyz bacf021a28
aaaaa 2024-05-24 03:57:54 -03:00
Nuckyz 1138e22f58
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-05-24 03:50:03 -03:00
Nuckyz d6b5bc58ce
how many times 2024-05-24 03:49:14 -03:00
Nuckyz bd2264c125
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-05-24 03:46:43 -03:00
Nuckyz 86f69e84c1
I'm stupid 2024-05-24 03:45:46 -03:00
Nuckyz 488f133a90
Handle if for some reason modules are set again 2024-05-24 03:44:40 -03:00
Nuckyz 77d8e70059
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-05-24 03:13:56 -03:00
Nuckyz f64b228cb9
better log 2024-05-24 03:13:41 -03:00
Nuckyz 90f37471e5
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-05-24 03:13:09 -03:00
Nuckyz b192c89146
I can never not forget something 2024-05-24 03:12:48 -03:00
Nuckyz ae10d3667c
Take a different approach which requires less cursed code 2024-05-24 03:12:48 -03:00
Nuckyz f727d101fc
I can never not forget something 2024-05-24 03:09:25 -03:00
Nuckyz 9bbec66ea5
Take a different approach which requires less cursed code 2024-05-24 03:08:35 -03:00
Nuckyz 0146789514
Preserve original modules prototype 2024-05-24 02:02:54 -03:00
Nuckyz b38ab066d9
Preserve original modules prototype 2024-05-24 02:02:28 -03:00
Nuckyz 37514e0720
mod -> module 2024-05-24 00:14:07 -03:00
Nuckyz aa9be97f83
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-05-24 00:00:36 -03:00
Nuckyz d8c6559967
I forgot this 2024-05-23 23:56:29 -03:00
Nuckyz 72b014fe67
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-05-23 23:55:09 -03:00
Nuckyz 8eb4eab2b0
oops you were not meant to be here 2024-05-23 23:33:20 -03:00
Nuckyz 07361ff6fe
eww new line 2024-05-23 23:32:46 -03:00
Nuckyz 64212512ca
cya dummyObj 2024-05-23 23:20:46 -03:00
Nuckyz 5e762ddd04
Add names to Modules objects 2024-05-23 23:18:43 -03:00
Nuckyz 74f36a093b
Preserve ProxyDummy function name after minification 2024-05-23 23:14:00 -03:00
Nuckyz c01a8c2f78
I changed my mind 2024-05-23 22:52:32 -03:00
Nuckyz 90c26432f5
Properly set receiver 2024-05-23 22:51:23 -03:00
Nuckyz 6f25005057
Monkey patch toString on proxyInner and proxyLazy 2024-05-23 22:20:24 -03:00
Nuckyz 23c8818ed2
Merge branch 'dev' into immediate-finds 2024-05-23 22:13:20 -03:00
Nuckyz 16d05c8935
Merge branch 'dev' into modules-proxy-patches 2024-05-23 21:58:54 -03:00
Nuckyz c5541d297d
Optimize slowest patches 2024-05-23 21:58:06 -03:00
Vendicated a120b35f4f
Bump to v1.8.6 2024-05-23 21:58:06 -03:00
Vendicated 9740d28530
discord why tf would u roll back to 10 days old build??? 2024-05-23 21:58:05 -03:00
Nuckyz 8e9434cdd5
Make reporter faster 2024-05-23 21:57:12 -03:00
Nuckyz f5be78d101
Patching toString -> String 2024-05-23 20:02:41 -03:00
Nuckyz bd95cc449f
Exit script if a chunk failed to load 2024-05-23 19:54:40 -03:00
Nuckyz bdd4b0f143
Make eagerPatches an internal setting 2024-05-23 19:53:19 -03:00
Nuckyz a60c8374ed
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-05-23 07:10:39 -03:00
Nuckyz 1013c34840
HORROR 2024-05-23 07:09:15 -03:00
Nuckyz 7b7b87316d
HORROR 2024-05-23 07:09:03 -03:00
Nuckyz 6567ff7435
any -> ModuleExports 2024-05-23 06:58:51 -03:00
Nuckyz 22a75c4589
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-05-23 06:51:07 -03:00
Nuckyz 67b5ecca51
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-05-23 06:42:53 -03:00
Nuckyz cdbd9ad101
Merge branch 'dev' into immediate-finds 2024-05-23 06:42:07 -03:00
Nuckyz 1e96638219
oops! 2024-05-23 06:38:22 -03:00
Nuckyz 7371abbaec
lmao 2024-05-23 06:29:07 -03:00
Nuckyz cfb493c593
make reporter use eagerPatches 2024-05-23 06:22:01 -03:00
Nuckyz ac61a0377f
clean up 2024-05-23 06:09:47 -03:00
Nuckyz bb3f629672
Merge branch 'dev' into modules-proxy-patches 2024-05-23 06:07:25 -03:00
Nuckyz 3ab68f9296
Option for eager patching 2024-05-23 06:07:13 -03:00
Nuckyz 01a4ac9c13
sometimes I'm stupid 2024-05-23 03:42:58 -03:00
Nuckyz 66e1db1fdb
more 2024-05-23 03:39:59 -03:00
Nuckyz 688449ed62
forgot this! 2024-05-23 03:38:06 -03:00
Nuckyz 5ca4e58fad
Clean up WebpackRequire typings 2024-05-23 03:36:53 -03:00
Nuckyz deb0f7b9c6
Merge remote-tracking branch 'upstream/dev' into modules-proxy-patches 2024-05-23 03:12:46 -03:00
Nuckyz 40a1f48267
boops 2024-05-23 03:10:59 -03:00
Nuckyz bc367b1d2a
and also a fix 2024-05-22 06:25:30 -03:00
Nuckyz f6a7cdc430
more fix 2024-05-22 06:22:37 -03:00
Nuckyz d5bcbf54f9
fix 2024-05-22 06:17:31 -03:00
Nuckyz 4b2734610f
Add WebpackRequire typings 2024-05-22 06:08:40 -03:00
Nuckyz c4645f79c6
Make patchedBy a string set 2024-05-22 06:08:28 -03:00
Nuckyz cf9bbfc78f
stop annoying me 2024-05-22 01:30:17 -03:00
Nuckyz 6cc40eb095
okay CodiumAI 2024-05-22 01:27:39 -03:00
Nuckyz 95acb147d1
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-05-22 01:11:45 -03:00
Nuckyz 21fea87551
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-05-22 01:11:26 -03:00
Nuckyz 2a2124c5a0
Merge branch 'dev' into modules-proxy-patches 2024-05-22 01:11:04 -03:00
Nuckyz 1a1e5c2e1d
Fix Flex component type 2024-05-22 01:07:58 -03:00
Nuckyz c9d9d53fb1
Merge branch 'dev' into immediate-finds 2024-05-22 01:01:58 -03:00
Nuckyz dc81d1c14c
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-05-19 23:22:58 -03:00
Nuckyz b938bdf138
Clarify about sentry webpack 2024-05-19 23:22:48 -03:00
Nuckyz e74aabb988
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-05-19 23:15:31 -03:00
Nuckyz ab24ce08e3
Merge branch 'dev' into modules-proxy-patches 2024-05-19 23:14:05 -03:00
Nuckyz c2435bb9dd
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-05-19 23:11:29 -03:00
Nuckyz d678e68899
Merge branch 'immediate-finds' into immediate-finds-modules-proxy 2024-05-19 23:10:56 -03:00
Nuckyz dbb6f4165b
Merge branch 'dev' into modules-proxy-patches 2024-05-19 23:10:11 -03:00
Nuckyz 9a1a7b374f
Merge branch 'dev' into immediate-finds 2024-05-19 23:09:43 -03:00
Nuckyz ec373069b3
Merge branch 'modules-proxy-patches' into immediate-finds-modules-proxy 2024-05-19 23:01:08 -03:00
Nuckyz 329bc68bf5
Merge branch 'dev' into immediate-finds 2024-05-19 22:58:19 -03:00
Nuckyz 2a77941dff
Proxy modules object for patching 2024-05-19 22:49:58 -03:00
Nuckyz d36c361b47
Merge branch 'dev' into immediate-finds 2024-05-19 04:23:51 -03:00
Nuckyz b17963169f
Merge branch 'dev' into immediate-finds 2024-05-19 03:56:33 -03:00
Nuckyz 118361723c
Merge branch 'dev' into immediate-finds 2024-05-18 21:55:23 -03:00
Nuckyz 97e2e2c1c8
Merge branch 'dev' into immediate-finds 2024-05-18 21:46:13 -03:00
Nuckyz dbee2d9ecc
Merge branch 'dev' into immediate-finds 2024-05-18 00:39:00 -03:00
Nuckyz 1283494b46
Merge branch 'dev' into immediate-finds 2024-05-17 23:05:04 -03:00
Nuckyz e72c732d58
FriendsSince: Show in user profile modal 2024-05-17 23:03:44 -03:00
Nuckyz d40dfc345f
Merge branch 'dev' into immediate-finds 2024-05-17 19:47:33 -03:00
vee 70f60193b0
explosion part 2 2024-05-17 23:10:21 +02:00
vee 9e60d4979d
explosion 2024-05-17 23:08:59 +02:00
vee 3562c8ae11
Merge branch 'dev' into immediate-finds 2024-05-17 23:08:07 +02:00
Nuckyz 093de43d54
Merge branch 'dev' into immediate-finds 2024-05-17 05:44:45 -03:00
Nuckyz 86ad3bd4fc
Merge branch 'dev' into immediate-finds 2024-05-17 05:22:05 -03:00
Nuckyz 8045d65e99
Merge branch 'dev' into immediate-finds 2024-05-17 05:09:35 -03:00
Nuckyz 63a1fe2c70
Merge branch 'dev' into immediate-finds 2024-05-16 02:39:41 -03:00
Nuckyz 55760bc42b
Merge branch 'dev' into immediate-finds 2024-05-16 01:10:41 -03:00
Nuckyz 983013446d
Merge branch 'dev' into immediate-finds 2024-05-16 00:23:30 -03:00
Nuckyz 569dace244
Merge branch 'dev' into immediate-finds 2024-05-15 23:40:23 -03:00
Nuckyz 8e5a2f6e59
Merge branch 'dev' into immediate-finds 2024-05-15 23:30:49 -03:00
Nuckyz 41a1732df2
MessageLatency: Fix wrong constant 2024-05-15 23:29:36 -03:00
Nuckyz 487af1c789
Merge branch 'dev' into immediate-finds 2024-05-15 23:25:48 -03:00
Nuckyz 5168f326a3
keep proper type 2024-05-15 23:07:35 -03:00
Nuckyz 4feaa40de7
Fix makeLazy not incrementing tries if factory errors 2024-05-15 23:06:21 -03:00
Nuckyz 7f5aaada88
Merge branch 'dev' into immediate-finds 2024-05-15 23:02:13 -03:00
Nuckyz 725103a77c
Merge branch 'dev' into immediate-finds 2024-05-15 00:39:02 -03:00
Nuckyz a878ea0b39
Merge branch 'dev' into immediate-finds 2024-05-15 00:04:10 -03:00
Nuckyz 0cc89996c6
forgot this 2024-05-15 00:00:54 -03:00
Nuckyz c72099fc39
feat: Allow finds to use regex (#2452) 2024-05-14 23:59:07 -03:00
Nuckyz 84c223d471
Merge remote-tracking branch 'upstream/dev' into immediate-finds 2024-05-14 23:55:11 -03:00
Nuckyz 82f9e36e5a
Merge remote-tracking branch 'upstream/dev' into immediate-finds 2024-05-14 23:53:41 -03:00
Nuckyz 7c8c2ff5b8
Merge branch 'dev' into immediate-finds 2024-05-14 22:54:51 -03:00
Ulysses Zhan dc73b89b29
new plugin CtrlEnterSend (#1794)
Co-authored-by: vee <vendicated@riseup.net>
2024-05-14 20:52:55 -03:00
Ulysses Zhan 2596bf0990
new plugin NoServerEmoji ~ hides server emojis from autocomplete (#1787)
Co-authored-by: vee <vendicated@riseup.net>
2024-05-14 20:52:55 -03:00
Board 7169dfe61a
ThemeAttributes: add larger avatar url variables to avatars (#2449)
Co-authored-by: vee <vendicated@riseup.net>
2024-05-14 20:52:54 -03:00
Vendicated 5ba5eca1a1
fix Vencord Settings section being added multiple times 2024-05-14 20:52:54 -03:00
Vendicated 4209bfd3aa
bump to v1.8.4 2024-05-14 20:52:54 -03:00
Vendicated c007fc7478
fix settings ui on canary 2024-05-14 20:52:54 -03:00
Nuckyz 903fa2cf11
Merge branch 'dev' into immediate-finds 2024-05-13 23:18:00 -03:00
Nuckyz 7d91dea822
Merge branch 'dev' into immediate-finds 2024-05-13 23:15:16 -03:00
Nuckyz 4fc4f1cb75
Merge remote-tracking branch 'upstream/dev' into immediate-finds 2024-05-13 02:09:34 -03:00
Nuckyz 45d2cf49e0
Merge branch 'dev' into immediate-finds 2024-05-13 00:10:32 -03:00
Nuckyz b798f31669
Merge branch 'dev' into immediate-finds 2024-05-12 21:33:34 -03:00
Nuckyz 7e1524362c
Merge branch 'dev' into immediate-finds 2024-05-12 20:46:39 -03:00
Nuckyz e04dd85957
Merge remote-tracking branch 'upstream/dev' into immediate-finds 2024-05-11 22:30:38 -03:00
Nuckyz 258e1efdce
Merge branch 'dev' into immediate-finds 2024-05-11 18:42:11 -03:00
Nuckyz f6e484034c
more pog 2024-05-11 06:05:20 -03:00
Nuckyz 5676f45781
whatever 2024-05-11 05:56:26 -03:00
Nuckyz e11d651e33
work 2024-05-11 05:51:18 -03:00
Nuckyz 09a6a9bf85
wtf? 2024-05-11 05:47:53 -03:00
Nuckyz 1b64419ef1
Make commons have proper ProxyInner typing 2024-05-11 05:44:52 -03:00
Nuckyz 5edff4a3c5
types 2024-05-11 05:19:12 -03:00
Nuckyz b043d8abb7
Clarify more what the find methods return 2024-05-11 01:11:57 -03:00
Nuckyz e15868d499
Merge branch 'dev' into immediate-finds 2024-05-09 03:17:08 -03:00
Nuckyz a892a507be
Merge branch 'dev' into immediate-finds 2024-05-09 03:01:44 -03:00
Nuckyz 33a5f30ae4
ShowMeYourName: Fix regression caused by adding ErrorBoundary 2024-05-09 02:59:08 -03:00
Nuckyz 38b6c7fa6c
Merge branch 'dev' into immediate-finds 2024-05-09 00:46:24 -03:00
Nuckyz bd88625d25
ErrorBoundary some more components 2024-05-09 00:44:04 -03:00
Nuckyz 5fca61f581
Merge remote-tracking branch 'upstream/dev' into immediate-finds 2024-05-08 22:23:42 -03:00
Nuckyz cc6cef02c1
Merge remote-tracking branch 'upstream/dev' into immediate-finds 2024-05-08 22:17:04 -03:00
Vendicated 546c5105b2
im the dumbest dumdum 2024-05-09 03:12:11 +02:00
Nuckyz f65749e2d4
Merge branch 'dev' into immediate-finds 2024-05-08 18:55:48 -03:00
Nuckyz fb8f00137c
I'm dumb 2024-05-08 18:51:47 -03:00
Nuckyz 20b071aa2d
Merge branch 'dev' into immediate-finds 2024-05-08 18:47:22 -03:00
Nuckyz b7c1b495af
CrashHandler: Increment timeout for trying to recover 2024-05-08 18:42:46 -03:00
Nuckyz 4d80c53dd0
Merge branch 'dev' into immediate-finds 2024-05-08 17:14:47 -03:00
Nuckyz 035e2add0b
Fix MoreUserTags freezing the client 2024-05-08 06:44:18 -03:00
Nuckyz f70cc5205c
Reporter Bad Webpack Finds logs cleanups 2024-05-08 06:16:00 -03:00
Nuckyz fa948e8639
Clean up all finds; Make common components NoopComponents by default
I went through every single find and made sure every component find is using the proper method
2024-05-08 04:48:48 -03:00
Nuckyz 4cc6789b5b
misc fixes 2024-05-08 00:25:34 -03:00
Nuckyz 4753efa33c
Merge branch 'dev' into immediate-finds 2024-05-08 00:19:49 -03:00
Nuckyz 283a4b23ba
Merge remote-tracking branch 'upstream/dev' into immediate-finds 2024-05-07 22:29:33 -03:00
Nuckyz 3b7f1be9a2
i18nMessages: Keep language codes only 2024-05-07 22:23:44 -03:00
Nuckyz c2e12e2827
why not 2024-05-07 22:10:05 -03:00
Nuckyz 8b6620ca2f
Update FluxEvents and Permissions 2024-05-07 22:06:45 -03:00
Nuckyz f1e2d5572a
Update these license headers because I forgot in the other pr 2024-05-07 21:44:26 -03:00
Nuckyz 49fcfd74df
Merge branch 'dev' into immediate-finds 2024-05-07 21:40:02 -03:00
Nuckyz 511ec1b129
Add warn for using deprecated method 2024-05-07 21:33:05 -03:00
Nuckyz 94843a77ac
Merge remote-tracking branch 'upstream/dev' into immediate-finds 2024-05-07 16:27:52 -03:00
Nuckyz 8873391496
Fix the lint :) 2024-05-07 06:33:07 -03:00
Nuckyz b77b654df1
I should have done this in the dev branch but it's whatever now 2024-05-07 06:30:24 -03:00
Nuckyz c65e1f88d2
Improve description of some finds 2024-05-07 06:28:43 -03:00
Nuckyz 9cd20e3cea
Merge branch 'dev' into immediate-finds 2024-05-07 06:23:36 -03:00
Nuckyz f04bd8a7ad
useStateFromStores: Document 3rd param and fix JSDoc 2024-05-07 06:13:38 -03:00
Nuckyz fa82939e62
Merge branch 'dev' into immediate-finds 2024-05-07 03:22:20 -03:00
Nuckyz a1fefcf27a
Cant modify this array because we only clone 1 level deep 2024-05-07 03:07:03 -03:00
Nuckyz 65b6440024
Clean up 2024-05-07 03:01:45 -03:00
Nuckyz 6e0064c5fc
give a name to the proxy dummy function, for better logs in the console 2024-05-07 02:57:17 -03:00
Nuckyz b047f9ce28
Merge branch 'dev' into immediate-finds 2024-05-07 02:49:24 -03:00
Nuckyz d97596a16a
e 2024-05-07 02:38:12 -03:00
Nuckyz 5b6d0f42fd
Merge remote-tracking branch 'upstream/dev' into immediate-finds 2024-05-07 01:14:45 -03:00
Nuckyz 4a89fadedd
Make Webpack finds not need to re-search 2024-05-07 01:13:46 -03:00
Nuckyz 886071af4d
Clean up Webpack ComponentWrapper 2024-05-06 23:22:36 -03:00
Nuckyz 12c9c324a1
Merge branch 'dev' into immediate-finds 2024-05-06 05:08:46 -03:00
Nuckyz e311bd9f76
Merge branch 'dev' into immediate-finds 2024-05-05 17:56:21 -03:00
Nuckyz 707c23b188
Merge remote-tracking branch 'upstream/dev' into immediate-finds 2024-05-05 05:15:35 -03:00
Sqaaakoi 49e78793c5
ImageLink: Fix embed showing in gifs (#2417) 2024-05-05 05:15:01 -03:00
Nuckyz 8d31330d3e
Fix wrongfully logging LazyComponent factory failed 2024-05-05 02:52:41 -03:00
Nuckyz 17397dbe08
Merge remote-tracking branch 'upstream/dev' into immediate-finds 2024-05-05 02:49:58 -03:00
Fafa b98544ed1f
ReviewDB: Fix context menus being added to folders (#2416) 2024-05-05 01:42:15 -03:00
Nuckyz 043675f3f8
Forgot to change this 2024-05-04 23:56:02 -03:00
Nuckyz 3b1cb02663
Merge branch 'dev' into immediate-finds 2024-05-04 23:18:31 -03:00
Nuckyz bc68bc0312
ImplicitRelationships: Properly test find 2024-05-04 23:15:55 -03:00
Nuckyz b3819228ed
Resolve PluginSettings circular deps better 2024-05-04 23:15:55 -03:00
Nuckyz c23c65733b
Merge branch 'dev' into immediate-finds 2024-05-04 21:17:02 -03:00
Nuckyz cfefdbc7a7
Improve proxyLazy 2024-05-04 20:56:32 -03:00
Nuckyz 70103e8111
Add better explanation for destructuring primitives 2024-05-04 17:49:20 -03:00
Nuckyz 240705652c
Merge remote-tracking branch 'upstream/dev' into immediate-finds 2024-05-03 20:46:10 -03:00
Nuckyz d42c9547ab
Merge remote-tracking branch 'upstream/dev' into immediate-finds 2024-05-03 20:18:05 -03:00
Nuckyz ac85b3508b
Comment proxyInner better 2024-05-03 20:11:52 -03:00
Nuckyz 9ece4dddd3
Better deprecation comments 2024-05-03 19:39:21 -03:00
Nuckyz 36f5d9acc6
Merge remote-tracking branch 'upstream/dev' into immediate-finds 2024-05-03 19:23:48 -03:00
Nuckyz d4956f3ec7
Merge branch 'dev' into immediate-finds 2024-05-03 19:09:49 -03:00
Nuckyz 8279c8d0ba
Merge branch 'dev' into immediate-finds 2024-05-03 18:47:56 -03:00
Nuckyz 74e3ba42e0
Merge remote-tracking branch 'upstream/dev' into immediate-finds 2024-05-03 17:56:42 -03:00
Nuckyz 784ae0a02d
Merge remote-tracking branch 'upstream/dev' into immediate-finds 2024-05-03 17:35:20 -03:00
Nuckyz 901d803ba9
Make it less breaking: Add old methods back but mark as deprecated 2024-05-03 05:35:53 -03:00
Nuckyz bdb693302a
Copy Array -> Use for loop with len 2024-05-03 05:19:35 -03:00
Nuckyz f8a7d1d634
Merge branch 'dev' into immediate-finds 2024-05-03 04:55:19 -03:00
Nuckyz 770078f236
More things 2024-05-03 04:49:14 -03:00
Nuckyz f1dd39885b
Clean up commons 2024-05-03 01:50:50 -03:00
Nuckyz a29115ba78
Fix ReviewDB 2024-05-03 01:21:52 -03:00
Nuckyz cd5e0aeec1
throw a rock at ben shapiro 2024-05-02 23:42:42 -03:00
Nuckyz 75fa0ff708
Immediate finds 2024-05-02 23:18:12 -03:00
145 changed files with 3392 additions and 2317 deletions

View file

@ -90,7 +90,13 @@ export default tseslint.config(
"no-invalid-regexp": "error",
"no-constant-condition": ["error", { "checkLoops": false }],
"no-duplicate-imports": "error",
"dot-notation": "error",
"@typescript-eslint/dot-notation": [
"error",
{
"allowPrivateClassPropertyAccess": true,
"allowProtectedClassPropertyAccess": true
}
],
"no-useless-escape": [
"error",
{

View file

@ -312,7 +312,7 @@ export const commonOpts = {
logLevel: "info",
bundle: true,
watch,
minify: !watch,
minify: !watch && !IS_REPORTER,
sourcemap: watch ? "inline" : "",
legalComments: "linked",
banner,

View file

@ -26,7 +26,7 @@
import { readFileSync } from "fs";
import pup, { JSHandle } from "puppeteer-core";
for (const variable of ["DISCORD_TOKEN", "CHROMIUM_BIN"]) {
for (const variable of ["CHROMIUM_BIN"]) {
if (!process.env[variable]) {
console.error(`Missing environment variable ${variable}`);
process.exit(1);
@ -214,7 +214,7 @@ page.on("console", async e => {
switch (tag) {
case "WebpackInterceptor:":
const patchFailMatch = message.match(/Patch by (.+?) (had no effect|errored|found no module) \(Module id is (.+?)\): (.+)/)!;
const patchFailMatch = message.match(/Patch by (.+?) (had no effect|errored|found no module|took [\d.]+?ms) \(Module id is (.+?)\): (.+)/)!;
if (!patchFailMatch) break;
console.error(await getText());
@ -291,7 +291,7 @@ page.on("error", e => console.error("[Error]", e.message));
page.on("pageerror", e => {
if (e.message.includes("Sentry successfully disabled")) return;
if (!e.message.startsWith("Object") && !e.message.includes("Cannot find module")) {
if (!e.message.startsWith("Object") && !e.message.includes("Cannot find module") && !/^.{1,2}$/.test(e.message)) {
console.error("[Page Error]", e.message);
report.otherErrors.push(e.message);
} else {
@ -299,20 +299,9 @@ page.on("pageerror", e => {
}
});
async function reporterRuntime(token: string) {
Vencord.Webpack.waitFor(
"loginToken",
m => {
console.log("[PUP_DEBUG]", "Logging in with token...");
m.loginToken(token);
}
);
}
await page.evaluateOnNewDocument(`
if (location.host.endsWith("discord.com")) {
${readFileSync("./dist/browser.js", "utf-8")};
(${reporterRuntime.toString()})(${JSON.stringify(process.env.DISCORD_TOKEN)});
}
`);

View file

@ -23,10 +23,10 @@ export * as Util from "./utils";
export * as QuickCss from "./utils/quickCss";
export * as Updater from "./utils/updater";
export * as Webpack from "./webpack";
export * as WebpackPatcher from "./webpack/patchWebpack";
export { PlainSettings, Settings };
import "./utils/quickCss";
import "./webpack/patchWebpack";
import { openUpdaterModal } from "@components/VencordSettings/UpdaterTab";
import { StartAt } from "@utils/types";
@ -39,7 +39,7 @@ import { localStorage } from "./utils/localStorage";
import { relaunch } from "./utils/native";
import { getCloudSettings, putCloudSettings } from "./utils/settingsSync";
import { checkForUpdates, update, UpdateLogger } from "./utils/updater";
import { onceReady } from "./webpack";
import { onceDiscordLoaded } from "./webpack";
import { SettingsRouter } from "./webpack/common";
if (IS_REPORTER) {
@ -86,7 +86,7 @@ async function syncSettings() {
}
async function init() {
await onceReady;
await onceDiscordLoaded;
startAllPlugins(StartAt.WebpackReady);
syncSettings();
@ -125,7 +125,7 @@ async function init() {
const pendingPatches = patches.filter(p => !p.all && p.predicate?.() !== false);
if (pendingPatches.length)
PMLogger.warn(
"Webpack has finished initialising, but some patches haven't been applied yet.",
"Webpack has finished initializing, but some patches haven't been applied yet.",
"This might be expected since some Modules are lazy loaded, but please verify",
"that all plugins are working as intended.",
"You are seeing this warning because this is a Development build of Vencord.",

View file

@ -8,13 +8,12 @@ import "./ChatButton.css";
import ErrorBoundary from "@components/ErrorBoundary";
import { Logger } from "@utils/Logger";
import { waitFor } from "@webpack";
import { findByProps } from "@webpack";
import { Button, ButtonLooks, ButtonWrapperClasses, Tooltip } from "@webpack/common";
import { Channel } from "discord-types/general";
import { HTMLProps, MouseEventHandler, ReactNode } from "react";
let ChannelTextAreaClasses: Record<"button" | "buttonContainer", string>;
waitFor(["buttonContainer", "channelTextArea"], m => ChannelTextAreaClasses = m);
const ChannelTextAreaClasses = findByProps<Record<"button" | "buttonContainer", string>>("buttonContainer", "channelTextArea");
export interface ChatBarProps {
channel: Channel;

View file

@ -17,14 +17,14 @@
*/
import { mergeDefaults } from "@utils/mergeDefaults";
import { findByCodeLazy } from "@webpack";
import { findByCode } from "@webpack";
import { MessageActions, SnowflakeUtils } from "@webpack/common";
import { Message } from "discord-types/general";
import type { PartialDeep } from "type-fest";
import { Argument } from "./types";
const createBotMessage = findByCodeLazy('username:"Clyde"');
const createBotMessage = findByCode('username:"Clyde"');
export function generateId() {
return `-${SnowflakeUtils.fromTimestamp(Date.now())}`;

View file

@ -16,23 +16,22 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import { waitFor } from "@webpack";
import { find } from "@webpack";
let NoticesModule: any;
waitFor(m => m.show && m.dismiss && !m.suppressAll, m => NoticesModule = m);
const Notices = find(m => m.show && m.dismiss && !m.suppressAll);
export const noticesQueue = [] as any[];
export let currentNotice: any = null;
export function popNotice() {
NoticesModule.dismiss();
Notices.dismiss();
}
export function nextNotice() {
currentNotice = noticesQueue.shift();
if (currentNotice) {
NoticesModule.show(...currentNotice, "VencordNotice");
Notices.show(...currentNotice, "VencordNotice");
}
}

View file

@ -32,9 +32,10 @@ export interface Settings {
autoUpdate: boolean;
autoUpdateNotification: boolean,
useQuickCss: boolean;
enableReactDevtools: boolean;
themeLinks: string[];
eagerPatches: boolean;
enabledThemes: string[];
enableReactDevtools: boolean;
frameless: boolean;
transparent: boolean;
winCtrlQ: boolean;
@ -81,6 +82,7 @@ const DefaultSettings: Settings = {
autoUpdateNotification: true,
useQuickCss: true,
themeLinks: [],
eagerPatches: IS_REPORTER,
enabledThemes: [],
enableReactDevtools: false,
frameless: false,
@ -116,7 +118,6 @@ const saveSettingsOnFrequentAction = debounce(async () => {
}
}, 60_000);
export const SettingsStore = new SettingsStoreClass(settings, {
readOnly: true,
getDefaultValue({

View file

@ -89,8 +89,8 @@ export const isStyleEnabled = (name: string) => requireStyle(name).dom?.isConnec
* // -- plugin.ts --
* import pluginStyle from "./plugin.css?managed";
* import { setStyleVars } from "@api/Styles";
* import { findByPropsLazy } from "@webpack";
* const classNames = findByPropsLazy("thin", "scrollerBase"); // { thin: "thin-31rlnD scrollerBase-_bVAAt", ... }
* import { findByProps } from "@webpack";
* const classNames = findByProps("thin", "scrollerBase"); // { thin: "thin-31rlnD scrollerBase-_bVAAt", ... }
*
* // Inside some plugin method like "start()"
* setStyleClassNames(pluginStyle, classNames);

View file

@ -17,8 +17,7 @@
*/
import { proxyLazy } from "@utils/lazy";
import { Logger } from "@utils/Logger";
import { findModuleId, proxyLazyWebpack, wreq } from "@webpack";
import { findByFactoryCode } from "@webpack";
interface UserSettingDefinition<T> {
/**
@ -43,12 +42,7 @@ interface UserSettingDefinition<T> {
userSettingsAPIName: string;
}
export const UserSettings: Record<PropertyKey, UserSettingDefinition<any>> | undefined = proxyLazyWebpack(() => {
const modId = findModuleId('"textAndImages","renderSpoilers"');
if (modId == null) return new Logger("UserSettingsAPI ").error("Didn't find settings module.");
return wreq(modId as any);
});
export const UserSettings = findByFactoryCode<Record<PropertyKey, UserSettingDefinition<any>>>('"textAndImages","renderSpoilers"');
/**
* Get the setting with the given setting group and name.
@ -56,7 +50,7 @@ export const UserSettings: Record<PropertyKey, UserSettingDefinition<any>> | und
* @param group The setting group
* @param name The name of the setting
*/
export function getUserSetting<T = any>(group: string, name: string): UserSettingDefinition<T> | undefined {
export function getUserSetting<T = any>(group: string, name: string): UserSettingDefinition<T> {
if (!Vencord.Plugins.isPluginEnabled("UserSettingsAPI")) throw new Error("Cannot use UserSettingsAPI without setting as dependency.");
for (const key in UserSettings) {
@ -66,10 +60,12 @@ export function getUserSetting<T = any>(group: string, name: string): UserSettin
return userSetting;
}
}
throw new Error(`UserSettingsAPI: Setting ${group}.${name} not found.`);
}
/**
* {@link getUserSettingDefinition}, lazy.
* Lazy version of {@link getUserSetting}
*
* Get the setting with the given setting group and name.
*

View file

@ -4,10 +4,10 @@
* SPDX-License-Identifier: GPL-3.0-or-later
*/
import { findByPropsLazy } from "@webpack";
import { findByProps } from "@webpack";
import { Parser } from "@webpack/common";
const CodeContainerClasses = findByPropsLazy("markup", "codeContainer");
const CodeContainerClasses = findByProps("markup", "codeContainer");
/**
* Renders code in a Discord codeblock

View file

@ -24,13 +24,12 @@ import { classNameFactory } from "@api/Styles";
import ErrorBoundary from "@components/ErrorBoundary";
import { Flex } from "@components/Flex";
import { gitRemote } from "@shared/vencordUserAgent";
import { proxyLazy } from "@utils/lazy";
import { Margins } from "@utils/margins";
import { classes, isObjectEmpty } from "@utils/misc";
import { ModalCloseButton, ModalContent, ModalFooter, ModalHeader, ModalProps, ModalRoot, ModalSize, openModal } from "@utils/modal";
import { OptionType, Plugin } from "@utils/types";
import { findByPropsLazy, findComponentByCodeLazy } from "@webpack";
import { Button, Clickable, FluxDispatcher, Forms, React, Text, Tooltip, UserStore, UserUtils } from "@webpack/common";
import { find, findByProps, findComponentByCode } from "@webpack";
import { Button, Clickable, FluxDispatcher, Forms, React, Text, Tooltip, UserUtils } from "@webpack/common";
import { User } from "discord-types/general";
import { Constructor } from "type-fest";
@ -50,9 +49,9 @@ import { GithubButton, WebsiteButton } from "./LinkIconButton";
const cl = classNameFactory("vc-plugin-modal-");
const UserSummaryItem = findComponentByCodeLazy("defaultRenderUser", "showDefaultAvatarsForNullUsers");
const AvatarStyles = findByPropsLazy("moreUsers", "emptyUser", "avatarContainer", "clickableAvatar");
const UserRecord: Constructor<Partial<User>> = proxyLazy(() => UserStore.getCurrentUser().constructor) as any;
const UserSummaryItem = findComponentByCode("defaultRenderUser", "showDefaultAvatarsForNullUsers");
const AvatarStyles = findByProps("moreUsers", "emptyUser", "avatarContainer", "clickableAvatar");
const UserRecord = find<Constructor<Partial<User>>>(m => m?.prototype?.getAvatarURL && m?.prototype?.hasHadPremium);
interface PluginModalProps extends ModalProps {
plugin: Plugin;

View file

@ -33,19 +33,19 @@ import { Margins } from "@utils/margins";
import { classes, isObjectEmpty } from "@utils/misc";
import { useAwaiter } from "@utils/react";
import { Plugin } from "@utils/types";
import { findByPropsLazy } from "@webpack";
import { findByProps } from "@webpack";
import { Alerts, Button, Card, Forms, lodash, Parser, React, Select, Text, TextInput, Toasts, Tooltip, useMemo } from "@webpack/common";
import Plugins, { ExcludedPlugins } from "~plugins";
// Avoid circular dependency
const { startDependenciesRecursive, startPlugin, stopPlugin } = proxyLazy(() => require("../../plugins"));
const PluginManager = proxyLazy(() => require("../../plugins")) as typeof import("../../plugins");
const cl = classNameFactory("vc-plugins-");
const logger = new Logger("PluginSettings", "#a6d189");
const InputStyles = findByPropsLazy("inputWrapper", "inputDefault", "error");
const ButtonClasses = findByPropsLazy("button", "disabled", "enabled");
const InputStyles = findByProps("inputWrapper", "inputDefault", "error");
const ButtonClasses = findByProps("button", "disabled", "enabled");
function showErrorToast(message: string) {
@ -100,7 +100,7 @@ export function PluginCard({ plugin, disabled, onRestartNeeded, onMouseEnter, on
// If we're enabling a plugin, make sure all deps are enabled recursively.
if (!wasEnabled) {
const { restartNeeded, failures } = startDependenciesRecursive(plugin);
const { restartNeeded, failures } = PluginManager.startDependenciesRecursive(plugin);
if (failures.length) {
logger.error(`Failed to start dependencies for ${plugin.name}: ${failures.join(", ")}`);
showNotice("Failed to start dependencies: " + failures.join(", "), "Close", () => null);
@ -126,7 +126,7 @@ export function PluginCard({ plugin, disabled, onRestartNeeded, onMouseEnter, on
return;
}
const result = wasEnabled ? stopPlugin(plugin) : startPlugin(plugin);
const result = wasEnabled ? PluginManager.stopPlugin(plugin) : PluginManager.startPlugin(plugin);
if (!result) {
settings.enabled = false;

View file

@ -19,7 +19,7 @@
import "./Switch.css";
import { classes } from "@utils/misc";
import { findByPropsLazy } from "@webpack";
import { findByProps } from "@webpack";
interface SwitchProps {
checked: boolean;
@ -29,7 +29,7 @@ interface SwitchProps {
const SWITCH_ON = "var(--green-360)";
const SWITCH_OFF = "var(--primary-400)";
const SwitchClasses = findByPropsLazy("slider", "input", "container");
const SwitchClasses = findByProps("slider", "input", "container");
export function Switch({ checked, onChange, disabled }: SwitchProps) {
return (

View file

@ -22,7 +22,7 @@ import { Margins } from "@utils/margins";
import { canonicalizeMatch, canonicalizeReplace } from "@utils/patches";
import { makeCodeblock } from "@utils/text";
import { Patch, ReplaceFn } from "@utils/types";
import { search } from "@webpack";
import { searchFactories } from "@webpack";
import { Button, Clipboard, Forms, Parser, React, Switch, TextArea, TextInput } from "@webpack/common";
import { SettingsTab, wrapTab } from "./shared";
@ -33,7 +33,7 @@ if (IS_DEV) {
}
const findCandidates = debounce(function ({ find, setModule, setError }) {
const candidates = search(find);
const candidates = searchFactories(find);
const keys = Object.keys(candidates);
const len = keys.length;
if (len === 0)
@ -56,7 +56,7 @@ function ReplacementComponent({ module, match, replacement, setReplacementError
const [compileResult, setCompileResult] = React.useState<[boolean, string]>();
const [patchedCode, matchResult, diff] = React.useMemo(() => {
const src: string = fact.toString().replaceAll("\n", "");
const src = String(fact).replaceAll("\n", "");
try {
new RegExp(match);

View file

@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import { Settings, useSettings } from "@api/Settings";
import { useSettings } from "@api/Settings";
import { classNameFactory } from "@api/Styles";
import { Flex } from "@components/Flex";
import { DeleteIcon, FolderIcon, PaintbrushIcon, PencilIcon, PlusIcon, RestartIcon } from "@components/Icons";
@ -27,9 +27,9 @@ import { openInviteModal } from "@utils/discord";
import { Margins } from "@utils/margins";
import { showItemInFolder } from "@utils/native";
import { useAwaiter } from "@utils/react";
import { findLazy } from "@webpack";
import { findComponentByFields } from "@webpack";
import { Card, Forms, React, showToast, TabBar, TextArea, useEffect, useRef, useState } from "@webpack/common";
import type { ComponentType, Ref, SyntheticEvent } from "react";
import type { Ref, SyntheticEvent } from "react";
import Plugins from "~plugins";
@ -37,14 +37,14 @@ import { AddonCard } from "./AddonCard";
import { QuickAction, QuickActionCard } from "./quickActions";
import { SettingsTab, wrapTab } from "./shared";
type FileInput = ComponentType<{
type FileInputProps = {
ref: Ref<HTMLInputElement>;
onChange: (e: SyntheticEvent<HTMLInputElement>) => void;
multiple?: boolean;
filters?: { name?: string; extensions: string[]; }[];
}>;
};
const FileInput: FileInput = findLazy(m => m.prototype?.activateUploadDialogue && m.prototype.setRef);
const FileInput = findComponentByFields<FileInputProps>("activateUploadDialogue", "setRef");
const cl = classNameFactory("vc-settings-theme-");
@ -249,7 +249,7 @@ function ThemesTab() {
Icon={PaintbrushIcon}
/>
{Settings.plugins.ClientTheme.enabled && (
{Vencord.Plugins.isPluginEnabled("ClientTheme") && (
<QuickAction
text="Edit ClientTheme"
action={() => openPluginModal(Plugins.ClientTheme)}

View file

@ -23,35 +23,61 @@ if (IS_DEV || IS_REPORTER) {
var logger = new Logger("Tracer", "#FFD166");
}
const noop = function () { };
export const beginTrace = !(IS_DEV || IS_REPORTER) ? noop :
export const beginTrace = !(IS_DEV || IS_REPORTER) ? () => { } :
function beginTrace(name: string, ...args: any[]) {
if (name in traces)
if (name in traces) {
throw new Error(`Trace ${name} already exists!`);
}
traces[name] = [performance.now(), args];
};
export const finishTrace = !(IS_DEV || IS_REPORTER) ? noop : function finishTrace(name: string) {
const end = performance.now();
export const finishTrace = !(IS_DEV || IS_REPORTER) ? () => 0 :
function finishTrace(name: string) {
const end = performance.now();
const [start, args] = traces[name];
delete traces[name];
const [start, args] = traces[name];
delete traces[name];
logger.debug(`${name} took ${end - start}ms`, args);
};
const totalTime = end - start;
logger.debug(`${name} took ${totalTime}ms`, args);
return totalTime;
};
type Func = (...args: any[]) => any;
type TraceNameMapper<F extends Func> = (...args: Parameters<F>) => string;
const noopTracer =
<F extends Func>(name: string, f: F, mapper?: TraceNameMapper<F>) => f;
function noopTracerWithResults<F extends Func>(name: string, f: F, mapper?: TraceNameMapper<F>) {
return function (this: unknown, ...args: Parameters<F>): [ReturnType<F>, number] {
return [f.apply(this, args), 0];
};
}
function noopTracer<F extends Func>(name: string, f: F, mapper?: TraceNameMapper<F>) {
return f;
}
export const traceFunctionWithResults = !(IS_DEV || IS_REPORTER)
? noopTracerWithResults
: function traceFunctionWithResults<F extends Func>(name: string, f: F, mapper?: TraceNameMapper<F>): (this: unknown, ...args: Parameters<F>) => [ReturnType<F>, number] {
return function (this: unknown, ...args: Parameters<F>) {
const traceName = mapper?.(...args) ?? name;
beginTrace(traceName, ...arguments);
try {
return [f.apply(this, args), finishTrace(traceName)];
} catch (e) {
finishTrace(traceName);
throw e;
}
};
};
export const traceFunction = !(IS_DEV || IS_REPORTER)
? noopTracer
: function traceFunction<F extends Func>(name: string, f: F, mapper?: TraceNameMapper<F>): F {
return function (this: any, ...args: Parameters<F>) {
return function (this: unknown, ...args: Parameters<F>) {
const traceName = mapper?.(...args) ?? name;
beginTrace(traceName, ...arguments);

View file

@ -8,10 +8,11 @@ import { Logger } from "@utils/Logger";
import { canonicalizeMatch } from "@utils/patches";
import * as Webpack from "@webpack";
import { wreq } from "@webpack";
const LazyChunkLoaderLogger = new Logger("LazyChunkLoader");
import { AnyModuleFactory, ModuleFactory } from "webpack";
export async function loadLazyChunks() {
const LazyChunkLoaderLogger = new Logger("LazyChunkLoader");
try {
LazyChunkLoaderLogger.log("Loading all chunks...");
@ -25,16 +26,12 @@ export async function loadLazyChunks() {
// True if resolved, false otherwise
const chunksSearchPromises = [] as Array<() => boolean>;
const LazyChunkRegex = canonicalizeMatch(/(?:(?:Promise\.all\(\[)?(\i\.e\("?[^)]+?"?\)[^\]]*?)(?:\]\))?)\.then\(\i\.bind\(\i,"?([^)]+?)"?\)\)/g);
const LazyChunkRegex = canonicalizeMatch(/(?:(?:Promise\.all\(\[)?(\i\.e\("?[^)]+?"?\)[^\]]*?)(?:\]\))?)\.then\(\i(?:\.\i)?\.bind\(\i,"?([^)]+?)"?(?:,[^)]+?)?\)\)/g);
async function searchAndLoadLazyChunks(factoryCode: string) {
const lazyChunks = factoryCode.matchAll(LazyChunkRegex);
const validChunkGroups = new Set<[chunkIds: number[], entryPoint: number]>();
// Workaround for a chunk that depends on the ChannelMessage component but may be be force loaded before
// the chunk containing the component
const shouldForceDefer = factoryCode.includes(".Messages.GUILD_FEED_UNFEATURE_BUTTON_TEXT");
await Promise.all(Array.from(lazyChunks).map(async ([, rawChunkIds, entryPoint]) => {
const chunkIds = rawChunkIds ? Array.from(rawChunkIds.matchAll(Webpack.ChunkIdsRegex)).map(m => Number(m[1])) : [];
@ -69,19 +66,14 @@ export async function loadLazyChunks() {
await Promise.all(
Array.from(validChunkGroups)
.map(([chunkIds]) =>
Promise.all(chunkIds.map(id => wreq.e(id as any).catch(() => { })))
Promise.all(chunkIds.map(id => wreq.e(id)))
)
);
// Requires the entry points for all valid chunk groups
for (const [, entryPoint] of validChunkGroups) {
try {
if (shouldForceDefer) {
deferredRequires.add(entryPoint);
continue;
}
if (wreq.m[entryPoint]) wreq(entryPoint as any);
if (wreq.m[entryPoint]) wreq(entryPoint);
} catch (err) {
console.error(err);
}
@ -109,32 +101,33 @@ export async function loadLazyChunks() {
}, 0);
}
Webpack.factoryListeners.add(factory => {
function factoryListener(factory: AnyModuleFactory | ModuleFactory) {
let isResolved = false;
searchAndLoadLazyChunks(factory.toString()).then(() => isResolved = true);
chunksSearchPromises.push(() => isResolved);
});
for (const factoryId in wreq.m) {
let isResolved = false;
searchAndLoadLazyChunks(wreq.m[factoryId].toString()).then(() => isResolved = true);
searchAndLoadLazyChunks(String(factory))
.then(() => isResolved = true)
.catch(() => isResolved = true);
chunksSearchPromises.push(() => isResolved);
}
Webpack.factoryListeners.add(factoryListener);
for (const factoryId in wreq.m) {
factoryListener(wreq.m[factoryId]);
}
await chunksSearchingDone;
Webpack.factoryListeners.delete(factoryListener);
// Require deferred entry points
for (const deferredRequire of deferredRequires) {
wreq!(deferredRequire as any);
wreq(deferredRequire);
}
// All chunks Discord has mapped to asset files, even if they are not used anymore
const allChunks = [] as number[];
// Matches "id" or id:
for (const currentMatch of wreq!.u.toString().matchAll(/(?:"([\deE]+?)"(?![,}]))|(?:([\deE]+?):)/g)) {
for (const currentMatch of String(wreq.u).matchAll(/(?:"([\deE]+?)"(?![,}]))|(?:([\deE]+?):)/g)) {
const id = currentMatch[1] ?? currentMatch[2];
if (id == null) continue;
@ -143,7 +136,8 @@ export async function loadLazyChunks() {
if (allChunks.length === 0) throw new Error("Failed to get all chunks");
// Chunks that are not loaded (not used) by Discord code anymore
// Chunks which our regex could not catch to load
// It will always contain WebWorker assets, and also currently contains some language packs which are loaded differently
const chunksLeft = allChunks.filter(id => {
return !(validChunks.has(id) || invalidChunks.has(id));
});
@ -153,12 +147,9 @@ export async function loadLazyChunks() {
.then(r => r.text())
.then(t => t.includes("importScripts("));
// Loads and requires a chunk
// Loads the chunk. Currently this only happens with the language packs which are loaded differently
if (!isWorkerAsset) {
await wreq.e(id as any);
// Technically, the id of the chunk does not match the entry point
// But, still try it because we have no way to get the actual entry point
if (wreq.m[id]) wreq(id as any);
await wreq.e(id);
}
}));

View file

@ -4,22 +4,39 @@
* SPDX-License-Identifier: GPL-3.0-or-later
*/
import { SYM_LAZY_COMPONENT_INNER } from "@utils/lazyReact";
import { Logger } from "@utils/Logger";
import { SYM_PROXY_INNER_GET, SYM_PROXY_INNER_VALUE } from "@utils/proxyInner";
import * as Webpack from "@webpack";
import { patches } from "plugins";
import { addPatch, patches } from "plugins";
import { loadLazyChunks } from "./loadLazyChunks";
const ReporterLogger = new Logger("Reporter");
async function runReporter() {
const ReporterLogger = new Logger("Reporter");
try {
ReporterLogger.log("Starting test...");
let loadLazyChunksResolve: (value: void | PromiseLike<void>) => void;
let loadLazyChunksResolve: (value: void) => void;
const loadLazyChunksDone = new Promise<void>(r => loadLazyChunksResolve = r);
Webpack.beforeInitListeners.add(() => loadLazyChunks().then((loadLazyChunksResolve)));
// The main patch for starting the reporter chunk loading
addPatch({
find: '"Could not find app-mount"',
replacement: {
match: /(?<="use strict";)/,
replace: "Vencord.Webpack._initReporter();"
}
}, "Vencord Reporter");
// @ts-ignore
Vencord.Webpack._initReporter = function () {
// initReporter is called in the patched entry point of Discord
// setImmediate to only start searching for lazy chunks after Discord initialized the app
setTimeout(() => loadLazyChunks().then(loadLazyChunksResolve), 0);
};
await loadLazyChunksDone;
for (const patch of patches) {
@ -28,52 +45,158 @@ async function runReporter() {
}
}
for (const [searchType, args] of Webpack.lazyWebpackSearchHistory) {
let method = searchType;
if (searchType === "findComponent") method = "find";
if (searchType === "findExportedComponent") method = "findByProps";
if (searchType === "waitFor" || searchType === "waitForComponent") {
if (typeof args[0] === "string") method = "findByProps";
else method = "find";
for (const [plugin, moduleId, match, totalTime] of Vencord.WebpackPatcher.patchTimings) {
if (totalTime > 3) {
new Logger("WebpackInterceptor").warn(`Patch by ${plugin} took ${totalTime}ms (Module id is ${String(moduleId)}): ${match}`);
}
if (searchType === "waitForStore") method = "findStore";
}
let result: any;
await Promise.all(Webpack.webpackSearchHistory.map(async ([searchType, args]) => {
args = [...args];
let result = null as any;
try {
if (method === "proxyLazyWebpack" || method === "LazyComponentWebpack") {
const [factory] = args;
result = factory();
} else if (method === "extractAndLoadChunks") {
const [code, matcher] = args;
switch (searchType) {
case "webpackDependantLazy":
case "webpackDependantLazyComponent": {
const [factory] = args;
result = factory();
break;
}
case "extractAndLoadChunks": {
const extractAndLoadChunks = args.shift();
result = await Webpack.extractAndLoadChunks(code, matcher);
if (result === false) result = null;
} else if (method === "mapMangledModule") {
const [code, mapper] = args;
result = await extractAndLoadChunks();
if (result === false) {
result = null;
}
result = Webpack.mapMangledModule(code, mapper);
if (Object.keys(result).length !== Object.keys(mapper).length) throw new Error("Webpack Find Fail");
} else {
// @ts-ignore
result = Webpack[method](...args);
break;
}
default: {
const findResult = args.shift();
if (findResult != null) {
if (findResult.$$vencordCallbackCalled != null && findResult.$$vencordCallbackCalled()) {
result = findResult;
break;
}
if (findResult[SYM_PROXY_INNER_GET] != null) {
result = findResult[SYM_PROXY_INNER_VALUE];
break;
}
if (findResult[SYM_LAZY_COMPONENT_INNER] != null) {
result = findResult[SYM_LAZY_COMPONENT_INNER]();
break;
}
if (searchType === "mapMangledModule") {
result = findResult;
for (const innerMap in result) {
if (
(result[innerMap][SYM_PROXY_INNER_GET] != null && result[innerMap][SYM_PROXY_INNER_VALUE] == null) ||
(result[innerMap][SYM_LAZY_COMPONENT_INNER] != null && result[innerMap][SYM_LAZY_COMPONENT_INNER]() == null)
) {
throw new Error("Webpack Find Fail");
}
}
break;
}
// This can happen if a `find` was immediately found
result = findResult;
}
break;
}
}
if (result == null || (result.$$vencordInternal != null && result.$$vencordInternal() == null)) throw new Error("Webpack Find Fail");
if (result == null) {
throw new Error("Webpack Find Fail");
}
} catch (e) {
let logMessage = searchType;
if (method === "find" || method === "proxyLazyWebpack" || method === "LazyComponentWebpack") logMessage += `(${args[0].toString().slice(0, 147)}...)`;
else if (method === "extractAndLoadChunks") logMessage += `([${args[0].map(arg => `"${arg}"`).join(", ")}], ${args[1].toString()})`;
else if (method === "mapMangledModule") {
const failedMappings = Object.keys(args[1]).filter(key => result?.[key] == null);
logMessage += `("${args[0]}", {\n${failedMappings.map(mapping => `\t${mapping}: ${args[1][mapping].toString().slice(0, 147)}...`).join(",\n")}\n})`;
let filterName = "";
let parsedArgs = args;
if (args[0].$$vencordProps != null) {
if (["find", "findComponent", "waitFor"].includes(searchType)) {
filterName = args[0].$$vencordProps[0];
parsedArgs = args[0].$$vencordProps.slice(1);
} else {
parsedArgs = args[0].$$vencordProps;
}
}
function stringifyFilter(code: Webpack.CodeFilterWithSingle) {
if (Array.isArray(code)) {
return `[${code.map(arg => arg instanceof RegExp ? String(arg) : JSON.stringify(arg)).join(", ")}]`;
}
return code instanceof RegExp ? String(code) : JSON.stringify(code);
}
// if parsedArgs is the same as args, it means vencordProps of the filter was not available (like in normal filter functions),
// so log the filter function instead
if (
parsedArgs === args &&
["waitFor", "find", "findComponent", "webpackDependantLazy", "webpackDependantLazyComponent"].includes(searchType)
) {
let filter = String(parsedArgs[0]);
if (filter.length > 150) {
filter = filter.slice(0, 147) + "...";
}
logMessage += `(${filter})`;
} else if (searchType === "extractAndLoadChunks") {
const [code, matcher] = parsedArgs;
let regexStr: string;
if (matcher === Webpack.DefaultExtractAndLoadChunksRegex) {
regexStr = "DefaultExtractAndLoadChunksRegex";
} else {
regexStr = String(matcher);
}
logMessage += `(${stringifyFilter(code)}, ${regexStr})`;
} else if (searchType === "mapMangledModule") {
const [code, mappers] = parsedArgs;
const parsedFailedMappers = Object.entries<any>(mappers)
.filter(([key]) =>
result == null ||
(result[key]?.[SYM_PROXY_INNER_GET] != null && result[key][SYM_PROXY_INNER_VALUE] == null) ||
(result[key]?.[SYM_LAZY_COMPONENT_INNER] != null && result[key][SYM_LAZY_COMPONENT_INNER]() == null)
)
.map(([key, filter]) => {
let parsedFilter: string;
if (filter.$$vencordProps != null) {
const filterName = filter.$$vencordProps[0];
parsedFilter = `${filterName}(${filter.$$vencordProps.slice(1).map((arg: any) => arg instanceof RegExp ? String(arg) : JSON.stringify(arg)).join(", ")})`;
} else {
parsedFilter = String(filter);
if (parsedFilter.length > 150) {
parsedFilter = parsedFilter.slice(0, 147) + "...";
}
}
return [key, parsedFilter];
});
logMessage += `(${stringifyFilter(code)}, {\n${parsedFailedMappers.map(([key, parsedFilter]) => `\t${key}: ${parsedFilter}`).join(",\n")}\n})`;
} else {
logMessage += `(${filterName.length ? `${filterName}(` : ""}${parsedArgs.map(stringifyFilter).join(", ")})${filterName.length ? ")" : ""}`;
}
else logMessage += `(${args.map(arg => `"${arg}"`).join(", ")})`;
ReporterLogger.log("Webpack Find Fail:", logMessage);
}
}
}));
ReporterLogger.log("Finished test");
} catch (e) {
@ -81,4 +204,5 @@ async function runReporter() {
}
}
runReporter();
// Run after the Vencord object has been created
setTimeout(runReporter, 0);

7
src/globals.d.ts vendored
View file

@ -64,13 +64,8 @@ declare global {
export var Vesktop: any;
export var VesktopNative: any;
interface Window {
webpackChunkdiscord_app: {
push(chunk: any): any;
pop(): any;
};
interface Window extends Record<PropertyKey, any> {
_: LoDashStatic;
[k: string]: any;
}
}

View file

@ -20,6 +20,7 @@ import { definePluginSettings } from "@api/Settings";
import { Devs } from "@utils/constants";
import { Logger } from "@utils/Logger";
import definePlugin, { OptionType, StartAt } from "@utils/types";
import { WebpackRequire } from "webpack";
const settings = definePluginSettings({
disableAnalytics: {
@ -81,9 +82,9 @@ export default definePlugin({
Object.defineProperty(Function.prototype, "g", {
configurable: true,
set(v: any) {
set(this: WebpackRequire, globalObj: WebpackRequire["g"]) {
Object.defineProperty(this, "g", {
value: v,
value: globalObj,
configurable: true,
enumerable: true,
writable: true
@ -92,11 +93,11 @@ export default definePlugin({
// Ensure this is most likely the Sentry WebpackInstance.
// Function.g is a very generic property and is not uncommon for another WebpackInstance (or even a React component: <g></g>) to include it
const { stack } = new Error();
if (!(stack?.includes("discord.com") || stack?.includes("discordapp.com")) || !String(this).includes("exports:{}") || this.c != null) {
if (this.c != null || !stack?.includes("http") || !String(this).includes("exports:{}")) {
return;
}
const assetPath = stack?.match(/\/assets\/.+?\.js/)?.[0];
const assetPath = stack.match(/http.+?(?=:\d+?:\d+?$)/m)?.[0];
if (!assetPath) {
return;
}
@ -106,7 +107,8 @@ export default definePlugin({
srcRequest.send();
// Final condition to see if this is the Sentry WebpackInstance
if (!srcRequest.responseText.includes("window.DiscordSentry=")) {
// This is matching window.DiscordSentry=, but without `window` to avoid issues on some proxies
if (!srcRequest.responseText.includes(".DiscordSentry=")) {
return;
}

View file

@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import { Settings } from "@api/Settings";
import { definePluginSettings } from "@api/Settings";
import BackupAndRestoreTab from "@components/VencordSettings/BackupAndRestoreTab";
import CloudTab from "@components/VencordSettings/CloudTab";
import PatchHelperTab from "@components/VencordSettings/PatchHelperTab";
@ -33,11 +33,27 @@ import gitHash from "~git-hash";
type SectionType = "HEADER" | "DIVIDER" | "CUSTOM";
type SectionTypes = Record<SectionType, SectionType>;
const settings = definePluginSettings({
settingsLocation: {
type: OptionType.SELECT,
description: "Where to put the Vencord settings section",
options: [
{ label: "At the very top", value: "top" },
{ label: "Above the Nitro section", value: "aboveNitro", default: true },
{ label: "Below the Nitro section", value: "belowNitro" },
{ label: "Above Activity Settings", value: "aboveActivity" },
{ label: "Below Activity Settings", value: "belowActivity" },
{ label: "At the very bottom", value: "bottom" },
]
}
});
export default definePlugin({
name: "Settings",
description: "Adds Settings UI and debug info",
authors: [Devs.Ven, Devs.Megu],
required: true,
settings,
patches: [
{
@ -136,12 +152,12 @@ export default definePlugin({
].filter(Boolean);
},
isRightSpot({ header, settings }: { header?: string; settings?: string[]; }) {
const firstChild = settings?.[0];
isRightSpot({ header, settingsChilds }: { header?: string; settingsChilds?: string[]; }) {
const firstChild = settingsChilds?.[0];
// lowest two elements... sanity backup
if (firstChild === "LOGOUT" || firstChild === "SOCIAL_LINKS") return true;
const { settingsLocation } = Settings.plugins.Settings;
const { settingsLocation } = settings.store;
if (settingsLocation === "bottom") return firstChild === "LOGOUT";
if (settingsLocation === "belowActivity") return firstChild === "CHANGELOG";
@ -181,21 +197,6 @@ export default definePlugin({
};
},
options: {
settingsLocation: {
type: OptionType.SELECT,
description: "Where to put the Vencord settings section",
options: [
{ label: "At the very top", value: "top" },
{ label: "Above the Nitro section", value: "aboveNitro", default: true },
{ label: "Below the Nitro section", value: "belowNitro" },
{ label: "Above Activity Settings", value: "aboveActivity" },
{ label: "Below Activity Settings", value: "belowActivity" },
{ label: "At the very bottom", value: "bottom" },
]
},
},
get electronVersion() {
return VencordNative.native.getVersions().electron || window.armcord?.electron || null;
},

View file

@ -59,7 +59,7 @@ const TrustedRolesIds = [
const AsyncFunction = async function () { }.constructor;
const ShowCurrentGame = getUserSettingLazy<boolean>("status", "showCurrentGame")!;
const ShowCurrentGame = getUserSettingLazy<boolean>("status", "showCurrentGame");
async function forceUpdate() {
const outdated = await checkForUpdates();

View file

@ -21,12 +21,12 @@ import { definePluginSettings } from "@api/Settings";
import ErrorBoundary from "@components/ErrorBoundary";
import { Devs } from "@utils/constants";
import definePlugin, { OptionType } from "@utils/types";
import { findByCodeLazy, findByPropsLazy } from "@webpack";
import { findByProps, findComponentByCode } from "@webpack";
type AnonUpload = Upload & { anonymise?: boolean; };
const ActionBarIcon = findByCodeLazy(".actionBarIcon)");
const UploadDraft = findByPropsLazy("popFirstFile", "update");
const ActionBarIcon = findComponentByCode(".actionBarIcon)");
const UploadDraft = findByProps("popFirstFile", "update");
const enum Methods {
Random,

View file

@ -20,10 +20,10 @@ import { popNotice, showNotice } from "@api/Notices";
import { Link } from "@components/Link";
import { Devs } from "@utils/constants";
import definePlugin, { ReporterTestable } from "@utils/types";
import { findByCodeLazy } from "@webpack";
import { findByCode } from "@webpack";
import { ApplicationAssetUtils, FluxDispatcher, Forms, Toasts } from "@webpack/common";
const fetchApplicationsRPC = findByCodeLazy("APPLICATION_RPC(", "Client ID");
const fetchApplicationsRPC = findByCode("APPLICATION_RPC(", "Client ID");
async function lookupAsset(applicationId: string, key: string): Promise<string> {
return (await ApplicationAssetUtils.fetchAssetIds(applicationId, [key]))[0];

View file

@ -17,15 +17,15 @@
*/
import ErrorBoundary from "@components/ErrorBoundary";
import { findByPropsLazy, findComponentByCodeLazy, findStoreLazy } from "@webpack";
import { findByProps, findComponentByCode, findStore } from "@webpack";
import { useStateFromStores } from "@webpack/common";
import type { CSSProperties } from "react";
import { ExpandedGuildFolderStore, settings } from ".";
const ChannelRTCStore = findStoreLazy("ChannelRTCStore");
const Animations = findByPropsLazy("a", "animated", "useTransition");
const GuildsBar = findComponentByCodeLazy('("guildsnav")');
const ChannelRTCStore = findStore("ChannelRTCStore");
const Animations = findByProps("a", "animated", "useTransition");
const GuildsBar = findComponentByCode('("guildsnav")');
export default ErrorBoundary.wrap(guildsBarProps => {
const expandedFolders = useStateFromStores([ExpandedGuildFolderStore], () => ExpandedGuildFolderStore.getExpandedFolders());

View file

@ -19,7 +19,7 @@
import { definePluginSettings } from "@api/Settings";
import { Devs } from "@utils/constants";
import definePlugin, { OptionType } from "@utils/types";
import { findByPropsLazy, findLazy, findStoreLazy } from "@webpack";
import { find, findByProps, findStore } from "@webpack";
import { FluxDispatcher, i18n, useMemo } from "@webpack/common";
import FolderSideBar from "./FolderSideBar";
@ -30,10 +30,10 @@ enum FolderIconDisplay {
MoreThanOneFolderExpanded
}
const GuildsTree = findLazy(m => m.prototype?.moveNextTo);
const SortedGuildStore = findStoreLazy("SortedGuildStore");
export const ExpandedGuildFolderStore = findStoreLazy("ExpandedGuildFolderStore");
const FolderUtils = findByPropsLazy("move", "toggleGuildFolderExpand");
const GuildsTree = find(m => m.prototype?.moveNextTo);
const SortedGuildStore = findStore("SortedGuildStore");
export const ExpandedGuildFolderStore = findStore("ExpandedGuildFolderStore");
const FolderUtils = findByProps("move", "toggleGuildFolderExpand");
let lastGuildId = null as string | null;
let dispatchingFoldersClose = false;

View file

@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import { definePluginSettings, Settings } from "@api/Settings";
import { definePluginSettings } from "@api/Settings";
import { Devs } from "@utils/constants";
import { canonicalizeMatch } from "@utils/patches";
import definePlugin, { OptionType } from "@utils/types";
@ -31,7 +31,7 @@ const settings = definePluginSettings({
noSpellCheck: {
type: OptionType.BOOLEAN,
description: "Disable spellcheck in notes",
disabled: () => Settings.plugins.BetterNotesBox.hide,
disabled: () => settings.store.hide,
default: false
}
});

View file

@ -10,12 +10,12 @@ import { ImageIcon } from "@components/Icons";
import { Devs } from "@utils/constants";
import { getCurrentGuild, openImageModal } from "@utils/discord";
import definePlugin, { OptionType } from "@utils/types";
import { findByPropsLazy } from "@webpack";
import { findByProps } from "@webpack";
import { Clipboard, GuildStore, Menu, PermissionStore } from "@webpack/common";
const GuildSettingsActions = findByPropsLazy("open", "selectRole", "updateGuild");
const GuildSettingsActions = findByProps("open", "selectRole", "updateGuild");
const DeveloperMode = getUserSettingLazy("appearance", "developerMode")!;
const DeveloperMode = getUserSettingLazy("appearance", "developerMode");
function PencilIcon() {
return (

View file

@ -16,16 +16,32 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import { Settings } from "@api/Settings";
import { definePluginSettings } from "@api/Settings";
import { Devs } from "@utils/constants";
import definePlugin, { OptionType } from "@utils/types";
import { Clipboard, Toasts } from "@webpack/common";
const settings = definePluginSettings({
bothStyles: {
type: OptionType.BOOLEAN,
description: "Show both role dot and coloured names",
restartNeeded: true,
default: false,
},
copyRoleColorInProfilePopout: {
type: OptionType.BOOLEAN,
description: "Allow click on role dot in profile popout to copy role color",
restartNeeded: true,
default: false
}
});
export default definePlugin({
name: "BetterRoleDot",
authors: [Devs.Ven, Devs.AutumnVN],
description:
"Copy role colour on RoleDot (accessibility setting) click. Also allows using both RoleDot and coloured names simultaneously",
settings,
patches: [
{
@ -39,7 +55,7 @@ export default definePlugin({
find: '"dot"===',
all: true,
noWarn: true,
predicate: () => Settings.plugins.BetterRoleDot.bothStyles,
predicate: () => settings.store.bothStyles,
replacement: {
match: /"(?:username|dot)"===\i(?!\.\i)/g,
replace: "true",
@ -49,7 +65,7 @@ export default definePlugin({
{
find: ".ADD_ROLE_A11Y_LABEL",
all: true,
predicate: () => Settings.plugins.BetterRoleDot.copyRoleColorInProfilePopout && !Settings.plugins.BetterRoleDot.bothStyles,
predicate: () => settings.store.copyRoleColorInProfilePopout && !settings.store.bothStyles,
noWarn: true,
replacement: {
match: /"dot"===\i/,
@ -59,7 +75,7 @@ export default definePlugin({
{
find: ".roleVerifiedIcon",
all: true,
predicate: () => Settings.plugins.BetterRoleDot.copyRoleColorInProfilePopout && !Settings.plugins.BetterRoleDot.bothStyles,
predicate: () => settings.store.copyRoleColorInProfilePopout && !settings.store.bothStyles,
noWarn: true,
replacement: {
match: /"dot"===\i/,
@ -68,21 +84,6 @@ export default definePlugin({
}
],
options: {
bothStyles: {
type: OptionType.BOOLEAN,
description: "Show both role dot and coloured names",
restartNeeded: true,
default: false,
},
copyRoleColorInProfilePopout: {
type: OptionType.BOOLEAN,
description: "Allow click on role dot in profile popout to copy role color",
restartNeeded: true,
default: false
}
},
copyToClipBoard(color: string) {
Clipboard.copy(color);
Toasts.show({

View file

@ -21,20 +21,20 @@ import { definePluginSettings } from "@api/Settings";
import ErrorBoundary from "@components/ErrorBoundary";
import { Devs } from "@utils/constants";
import definePlugin, { OptionType } from "@utils/types";
import { findByPropsLazy, findExportedComponentLazy, findStoreLazy } from "@webpack";
import { findByProps, findExportedComponent, findStore } from "@webpack";
import { Constants, React, RestAPI, Tooltip } from "@webpack/common";
import { RenameButton } from "./components/RenameButton";
import { Session, SessionInfo } from "./types";
import { fetchNamesFromDataStore, getDefaultName, GetOsColor, GetPlatformIcon, savedSessionsCache, saveSessionsToDataStore } from "./utils";
const AuthSessionsStore = findStoreLazy("AuthSessionsStore");
const UserSettingsModal = findByPropsLazy("saveAccountChanges", "open");
const AuthSessionsStore = findStore("AuthSessionsStore");
const UserSettingsModal = findByProps("saveAccountChanges", "open");
const TimestampClasses = findByPropsLazy("timestampTooltip", "blockquoteContainer");
const SessionIconClasses = findByPropsLazy("sessionIcon");
const TimestampClasses = findByProps("timestampTooltip", "blockquoteContainer");
const SessionIconClasses = findByProps("sessionIcon");
const BlobMask = findExportedComponentLazy("BlobMask");
const BlobMask = findExportedComponent("BlobMask");
const settings = definePluginSettings({
backgroundCheck: {

View file

@ -8,16 +8,17 @@ import { definePluginSettings } from "@api/Settings";
import { classNameFactory } from "@api/Styles";
import { Devs } from "@utils/constants";
import { Logger } from "@utils/Logger";
import { SYM_PROXY_INNER_VALUE } from "@utils/proxyInner";
import { NoopComponent } from "@utils/react";
import definePlugin, { OptionType } from "@utils/types";
import { waitFor } from "@webpack";
import { findByProps } from "@webpack";
import { ComponentDispatch, FocusLock, i18n, Menu, useEffect, useRef } from "@webpack/common";
import type { HTMLAttributes, ReactElement } from "react";
type SettingsEntry = { section: string, label: string; };
const cl = classNameFactory("");
let Classes: Record<string, string>;
waitFor(["animating", "baseLayer", "bg", "layer", "layers"], m => Classes = m);
const Classes = findByProps("animating", "baseLayer", "bg", "layer", "layers");
const settings = definePluginSettings({
disableFade: {
@ -132,7 +133,7 @@ export default definePlugin({
// try catch will only catch errors in the Layer function (hence why it's called as a plain function rather than a component), but
// not in children
Layer(props: LayerProps) {
if (!FocusLock || !ComponentDispatch || !Classes) {
if (FocusLock === NoopComponent || ComponentDispatch[SYM_PROXY_INNER_VALUE] == null || Classes[SYM_PROXY_INNER_VALUE] == null) {
new Logger("BetterSettings").error("Failed to find some components");
return props.children;
}

View file

@ -16,9 +16,9 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import { findStoreLazy } from "@webpack";
import { findStore } from "@webpack";
import * as t from "./types/stores";
export const ApplicationStreamPreviewStore: t.ApplicationStreamPreviewStore = findStoreLazy("ApplicationStreamPreviewStore");
export const ApplicationStreamingStore: t.ApplicationStreamingStore = findStoreLazy("ApplicationStreamingStore");
export const ApplicationStreamPreviewStore: t.ApplicationStreamPreviewStore = findStore("ApplicationStreamPreviewStore");
export const ApplicationStreamingStore: t.ApplicationStreamingStore = findStore("ApplicationStreamingStore");

View file

@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import { Settings } from "@api/Settings";
import { definePluginSettings } from "@api/Settings";
import { Devs } from "@utils/constants";
import definePlugin, { OptionType } from "@utils/types";
@ -26,7 +26,7 @@ function setCss() {
style.textContent = `
.vc-nsfw-img [class^=imageWrapper] img,
.vc-nsfw-img [class^=wrapperPaused] video {
filter: blur(${Settings.plugins.BlurNSFW.blurAmount}px);
filter: blur(${settings.store.blurAmount}px);
transition: filter 0.2s;
}
.vc-nsfw-img [class^=imageWrapper]:hover img,
@ -36,10 +36,20 @@ function setCss() {
`;
}
const settings = definePluginSettings({
blurAmount: {
type: OptionType.NUMBER,
description: "Blur Amount",
default: 10,
onChange: setCss
}
});
export default definePlugin({
name: "BlurNSFW",
description: "Blur attachments in NSFW channels until hovered",
authors: [Devs.Ven],
settings,
patches: [
{
@ -51,15 +61,6 @@ export default definePlugin({
}
],
options: {
blurAmount: {
type: OptionType.NUMBER,
description: "Blur Amount",
default: 10,
onChange: setCss
}
},
start() {
style = document.createElement("style");
style.id = "VcBlurNsfw";

View file

@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import { Settings } from "@api/Settings";
import { definePluginSettings } from "@api/Settings";
import ErrorBoundary from "@components/ErrorBoundary";
import { Devs } from "@utils/constants";
import { useTimer } from "@utils/react";
@ -25,7 +25,7 @@ import { React } from "@webpack/common";
function formatDuration(ms: number) {
// here be dragons (moment fucking sucks)
const human = Settings.plugins.CallTimer.format === "human";
const human = settings.store.format === "human";
const format = (n: number) => human ? n : n.toString().padStart(2, "0");
const unit = (s: string) => human ? s : "";
@ -46,32 +46,33 @@ function formatDuration(ms: number) {
return res;
}
const settings = definePluginSettings({
format: {
type: OptionType.SELECT,
description: "The timer format. This can be any valid moment.js format",
options: [
{
label: "30d 23:00:42",
value: "stopwatch",
default: true
},
{
label: "30d 23h 00m 42s",
value: "human"
}
]
}
});
export default definePlugin({
name: "CallTimer",
description: "Adds a timer to vcs",
authors: [Devs.Ven],
settings,
startTime: 0,
interval: void 0 as NodeJS.Timeout | undefined,
options: {
format: {
type: OptionType.SELECT,
description: "The timer format. This can be any valid moment.js format",
options: [
{
label: "30d 23:00:42",
value: "stopwatch",
default: true
},
{
label: "30d 23h 00m 42s",
value: "human"
}
]
}
},
patches: [{
find: "renderConnectionStatus(){",
replacement: {

View file

@ -11,10 +11,10 @@ import { Devs } from "@utils/constants";
import { Margins } from "@utils/margins";
import { classes } from "@utils/misc";
import definePlugin, { OptionType, StartAt } from "@utils/types";
import { findByCodeLazy, findComponentByCodeLazy, findStoreLazy } from "@webpack";
import { findByCode, findComponentByCode, findStore } from "@webpack";
import { Button, Forms, useStateFromStores } from "@webpack/common";
const ColorPicker = findComponentByCodeLazy(".Messages.USER_SETTINGS_PROFILE_COLOR_SELECT_COLOR", ".BACKGROUND_PRIMARY)");
const ColorPicker = findComponentByCode(".Messages.USER_SETTINGS_PROFILE_COLOR_SELECT_COLOR", ".BACKGROUND_PRIMARY)");
const colorPresets = [
"#1E1514", "#172019", "#13171B", "#1C1C28", "#402D2D",
@ -30,21 +30,21 @@ function onPickColor(color: number) {
updateColorVars(hexColor);
}
const saveClientTheme = findByCodeLazy('type:"UNSYNCED_USER_SETTINGS_UPDATE', '"system"===');
const saveClientTheme = findByCode('type:"UNSYNCED_USER_SETTINGS_UPDATE', '"system"===');
function setTheme(theme: string) {
saveClientTheme({ theme });
}
const ThemeStore = findStoreLazy("ThemeStore");
const NitroThemeStore = findStoreLazy("ClientThemesBackgroundStore");
const ThemeStore = findStore("ThemeStore");
const ClientThemesBackgroundStore = findStore("ClientThemesBackgroundStore");
function ThemeSettings() {
const theme = useStateFromStores([ThemeStore], () => ThemeStore.theme);
const isLightTheme = theme === "light";
const oppositeTheme = isLightTheme ? "dark" : "light";
const nitroTheme = useStateFromStores([NitroThemeStore], () => NitroThemeStore.gradientPreset);
const nitroTheme = useStateFromStores([ClientThemesBackgroundStore], () => ClientThemesBackgroundStore.gradientPreset);
const nitroThemeEnabled = nitroTheme !== undefined;
const selectedLuminance = relativeLuminance(settings.store.color);

View file

@ -19,11 +19,13 @@
import { Devs } from "@utils/constants";
import { getCurrentChannel, getCurrentGuild } from "@utils/discord";
import { SYM_LAZY_CACHED, SYM_LAZY_GET } from "@utils/lazy";
import { SYM_LAZY_COMPONENT_INNER } from "@utils/lazyReact";
import { relaunch } from "@utils/native";
import { canonicalizeMatch, canonicalizeReplace, canonicalizeReplacement } from "@utils/patches";
import { SYM_PROXY_INNER_GET, SYM_PROXY_INNER_VALUE } from "@utils/proxyInner";
import definePlugin, { PluginNative, StartAt } from "@utils/types";
import * as Webpack from "@webpack";
import { extract, filters, findAll, findModuleId, search } from "@webpack";
import { cacheFindAll, cacheFindModuleId, extract, filters, searchFactories } from "@webpack";
import * as Common from "@webpack/common";
import { loadLazyChunks } from "debug/loadLazyChunks";
import type { ComponentType } from "react";
@ -32,27 +34,29 @@ const DESKTOP_ONLY = (f: string) => () => {
throw new Error(`'${f}' is Discord Desktop only.`);
};
const define: typeof Object.defineProperty =
(obj, prop, desc) => {
if (Object.hasOwn(desc, "value"))
desc.writable = true;
return Object.defineProperty(obj, prop, {
configurable: true,
enumerable: true,
...desc
});
};
type Define = typeof Object.defineProperty;
const define: Define = (target, p, attributes) => {
if (Object.hasOwn(attributes, "value")) {
attributes.writable = true;
}
return Object.defineProperty(target, p, {
configurable: true,
enumerable: true,
...attributes
});
};
function makeShortcuts() {
function newFindWrapper(filterFactory: (...props: any[]) => Webpack.FilterFn) {
function newFindWrapper(filterFactory: (...props: any[]) => Webpack.FilterFn, shouldReturnFactory = false) {
const cache = new Map<string, unknown>();
return function (...filterProps: unknown[]) {
const cacheKey = String(filterProps);
if (cache.has(cacheKey)) return cache.get(cacheKey);
const matches = findAll(filterFactory(...filterProps));
const matches = cacheFindAll(filterFactory(...filterProps), shouldReturnFactory);
const result = (() => {
switch (matches.length) {
@ -60,50 +64,71 @@ function makeShortcuts() {
case 1: return matches[0];
default:
const uniqueMatches = [...new Set(matches)];
if (uniqueMatches.length > 1)
if (uniqueMatches.length > 1) {
console.warn(`Warning: This filter matches ${matches.length} modules. Make it more specific!\n`, uniqueMatches);
}
return matches[0];
return uniqueMatches[0];
}
})();
if (result && cacheKey) cache.set(cacheKey, result);
return result;
};
}
let fakeRenderWin: WeakRef<Window> | undefined;
const find = newFindWrapper(f => f);
const findByProps = newFindWrapper(filters.byProps);
return {
...Object.fromEntries(Object.keys(Common).map(key => [key, { getter: () => Common[key] }])),
wp: Webpack,
wpc: { getter: () => Webpack.cache },
wreq: { getter: () => Webpack.wreq },
wpsearch: search,
wpex: extract,
wpexs: (code: string) => extract(findModuleId(code)!),
WebpackInstances: { getter: () => Vencord.WebpackPatcher.allWebpackInstances },
loadLazyChunks: IS_DEV ? loadLazyChunks : () => { throw new Error("loadLazyChunks is dev only."); },
wpsearch: searchFactories,
wpex: extract,
wpexs: (...code: Webpack.CodeFilter) => extract(cacheFindModuleId(...code)!),
filters,
find,
findAll: findAll,
findByProps,
findAllByProps: (...props: string[]) => findAll(filters.byProps(...props)),
findByCode: newFindWrapper(filters.byCode),
findAllByCode: (code: string) => findAll(filters.byCode(code)),
findAll: cacheFindAll,
findComponent: find,
findAllComponents: cacheFindAll,
findExportedComponent: (...props: Webpack.PropsFilter) => findByProps(...props)[props[0]],
findComponentByCode: newFindWrapper(filters.componentByCode),
findAllComponentsByCode: (...code: string[]) => findAll(filters.componentByCode(...code)),
findExportedComponent: (...props: string[]) => findByProps(...props)[props[0]],
findAllComponentsByCode: (...code: Webpack.PropsFilter) => cacheFindAll(filters.componentByCode(...code)),
findComponentByFields: newFindWrapper(filters.componentByFields),
findAllComponentsByFields: (...fields: Webpack.PropsFilter) => cacheFindAll(filters.componentByFields(...fields)),
findByProps,
findAllByProps: (...props: Webpack.PropsFilter) => cacheFindAll(filters.byProps(...props)),
findProp: (...props: Webpack.PropsFilter) => findByProps(...props)[props[0]],
findByCode: newFindWrapper(filters.byCode),
findAllByCode: (code: Webpack.CodeFilter) => cacheFindAll(filters.byCode(...code)),
findStore: newFindWrapper(filters.byStoreName),
PluginsApi: { getter: () => Vencord.Plugins },
findByFactoryCode: newFindWrapper(filters.byFactoryCode),
findAllByFactoryCode: (...code: Webpack.CodeFilter) => cacheFindAll(filters.byFactoryCode(...code)),
findModuleFactory: newFindWrapper(filters.byFactoryCode, true),
findAllModuleFactories: (...code: Webpack.CodeFilter) => cacheFindAll(filters.byFactoryCode(...code), true),
plugins: { getter: () => Vencord.Plugins.plugins },
PluginsApi: { getter: () => Vencord.Plugins },
Settings: { getter: () => Vencord.Settings },
Api: { getter: () => Vencord.Api },
Util: { getter: () => Vencord.Util },
reload: () => location.reload(),
restart: IS_WEB ? DESKTOP_ONLY("restart") : relaunch,
canonicalizeMatch,
canonicalizeReplace,
canonicalizeReplacement,
preEnable: (plugin: string) => (Vencord.Settings.plugins[plugin] ??= { enabled: true }).enabled = true,
fakeRender: (component: ComponentType, props: any) => {
const prevWin = fakeRenderWin?.deref();
const win = prevWin?.closed === false
@ -133,8 +158,6 @@ function makeShortcuts() {
Common.ReactDOM.render(Common.React.createElement(component, props), doc.body.appendChild(document.createElement("div")));
},
preEnable: (plugin: string) => (Vencord.Settings.plugins[plugin] ??= { enabled: true }).enabled = true,
channel: { getter: () => getCurrentChannel(), preload: false },
channelId: { getter: () => Common.SelectedChannelStore.getChannelId(), preload: false },
guild: { getter: () => getCurrentGuild(), preload: false },
@ -143,6 +166,7 @@ function makeShortcuts() {
meId: { getter: () => Common.UserStore.getCurrentUser().id, preload: false },
messages: { getter: () => Common.MessageStore.getMessages(Common.SelectedChannelStore.getChannelId()), preload: false },
...Object.fromEntries(Object.keys(Common).map(key => [key, { getter: () => Common[key] }])),
Stores: {
getter: () => Object.fromEntries(
Common.Flux.Store.getAll()
@ -157,11 +181,39 @@ function loadAndCacheShortcut(key: string, val: any, forceLoad: boolean) {
const currentVal = val.getter();
if (!currentVal || val.preload === false) return currentVal;
const value = currentVal[SYM_LAZY_GET]
? forceLoad ? currentVal[SYM_LAZY_GET]() : currentVal[SYM_LAZY_CACHED]
: currentVal;
function unwrapProxy(value: any) {
if (value[SYM_LAZY_GET]) {
return forceLoad ? value[SYM_LAZY_GET]() : value[SYM_LAZY_CACHED];
} else if (value[SYM_PROXY_INNER_GET]) {
return forceLoad ? value[SYM_PROXY_INNER_GET]() : value[SYM_PROXY_INNER_VALUE];
} else if (value[SYM_LAZY_COMPONENT_INNER]) {
return value[SYM_LAZY_COMPONENT_INNER]() != null ? value[SYM_LAZY_COMPONENT_INNER]() : value;
}
if (value) define(window.shortcutList, key, { value });
return value;
}
const value = unwrapProxy(currentVal);
if (value != null && typeof value === "object") {
const descriptors = Object.getOwnPropertyDescriptors(value);
for (const propKey in descriptors) {
if (value[propKey] == null) continue;
const descriptor = descriptors[propKey];
if (descriptor.writable === true || descriptor.set != null) {
const currentValue = value[propKey];
const newValue = unwrapProxy(currentValue);
if (newValue != null && currentValue !== newValue) {
value[propKey] = newValue;
}
}
}
}
if (value != null) {
define(window.shortcutList, key, { value });
}
return value;
}
@ -176,8 +228,10 @@ export default definePlugin({
const shortcuts = makeShortcuts();
window.shortcutList = {};
for (const [key, val] of Object.entries(shortcuts)) {
if ("getter" in val) {
for (const key in shortcuts) {
const val = shortcuts[key];
if (Object.hasOwn(val, "getter")) {
define(window.shortcutList, key, {
get: () => loadAndCacheShortcut(key, val, true)
});
@ -191,8 +245,8 @@ export default definePlugin({
}
}
// unproxy loaded modules
Webpack.onceReady.then(() => {
// Unproxy loaded modules
Webpack.onceDiscordLoaded.then(() => {
setTimeout(() => this.eagerLoad(false), 1000);
if (!IS_WEB) {
@ -203,13 +257,13 @@ export default definePlugin({
},
async eagerLoad(forceLoad: boolean) {
await Webpack.onceReady;
await Webpack.onceDiscordLoaded;
const shortcuts = makeShortcuts();
for (const key in shortcuts) {
const val = shortcuts[key];
for (const [key, val] of Object.entries(shortcuts)) {
if (!Object.hasOwn(val, "getter") || (val as any).preload === false) continue;
if (!Object.hasOwn(val, "getter") || val.preload === false) continue;
try {
loadAndCacheShortcut(key, val, forceLoad);
} catch { } // swallow not found errors in DEV

View file

@ -8,10 +8,10 @@ import { definePluginSettings } from "@api/Settings";
import { Devs } from "@utils/constants";
import { copyWithToast } from "@utils/misc";
import definePlugin, { OptionType } from "@utils/types";
import { findByPropsLazy } from "@webpack";
import { findProp } from "@webpack";
import { Menu } from "@webpack/common";
const { convertNameToSurrogate } = findByPropsLazy("convertNameToSurrogate");
const convertNameToSurrogate = findProp("convertNameToSurrogate");
interface Emoji {
type: string;
@ -55,7 +55,7 @@ export default definePlugin({
settings,
contextMenus: {
"expression-picker"(children, { target }: { target: Target }) {
"expression-picker"(children, { target }: { target: Target; }) {
if (target.dataset.type !== "emoji") return;
children.push(

View file

@ -23,22 +23,12 @@ import { Logger } from "@utils/Logger";
import { closeAllModals } from "@utils/modal";
import definePlugin, { OptionType } from "@utils/types";
import { maybePromptToUpdate } from "@utils/updater";
import { filters, findBulk, proxyLazyWebpack } from "@webpack";
import { findByProps } from "@webpack";
import { DraftType, ExpressionPickerStore, FluxDispatcher, NavigationRouter, SelectedChannelStore } from "@webpack/common";
const CrashHandlerLogger = new Logger("CrashHandler");
const { ModalStack, DraftManager } = proxyLazyWebpack(() => {
const [ModalStack, DraftManager] = findBulk(
filters.byProps("pushLazy", "popAll"),
filters.byProps("clearDraft", "saveDraft"),
);
return {
ModalStack,
DraftManager
};
});
const ModalStack = findByProps("pushLazy", "popAll");
const DraftManager = findByProps("clearDraft", "saveDraft");
const settings = definePluginSettings({
attemptToPreventCrashes: {

View file

@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import { definePluginSettings, Settings } from "@api/Settings";
import { definePluginSettings } from "@api/Settings";
import { getUserSettingLazy } from "@api/UserSettings";
import { ErrorCard } from "@components/ErrorCard";
import { Link } from "@components/Link";
@ -26,14 +26,14 @@ import { Margins } from "@utils/margins";
import { classes } from "@utils/misc";
import { useAwaiter } from "@utils/react";
import definePlugin, { OptionType } from "@utils/types";
import { findByCodeLazy, findByPropsLazy, findComponentByCodeLazy } from "@webpack";
import { findByCode, findByProps, findComponentByCode } from "@webpack";
import { ApplicationAssetUtils, Button, FluxDispatcher, Forms, GuildStore, React, SelectedChannelStore, SelectedGuildStore, UserStore } from "@webpack/common";
const useProfileThemeStyle = findByCodeLazy("profileThemeStyle:", "--profile-gradient-primary-color");
const ActivityComponent = findComponentByCodeLazy("onOpenGameProfile");
const ActivityClassName = findByPropsLazy("activity", "buttonColor");
const useProfileThemeStyle = findByCode("profileThemeStyle:", "--profile-gradient-primary-color");
const ActivityComponent = findComponentByCode("onOpenGameProfile");
const ActivityClassName = findByProps("activity", "buttonColor");
const ShowCurrentGame = getUserSettingLazy<boolean>("status", "showCurrentGame")!;
const ShowCurrentGame = getUserSettingLazy<boolean>("status", "showCurrentGame");
async function getApplicationAsset(key: string): Promise<string> {
if (/https?:\/\/(cdn|media)\.discordapp\.(com|net)\/attachments\//.test(key)) return "mp:" + key.replace(/https?:\/\/(cdn|media)\.discordapp\.(com|net)\//, "");
@ -261,7 +261,7 @@ const settings = definePluginSettings({
function onChange() {
setRpc(true);
if (Settings.plugins.CustomRPC.enabled) setRpc();
if (Vencord.Plugins.isPluginEnabled("CustomRPC")) setRpc();
}
function isStreamLinkDisabled() {

View file

@ -5,7 +5,7 @@
*/
import { Flex } from "@components/Flex";
import { findByCodeLazy } from "@webpack";
import { findComponentByCode } from "@webpack";
import { Button, useEffect } from "@webpack/common";
import { useAuthorizationStore } from "../../lib/stores/AuthorizationStore";
@ -13,7 +13,7 @@ import { useCurrentUserDecorationsStore } from "../../lib/stores/CurrentUserDeco
import { cl } from "../";
import { openChangeDecorationModal } from "../modals/ChangeDecorationModal";
const CustomizationSection = findByCodeLazy(".customizationSectionBackground");
const CustomizationSection = findComponentByCode(".customizationSectionBackground");
export interface DecorSectionProps {
hideTitle?: boolean;

View file

@ -5,13 +5,13 @@
*/
import { classes } from "@utils/misc";
import { findByPropsLazy } from "@webpack";
import { findByProps } from "@webpack";
import { React } from "@webpack/common";
import { cl } from "../";
import Grid, { GridProps } from "./Grid";
const ScrollerClasses = findByPropsLazy("managedReactiveScroller");
const ScrollerClasses = findByProps("managedReactiveScroller");
type Section<SectionT, ItemT> = SectionT & {
items: Array<ItemT>;

View file

@ -4,7 +4,8 @@
* SPDX-License-Identifier: GPL-3.0-or-later
*/
import { findComponentByCode, LazyComponentWebpack } from "@webpack";
import { NoopComponent } from "@utils/react";
import { findComponentByCode } from "@webpack";
import { React } from "@webpack/common";
import type { ComponentType, HTMLProps, PropsWithChildren } from "react";
@ -15,13 +16,10 @@ type DecorationGridItemComponent = ComponentType<PropsWithChildren<HTMLProps<HTM
isSelected: boolean,
}>;
export let DecorationGridItem: DecorationGridItemComponent;
export let DecorationGridItem: DecorationGridItemComponent = NoopComponent;
export const setDecorationGridItem = v => DecorationGridItem = v;
export const AvatarDecorationModalPreview = LazyComponentWebpack(() => {
const component = findComponentByCode(".shopPreviewBanner");
return React.memo(component);
});
export const AvatarDecorationModalPreview = findComponentByCode<any>(".shopPreviewBanner", component => React.memo(component));
type DecorationGridDecorationComponent = React.ComponentType<HTMLProps<HTMLDivElement> & {
avatarDecoration: AvatarDecoration;
@ -29,5 +27,5 @@ type DecorationGridDecorationComponent = React.ComponentType<HTMLProps<HTMLDivEl
isSelected: boolean,
}>;
export let DecorationGridDecoration: DecorationGridDecorationComponent;
export let DecorationGridDecoration: DecorationGridDecorationComponent = NoopComponent;
export const setDecorationGridDecoration = v => DecorationGridDecoration = v;

View file

@ -5,10 +5,10 @@
*/
import { classNameFactory } from "@api/Styles";
import { extractAndLoadChunksLazy, findByPropsLazy } from "@webpack";
import { extractAndLoadChunksLazy, findByProps } from "@webpack";
export const cl = classNameFactory("vc-decor-");
export const DecorationModalStyles = findByPropsLazy("modalFooterShopButton");
export const DecorationModalStyles = findByProps("modalFooterShopButton");
export const requireAvatarDecorationModal = extractAndLoadChunksLazy([".COLLECTIBLES_SHOP_FULLSCREEN&&"]);
export const requireCreateStickerModal = extractAndLoadChunksLazy(["stickerInspected]:"]);
export const requireAvatarDecorationModal = extractAndLoadChunksLazy(".COLLECTIBLES_SHOP_FULLSCREEN&&");
export const requireCreateStickerModal = extractAndLoadChunksLazy("stickerInspected]:");

View file

@ -10,7 +10,7 @@ import { openInviteModal } from "@utils/discord";
import { Margins } from "@utils/margins";
import { classes, copyWithToast } from "@utils/misc";
import { closeAllModals, ModalCloseButton, ModalContent, ModalFooter, ModalHeader, ModalProps, ModalRoot, ModalSize, openModal } from "@utils/modal";
import { findComponentByCodeLazy } from "@webpack";
import { findComponentByCode } from "@webpack";
import { Alerts, Button, FluxDispatcher, Forms, GuildStore, NavigationRouter, Parser, Text, Tooltip, useEffect, UserStore, UserUtils, useState } from "@webpack/common";
import { User } from "discord-types/general";
@ -29,7 +29,7 @@ import SectionedGridList from "../components/SectionedGridList";
import { openCreateDecorationModal } from "./CreateDecorationModal";
import { openGuidelinesModal } from "./GuidelinesModal";
const UserSummaryItem = findComponentByCodeLazy("defaultRenderUser", "showDefaultAvatarsForNullUsers");
const UserSummaryItem = findComponentByCode("defaultRenderUser", "showDefaultAvatarsForNullUsers");
function usePresets() {
const [presets, setPresets] = useState<Preset[]>([]);

View file

@ -9,7 +9,7 @@ import { Link } from "@components/Link";
import { openInviteModal } from "@utils/discord";
import { Margins } from "@utils/margins";
import { closeAllModals, ModalCloseButton, ModalContent, ModalFooter, ModalHeader, ModalProps, ModalRoot, ModalSize, openModal } from "@utils/modal";
import { filters, findComponentByCodeLazy, mapMangledModuleLazy } from "@webpack";
import { filters, findComponentByCode, mapMangledModule } from "@webpack";
import { Button, FluxDispatcher, Forms, GuildStore, NavigationRouter, Text, TextInput, useEffect, useMemo, UserStore, useState } from "@webpack/common";
import { GUILD_ID, INVITE_KEY, RAW_SKU_ID } from "../../lib/constants";
@ -17,11 +17,11 @@ import { useCurrentUserDecorationsStore } from "../../lib/stores/CurrentUserDeco
import { cl, DecorationModalStyles, requireAvatarDecorationModal, requireCreateStickerModal } from "../";
import { AvatarDecorationModalPreview } from "../components";
const FileUpload = findComponentByCodeLazy("fileUploadInput,");
const FileUpload = findComponentByCode("fileUploadInput,");
const { HelpMessage, HelpMessageTypes } = mapMangledModuleLazy('POSITIVE=3]="POSITIVE', {
const { HelpMessage, HelpMessageTypes } = mapMangledModule('POSITIVE=3]="POSITIVE', {
HelpMessage: filters.componentByCode(".iconDiv,", "messageType"),
HelpMessageTypes: filters.byProps("POSITIVE", "WARNING"),
HelpMessage: filters.byCode(".iconDiv")
});
function useObjectURL(object: Blob | MediaSource | null) {

View file

@ -22,7 +22,7 @@ import { Devs } from "@utils/constants";
import { Logger } from "@utils/Logger";
import { canonicalizeMatch, canonicalizeReplace } from "@utils/patches";
import definePlugin, { OptionType, ReporterTestable } from "@utils/types";
import { filters, findAll, search } from "@webpack";
import { cacheFindAll, filters, searchFactories } from "@webpack";
const PORT = 8485;
const NAV_ID = "dev-companion-reconnect";
@ -154,13 +154,13 @@ function initWs(isManual = false) {
case "testPatch": {
const { find, replacement } = data as PatchData;
const candidates = search(find);
const candidates = searchFactories(find);
const keys = Object.keys(candidates);
if (keys.length !== 1)
return reply("Expected exactly one 'find' matches, found " + keys.length);
const mod = candidates[keys[0]];
let src = String(mod.original ?? mod).replaceAll("\n", "");
let src = String(mod).replaceAll("\n", "");
if (src.startsWith("function(")) {
src = "0," + src;
@ -201,22 +201,22 @@ function initWs(isManual = false) {
let results: any[];
switch (type.replace("find", "").replace("Lazy", "")) {
case "":
results = findAll(parsedArgs[0]);
results = cacheFindAll(parsedArgs[0]);
break;
case "ByProps":
results = findAll(filters.byProps(...parsedArgs));
results = cacheFindAll(filters.byProps(...parsedArgs));
break;
case "Store":
results = findAll(filters.byStoreName(parsedArgs[0]));
results = cacheFindAll(filters.byStoreName(parsedArgs[0]));
break;
case "ByCode":
results = findAll(filters.byCode(...parsedArgs));
results = cacheFindAll(filters.byCode(...parsedArgs));
break;
case "ModuleId":
results = Object.keys(search(parsedArgs[0]));
results = Object.keys(searchFactories(parsedArgs[0]));
break;
case "ComponentByCode":
results = findAll(filters.componentByCode(...parsedArgs));
results = cacheFindAll(filters.componentByCode(...parsedArgs));
break;
default:
return reply("Unknown Find Type " + type);

View file

@ -23,12 +23,12 @@ import { Logger } from "@utils/Logger";
import { Margins } from "@utils/margins";
import { ModalContent, ModalHeader, ModalRoot, openModalLazy } from "@utils/modal";
import definePlugin from "@utils/types";
import { findByCodeLazy, findStoreLazy } from "@webpack";
import { findByCode, findStore } from "@webpack";
import { Constants, EmojiStore, FluxDispatcher, Forms, GuildStore, Menu, PermissionsBits, PermissionStore, React, RestAPI, Toasts, Tooltip, UserStore } from "@webpack/common";
import { Promisable } from "type-fest";
const StickersStore = findStoreLazy("StickersStore");
const uploadEmoji = findByCodeLazy(".GUILD_EMOJIS(", "EMOJI_UPLOAD_START");
const StickersStore = findStore("StickersStore");
const uploadEmoji = findByCode(".GUILD_EMOJIS(", "EMOJI_UPLOAD_START");
interface Sticker {
t: "Sticker";

View file

@ -23,12 +23,12 @@ import { ErrorCard } from "@components/ErrorCard";
import { Devs } from "@utils/constants";
import { Margins } from "@utils/margins";
import definePlugin, { OptionType } from "@utils/types";
import { findByPropsLazy } from "@webpack";
import { findByProps } from "@webpack";
import { Forms, React } from "@webpack/common";
import hideBugReport from "./hideBugReport.css?managed";
const KbdStyles = findByPropsLazy("key", "combo");
const KbdStyles = findByProps("key", "combo");
const settings = definePluginSettings({
toolbarDevMenu: {

View file

@ -23,36 +23,36 @@ import { ApngBlendOp, ApngDisposeOp, importApngJs } from "@utils/dependencies";
import { getCurrentGuild } from "@utils/discord";
import { Logger } from "@utils/Logger";
import definePlugin, { OptionType } from "@utils/types";
import { findByCodeLazy, findByPropsLazy, findStoreLazy, proxyLazyWebpack } from "@webpack";
import { findByCode, findByProps, findStore, webpackDependantLazy } from "@webpack";
import { Alerts, ChannelStore, DraftType, EmojiStore, FluxDispatcher, Forms, GuildMemberStore, IconUtils, lodash, Parser, PermissionsBits, PermissionStore, UploadHandler, UserSettingsActionCreators, UserStore } from "@webpack/common";
import type { Emoji } from "@webpack/types";
import type { Message } from "discord-types/general";
import { applyPalette, GIFEncoder, quantize } from "gifenc";
import type { ReactElement, ReactNode } from "react";
const StickerStore = findStoreLazy("StickersStore") as {
const StickersStore = findStore("StickersStore") as {
getPremiumPacks(): StickerPack[];
getAllGuildStickers(): Map<string, Sticker[]>;
getStickerById(id: string): Sticker | undefined;
};
const UserSettingsProtoStore = findStoreLazy("UserSettingsProtoStore");
const UserSettingsProtoStore = findStore("UserSettingsProtoStore");
const BINARY_READ_OPTIONS = findByPropsLazy("readerFactory");
const BINARY_READ_OPTIONS = findByProps("readerFactory");
function searchProtoClassField(localName: string, protoClass: any) {
const field = protoClass?.fields?.find((field: any) => field.localName === localName);
if (!field) return;
const fieldGetter = Object.values(field).find(value => typeof value === "function") as any;
const fieldGetter = Object.values<any>(field).find(value => typeof value === "function");
return fieldGetter?.();
}
const PreloadedUserSettingsActionCreators = proxyLazyWebpack(() => UserSettingsActionCreators.PreloadedUserSettingsActionCreators);
const AppearanceSettingsActionCreators = proxyLazyWebpack(() => searchProtoClassField("appearance", PreloadedUserSettingsActionCreators.ProtoClass));
const ClientThemeSettingsActionsCreators = proxyLazyWebpack(() => searchProtoClassField("clientThemeSettings", AppearanceSettingsActionCreators));
const PreloadedUserSettingsActionCreators = webpackDependantLazy(() => UserSettingsActionCreators.PreloadedUserSettingsActionCreators);
const AppearanceSettingsActionCreators = webpackDependantLazy(() => searchProtoClassField("appearance", PreloadedUserSettingsActionCreators.ProtoClass));
const ClientThemeSettingsActionsCreators = webpackDependantLazy(() => searchProtoClassField("clientThemeSettings", AppearanceSettingsActionCreators));
const isUnusableRoleSubscriptionEmoji = findByCodeLazy(".getUserIsAdmin(");
const isUnusableRoleSubscriptionEmoji = findByCode(".getUserIsAdmin(");
const enum EmojiIntentions {
REACTION,
@ -566,8 +566,8 @@ export default definePlugin({
const gifMatch = child.props.href.match(fakeNitroGifStickerRegex);
if (gifMatch) {
// There is no way to differentiate a regular gif attachment from a fake nitro animated sticker, so we check if the StickerStore contains the id of the fake sticker
if (StickerStore.getStickerById(gifMatch[1])) return null;
// There is no way to differentiate a regular gif attachment from a fake nitro animated sticker, so we check if the StickersStore contains the id of the fake sticker
if (StickersStore.getStickerById(gifMatch[1])) return null;
}
}
@ -655,7 +655,7 @@ export default definePlugin({
url = new URL(item);
} catch { }
const stickerName = StickerStore.getStickerById(imgMatch[1])?.name ?? url?.searchParams.get("name") ?? "FakeNitroSticker";
const stickerName = StickersStore.getStickerById(imgMatch[1])?.name ?? url?.searchParams.get("name") ?? "FakeNitroSticker";
stickers.push({
format_type: 1,
id: imgMatch[1],
@ -668,9 +668,9 @@ export default definePlugin({
const gifMatch = item.match(fakeNitroGifStickerRegex);
if (gifMatch) {
if (!StickerStore.getStickerById(gifMatch[1])) continue;
if (!StickersStore.getStickerById(gifMatch[1])) continue;
const stickerName = StickerStore.getStickerById(gifMatch[1])?.name ?? "FakeNitroSticker";
const stickerName = StickersStore.getStickerById(gifMatch[1])?.name ?? "FakeNitroSticker";
stickers.push({
format_type: 2,
id: gifMatch[1],
@ -703,8 +703,8 @@ export default definePlugin({
const gifMatch = embed.url!.match(fakeNitroGifStickerRegex);
if (gifMatch) {
// There is no way to differentiate a regular gif attachment from a fake nitro animated sticker, so we check if the StickerStore contains the id of the fake sticker
if (StickerStore.getStickerById(gifMatch[1])) return true;
// There is no way to differentiate a regular gif attachment from a fake nitro animated sticker, so we check if the StickersStore contains the id of the fake sticker
if (StickersStore.getStickerById(gifMatch[1])) return true;
}
}
@ -721,8 +721,8 @@ export default definePlugin({
const match = attachment.url.match(fakeNitroGifStickerRegex);
if (match) {
// There is no way to differentiate a regular gif attachment from a fake nitro animated sticker, so we check if the StickerStore contains the id of the fake sticker
if (StickerStore.getStickerById(match[1])) return false;
// There is no way to differentiate a regular gif attachment from a fake nitro animated sticker, so we check if the StickersStore contains the id of the fake sticker
if (StickersStore.getStickerById(match[1])) return false;
}
return true;
@ -878,7 +878,7 @@ export default definePlugin({
if (!s.enableStickerBypass)
break stickerBypass;
const sticker = StickerStore.getStickerById(extra.stickers?.[0]!);
const sticker = StickersStore.getStickerById(extra.stickers?.[0]!);
if (!sticker)
break stickerBypass;

View file

@ -26,7 +26,7 @@ import { Margins } from "@utils/margins";
import { classes, copyWithToast } from "@utils/misc";
import { useAwaiter } from "@utils/react";
import definePlugin, { OptionType } from "@utils/types";
import { extractAndLoadChunksLazy, findComponentByCodeLazy } from "@webpack";
import { extractAndLoadChunksLazy, findComponentByCode } from "@webpack";
import { Button, Flex, Forms, React, Text, UserProfileStore, UserStore, useState } from "@webpack/common";
import { User } from "discord-types/general";
import virtualMerge from "virtual-merge";
@ -108,10 +108,10 @@ interface ProfileModalProps {
isTryItOutFlow: boolean;
}
const ColorPicker = findComponentByCodeLazy<ColorPickerProps>(".Messages.USER_SETTINGS_PROFILE_COLOR_SELECT_COLOR", ".BACKGROUND_PRIMARY)");
const ProfileModal = findComponentByCodeLazy<ProfileModalProps>("isTryItOutFlow:", "pendingThemeColors:", "pendingAvatarDecoration:", "EDIT_PROFILE_BANNER");
const ColorPicker = findComponentByCode<ColorPickerProps>(".Messages.USER_SETTINGS_PROFILE_COLOR_SELECT_COLOR", ".BACKGROUND_PRIMARY)");
const ProfileModal = findComponentByCode<ProfileModalProps>("isTryItOutFlow:", "pendingThemeColors:", "pendingAvatarDecoration:", "EDIT_PROFILE_BANNER");
const requireColorPicker = extractAndLoadChunksLazy(["USER_SETTINGS_PROFILE_COLOR_DEFAULT_BUTTON.format"], /createPromise:\(\)=>\i\.\i(\("?.+?"?\)).then\(\i\.bind\(\i,"?(.+?)"?\)\)/);
const requireColorPicker = extractAndLoadChunksLazy("USER_SETTINGS_PROFILE_COLOR_DEFAULT_BUTTON.format");
export default definePlugin({
name: "FakeProfileThemes",

View file

@ -20,7 +20,7 @@ import { definePluginSettings } from "@api/Settings";
import ErrorBoundary from "@components/ErrorBoundary";
import { Devs } from "@utils/constants";
import definePlugin, { OptionType } from "@utils/types";
import { findByPropsLazy } from "@webpack";
import { findByProps } from "@webpack";
import { useCallback, useEffect, useRef, useState } from "@webpack/common";
interface SearchBarComponentProps {
@ -35,7 +35,7 @@ interface SearchBarComponentProps {
}
type TSearchBarComponent =
React.FC<SearchBarComponentProps> & { Sizes: Record<"SMALL" | "MEDIUM" | "LARGE", string>; };
React.ComponentType<SearchBarComponentProps> & { Sizes: Record<"SMALL" | "MEDIUM" | "LARGE", string>; };
interface Gif {
format: number;
@ -60,7 +60,7 @@ interface Instance {
}
const containerClasses: { searchBar: string; } = findByPropsLazy("searchBar", "searchBarFullRow");
const containerClasses: { searchBar: string; } = findByProps("searchBar", "searchBarFullRow");
export const settings = definePluginSettings({
searchOption: {

View file

@ -19,9 +19,9 @@
import { ApplicationCommandInputType, sendBotMessage } from "@api/Commands";
import { Devs } from "@utils/constants";
import definePlugin from "@utils/types";
import { findByPropsLazy } from "@webpack";
import { findByProps } from "@webpack";
const FriendInvites = findByPropsLazy("createFriendInvite");
const FriendInvites = findByProps("createFriendInvite");
export default definePlugin({
name: "FriendInvites",

View file

@ -9,14 +9,14 @@ import { Devs } from "@utils/constants";
import { getCurrentChannel } from "@utils/discord";
import { Logger } from "@utils/Logger";
import definePlugin from "@utils/types";
import { findByCodeLazy, findByPropsLazy, findLazy } from "@webpack";
import { find, findByCode, findByProps } from "@webpack";
import { Heading, RelationshipStore, Text } from "@webpack/common";
const containerWrapper = findByPropsLazy("memberSinceWrapper");
const container = findByPropsLazy("memberSince");
const getCreatedAtDate = findByCodeLazy('month:"short",day:"numeric"');
const locale = findByPropsLazy("getLocale");
const section = findLazy((m: any) => m.section !== void 0 && m.heading !== void 0 && Object.values(m).length === 2);
const containerWrapper = findByProps("memberSinceWrapper");
const container = findByProps("memberSince");
const getCreatedAtDate = findByCode('month:"short",day:"numeric"');
const locale = findByProps("getLocale");
const section = find((m: any) => m.section !== void 0 && m.heading !== void 0 && Object.values(m).length === 2);
export default definePlugin({
name: "FriendsSince",

View file

@ -22,13 +22,13 @@ import { getUserSettingLazy } from "@api/UserSettings";
import ErrorBoundary from "@components/ErrorBoundary";
import { Devs } from "@utils/constants";
import definePlugin, { OptionType } from "@utils/types";
import { findComponentByCodeLazy } from "@webpack";
import { findComponentByCode } from "@webpack";
import style from "./style.css?managed";
const Button = findComponentByCodeLazy("Button.Sizes.NONE,disabled:");
const Button = findComponentByCode("Button.Sizes.NONE,disabled:");
const ShowCurrentGame = getUserSettingLazy<boolean>("status", "showCurrentGame")!;
const ShowCurrentGame = getUserSettingLazy<boolean>("status", "showCurrentGame");
function makeIcon(showCurrentGame?: boolean) {
const { oldIcon } = settings.use(["oldIcon"]);

View file

@ -19,7 +19,7 @@
import { definePluginSettings } from "@api/Settings";
import { Devs } from "@utils/constants";
import definePlugin, { OptionType } from "@utils/types";
import { findLazy } from "@webpack";
import { find } from "@webpack";
import { ContextMenuApi, FluxDispatcher, Menu, MessageActions } from "@webpack/common";
import { Channel, Message } from "discord-types/general";
@ -49,7 +49,7 @@ const settings = definePluginSettings({
unholyMultiGreetEnabled?: boolean;
}>();
const WELCOME_STICKERS = findLazy(m => Array.isArray(m) && m[0]?.name === "Wave");
const WELCOME_STICKERS = find(m => Array.isArray(m) && m[0]?.name === "Wave");
function greet(channel: Channel, message: Message, stickers: string[]) {
const options = MessageActions.getSendMessageOptionsForReply({

View file

@ -12,7 +12,7 @@ import { Flex } from "@components/Flex";
import { Devs } from "@utils/constants";
import { Margins } from "@utils/margins";
import definePlugin, { OptionType } from "@utils/types";
import { findStoreLazy } from "@webpack";
import { findStore } from "@webpack";
import { Button, Forms, showToast, TextInput, Toasts, Tooltip, useEffect, useState } from "webpack/common";
const enum ActivitiesTypes {
@ -26,9 +26,9 @@ interface IgnoredActivity {
type: ActivitiesTypes;
}
const RunningGameStore = findStoreLazy("RunningGameStore");
const RunningGameStore = findStore("RunningGameStore");
const ShowCurrentGame = getUserSettingLazy("status", "showCurrentGame")!;
const ShowCurrentGame = getUserSettingLazy("status", "showCurrentGame");
function ToggleIcon(activity: IgnoredActivity, tooltipText: string, path: string, fill: string) {
return (

View file

@ -19,16 +19,26 @@
import { definePluginSettings } from "@api/Settings";
import { Devs } from "@utils/constants";
import definePlugin, { OptionType } from "@utils/types";
import { findStoreLazy } from "@webpack";
import { findStore } from "@webpack";
import { ChannelStore, Constants, FluxDispatcher, GuildStore, RelationshipStore, SnowflakeUtils, UserStore } from "@webpack/common";
import { Settings } from "Vencord";
const UserAffinitiesStore = findStoreLazy("UserAffinitiesStore");
const UserAffinitiesStore = findStore("UserAffinitiesStore");
const settings = definePluginSettings({
sortByAffinity: {
type: OptionType.BOOLEAN,
default: true,
description: "Whether to sort implicit relationships by their affinity to you.",
restartNeeded: true
}
});
export default definePlugin({
name: "ImplicitRelationships",
description: "Shows your implicit relationships in the Friends tab.",
authors: [Devs.Dolfies],
settings,
patches: [
// Counts header
{
@ -75,7 +85,7 @@ export default definePlugin({
{
find: "getRelationshipCounts(){",
replacement: {
predicate: () => Settings.plugins.ImplicitRelationships.sortByAffinity,
predicate: () => settings.store.sortByAffinity,
match: /\}\)\.sortBy\((.+?)\)\.value\(\)/,
replace: "}).sortBy(row => $self.wrapSort(($1), row)).value()"
}
@ -104,16 +114,6 @@ export default definePlugin({
},
}
],
settings: definePluginSettings(
{
sortByAffinity: {
type: OptionType.BOOLEAN,
default: true,
description: "Whether to sort implicit relationships by their affinity to you.",
restartNeeded: true
},
}
),
wrapSort(comparator: Function, row: any) {
return row.type === 5

View file

@ -21,7 +21,7 @@ import { Link } from "@components/Link";
import { Devs } from "@utils/constants";
import { Logger } from "@utils/Logger";
import definePlugin, { OptionType } from "@utils/types";
import { findByPropsLazy } from "@webpack";
import { findStore } from "@webpack";
import { ApplicationAssetUtils, FluxDispatcher, Forms } from "@webpack/common";
interface ActivityAssets {
@ -86,7 +86,7 @@ const placeholderId = "2a96cbd8b46e442fc41c2b86b821562f";
const logger = new Logger("LastFMRichPresence");
const presenceStore = findByPropsLazy("getLocalPresence");
const SelfPresenceStore = findStore("SelfPresenceStore");
async function getApplicationAsset(key: string): Promise<string> {
return (await ApplicationAssetUtils.fetchAssetIds(applicationId, [key]))[0];
@ -275,7 +275,7 @@ export default definePlugin({
async getActivity(): Promise<Activity | null> {
if (settings.store.hideWithSpotify) {
for (const activity of presenceStore.getActivities()) {
for (const activity of SelfPresenceStore.getActivities()) {
if (activity.type === ActivityType.LISTENING && activity.application_id !== applicationId) {
// there is already music status because of Spotify or richerCider (probably more)
return null;

View file

@ -23,16 +23,16 @@ import { classNameFactory } from "@api/Styles";
import ErrorBoundary from "@components/ErrorBoundary";
import { Devs } from "@utils/constants";
import definePlugin, { OptionType } from "@utils/types";
import { findStoreLazy } from "@webpack";
import { findStore } from "@webpack";
import { FluxStore } from "@webpack/types";
import { MemberCount } from "./MemberCount";
export const GuildMemberCountStore = findStoreLazy("GuildMemberCountStore") as FluxStore & { getMemberCount(guildId: string): number | null; };
export const ChannelMemberStore = findStoreLazy("ChannelMemberStore") as FluxStore & {
export const GuildMemberCountStore = findStore("GuildMemberCountStore") as FluxStore & { getMemberCount(guildId: string): number | null; };
export const ChannelMemberStore = findStore("ChannelMemberStore") as FluxStore & {
getProps(guildId: string, channelId: string): { groups: { count: number; id: string; }[]; };
};
export const ThreadMemberListStore = findStoreLazy("ThreadMemberListStore") as FluxStore & {
export const ThreadMemberListStore = findStore("ThreadMemberListStore") as FluxStore & {
getMemberListSections(channelId: string): { [sectionId: string]: { sectionId: string; userIds: string[]; }; };
};

View file

@ -20,11 +20,11 @@ import { addClickListener, removeClickListener } from "@api/MessageEvents";
import { definePluginSettings } from "@api/Settings";
import { Devs } from "@utils/constants";
import definePlugin, { OptionType } from "@utils/types";
import { findByPropsLazy } from "@webpack";
import { findByProps, findStore } from "@webpack";
import { FluxDispatcher, PermissionsBits, PermissionStore, UserStore } from "@webpack/common";
const MessageActions = findByPropsLazy("deleteMessage", "startEditMessage");
const EditStore = findByPropsLazy("isEditing", "isEditingAny");
const MessageActions = findByProps("deleteMessage", "startEditMessage");
const EditMessageStore = findStore("EditMessageStore");
let isDeletePressed = false;
const keydown = (e: KeyboardEvent) => e.key === "Backspace" && (isDeletePressed = true);
@ -74,7 +74,7 @@ export default definePlugin({
if (msg.deleted === true) return;
if (isMe) {
if (!settings.store.enableDoubleClickToEdit || EditStore.isEditing(channel.id, msg.id)) return;
if (!settings.store.enableDoubleClickToEdit || EditMessageStore.isEditing(channel.id, msg.id)) return;
MessageActions.startEditMessage(channel.id, msg.id, msg.content);
event.preventDefault();

View file

@ -9,7 +9,7 @@ import ErrorBoundary from "@components/ErrorBoundary";
import { Devs } from "@utils/constants";
import { isNonNullish } from "@utils/guards";
import definePlugin, { OptionType } from "@utils/types";
import { findExportedComponentLazy } from "@webpack";
import { findExportedComponent } from "@webpack";
import { SnowflakeUtils, Tooltip } from "@webpack/common";
import { Message } from "discord-types/general";
@ -26,7 +26,7 @@ interface Diff {
}
const DISCORD_KT_DELAY = 1471228928;
const HiddenVisually = findExportedComponentLazy("HiddenVisually");
const HiddenVisually = findExportedComponent("HiddenVisually");
export default definePlugin({
name: "MessageLatency",

View file

@ -25,7 +25,7 @@ import { Devs } from "@utils/constants.js";
import { classes } from "@utils/misc";
import { Queue } from "@utils/Queue";
import definePlugin, { OptionType } from "@utils/types";
import { findByPropsLazy, findComponentByCodeLazy } from "@webpack";
import { findByProps, findComponentByCode } from "@webpack";
import {
Button,
ChannelStore,
@ -47,14 +47,14 @@ const messageCache = new Map<string, {
fetched: boolean;
}>();
const Embed = findComponentByCodeLazy(".inlineMediaEmbed");
const AutoModEmbed = findComponentByCodeLazy(".withFooter]:", "childrenMessageContent:");
const ChannelMessage = findComponentByCodeLazy("childrenExecutedCommand:", ".hideAccessories");
const Embed = findComponentByCode(".inlineMediaEmbed");
const AutoModEmbed = findComponentByCode(".withFooter]:", "childrenMessageContent:");
const ChannelMessage = findComponentByCode("childrenExecutedCommand:", ".hideAccessories");
const SearchResultClasses = findByPropsLazy("message", "searchResult");
const EmbedClasses = findByPropsLazy("embedAuthorIcon", "embedAuthor", "embedAuthor");
const SearchResultClasses = findByProps("message", "searchResult");
const EmbedClasses = findByProps("embedAuthorIcon", "embedAuthor", "embedAuthor");
const MessageDisplayCompact = getUserSettingLazy("textAndImages", "messageDisplayCompact")!;
const MessageDisplayCompact = getUserSettingLazy("textAndImages", "messageDisplayCompact");
const messageLinkRegex = /(?<!<)https?:\/\/(?:\w+\.)?discord(?:app)?\.com\/channels\/(?:\d{17,20}|@me)\/(\d{17,20})\/(\d{17,20})/g;
const tenorRegex = /^https:\/\/(?:www\.)?tenor\.com\//;
@ -215,10 +215,9 @@ function computeWidthAndHeight(width: number, height: number) {
function withEmbeddedBy(message: Message, embeddedBy: string[]) {
return new Proxy(message, {
get(_, prop) {
get(target, prop, receiver) {
if (prop === "vencordEmbeddedBy") return embeddedBy;
// @ts-ignore ts so bad
return Reflect.get(...arguments);
return Reflect.get(target, prop, receiver);
}
});
}

View file

@ -9,13 +9,13 @@ import ErrorBoundary from "@components/ErrorBoundary";
import { Margins } from "@utils/margins";
import { classes } from "@utils/misc";
import { ModalCloseButton, ModalContent, ModalHeader, ModalProps, ModalRoot, ModalSize, openModal } from "@utils/modal";
import { findByPropsLazy } from "@webpack";
import { findByProps } from "@webpack";
import { TabBar, Text, Timestamp, TooltipContainer, useState } from "@webpack/common";
import { parseEditContent } from ".";
const CodeContainerClasses = findByPropsLazy("markup", "codeContainer");
const MiscClasses = findByPropsLazy("messageContent", "markupRtl");
const CodeContainerClasses = findByProps("markup", "codeContainer");
const MiscClasses = findByProps("messageContent", "markupRtl");
const cl = classNameFactory("vc-ml-modal-");

View file

@ -20,7 +20,7 @@ import "./messageLogger.css";
import { findGroupChildrenByChildId, NavContextMenuPatchCallback } from "@api/ContextMenu";
import { updateMessage } from "@api/MessageUpdater";
import { Settings } from "@api/Settings";
import { definePluginSettings } from "@api/Settings";
import { disableStyle, enableStyle } from "@api/Styles";
import ErrorBoundary from "@components/ErrorBoundary";
import { Devs } from "@utils/constants";
@ -28,7 +28,7 @@ import { proxyLazy } from "@utils/lazy";
import { Logger } from "@utils/Logger";
import { classes } from "@utils/misc";
import definePlugin, { OptionType } from "@utils/types";
import { findByCodeLazy, findByPropsLazy } from "@webpack";
import { findByCode, findByProps } from "@webpack";
import { ChannelStore, FluxDispatcher, i18n, Menu, MessageStore, Parser, SelectedChannelStore, Timestamp, UserStore, useStateFromStores } from "@webpack/common";
import { Message } from "discord-types/general";
@ -42,11 +42,11 @@ interface MLMessage extends Message {
firstEditTimestamp?: Date;
}
const styles = findByPropsLazy("edited", "communicationDisabled", "isSystemMessage");
const getMessage = findByCodeLazy('replace(/^\\n+|\\n+$/g,"")');
const styles = findByProps("edited", "communicationDisabled", "isSystemMessage");
const getMessage = findByCode('replace(/^\\n+|\\n+$/g,"")');
function addDeleteStyle() {
if (Settings.plugins.MessageLogger.deleteStyle === "text") {
if (settings.store.deleteStyle === "text") {
enableStyle(textStyle);
disableStyle(overlayStyle);
} else {
@ -142,11 +142,70 @@ export function parseEditContent(content: string, message: Message) {
});
}
const settings = definePluginSettings({
deleteStyle: {
type: OptionType.SELECT,
description: "The style of deleted messages",
default: "text",
options: [
{ label: "Red text", value: "text", default: true },
{ label: "Red overlay", value: "overlay" }
],
onChange: () => addDeleteStyle()
},
logDeletes: {
type: OptionType.BOOLEAN,
description: "Whether to log deleted messages",
default: true,
},
collapseDeleted: {
type: OptionType.BOOLEAN,
description: "Whether to collapse deleted messages, similar to blocked messages",
default: false
},
logEdits: {
type: OptionType.BOOLEAN,
description: "Whether to log edited messages",
default: true,
},
inlineEdits: {
type: OptionType.BOOLEAN,
description: "Whether to display edit history as part of message content",
default: true
},
ignoreBots: {
type: OptionType.BOOLEAN,
description: "Whether to ignore messages by bots",
default: false
},
ignoreSelf: {
type: OptionType.BOOLEAN,
description: "Whether to ignore messages by yourself",
default: false
},
ignoreUsers: {
type: OptionType.STRING,
description: "Comma-separated list of user IDs to ignore",
default: ""
},
ignoreChannels: {
type: OptionType.STRING,
description: "Comma-separated list of channel IDs to ignore",
default: ""
},
ignoreGuilds: {
type: OptionType.STRING,
description: "Comma-separated list of guild IDs to ignore",
default: ""
},
});
export default definePlugin({
name: "MessageLogger",
description: "Temporarily logs deleted and edited messages.",
authors: [Devs.rushii, Devs.Ven, Devs.AutumnVN, Devs.Nickyux, Devs.Kyuuhachi],
dependencies: ["MessageUpdaterAPI"],
settings,
contextMenus: {
"message": patchMessageContextMenu,
@ -168,7 +227,7 @@ export default definePlugin({
(oldMsg, newMsg) => oldMsg?.editHistory === newMsg?.editHistory
);
return Settings.plugins.MessageLogger.inlineEdits && (
return settings.store.inlineEdits && (
<>
{message.editHistory?.map(edit => (
<div className="messagelogger-edited">
@ -193,64 +252,6 @@ export default definePlugin({
};
},
options: {
deleteStyle: {
type: OptionType.SELECT,
description: "The style of deleted messages",
default: "text",
options: [
{ label: "Red text", value: "text", default: true },
{ label: "Red overlay", value: "overlay" }
],
onChange: () => addDeleteStyle()
},
logDeletes: {
type: OptionType.BOOLEAN,
description: "Whether to log deleted messages",
default: true,
},
collapseDeleted: {
type: OptionType.BOOLEAN,
description: "Whether to collapse deleted messages, similar to blocked messages",
default: false
},
logEdits: {
type: OptionType.BOOLEAN,
description: "Whether to log edited messages",
default: true,
},
inlineEdits: {
type: OptionType.BOOLEAN,
description: "Whether to display edit history as part of message content",
default: true
},
ignoreBots: {
type: OptionType.BOOLEAN,
description: "Whether to ignore messages by bots",
default: false
},
ignoreSelf: {
type: OptionType.BOOLEAN,
description: "Whether to ignore messages by yourself",
default: false
},
ignoreUsers: {
type: OptionType.STRING,
description: "Comma-separated list of user IDs to ignore",
default: ""
},
ignoreChannels: {
type: OptionType.STRING,
description: "Comma-separated list of channel IDs to ignore",
default: ""
},
ignoreGuilds: {
type: OptionType.STRING,
description: "Comma-separated list of guild IDs to ignore",
default: ""
},
},
handleDelete(cache: any, data: { ids: string[], id: string; mlDeleted?: boolean; }, isBulk: boolean) {
try {
if (cache == null || (!isBulk && !cache.has(data.id))) return cache;
@ -285,7 +286,7 @@ export default definePlugin({
},
shouldIgnore(message: any, isEdit = false) {
const { ignoreBots, ignoreSelf, ignoreUsers, ignoreChannels, ignoreGuilds, logEdits, logDeletes } = Settings.plugins.MessageLogger;
const { ignoreBots, ignoreSelf, ignoreUsers, ignoreChannels, ignoreGuilds, logEdits, logDeletes } = settings.store;
const myId = UserStore.getCurrentUser().id;
return ignoreBots && message.author?.bot ||
@ -493,7 +494,7 @@ export default definePlugin({
match: /if\((\i)\.blocked\)return \i\.\i\.MESSAGE_GROUP_BLOCKED;/,
replace: '$&else if($1.deleted) return"MESSAGE_GROUP_DELETED";',
},
predicate: () => Settings.plugins.MessageLogger.collapseDeleted
predicate: () => settings.store.collapseDeleted
},
{
// Message group rendering
@ -508,7 +509,7 @@ export default definePlugin({
replace: '$&$1.type==="MESSAGE_GROUP_DELETED"?$self.Messages.DELETED_MESSAGE_COUNT:',
},
],
predicate: () => Settings.plugins.MessageLogger.collapseDeleted
predicate: () => settings.store.collapseDeleted
}
]
});

View file

@ -18,7 +18,7 @@
import { ApplicationCommandInputType, ApplicationCommandOptionType, findOption, registerCommand, sendBotMessage, unregisterCommand } from "@api/Commands";
import * as DataStore from "@api/DataStore";
import { Settings } from "@api/Settings";
import { definePluginSettings } from "@api/Settings";
import { Devs } from "@utils/constants";
import definePlugin, { OptionType } from "@utils/types";
@ -60,7 +60,7 @@ function createTagCommand(tag: Tag) {
return { content: `/${tag.name}` };
}
if (Settings.plugins.MessageTags.clyde) sendBotMessage(ctx.channel.id, {
if (settings.store.clyde) sendBotMessage(ctx.channel.id, {
content: `${EMOTE} The tag **${tag.name}** has been sent!`
});
return { content: tag.message.replaceAll("\\n", "\n") };
@ -69,19 +69,21 @@ function createTagCommand(tag: Tag) {
}, "CustomTags");
}
const settings = definePluginSettings({
clyde: {
name: "Clyde message on send",
description: "If enabled, clyde will send you an ephemeral message when a tag was used.",
type: OptionType.BOOLEAN,
default: true
}
});
export default definePlugin({
name: "MessageTags",
description: "Allows you to save messages and to use them with a simple command.",
authors: [Devs.Luna],
options: {
clyde: {
name: "Clyde message on send",
description: "If enabled, clyde will send you an ephemeral message when a tag was used.",
type: OptionType.BOOLEAN,
default: true
}
},
settings,
dependencies: ["CommandsAPI"],
async start() {

View file

@ -19,11 +19,12 @@
import { definePluginSettings } from "@api/Settings";
import { Flex } from "@components/Flex";
import { Devs } from "@utils/constants";
import { LazyComponentType } from "@utils/lazyReact";
import { Margins } from "@utils/margins";
import definePlugin, { OptionType } from "@utils/types";
import { findByCodeLazy, findLazy } from "@webpack";
import { findByCode, findComponentByCode } from "@webpack";
import { Card, ChannelStore, Forms, GuildStore, PermissionsBits, Switch, TextInput, Tooltip } from "@webpack/common";
import type { Permissions, RC } from "@webpack/types";
import type { Permissions } from "@webpack/types";
import type { Channel, Guild, Message, User } from "discord-types/general";
interface Tag {
@ -59,9 +60,9 @@ const computePermissions: (options: {
overwrites?: Channel["permissionOverwrites"] | null;
checkElevated?: boolean /* = true */;
excludeGuildPermissions?: boolean /* = false */;
}) => bigint = findByCodeLazy(".getCurrentUser()", ".computeLurkerPermissionsAllowList()");
}) => bigint = findByCode(".getCurrentUser()", ".computeLurkerPermissionsAllowList()");
const Tag = findLazy(m => m.Types?.[0] === "BOT") as RC<{ type?: number, className?: string, useRemSizes?: boolean; }> & { Types: Record<string, number>; };
const Tag = findComponentByCode(".DISCORD_SYSTEM_MESSAGE_BOT_TAG_TOOLTIP_OFFICIAL,") as LazyComponentType<{ type?: number, className?: string, useRemSizes?: boolean; }> & { Types: Record<string, number>; };
const isWebhook = (message: Message, user: User) => !!message?.webhookId && user.isNonUserBot();

View file

@ -20,15 +20,15 @@ import ErrorBoundary from "@components/ErrorBoundary";
import { Devs } from "@utils/constants";
import { isNonNullish } from "@utils/guards";
import definePlugin from "@utils/types";
import { findByPropsLazy } from "@webpack";
import { findByProps } from "@webpack";
import { Avatar, ChannelStore, Clickable, IconUtils, RelationshipStore, ScrollerThin, useMemo, UserStore } from "@webpack/common";
import { Channel, User } from "discord-types/general";
const SelectedChannelActionCreators = findByPropsLazy("selectPrivateChannel");
const UserUtils = findByPropsLazy("getGlobalName");
const SelectedChannelActionCreators = findByProps("selectPrivateChannel");
const UserUtils = findByProps("getGlobalName");
const ProfileListClasses = findByPropsLazy("emptyIconFriends", "emptyIconGuilds");
const GuildLabelClasses = findByPropsLazy("guildNick", "guildAvatarWithoutIcon");
const ProfileListClasses = findByProps("emptyIconFriends", "emptyIconGuilds");
const GuildLabelClasses = findByProps("guildNick", "guildAvatarWithoutIcon");
function getGroupDMName(channel: Channel) {
return channel.name ||

View file

@ -24,18 +24,18 @@ import { definePluginSettings, migratePluginSettings } from "@api/Settings";
import { CogWheel } from "@components/Icons";
import { Devs } from "@utils/constants";
import definePlugin, { OptionType } from "@utils/types";
import { findByCodeLazy, findByPropsLazy, mapMangledModuleLazy } from "@webpack";
import { findByCode, findProp, mapMangledModule } from "@webpack";
import { Menu } from "@webpack/common";
import { Guild } from "discord-types/general";
const { updateGuildNotificationSettings } = findByPropsLazy("updateGuildNotificationSettings");
const { toggleShowAllChannels } = mapMangledModuleLazy(".onboardExistingMember(", {
const updateGuildNotificationSettings = findProp("updateGuildNotificationSettings");
const { toggleShowAllChannels } = mapMangledModule(".onboardExistingMember(", {
toggleShowAllChannels: m => {
const s = String(m);
return s.length < 100 && !s.includes("onboardExistingMember") && !s.includes("getOptedInChannels");
}
});
const isOptInEnabledForGuild = findByCodeLazy(".COMMUNITY)||", ".isOptInEnabled(");
const isOptInEnabledForGuild = findByCode(".COMMUNITY)||", ".isOptInEnabled(");
const settings = definePluginSettings({
guild: {

View file

@ -16,19 +16,28 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import { Settings } from "@api/Settings";
import { definePluginSettings } from "@api/Settings";
import { Devs } from "@utils/constants";
import { Logger } from "@utils/Logger";
import definePlugin, { OptionType } from "@utils/types";
import { findByPropsLazy } from "@webpack";
import { RelationshipStore } from "@webpack/common";
import { Message } from "discord-types/general";
const RelationshipStore = findByPropsLazy("getRelationships", "isBlocked");
const settings = definePluginSettings({
ignoreBlockedMessages: {
description: "Completely ignores (recent) incoming messages from blocked users (locally).",
type: OptionType.BOOLEAN,
default: false,
restartNeeded: true,
},
});
export default definePlugin({
name: "NoBlockedMessages",
description: "Hides all blocked messages from chat completely.",
authors: [Devs.rushii, Devs.Samu],
settings,
patches: [
{
find: "Messages.BLOCKED_MESSAGES_HIDE",
@ -44,7 +53,7 @@ export default definePlugin({
'"displayName","ReadStateStore")'
].map(find => ({
find,
predicate: () => Settings.plugins.NoBlockedMessages.ignoreBlockedMessages === true,
predicate: () => settings.store.ignoreBlockedMessages === true,
replacement: [
{
match: /(?<=MESSAGE_CREATE:function\((\i)\){)/,

View file

@ -19,9 +19,9 @@
import { definePluginSettings } from "@api/Settings";
import { Devs } from "@utils/constants";
import definePlugin, { OptionType } from "@utils/types";
import { findByPropsLazy } from "@webpack";
import { findStore } from "@webpack";
const MessageRequestStore = findByPropsLazy("getMessageRequestsCount");
const MessageRequestStore = findStore("MessageRequestStore");
const settings = definePluginSettings({
hideFriendRequestsCount: {

View file

@ -19,7 +19,7 @@
import ErrorBoundary from "@components/ErrorBoundary";
import { ExpandableHeader } from "@components/ExpandableHeader";
import { classes } from "@utils/misc";
import { filters, findBulk, proxyLazyWebpack } from "@webpack";
import { findByProps } from "@webpack";
import { i18n, PermissionsBits, Text, Tooltip, useMemo, UserStore } from "@webpack/common";
import type { Guild, GuildMember } from "discord-types/general";
@ -35,15 +35,9 @@ interface UserPermission {
type UserPermissions = Array<UserPermission>;
const { RoleRootClasses, RoleClasses, RoleBorderClasses } = proxyLazyWebpack(() => {
const [RoleRootClasses, RoleClasses, RoleBorderClasses] = findBulk(
filters.byProps("root", "showMoreButton", "collapseButton"),
filters.byProps("role", "roleCircle", "roleName"),
filters.byProps("roleCircle", "dot", "dotBorderColor")
) as Record<string, string>[];
return { RoleRootClasses, RoleClasses, RoleBorderClasses };
});
const RoleRootClasses = findByProps("root", "showMoreButton", "collapseButton");
const RoleClasses = findByProps("role", "roleCircle", "roleName");
const RoleBorderClasses = findByProps("roleCircle", "dot", "dotBorderColor");
function UserPermissionsComponent({ guild, guildMember, forceOpen = false }: { guild: Guild; guildMember: GuildMember; forceOpen?: boolean; }) {
const stns = settings.use(["permissionsSortOrder"]);

View file

@ -25,7 +25,7 @@ import { SafetyIcon } from "@components/Icons";
import { Devs } from "@utils/constants";
import { classes } from "@utils/misc";
import definePlugin, { OptionType } from "@utils/types";
import { findByPropsLazy } from "@webpack";
import { findByProps } from "@webpack";
import { Button, ChannelStore, Dialog, GuildMemberStore, GuildStore, Menu, PermissionsBits, Popout, TooltipContainer, UserStore } from "@webpack/common";
import type { Guild, GuildMember } from "discord-types/general";
@ -33,8 +33,8 @@ import openRolesAndUsersPermissionsModal, { PermissionType, RoleOrUserPermission
import UserPermissions from "./components/UserPermissions";
import { getSortedRoles, sortPermissionOverwrites } from "./utils";
const PopoutClasses = findByPropsLazy("container", "scroller", "list");
const RoleButtonClasses = findByPropsLazy("button", "buttonInner", "icon", "banner");
const PopoutClasses = findByProps("container", "scroller", "list");
const RoleButtonClasses = findByProps("button", "buttonInner", "icon", "banner");
export const enum PermissionsSortOrder {
HighestRole,

View file

@ -20,7 +20,7 @@ import { ApplicationCommandInputType, ApplicationCommandOptionType, Argument, Co
import { Devs } from "@utils/constants";
import { makeLazy } from "@utils/lazy";
import definePlugin from "@utils/types";
import { findByPropsLazy } from "@webpack";
import { findStore } from "@webpack";
import { DraftType, UploadHandler, UploadManager, UserUtils } from "@webpack/common";
import { applyPalette, GIFEncoder, quantize } from "gifenc";
@ -35,7 +35,7 @@ const getFrames = makeLazy(() => Promise.all(
))
);
const UploadStore = findByPropsLazy("getUploads");
const UploadAttachmentStore = findStore("UploadAttachmentStore");
function loadImage(source: File | string) {
const isFile = source instanceof File;
@ -58,7 +58,7 @@ async function resolveImage(options: Argument[], ctx: CommandContext, noServerPf
for (const opt of options) {
switch (opt.name) {
case "image":
const upload = UploadStore.getUpload(ctx.channel.id, opt.name, DraftType.SlashCommand);
const upload = UploadAttachmentStore.getUpload(ctx.channel.id, opt.name, DraftType.SlashCommand);
if (upload) {
if (!upload.isImage) {
UploadManager.clearAll(ctx.channel.id, DraftType.SlashCommand);

View file

@ -6,7 +6,7 @@
import { classNameFactory } from "@api/Styles";
import { ModalContent, ModalFooter, ModalHeader, ModalProps, ModalRoot, openModalLazy } from "@utils/modal";
import { extractAndLoadChunksLazy, findComponentByCodeLazy, findExportedComponentLazy } from "@webpack";
import { extractAndLoadChunksLazy, findComponentByCode, findExportedComponent } from "@webpack";
import { Button, Forms, Text, TextInput, Toasts, useEffect, useState } from "@webpack/common";
import { DEFAULT_COLOR, SWATCHES } from "../constants";
@ -30,10 +30,10 @@ interface ColorPickerWithSwatchesProps {
renderCustomButton?: () => React.ReactNode;
}
const ColorPicker = findComponentByCodeLazy<ColorPickerProps>(".Messages.USER_SETTINGS_PROFILE_COLOR_SELECT_COLOR", ".BACKGROUND_PRIMARY)");
const ColorPickerWithSwatches = findExportedComponentLazy<ColorPickerWithSwatchesProps>("ColorPicker", "CustomColorPicker");
const ColorPicker = findComponentByCode<ColorPickerProps>(".Messages.USER_SETTINGS_PROFILE_COLOR_SELECT_COLOR", ".BACKGROUND_PRIMARY)");
const ColorPickerWithSwatches = findExportedComponent<ColorPickerWithSwatchesProps>("ColorPicker", "CustomColorPicker");
export const requireSettingsMenu = extractAndLoadChunksLazy(['name:"UserSettings"'], /createPromise:.{0,20}Promise\.all\((\[\i\.\i\("?.+?"?\).+?\])\).then\(\i\.bind\(\i,"?(.+?)"?\)\).{0,50}"UserSettings"/);
export const requireSettingsMenu = extractAndLoadChunksLazy('name:"UserSettings"', /createPromise:.{0,20}Promise\.all\((\[\i\.\i\("?.+?"?\).+?\])\).then\(\i\.bind\(\i,"?(.+?)"?\)\).{0,50}"UserSettings"/);
const cl = classNameFactory("vc-pindms-modal-");

View file

@ -11,7 +11,7 @@ import ErrorBoundary from "@components/ErrorBoundary";
import { Devs } from "@utils/constants";
import { classes } from "@utils/misc";
import definePlugin, { OptionType, StartAt } from "@utils/types";
import { findByPropsLazy, findStoreLazy } from "@webpack";
import { findByProps, findStore } from "@webpack";
import { ContextMenuApi, FluxDispatcher, Menu, React } from "@webpack/common";
import { Channel } from "discord-types/general";
@ -27,9 +27,9 @@ interface ChannelComponentProps {
}
const headerClasses = findByPropsLazy("privateChannelsHeaderContainer");
const headerClasses = findByProps("privateChannelsHeaderContainer");
export const PrivateChannelSortStore = findStoreLazy("PrivateChannelSortStore") as { getPrivateChannelIds: () => string[]; };
export const PrivateChannelSortStore = findStore("PrivateChannelSortStore") as { getPrivateChannelIds: () => string[]; };
export let instance: any;
export const forceUpdate = () => instance?.props?._forceUpdate?.();

View file

@ -21,11 +21,11 @@ import "./style.css";
import { addBadge, BadgePosition, BadgeUserArgs, ProfileBadge, removeBadge } from "@api/Badges";
import { addDecorator, removeDecorator } from "@api/MemberListDecorators";
import { addDecoration, removeDecoration } from "@api/MessageDecorations";
import { Settings } from "@api/Settings";
import { definePluginSettings } from "@api/Settings";
import ErrorBoundary from "@components/ErrorBoundary";
import { Devs } from "@utils/constants";
import definePlugin, { OptionType } from "@utils/types";
import { findByPropsLazy, findStoreLazy } from "@webpack";
import { findByProps, findStore } from "@webpack";
import { PresenceStore, Tooltip, UserStore } from "@webpack/common";
import { User } from "discord-types/general";
@ -40,7 +40,7 @@ export interface Session {
};
}
const SessionsStore = findStoreLazy("SessionsStore") as {
const SessionsStore = findStore("SessionsStore") as {
getSessions(): Record<string, Session>;
};
@ -70,7 +70,7 @@ const Icons = {
};
type Platform = keyof typeof Icons;
const StatusUtils = findByPropsLazy("useStatusFillColor", "StatusTypes");
const StatusUtils = findByProps("useStatusFillColor", "StatusTypes");
const PlatformIcon = ({ platform, status, small }: { platform: Platform, status: string; small: boolean; }) => {
const tooltip = platform === "embedded"
@ -195,29 +195,36 @@ const indicatorLocations = {
}
};
const settings = definePluginSettings({
...Object.fromEntries(
Object.entries(indicatorLocations).map(([key, value]) => {
return [key, {
type: OptionType.BOOLEAN,
description: `Show indicators ${value.description.toLowerCase()}`,
// onChange doesn't give any way to know which setting was changed, so restart required
restartNeeded: true,
default: true
}];
})
) as Record<"list" | "badges" | "messages", { type: OptionType.BOOLEAN; description: string; restartNeeded: boolean; default: boolean; }>,
colorMobileIndicator: {
type: OptionType.BOOLEAN,
description: "Whether to make the mobile indicator match the color of the user status.",
default: true,
restartNeeded: true
}
});
export default definePlugin({
name: "PlatformIndicators",
description: "Adds platform indicators (Desktop, Mobile, Web...) to users",
authors: [Devs.kemo, Devs.TheSun, Devs.Nuckyz, Devs.Ven],
dependencies: ["MessageDecorationsAPI", "MemberListDecoratorsAPI"],
settings,
start() {
const settings = Settings.plugins.PlatformIndicators;
const { displayMode } = settings;
// transfer settings from the old ones, which had a select menu instead of booleans
if (displayMode) {
if (displayMode !== "both") settings[displayMode] = true;
else {
settings.list = true;
settings.badges = true;
}
settings.messages = true;
delete settings.displayMode;
}
Object.entries(indicatorLocations).forEach(([key, value]) => {
if (settings[key]) value.onEnable();
if (settings.store[key]) value.onEnable();
});
},
@ -230,7 +237,7 @@ export default definePlugin({
patches: [
{
find: ".Masks.STATUS_ONLINE_MOBILE",
predicate: () => Settings.plugins.PlatformIndicators.colorMobileIndicator,
predicate: () => settings.store.colorMobileIndicator,
replacement: [
{
// Return the STATUS_ONLINE_MOBILE mask if the user is on mobile, no matter the status
@ -246,7 +253,7 @@ export default definePlugin({
},
{
find: ".AVATAR_STATUS_MOBILE_16;",
predicate: () => Settings.plugins.PlatformIndicators.colorMobileIndicator,
predicate: () => settings.store.colorMobileIndicator,
replacement: [
{
// Return the AVATAR_STATUS_MOBILE size mask if the user is on mobile, no matter the status
@ -267,32 +274,12 @@ export default definePlugin({
},
{
find: "}isMobileOnline(",
predicate: () => Settings.plugins.PlatformIndicators.colorMobileIndicator,
predicate: () => settings.store.colorMobileIndicator,
replacement: {
// Make isMobileOnline return true no matter what is the user status
match: /(?<=\i\[\i\.\i\.MOBILE\])===\i\.\i\.ONLINE/,
replace: "!= null"
}
}
],
options: {
...Object.fromEntries(
Object.entries(indicatorLocations).map(([key, value]) => {
return [key, {
type: OptionType.BOOLEAN,
description: `Show indicators ${value.description.toLowerCase()}`,
// onChange doesn't give any way to know which setting was changed, so restart required
restartNeeded: true,
default: true
}];
})
),
colorMobileIndicator: {
type: OptionType.BOOLEAN,
description: "Whether to make the mobile indicator match the color of the user status.",
default: true,
restartNeeded: true
}
}
]
});

View file

@ -20,15 +20,14 @@ import { addChatBarButton, ChatBarButton, removeChatBarButton } from "@api/ChatB
import { generateId, sendBotMessage } from "@api/Commands";
import { Devs } from "@utils/constants";
import definePlugin, { StartAt } from "@utils/types";
import { findByPropsLazy } from "@webpack";
import { findStore } from "@webpack";
import { DraftStore, DraftType, SelectedChannelStore, UserStore, useStateFromStores } from "@webpack/common";
import { MessageAttachment } from "discord-types/general";
const UploadStore = findByPropsLazy("getUploads");
const UploadAttachmentStore = findStore("UploadAttachmentStore");
const getDraft = (channelId: string) => DraftStore.getDraft(channelId, DraftType.ChannelMessage);
const getImageBox = (url: string): Promise<{ width: number, height: number; } | null> =>
new Promise(res => {
const img = new Image();
@ -44,7 +43,7 @@ const getImageBox = (url: string): Promise<{ width: number, height: number; } |
const getAttachments = async (channelId: string) =>
await Promise.all(
UploadStore.getUploads(channelId, DraftType.ChannelMessage)
UploadAttachmentStore.getUploads(channelId, DraftType.ChannelMessage)
.map(async (upload: any) => {
const { isImage, filename, spoiler, item: { file } } = upload;
const url = URL.createObjectURL(file);
@ -79,7 +78,7 @@ const PreviewButton: ChatBarButton = ({ isMainChat, isEmpty, type: { attachments
if (!isMainChat) return null;
const hasAttachments = attachments && UploadStore.getUploads(channelId, DraftType.ChannelMessage).length > 0;
const hasAttachments = attachments && UploadAttachmentStore.getUploads(channelId, DraftType.ChannelMessage).length > 0;
const hasContent = !isEmpty && draft?.length > 0;
if (!hasContent && !hasAttachments) return null;

View file

@ -18,14 +18,14 @@
import ErrorBoundary from "@components/ErrorBoundary";
import { classes } from "@utils/misc";
import { findByPropsLazy } from "@webpack";
import { findByProps } from "@webpack";
import { UserStore } from "@webpack/common";
import { Message } from "discord-types/general";
import { useFormattedPronouns } from "../pronoundbUtils";
import { settings } from "../settings";
const styles: Record<string, string> = findByPropsLazy("timestampInline");
const styles: Record<string, string> = findByProps("timestampInline");
const AUTO_MODERATION_ACTION = 24;

View file

@ -16,18 +16,17 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import { Settings } from "@api/Settings";
import { debounce } from "@shared/debounce";
import { VENCORD_USER_AGENT } from "@shared/vencordUserAgent";
import { getCurrentChannel } from "@utils/discord";
import { useAwaiter } from "@utils/react";
import { findStoreLazy } from "@webpack";
import { findStore } from "@webpack";
import { UserProfileStore, UserStore } from "@webpack/common";
import { settings } from "./settings";
import { CachePronouns, PronounCode, PronounMapping, PronounsResponse } from "./types";
const UserSettingsAccountStore = findStoreLazy("UserSettingsAccountStore");
const UserSettingsAccountStore = findStore("UserSettingsAccountStore");
type PronounsWithSource = [pronouns: string | null, source: string, hasPendingPronouns: boolean];
const EmptyPronouns: PronounsWithSource = [null, "", false];
@ -156,7 +155,7 @@ export function extractPronouns(pronounSet?: { [locale: string]: PronounCode[];
if (!pronounSet || !pronounSet.en) return PronounMapping.unspecified;
// PronounDB returns an empty set instead of {sets: {en: ["unspecified"]}}.
const pronouns = pronounSet.en;
const { pronounsFormat } = Settings.plugins.PronounDB as { pronounsFormat: PronounsFormat, enabled: boolean; };
const { pronounsFormat } = settings.store;
if (pronouns.length === 1) {
// For capitalized pronouns or special codes (any, ask, avoid), we always return the normal (capitalized) string

View file

@ -19,12 +19,11 @@
import { definePluginSettings, Settings } from "@api/Settings";
import { Devs } from "@utils/constants";
import definePlugin, { OptionType } from "@utils/types";
import { findByPropsLazy } from "@webpack";
import { ChannelStore, FluxDispatcher as Dispatcher, MessageStore, PermissionsBits, PermissionStore, SelectedChannelStore, UserStore } from "@webpack/common";
import { findByProps } from "@webpack";
import { ChannelStore, FluxDispatcher as Dispatcher, MessageStore, PermissionsBits, PermissionStore, RelationshipStore, SelectedChannelStore, UserStore } from "@webpack/common";
import { Message } from "discord-types/general";
const Kangaroo = findByPropsLazy("jumpToMessage");
const RelationshipStore = findByPropsLazy("getRelationships", "isBlocked");
const Kangaroo = findByProps("jumpToMessage");
const isMac = navigator.platform.includes("Mac"); // bruh
let replyIdx = -1;

View file

@ -22,8 +22,8 @@ import { addServerListElement, removeServerListElement, ServerListRenderPosition
import ErrorBoundary from "@components/ErrorBoundary";
import { Devs } from "@utils/constants";
import definePlugin from "@utils/types";
import { findStoreLazy } from "@webpack";
import { Button, FluxDispatcher, GuildChannelStore, GuildStore, React, ReadStateStore } from "@webpack/common";
import { findStore } from "@webpack";
import { Button, FluxDispatcher, GenericStore, GuildChannelStore, GuildStore, React, ReadStateStore } from "@webpack/common";
import { Channel } from "discord-types/general";
interface ThreadJoined {
@ -34,11 +34,11 @@ interface ThreadJoined {
type ThreadsJoined = Record<string, ThreadJoined>;
type ThreadsJoinedByParent = Record<string, ThreadsJoined>;
interface ActiveJoinedThreadsStore {
interface ActiveJoinedThreadsStore extends GenericStore {
getActiveJoinedThreadsForGuild(guildId: string): ThreadsJoinedByParent;
}
const ActiveJoinedThreadsStore: ActiveJoinedThreadsStore = findStoreLazy("ActiveJoinedThreadsStore");
const ActiveJoinedThreadsStore = findStore<ActiveJoinedThreadsStore>("ActiveJoinedThreadsStore");
function onClick() {
const channels: Array<any> = [];

View file

@ -19,14 +19,14 @@
import { DataStore, Notices } from "@api/index";
import { showNotification } from "@api/Notifications";
import { getUniqueUsername, openUserProfile } from "@utils/discord";
import { findStoreLazy } from "@webpack";
import { findStore } from "@webpack";
import { ChannelStore, GuildMemberStore, GuildStore, RelationshipStore, UserStore, UserUtils } from "@webpack/common";
import { FluxStore } from "@webpack/types";
import settings from "./settings";
import { ChannelType, RelationshipType, SimpleGroupChannel, SimpleGuild } from "./types";
export const GuildAvailabilityStore = findStoreLazy("GuildAvailabilityStore") as FluxStore & {
export const GuildAvailabilityStore = findStore("GuildAvailabilityStore") as FluxStore & {
totalGuilds: number;
totalUnavailableGuilds: number;
unavailableGuilds: string[];

View file

@ -9,17 +9,17 @@ import "./style.css";
import ErrorBoundary from "@components/ErrorBoundary";
import { Devs } from "@utils/constants";
import definePlugin from "@utils/types";
import { filters, findByPropsLazy, mapMangledModuleLazy } from "@webpack";
import { filters, findByProps, mapMangledModule } from "@webpack";
import { Timestamp } from "@webpack/common";
import type { Message } from "discord-types/general";
import type { HTMLAttributes } from "react";
const { calendarFormat, dateFormat, isSameDay } = mapMangledModuleLazy("millisecondsInUnit:", {
const { calendarFormat, dateFormat, isSameDay } = mapMangledModule("millisecondsInUnit:", {
calendarFormat: filters.byCode("sameElse"),
dateFormat: filters.byCode('":'),
dateFormat: filters.byCode(':").concat'),
isSameDay: filters.byCode("Math.abs(+"),
});
const MessageClasses = findByPropsLazy("separator", "latin24CompactTimeStamp");
const MessageClasses = findByProps("separator", "latin24CompactTimeStamp");
function Sep(props: HTMLAttributes<HTMLElement>) {
return <i className={MessageClasses.separator} aria-hidden={true} {...props} />;

View file

@ -18,10 +18,10 @@
import { Devs } from "@utils/constants";
import definePlugin from "@utils/types";
import { findByPropsLazy } from "@webpack";
import { findByProps } from "@webpack";
const SpoilerClasses = findByPropsLazy("spoilerContent");
const MessagesClasses = findByPropsLazy("messagesWrapper");
const SpoilerClasses = findByProps("spoilerContent");
const MessagesClasses = findByProps("messagesWrapper");
export default definePlugin({
name: "RevealAllSpoilers",

View file

@ -7,15 +7,12 @@
import { DataStore } from "@api/index";
import { Logger } from "@utils/Logger";
import { openModal } from "@utils/modal";
import { findByPropsLazy } from "@webpack";
import { showToast, Toasts, UserStore } from "@webpack/common";
import { OAuth2AuthorizeModal, showToast, Toasts, UserStore } from "@webpack/common";
import { ReviewDBAuth } from "./entities";
const DATA_STORE_KEY = "rdb-auth";
const { OAuth2AuthorizeModal } = findByPropsLazy("OAuth2AuthorizeModal");
export let Auth: ReviewDBAuth = {};
export async function initAuth() {

View file

@ -18,10 +18,10 @@
import { DeleteIcon } from "@components/Icons";
import { classes } from "@utils/misc";
import { findByPropsLazy } from "@webpack";
import { findByProps } from "@webpack";
import { Tooltip } from "@webpack/common";
const iconClasses = findByPropsLazy("button", "wrapper", "disabled", "separator");
const iconClasses = findByProps("button", "wrapper", "disabled", "separator");
export function DeleteButton({ onClick }: { onClick(): void; }) {
return (

View file

@ -18,8 +18,7 @@
import { openUserProfile } from "@utils/discord";
import { classes } from "@utils/misc";
import { LazyComponent } from "@utils/react";
import { filters, findBulk } from "@webpack";
import { findByProps } from "@webpack";
import { Alerts, Parser, Timestamp, useState } from "@webpack/common";
import { Auth, getToken } from "../auth";
@ -31,161 +30,150 @@ import { openBlockModal } from "./BlockedUserModal";
import { BlockButton, DeleteButton, ReportButton } from "./MessageButton";
import ReviewBadge from "./ReviewBadge";
export default LazyComponent(() => {
// this is terrible, blame mantika
const p = filters.byProps;
const [
{ cozyMessage, buttons, message, buttonsInner, groupStart },
{ container, isHeader },
{ avatar, clickable, username, wrapper, cozy },
buttonClasses,
botTag
] = findBulk(
p("cozyMessage"),
p("container", "isHeader"),
p("avatar", "zalgo"),
p("button", "wrapper", "selected"),
p("botTagRegular")
);
const messageClasses = findByProps("cozyMessage");
const containerClasses = findByProps("container", "isHeader");
const avatarClasses = findByProps("avatar", "zalgo");
const buttonClasses = findByProps("button", "wrapper", "selected");
const botTagClasses = findByProps("botTagRegular");
const dateFormat = new Intl.DateTimeFormat();
const dateFormat = new Intl.DateTimeFormat();
return function ReviewComponent({ review, refetch, profileId }: { review: Review; refetch(): void; profileId: string; }) {
const [showAll, setShowAll] = useState(false);
export default function ReviewComponent({ review, refetch, profileId }: { review: Review; refetch(): void; profileId: string; }) {
const [showAll, setShowAll] = useState(false);
function openModal() {
openUserProfile(review.sender.discordID);
}
function openModal() {
openUserProfile(review.sender.discordID);
}
function delReview() {
Alerts.show({
title: "Are you sure?",
body: "Do you really want to delete this review?",
confirmText: "Delete",
cancelText: "Nevermind",
onConfirm: async () => {
if (!(await getToken())) {
return showToast("You must be logged in to delete reviews.");
} else {
deleteReview(review.id).then(res => {
if (res) {
refetch();
}
});
}
function delReview() {
Alerts.show({
title: "Are you sure?",
body: "Do you really want to delete this review?",
confirmText: "Delete",
cancelText: "Nevermind",
onConfirm: async () => {
if (!(await getToken())) {
return showToast("You must be logged in to delete reviews.");
} else {
deleteReview(review.id).then(res => {
if (res) {
refetch();
}
});
}
});
}
}
});
}
function reportRev() {
Alerts.show({
title: "Are you sure?",
body: "Do you really you want to report this review?",
confirmText: "Report",
cancelText: "Nevermind",
// confirmColor: "red", this just adds a class name and breaks the submit button guh
onConfirm: async () => {
if (!(await getToken())) {
return showToast("You must be logged in to report reviews.");
} else {
reportReview(review.id);
}
function reportRev() {
Alerts.show({
title: "Are you sure?",
body: "Do you really you want to report this review?",
confirmText: "Report",
cancelText: "Nevermind",
// confirmColor: "red", this just adds a class name and breaks the submit button guh
onConfirm: async () => {
if (!(await getToken())) {
return showToast("You must be logged in to report reviews.");
} else {
reportReview(review.id);
}
});
}
}
});
}
const isAuthorBlocked = Auth?.user?.blockedUsers?.includes(review.sender.discordID) ?? false;
const isAuthorBlocked = Auth?.user?.blockedUsers?.includes(review.sender.discordID) ?? false;
function blockReviewSender() {
if (isAuthorBlocked)
return unblockUser(review.sender.discordID);
function blockReviewSender() {
if (isAuthorBlocked)
return unblockUser(review.sender.discordID);
Alerts.show({
title: "Are you sure?",
body: "Do you really you want to block this user? They will be unable to leave further reviews on your profile. You can unblock users in the plugin settings.",
confirmText: "Block",
cancelText: "Nevermind",
// confirmColor: "red", this just adds a class name and breaks the submit button guh
onConfirm: async () => {
if (!(await getToken())) {
return showToast("You must be logged in to block users.");
} else {
blockUser(review.sender.discordID);
}
Alerts.show({
title: "Are you sure?",
body: "Do you really you want to block this user? They will be unable to leave further reviews on your profile. You can unblock users in the plugin settings.",
confirmText: "Block",
cancelText: "Nevermind",
// confirmColor: "red", this just adds a class name and breaks the submit button guh
onConfirm: async () => {
if (!(await getToken())) {
return showToast("You must be logged in to block users.");
} else {
blockUser(review.sender.discordID);
}
});
}
}
});
}
return (
<div className={classes(cl("review"), cozyMessage, wrapper, message, groupStart, cozy)} style={
{
marginLeft: "0px",
paddingLeft: "52px", // wth is this
// nobody knows anymore
}
}>
return (
<div className={classes(cl("review"), messageClasses.cozyMessage, avatarClasses.wrapper, messageClasses.message, messageClasses.groupStart, avatarClasses.cozy)} style={
{
marginLeft: "0px",
paddingLeft: "52px", // wth is this
// nobody knows anymore
}
}>
<img
className={classes(avatar, clickable)}
onClick={openModal}
src={review.sender.profilePhoto || "/assets/1f0bfc0865d324c2587920a7d80c609b.png?size=128"}
style={{ left: "0px", zIndex: 0 }}
/>
<div style={{ display: "inline-flex", justifyContent: "center", alignItems: "center" }}>
<img
className={classes(avatarClasses.avatar, avatarClasses.clickable)}
onClick={openModal}
src={review.sender.profilePhoto || "/assets/1f0bfc0865d324c2587920a7d80c609b.png?size=128"}
style={{ left: "0px", zIndex: 0 }}
/>
<div style={{ display: "inline-flex", justifyContent: "center", alignItems: "center" }}>
<span
className={classes(avatarClasses.clickable, avatarClasses.username)}
style={{ color: "var(--channels-default)", fontSize: "14px" }}
onClick={() => openModal()}
>
{review.sender.username}
</span>
{review.type === ReviewType.System && (
<span
className={classes(clickable, username)}
style={{ color: "var(--channels-default)", fontSize: "14px" }}
onClick={() => openModal()}
>
{review.sender.username}
</span>
{review.type === ReviewType.System && (
<span
className={classes(botTag.botTagVerified, botTag.botTagRegular, botTag.px, botTag.rem)}
style={{ marginLeft: "4px" }}>
<span className={botTag.botText}>
System
</span>
className={classes(botTagClasses.botTagVerified, botTagClasses.botTagRegular, botTagClasses.px, botTagClasses.rem)}
style={{ marginLeft: "4px" }}>
<span className={botTagClasses.botText}>
System
</span>
)}
</div>
{isAuthorBlocked && (
<ReviewBadge
name="You have blocked this user"
description="You have blocked this user"
icon="/assets/aaee57e0090991557b66.svg"
type={0}
onClick={() => openBlockModal()}
/>
)}
{review.sender.badges.map(badge => <ReviewBadge {...badge} />)}
{
!settings.store.hideTimestamps && review.type !== ReviewType.System && (
<Timestamp timestamp={new Date(review.timestamp * 1000)} >
{dateFormat.format(review.timestamp * 1000)}
</Timestamp>)
}
<div className={cl("review-comment")}>
{(review.comment.length > 200 && !showAll)
? [Parser.parseGuildEventDescription(review.comment.substring(0, 200)), "...", <br />, (<a onClick={() => setShowAll(true)}>Read more</a>)]
: Parser.parseGuildEventDescription(review.comment)}
</div>
{review.id !== 0 && (
<div className={classes(container, isHeader, buttons)} style={{
padding: "0px",
}}>
<div className={classes(buttonClasses.wrapper, buttonsInner)} >
{canReportReview(review) && <ReportButton onClick={reportRev} />}
{canBlockReviewAuthor(profileId, review) && <BlockButton isBlocked={isAuthorBlocked} onClick={blockReviewSender} />}
{canDeleteReview(profileId, review) && <DeleteButton onClick={delReview} />}
</div>
</div>
</span>
)}
</div>
);
};
});
{isAuthorBlocked && (
<ReviewBadge
name="You have blocked this user"
description="You have blocked this user"
icon="/assets/aaee57e0090991557b66.svg"
type={0}
onClick={() => openBlockModal()}
/>
)}
{review.sender.badges.map(badge => <ReviewBadge {...badge} />)}
{
!settings.store.hideTimestamps && review.type !== ReviewType.System && (
<Timestamp timestamp={new Date(review.timestamp * 1000)} >
{dateFormat.format(review.timestamp * 1000)}
</Timestamp>)
}
<div className={cl("review-comment")}>
{(review.comment.length > 200 && !showAll)
? [Parser.parseGuildEventDescription(review.comment.substring(0, 200)), "...", <br />, (<a onClick={() => setShowAll(true)}>Read more</a>)]
: Parser.parseGuildEventDescription(review.comment)}
</div>
{review.id !== 0 && (
<div className={classes(containerClasses.container, containerClasses.isHeader, messageClasses.buttons)} style={{
padding: "0px",
}}>
<div className={classes(buttonClasses.wrapper, messageClasses.buttonsInner)} >
{canReportReview(review) && <ReportButton onClick={reportRev} />}
{canBlockReviewAuthor(profileId, review) && <BlockButton isBlocked={isAuthorBlocked} onClick={blockReviewSender} />}
{canDeleteReview(profileId, review) && <DeleteButton onClick={delReview} />}
</div>
</div>
)}
</div>
);
}

View file

@ -17,7 +17,7 @@
*/
import { useAwaiter, useForceUpdater } from "@utils/react";
import { findByCodeLazy, findByPropsLazy, findComponentByCodeLazy } from "@webpack";
import { findByCode, findByProps, findComponentByCode } from "@webpack";
import { Forms, React, RelationshipStore, useRef, UserStore } from "@webpack/common";
import { Auth, authorize } from "../auth";
@ -27,11 +27,11 @@ import { settings } from "../settings";
import { cl, showToast } from "../utils";
import ReviewComponent from "./ReviewComponent";
const Transforms = findByPropsLazy("insertNodes", "textToText");
const Editor = findByPropsLazy("start", "end", "toSlateRange");
const ChatInputTypes = findByPropsLazy("FORM");
const InputComponent = findComponentByCodeLazy("disableThemedBackground", "CHANNEL_TEXT_AREA");
const createChannelRecordFromServer = findByCodeLazy(".GUILD_TEXT])", "fromServer)");
const Transforms = findByProps("insertNodes", "textToText");
const Editor = findByProps("start", "end", "toSlateRange");
const ChatInputTypes = findByProps("FORM");
const InputComponent = findComponentByCode("disableThemedBackground", "CHANNEL_TEXT_AREA");
const createChannelRecordFromServer = findByCode(".GUILD_TEXT])", "fromServer)");
interface UserProps {
discordId: string;

View file

@ -24,7 +24,7 @@ import { NotesIcon, OpenExternalIcon } from "@components/Icons";
import { Devs } from "@utils/constants";
import { classes } from "@utils/misc";
import definePlugin from "@utils/types";
import { findByPropsLazy } from "@webpack";
import { findByProps } from "@webpack";
import { Alerts, Button, Menu, Parser, TooltipContainer } from "@webpack/common";
import { Guild, User } from "discord-types/general";
@ -35,7 +35,7 @@ import { getCurrentUserInfo, readNotification } from "./reviewDbApi";
import { settings } from "./settings";
import { showToast } from "./utils";
const RoleButtonClasses = findByPropsLazy("button", "buttonInner", "icon", "banner");
const RoleButtonClasses = findByProps("button", "buttonInner", "icon", "banner");
const guildPopoutPatch: NavContextMenuPatchCallback = (children, { guild }: { guild: Guild, onClose(): void; }) => {
if (!guild) return;

View file

@ -20,12 +20,11 @@ import { findGroupChildrenByChildId, NavContextMenuPatchCallback } from "@api/Co
import { ReplyIcon } from "@components/Icons";
import { Devs } from "@utils/constants";
import definePlugin from "@utils/types";
import { findByCodeLazy } from "@webpack";
import { findByCode } from "@webpack";
import { ChannelStore, i18n, Menu, PermissionsBits, PermissionStore, SelectedChannelStore } from "@webpack/common";
import { Message } from "discord-types/general";
const replyToMessage = findByCodeLazy(".TEXTAREA_FOCUS)", "showMentionToggle:");
const replyToMessage = findByCode(".TEXTAREA_FOCUS)", "showMentionToggle:");
const messageContextMenuPatch: NavContextMenuPatchCallback = (children, { message }: { message: Message; }) => {
// make sure the message is in the selected channel

View file

@ -8,11 +8,11 @@ import { DataStore } from "@api/index";
import { definePluginSettings } from "@api/Settings";
import { Devs } from "@utils/constants";
import definePlugin, { OptionType } from "@utils/types";
import { findByCodeLazy, findByPropsLazy } from "@webpack";
import { findByCode, findStore } from "@webpack";
import { ChannelStore, GuildStore } from "@webpack/common";
const SummaryStore = findByPropsLazy("allSummaries", "findSummary");
const createSummaryFromServer = findByCodeLazy(".people)),startId:", ".type}");
const SummaryStore = findStore("SummaryStore");
const createSummaryFromServer = findByCode(".people)),startId:", ".type}");
const settings = definePluginSettings({
summaryExpiryThresholdDays: {

View file

@ -11,12 +11,12 @@ import { openImageModal, openUserProfile } from "@utils/discord";
import { classes } from "@utils/misc";
import { ModalRoot, ModalSize, openModal } from "@utils/modal";
import { useAwaiter } from "@utils/react";
import { findByPropsLazy, findComponentByCodeLazy } from "@webpack";
import { findByProps, findComponentByCode } from "@webpack";
import { FluxDispatcher, Forms, GuildChannelStore, GuildMemberStore, GuildStore, IconUtils, Parser, PresenceStore, RelationshipStore, ScrollerThin, SnowflakeUtils, TabBar, Timestamp, useEffect, UserStore, UserUtils, useState, useStateFromStores } from "@webpack/common";
import { Guild, User } from "discord-types/general";
const IconClasses = findByPropsLazy("icon", "acronym", "childWrapper");
const FriendRow = findComponentByCodeLazy(".listName,discriminatorClass");
const IconClasses = findByProps("icon", "acronym", "childWrapper");
const FriendRow = findComponentByCode(".listName,discriminatorClass");
const cl = classNameFactory("vc-gp-");

View file

@ -17,7 +17,7 @@
*/
import { addServerListElement, removeServerListElement, ServerListRenderPosition } from "@api/ServerList";
import { Settings } from "@api/Settings";
import { definePluginSettings } from "@api/Settings";
import ErrorBoundary from "@components/ErrorBoundary";
import { Devs } from "@utils/constants";
import { useForceUpdater } from "@utils/react";
@ -89,26 +89,27 @@ function handleGuildUpdate() {
forceUpdateGuildCount?.();
}
const settings = definePluginSettings({
mode: {
description: "mode",
type: OptionType.SELECT,
options: [
{ label: "Only online friend count", value: IndicatorType.FRIEND, default: true },
{ label: "Only server count", value: IndicatorType.SERVER },
{ label: "Both server and online friend counts", value: IndicatorType.BOTH },
]
}
});
export default definePlugin({
name: "ServerListIndicators",
description: "Add online friend count or server count in the server list",
authors: [Devs.dzshn],
dependencies: ["ServerListAPI"],
options: {
mode: {
description: "mode",
type: OptionType.SELECT,
options: [
{ label: "Only online friend count", value: IndicatorType.FRIEND, default: true },
{ label: "Only server count", value: IndicatorType.SERVER },
{ label: "Both server and online friend counts", value: IndicatorType.BOTH },
]
}
},
settings,
renderIndicator: () => {
const { mode } = Settings.plugins.ServerListIndicators;
const { mode } = settings.store;
return <ErrorBoundary noop>
<div style={{ marginBottom: "4px" }}>
{!!(mode & IndicatorType.FRIEND) && <FriendsIndicator />}

View file

@ -4,7 +4,7 @@ import React from "react";
const handleClick = async () =>
console.log((await import("@webpack/common")).Clipboard.copy("\u200b"));
export const Example: React.FC<{
export const Example: React.ComponentType<{
real: boolean,
shigged?: number,
}> = ({ real, shigged }) => <>

View file

@ -16,11 +16,11 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import { findComponentByCodeLazy, findLazy } from "@webpack";
import { find, findComponentByCode } from "@webpack";
import { i18n, useToken } from "@webpack/common";
const ColorMap = findLazy(m => m.colors?.INTERACTIVE_MUTED?.css);
const VerifiedIconComponent = findComponentByCodeLazy(".CONNECTIONS_ROLE_OFFICIAL_ICON_TOOLTIP");
const ColorMap = find(m => m.colors?.INTERACTIVE_MUTED?.css);
const VerifiedIconComponent = findComponentByCode(".CONNECTIONS_ROLE_OFFICIAL_ICON_TOOLTIP");
export function VerifiedIcon() {
const color = useToken(ColorMap.colors.INTERACTIVE_MUTED).hex();

View file

@ -25,15 +25,15 @@ import { CopyIcon, LinkIcon } from "@components/Icons";
import { Devs } from "@utils/constants";
import { copyWithToast } from "@utils/misc";
import definePlugin, { OptionType } from "@utils/types";
import { findByCodeLazy, findByPropsLazy } from "@webpack";
import { findByCode, findByProps } from "@webpack";
import { Tooltip, UserProfileStore } from "@webpack/common";
import { User } from "discord-types/general";
import { VerifiedIcon } from "./VerifiedIcon";
const useLegacyPlatformType: (platform: string) => string = findByCodeLazy(".TWITTER_LEGACY:");
const platforms: { get(type: string): ConnectionPlatform; } = findByPropsLazy("isSupported", "getByUrl");
const getProfileThemeProps = findByCodeLazy(".getPreviewThemeColors", "primaryColor:");
const useLegacyPlatformType: (platform: string) => string = findByCode(".TWITTER_LEGACY:");
const platforms: { get(type: string): ConnectionPlatform; } = findByProps("isSupported", "getByUrl");
const getProfileThemeProps = findByCode(".getPreviewThemeColors", "primaryColor:");
const enum Spacing {
COMPACT,

View file

@ -16,10 +16,9 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import { Settings } from "@api/Settings";
import ErrorBoundary from "@components/ErrorBoundary";
import { formatDuration } from "@utils/text";
import { findByPropsLazy, findComponentByCodeLazy, findComponentLazy } from "@webpack";
import { findByProps, findComponentByCode } from "@webpack";
import { EmojiStore, FluxDispatcher, GuildMemberStore, GuildStore, Parser, PermissionsBits, PermissionStore, SnowflakeUtils, Text, Timestamp, Tooltip, useEffect, useState } from "@webpack/common";
import type { Channel } from "discord-types/general";
@ -78,19 +77,13 @@ const enum ChannelFlags {
}
const ChatScrollClasses = findByPropsLazy("auto", "managedReactiveScroller");
const ChatClasses = findByPropsLazy("chat", "content", "noChat", "chatContent");
const ChannelBeginHeader = findComponentByCodeLazy(".Messages.ROLE_REQUIRED_SINGLE_USER_MESSAGE");
const TagComponent = findComponentLazy(m => {
if (typeof m !== "function") return false;
const ChatScrollClasses = findByProps("auto", "managedReactiveScroller");
const ChatClasses = findByProps("chat", "content", "noChat", "chatContent");
const ChannelBeginHeader = findComponentByCode(".Messages.ROLE_REQUIRED_SINGLE_USER_MESSAGE");
const TagComponent = findComponentByCode(".Messages.FORUM_TAG_A11Y_FILTER_BY_TAG");
const code = Function.prototype.toString.call(m);
// Get the component which doesn't include increasedActivity
return code.includes(".Messages.FORUM_TAG_A11Y_FILTER_BY_TAG") && !code.includes("increasedActivityPill");
});
const EmojiParser = findByPropsLazy("convertSurrogateToName");
const EmojiUtils = findByPropsLazy("getURL", "getEmojiColors");
const EmojiParser = findByProps("convertSurrogateToName");
const EmojiUtils = findByProps("getURL", "getEmojiColors");
const ChannelTypesToChannelNames = {
[ChannelTypes.GUILD_TEXT]: "text",
@ -163,7 +156,7 @@ function HiddenChannelLockScreen({ channel }: { channel: ExtendedChannel; }) {
});
}
if (Settings.plugins.PermissionsViewer.enabled) {
if (Vencord.Plugins.isPluginEnabled("PermissionsViewer")) {
setPermissions(sortPermissionOverwrites(Object.values(permissionOverwrites).map(overwrite => ({
type: overwrite.type as PermissionType,
id: overwrite.id,
@ -280,7 +273,7 @@ function HiddenChannelLockScreen({ channel }: { channel: ExtendedChannel; }) {
}
<div className="shc-lock-screen-allowed-users-and-roles-container">
<div className="shc-lock-screen-allowed-users-and-roles-container-title">
{Settings.plugins.PermissionsViewer.enabled && (
{Vencord.Plugins.isPluginEnabled("PermissionsViewer") && (
<Tooltip text="Permission Details">
{({ onMouseLeave, onMouseEnter }) => (
<button

View file

@ -23,13 +23,13 @@ import ErrorBoundary from "@components/ErrorBoundary";
import { Devs } from "@utils/constants";
import { canonicalizeMatch } from "@utils/patches";
import definePlugin, { OptionType } from "@utils/types";
import { findByPropsLazy } from "@webpack";
import { findByProps } from "@webpack";
import { ChannelStore, PermissionsBits, PermissionStore, Tooltip } from "@webpack/common";
import type { Channel, Role } from "discord-types/general";
import HiddenChannelLockScreen from "./components/HiddenChannelLockScreen";
const ChannelListClasses = findByPropsLazy("modeMuted", "modeSelected", "unread", "icon");
const ChannelListClasses = findByProps("modeMuted", "modeSelected", "unread", "icon");
const enum ShowMode {
LockIcon,

View file

@ -10,12 +10,12 @@ import { definePluginSettings } from "@api/Settings";
import ErrorBoundary from "@components/ErrorBoundary";
import { Devs } from "@utils/constants";
import definePlugin, { OptionType } from "@utils/types";
import { findComponentLazy } from "@webpack";
import { findComponentByCode } from "@webpack";
import { ChannelStore, GuildMemberStore, i18n, Text, Tooltip } from "@webpack/common";
import { Message } from "discord-types/general";
import { FunctionComponent, ReactNode } from "react";
const CountDown = findComponentLazy(m => m.prototype?.render?.toString().includes(".MAX_AGE_NEVER"));
const CountDown = findComponentByCode(".MAX_AGE_NEVER");
const enum DisplayStyle {
Tooltip = "tooltip",

Some files were not shown because too many files have changed in this diff Show more