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