1
0
mirror of https://github.com/6dylan6/jdpro.git synced 2026-04-23 04:44:23 +08:00

Compare commits

..

406 Commits

Author SHA1 Message Date
2024 354f816ee5 1 2024-06-09 02:39:48 +08:00
2024 e88d030c38 1 2024-06-09 02:23:33 +08:00
2024 96e302d5f1 1 2024-06-08 20:18:41 +08:00
2024 c206afe9ea 1 2024-06-08 18:04:29 +08:00
2024 a3a085e267 1 2024-06-08 13:11:34 +08:00
2024 cddd36c642 1 2024-06-08 13:03:35 +08:00
2024 a321c3cf53 1 2024-06-06 21:35:30 +08:00
2024 b3f82c98fa 1 2024-06-06 21:12:34 +08:00
2024 f86b59cdb9 1 2024-06-06 14:52:06 +08:00
2024 071707954c 1 2024-06-06 08:48:17 +08:00
2024 13e70e3d8a 1 2024-06-05 23:58:31 +08:00
2024 b5a3c0cf63 1 2024-06-05 20:18:59 +08:00
2024 42f8296481 1 2024-06-04 23:05:43 +08:00
2024 ba1b5f31d1 1 2024-06-04 22:17:05 +08:00
2024 ea5d3cd828 1 2024-06-04 20:12:50 +08:00
2024 9bda1fbfcb 1 2024-06-04 08:40:03 +08:00
2024 f8e3d3e1ba 1 2024-06-04 07:19:42 +08:00
2024 2ded738303 1 2024-06-03 21:26:29 +08:00
2024 9502833156 1 2024-06-03 18:52:55 +08:00
2024 a843b8f3e9 1 2024-06-03 14:52:24 +08:00
2024 7257e74c4a 1 2024-06-02 19:44:58 +08:00
2024 ef7ea74d5d 1 2024-06-01 22:16:49 +08:00
2024 96a8c404b1 1 2024-06-01 21:21:32 +08:00
2024 2960214648 1 2024-06-01 21:21:09 +08:00
2024 5a8dac2930 1 2024-06-01 20:54:35 +08:00
2024 d2e0c5508a 1 2024-06-01 15:06:07 +08:00
2024 24c507f53a 1 2024-06-01 14:55:10 +08:00
2024 bcf085df15 1 2024-06-01 08:51:48 +08:00
2024 c5d739ade6 1 2024-06-01 08:40:34 +08:00
2024 9b8db28698 1 2024-06-01 08:26:23 +08:00
2024 4093c4748e 1 2024-06-01 08:18:34 +08:00
2024 ab664630e7 1 2024-06-01 07:26:16 +08:00
2024 69dc26ef11 1 2024-05-31 23:43:28 +08:00
2024 a870d5971f 1 2024-05-31 23:42:20 +08:00
2024 3fb4a415d5 1 2024-05-31 21:06:26 +08:00
2024 6a6c75dd2f 1 2024-05-31 17:55:28 +08:00
2024 c15eeaa7fd 1 2024-05-31 17:15:06 +08:00
2024 60b10c5cca 1 2024-05-31 16:06:53 +08:00
2024 813dbf54f1 1 2024-05-31 13:09:05 +08:00
2024 fd896991d4 1 2024-05-31 12:30:47 +08:00
2024 b26b20f8d2 1 2024-05-30 22:48:10 +08:00
2024 abbeb76e5a 1 2024-05-30 21:21:48 +08:00
2024 ea8af4939c 1 2024-05-30 20:50:15 +08:00
2024 1c7c1df3ca 1 2024-05-30 19:36:29 +08:00
2024 e585e47346 1 2024-05-30 19:07:03 +08:00
2024 81eb46b64f 1 2024-05-30 17:09:28 +08:00
2024 ecab70250f 1 2024-05-30 13:41:07 +08:00
2024 6af7d51e5f 1 2024-05-29 15:48:01 +08:00
2024 3f949b786f 1 2024-05-29 09:20:14 +08:00
2024 1868864ee5 1 2024-05-28 22:50:14 +08:00
2024 3db2cbc49e 1 2024-05-28 21:46:45 +08:00
2024 4bbc432180 1 2024-05-28 21:45:09 +08:00
2024 bbebc49889 1 2024-05-28 21:26:20 +08:00
2024 4744b2d32a 1 2024-05-28 16:13:58 +08:00
2024 e80d6c11a7 1 2024-05-28 14:06:46 +08:00
2024 635a3c4a2b 1 2024-05-28 11:55:10 +08:00
2024 2d01caa649 1 2024-05-28 11:54:33 +08:00
2024 81ea8417c0 1 2024-05-28 11:53:37 +08:00
2024 b280004d1e 1 2024-05-28 11:50:48 +08:00
2024 ef3c90a45b 1 2024-05-28 11:42:46 +08:00
2024 6a8fe5d3d1 1 2024-05-27 23:16:07 +08:00
2024 725c76113d 1 2024-05-27 22:45:43 +08:00
2024 aba9c05f36 1 2024-05-27 22:44:56 +08:00
2024 4fea82fcc9 1 2024-05-27 15:52:28 +08:00
2024 8f90e37309 1 2024-05-27 15:17:18 +08:00
2024 00d1c7b1b0 1 2024-05-27 12:52:28 +08:00
2024 81e5a749ee 1 2024-05-27 11:14:19 +08:00
2024 1f790cd7d4 1 2024-05-27 10:08:45 +08:00
2024 7e302082d3 1 2024-05-27 07:23:28 +08:00
2024 f91557e598 1 2024-05-26 11:43:35 +08:00
2024 e151abd5e7 1 2024-05-25 22:26:23 +08:00
2024 601e21cb37 1 2024-05-24 22:34:54 +08:00
2024 40cbf53d03 1 2024-05-24 16:56:34 +08:00
2024 aef831e0c4 1 2024-05-24 12:52:04 +08:00
2024 90cea51477 1 2024-05-24 07:05:35 +08:00
2024 9e937bf23d 1 2024-05-23 23:28:44 +08:00
2024 33f63ce1a5 1 2024-05-23 16:59:01 +08:00
2024 0cad1d3b3a 1 2024-05-23 16:44:18 +08:00
2024 e9a4282e8a 1 2024-05-23 16:20:54 +08:00
2024 7eacd6f8da 1 2024-05-23 16:11:14 +08:00
2024 bbf754e879 1 2024-05-23 16:10:34 +08:00
2024 37de718376 1 2024-05-23 15:54:26 +08:00
2024 e361ec03a7 1 2024-05-23 13:39:23 +08:00
2024 43266d6dfc 1 2024-05-22 14:21:28 +08:00
2024 69bdf6d313 1 2024-05-22 11:59:38 +08:00
2024 c911503d40 1 2024-05-22 11:27:24 +08:00
2024 1091d4fd9b 1 2024-05-22 06:56:56 +08:00
2024 d6e290208e 1 2024-05-21 22:58:21 +08:00
2024 b2dff0894b 1 2024-05-21 22:46:18 +08:00
2024 283da1d149 1 2024-05-20 19:26:35 +08:00
2024 79ba216a9d 1 2024-05-20 16:17:31 +08:00
2024 831c3c77cd 1 2024-05-20 11:23:43 +08:00
2024 ec9c6e1f35 1 2024-05-20 10:04:07 +08:00
2024 24608c44c1 1 2024-05-20 09:28:07 +08:00
2024 72a969949d 1 2024-05-20 08:58:52 +08:00
2024 d0e15b80b0 1 2024-05-20 07:11:44 +08:00
2024 e334aee9f9 1 2024-05-19 11:06:21 +08:00
2024 c961b28e19 1 2024-05-19 10:56:34 +08:00
2024 888e4e9fd2 1 2024-05-18 23:18:09 +08:00
2024 10a8c4b55d 1 2024-05-18 22:42:20 +08:00
2024 5e184e8999 1 2024-05-18 22:39:35 +08:00
2024 cc5e740119 1 2024-05-18 17:59:10 +08:00
2024 b1528e3f0e 1 2024-05-18 16:51:41 +08:00
2024 b34a15bb3f 1 2024-05-18 16:32:53 +08:00
2024 3818d1ddad 1 2024-05-18 13:15:50 +08:00
2024 526fb967f2 1 2024-05-17 13:15:58 +08:00
2024 9c58efe511 1 2024-05-17 13:06:59 +08:00
2024 459ad59c65 1 2024-05-17 09:40:45 +08:00
2024 19d2d8e1c0 1 2024-05-17 06:39:16 +08:00
2024 8054a725bf 1 2024-05-16 18:57:03 +08:00
2024 a167561248 1 2024-05-16 16:03:33 +08:00
2024 089d03a97c 1 2024-05-16 10:12:51 +08:00
2024 ea08eed5c6 1 2024-05-16 09:45:41 +08:00
2024 d7255ce5fc 1 2024-05-16 09:16:11 +08:00
2024 d6c5c4fcab 1 2024-05-16 09:15:08 +08:00
2024 3e66d025d8 1 2024-05-16 09:14:21 +08:00
2024 298279f0c1 1 2024-05-16 08:52:24 +08:00
2024 4e772a555a 1 2024-05-16 07:29:11 +08:00
2024 49c88aa61e 1 2024-05-16 06:52:25 +08:00
2024 722d2caf31 1 2024-05-15 23:04:51 +08:00
2024 3f73f6e8b4 1 2024-05-15 12:58:16 +08:00
2024 7c01786a09 1 2024-05-15 12:35:38 +08:00
2024 67d788fe68 1 2024-05-15 09:35:07 +08:00
2024 0429ee31e3 1 2024-05-15 07:14:28 +08:00
2024 c172ebbb59 1 2024-05-14 15:00:25 +08:00
2024 2e29491867 1 2024-05-13 23:26:14 +08:00
2024 267d5efbf8 1 2024-05-12 17:36:11 +08:00
2024 e8fd22cef7 1 2024-05-12 12:51:55 +08:00
2024 93abd023b1 1 2024-05-11 21:42:07 +08:00
2024 8e9b62f6d2 1 2024-05-11 20:22:43 +08:00
2024 e3e3f5d3f1 1 2024-05-11 20:06:55 +08:00
2024 9cc3ad6f86 1 2024-05-11 18:04:44 +08:00
2024 ce847a289b 1 2024-05-11 14:20:54 +08:00
2024 9c82f523b7 1 2024-05-11 10:28:36 +08:00
2024 8c9267beb0 1 2024-05-11 09:13:27 +08:00
2024 20181b26d8 1 2024-05-10 12:43:34 +08:00
2024 b3b5ba3270 1 2024-05-10 11:27:31 +08:00
2024 1c05baaa71 1 2024-05-10 11:03:16 +08:00
2024 c16f42fc65 1 2024-05-10 10:34:23 +08:00
2024 34611cf23b 1 2024-05-10 10:33:22 +08:00
2024 e7b7f151c4 1 2024-05-10 10:27:25 +08:00
2024 bda16fd1e2 1 2024-05-09 17:39:57 +08:00
2024 71c34f3416 1 2024-05-09 17:25:20 +08:00
2024 2c0b1b9e15 1 2024-05-09 17:13:46 +08:00
2024 c0a5c3f513 1 2024-05-09 10:48:21 +08:00
2024 e0d343a3ab 1 2024-05-09 09:59:36 +08:00
2024 ecaeb0e209 1 2024-05-09 09:16:36 +08:00
2024 9c026c644e 1 2024-05-08 23:59:15 +08:00
2024 5cdcd26d22 1 2024-05-08 22:46:31 +08:00
2024 8e6474b2bf 1 2024-05-08 22:34:36 +08:00
2024 7ec533fb15 1 2024-05-08 16:44:48 +08:00
2024 e3e0debd43 1 2024-05-08 15:25:39 +08:00
2024 a30e405518 1 2024-05-08 13:02:45 +08:00
2024 0373ed7f11 1 2024-05-08 06:48:34 +08:00
2024 648f20a4b2 1 2024-05-07 21:14:17 +08:00
2024 d6304607ca 1 2024-05-07 17:44:00 +08:00
2024 7eb7fc8e98 1 2024-05-07 15:20:13 +08:00
2024 34782cee17 1 2024-05-07 13:27:48 +08:00
2024 5e6b3dd3e0 1 2024-05-06 22:58:13 +08:00
2024 48d86ac323 1 2024-05-06 22:56:00 +08:00
2024 89e33abf3b 1 2024-05-06 22:54:05 +08:00
2024 ae1f83e3b4 1 2024-05-06 14:53:38 +08:00
2024 cffc72903b 1 2024-05-06 10:35:31 +08:00
2024 c6d2aa5ece 1 2024-05-05 18:33:55 +08:00
2024 b752dc7532 1 2024-05-05 18:20:14 +08:00
2024 df4e6591ab 1 2024-05-04 16:25:15 +08:00
2024 168ef0c993 1 2024-05-03 17:59:10 +08:00
2024 eddbb773b8 1 2024-05-02 15:19:42 +08:00
2024 cb9544f1ce 1 2024-05-02 14:10:15 +08:00
2024 36d17b8317 1 2024-05-02 14:07:12 +08:00
2024 aed57120c7 1 2024-05-01 20:30:16 +08:00
2024 473ec27f1a 1 2024-05-01 12:43:19 +08:00
2024 0ec9fe2b4f 1 2024-05-01 12:33:32 +08:00
2024 671ad65884 1 2024-05-01 08:17:56 +08:00
2024 1cb57b8c70 1 2024-04-30 17:32:36 +08:00
2024 d93aa4d1cb 1 2024-04-30 11:48:41 +08:00
2024 f31ddbcb4c 1 2024-04-30 10:28:15 +08:00
2024 d7736ec48b 1 2024-04-30 09:48:59 +08:00
2024 10e620d842 1 2024-04-30 09:28:27 +08:00
2024 4db5733a16 1 2024-04-30 09:27:19 +08:00
2024 1ef1a4316d 1 2024-04-29 23:04:06 +08:00
2024 6319c264c3 1 2024-04-29 11:52:54 +08:00
2024 70722d3cde 1 2024-04-28 10:17:11 +08:00
2024 252e8c0e3d 1 2024-04-27 21:58:32 +08:00
2024 7b3dfd2775 1 2024-04-27 21:37:33 +08:00
2024 4379cd9e60 1 2024-04-27 19:22:36 +08:00
2024 8cabc3ec83 1 2024-04-26 12:31:30 +08:00
2024 26ded81549 1 2024-04-25 19:33:41 +08:00
2024 40ffb8bb93 1 2024-04-24 21:52:47 +08:00
2024 c9ac405616 1 2024-04-23 12:19:49 +08:00
2024 3bec46512f 1 2024-04-23 10:48:22 +08:00
2024 fab82a7ea0 1 2024-04-23 09:41:19 +08:00
2024 71d7ebbbd7 1 2024-04-23 09:26:05 +08:00
2024 b5b952f75a 1 2024-04-22 19:29:00 +08:00
2024 573e8615f6 1 2024-04-22 16:50:28 +08:00
2024 ef339d5eca 1 2024-04-22 16:49:18 +08:00
2024 b5a1200daf 1 2024-04-22 09:53:40 +08:00
2024 a26e88d6b7 1 2024-04-21 18:07:09 +08:00
2024 7c3c9cdcc7 1 2024-04-20 13:05:07 +08:00
2024 d53ee6740a 1 2024-04-19 21:30:43 +08:00
2024 0eecba4137 1 2024-04-19 12:37:53 +08:00
2024 94ca70eb22 1 2024-04-19 11:30:17 +08:00
2024 391c3c80f6 1 2024-04-19 09:35:58 +08:00
2024 1cd42e77e8 1 2024-04-18 19:59:18 +08:00
2024 fd4c374bed 1 2024-04-18 09:37:37 +08:00
2024 75332d1944 1 2024-04-17 08:45:54 +08:00
2024 26008ee733 1 2024-04-16 19:46:29 +08:00
2024 052790c12a 1 2024-04-16 19:39:57 +08:00
2024 75604c677c 1 2024-04-15 14:49:18 +08:00
2024 4a250645f8 1 2024-04-15 09:40:49 +08:00
2024 f1270b209f 1 2024-04-14 16:41:51 +08:00
2024 6ca90f5263 1 2024-04-14 16:37:16 +08:00
2024 cd9c319d45 1 2024-04-12 10:32:12 +08:00
2024 5a5814ae1a 1 2024-04-11 19:26:20 +08:00
2024 c4cca8aa4e 1 2024-04-11 09:18:52 +08:00
2024 b676821604 1 2024-04-10 22:30:45 +08:00
2024 fe90d6b028 1 2024-04-10 22:12:02 +08:00
2024 602b6b3654 1 2024-04-10 09:32:45 +08:00
2024 35de3ad220 1 2024-04-09 12:24:49 +08:00
2024 4db9b7fbb2 1 2024-04-09 08:53:07 +08:00
2024 c0c159419b 1 2024-04-08 22:54:06 +08:00
2024 408c958f95 1 2024-04-08 19:34:06 +08:00
2024 423b02d5c0 1 2024-04-08 12:31:05 +08:00
2024 a009ec3c62 1 2024-04-08 11:56:46 +08:00
2024 eeb78d80ba 1 2024-04-08 11:50:36 +08:00
2024 93d21d85fb 1 2024-04-07 21:11:31 +08:00
2024 2bb722ee36 1 2024-04-07 20:10:41 +08:00
2024 86084c66fe 1 2024-04-07 19:33:53 +08:00
2024 394b961631 1 2024-04-05 12:55:00 +08:00
2024 fb6e3dc028 1 2024-04-03 11:35:57 +08:00
2024 873001f79c 1 2024-04-03 08:44:27 +08:00
2024 d57993feb6 1 2024-04-03 08:43:11 +08:00
2024 daaf42caba 1 2024-04-01 22:45:02 +08:00
2024 0d530ccd7e 1 2024-04-01 12:55:48 +08:00
2024 e34cf9c637 1 2024-04-01 11:30:06 +08:00
2024 20b1a538cf 1 2024-03-30 21:14:29 +08:00
2024 97136bf8e6 1 2024-03-30 21:13:48 +08:00
2024 ce0b0ba547 1 2024-03-30 09:55:00 +08:00
2024 1518c171dd 1 2024-03-29 23:26:03 +08:00
2024 0d96783be3 1 2024-03-29 19:57:14 +08:00
2024 5be7bd9ac7 1 2024-03-28 19:48:36 +08:00
2024 4af0a7b3a3 1 2024-03-28 13:15:35 +08:00
2024 84e1bf1238 1 2024-03-28 13:11:32 +08:00
2024 dc744c6ba4 1 2024-03-28 10:03:49 +08:00
2024 320952f366 1 2024-03-27 17:05:39 +08:00
2024 89b6af8399 1 2024-03-27 17:04:15 +08:00
2024 b0c4720f78 1 2024-03-27 10:32:49 +08:00
2024 1fcbcef03e 1 2024-03-27 07:28:26 +08:00
2024 5a8c0f8ed6 1 2024-03-27 06:48:54 +08:00
2024 6e808504e5 1 2024-03-25 23:38:52 +08:00
2024 9de5aa9b6d 1 2024-03-25 20:07:59 +08:00
2024 441079d906 1 2024-03-25 19:52:38 +08:00
2024 7cbf167d43 1 2024-03-25 19:51:06 +08:00
2024 c7bdd8862b 1 2024-03-25 19:44:43 +08:00
2024 3030ab56dc 1 2024-03-22 17:53:09 +08:00
2024 f7543706b5 1 2024-03-20 09:50:45 +08:00
2024 a714165b83 1 2024-03-20 07:31:18 +08:00
2024 bacb387a8d 1 2024-03-19 15:42:06 +08:00
2024 94be479db9 1 2024-03-19 12:58:41 +08:00
2024 348d66a561 1 2024-03-19 12:49:57 +08:00
2024 1afa8e2b7e 1 2024-03-18 10:40:19 +08:00
2024 a71c979bc5 1 2024-03-17 21:46:12 +08:00
2024 40902a6ef9 1 2024-03-16 20:14:16 +08:00
2024 4818bad13d 1 2024-03-16 00:28:26 +08:00
2024 ad9c5da8f6 1 2024-03-16 00:26:23 +08:00
2024 6bf16bc1df 1 2024-03-14 10:31:58 +08:00
2024 02b640bac7 1 2024-03-14 09:05:03 +08:00
2024 bef8dc1fb9 1 2024-03-13 20:29:04 +08:00
2024 20bc61cbcc 1 2024-03-13 19:37:15 +08:00
2024 3632260eb9 1 2024-03-13 17:34:28 +08:00
2024 49c1f32de6 1 2024-03-11 22:24:36 +08:00
2024 7abc290177 1 2024-03-10 18:38:48 +08:00
2024 1ae540380f 1 2024-03-09 13:56:01 +08:00
2024 8ca6f1d348 1 2024-03-09 13:39:01 +08:00
2024 fa1cfdca47 1 2024-03-09 00:39:38 +08:00
2024 dea579ef03 1 2024-03-08 23:41:13 +08:00
2024 d0c8594dcc 1 2024-03-08 23:23:21 +08:00
2024 dda955b6df 1 2024-03-08 21:27:48 +08:00
2024 a53e55f497 1 2024-03-08 21:06:12 +08:00
2024 1522a6ca3f 1 2024-03-08 10:18:14 +08:00
2024 17a0b3ae32 1 2024-03-07 23:32:44 +08:00
2024 a64ac4ad7d 1 2024-03-07 12:53:17 +08:00
2024 e1a7a0d882 1 2024-03-07 12:41:47 +08:00
2024 760f9d0526 1 2024-03-07 11:18:11 +08:00
2024 c2f276959e 1 2024-03-06 23:00:23 +08:00
2024 de6e5699e1 1 2024-03-06 22:58:22 +08:00
2024 bba28032ad 1 2024-03-06 11:17:26 +08:00
2024 4ca32c1d65 1 2024-03-05 23:52:22 +08:00
2024 0035ebf460 1 2024-03-05 23:33:08 +08:00
2024 e5f5f615f6 1 2024-03-05 23:02:33 +08:00
2024 198879d285 1 2024-03-05 22:35:13 +08:00
2024 ff35ef7d7c 1 2024-03-05 09:08:45 +08:00
2024 ff9d44d1a1 1 2024-03-05 08:56:38 +08:00
2024 39da5b3d3e 1 2024-03-04 17:26:53 +08:00
2024 045aee1ea2 1 2024-03-04 17:25:22 +08:00
2024 e436d779fa 1 2024-03-02 09:37:58 +08:00
2024 7cbd897596 1 2024-03-02 08:58:14 +08:00
2024 2234f21643 1 2024-03-01 23:32:06 +08:00
2024 fabecd7cd5 1 2024-03-01 23:29:44 +08:00
2024 7571925425 1 2024-03-01 11:51:48 +08:00
2024 382f7a86b7 1 2024-03-01 09:54:36 +08:00
2024 6bf99c5352 1 2024-03-01 07:32:18 +08:00
2024 be752e23f3 1 2024-02-29 12:58:21 +08:00
2024 02dfb71ef6 1 2024-02-28 15:02:13 +08:00
2024 7cba7a56c7 1 2024-02-28 07:11:14 +08:00
2024 197fdc2db6 1 2024-02-27 11:10:05 +08:00
2024 b963dc31aa 1 2024-02-26 21:37:55 +08:00
2024 b4e390a0c3 1 2024-02-26 09:13:41 +08:00
2024 1cbdab7fb1 1 2024-02-25 22:23:32 +08:00
2024 0e83f514d0 1 2024-02-25 22:11:26 +08:00
2024 458d0bd78e 1 2024-02-25 22:06:36 +08:00
2024 01a81c0b72 1 2024-02-23 12:47:50 +08:00
2024 c9d54a774b 1 2024-02-22 20:05:24 +08:00
2024 8634139eb7 1 2024-02-22 12:29:44 +08:00
2024 f55d36afd8 1 2024-02-21 00:35:47 +08:00
2024 294d0c72cd 1 2024-02-21 00:31:51 +08:00
2024 e98ca96286 1 2024-02-20 12:01:27 +08:00
2024 985b4363c9 1 2024-02-17 15:54:07 +08:00
2024 e86df85f9b 1 2024-02-17 13:03:17 +08:00
2024 ab0ad3db63 1 2024-02-16 17:54:35 +08:00
2024 ea46a2f925 1 2024-02-15 09:56:18 +08:00
2024 e679fb1f05 1 2024-02-12 20:13:30 +08:00
2024 1f7ba8441d 1 2024-02-12 18:24:51 +08:00
2024 cfda2d3e43 1 2024-02-12 18:24:20 +08:00
2024 e63fe33de3 1 2024-02-12 18:12:17 +08:00
2024 74ae5b7e6b 1 2024-02-11 21:29:26 +08:00
2024 382dde09ba 1 2024-02-11 11:47:05 +08:00
2024 11d3536d17 1 2024-02-11 09:03:47 +08:00
2024 6147ddbcba 1 2024-02-10 22:30:34 +08:00
2024 1e2ca23f0b 1 2024-02-10 00:35:04 +08:00
2024 0974f5fde1 1 2024-02-08 23:06:08 +08:00
2024 50e7596cf8 1 2024-02-08 23:02:47 +08:00
2024 de1ca7c4ec 1 2024-02-05 22:45:27 +08:00
2024 c57ee866dc 1 2024-02-05 22:38:24 +08:00
2024 34bc2e1fb5 1 2024-02-05 21:57:55 +08:00
2024 0dc2174c35 1 2024-02-05 20:42:20 +08:00
2024 2204d33592 1 2024-02-05 20:28:33 +08:00
2024 72033ad295 1 2024-02-05 17:33:03 +08:00
2024 4c64cdd69c 1 2024-02-05 15:57:01 +08:00
2024 913e6a48b5 1 2024-02-04 12:41:25 +08:00
2024 3cf38a27c3 1 2024-02-03 23:55:04 +08:00
2024 31eb7aca2e 1 2024-02-03 11:11:16 +08:00
2024 f91c6420da 1 2024-02-01 19:21:48 +08:00
2024 2da2a01b05 1 2024-01-31 22:25:27 +08:00
2024 c637d5d25c 1 2024-01-31 08:59:19 +08:00
2024 91a470259e 1 2024-01-30 13:40:47 +08:00
2024 dc78180d4b 1 2024-01-30 09:49:40 +08:00
2024 84c89dcfc6 1 2024-01-29 22:57:50 +08:00
2024 ba0b9769da 1 2024-01-28 21:45:54 +08:00
2024 ad6bc620c4 1 2024-01-28 11:41:39 +08:00
2024 88bc9ebe20 1 2024-01-27 22:42:50 +08:00
2024 f67c4f8532 1 2024-01-27 20:44:37 +08:00
2024 110f59430d 1 2024-01-27 20:37:29 +08:00
2024 6cc3eb1764 1 2024-01-27 20:35:30 +08:00
2024 097a794d0d 1 2024-01-27 19:52:07 +08:00
2024 c1fde3340b 1 2024-01-27 19:40:17 +08:00
2024 e3dfd052ec 1 2024-01-25 07:40:36 +08:00
2024 10b07a09d9 1 2024-01-24 20:04:54 +08:00
2024 a4e5a51deb 1 2024-01-24 19:51:54 +08:00
6dylan6 9ff5b2449c Merge pull request #217 from EloimEssaimEmmm/main
1
2024-01-23 23:47:51 +08:00
EloimEssaimEmmm 58c2bfa24d Update jd_indeps.sh
修改淘宝源地址
2024-01-23 15:50:23 +08:00
2024 882fa4d8cc 1 2024-01-22 23:58:11 +08:00
2024 cd4c78309c 1 2024-01-21 21:44:37 +08:00
2024 a385805142 1 2024-01-21 13:10:52 +08:00
2024 f76d079245 1 2024-01-21 11:21:25 +08:00
2024 3627e5b335 1 2024-01-21 11:00:54 +08:00
2024 92ada68ce6 1 2024-01-21 10:02:49 +08:00
2024 476da40f4f 1 2024-01-20 20:29:25 +08:00
2024 660f2c2764 1 2024-01-20 20:15:40 +08:00
2024 2e4f7a88af 1 2024-01-20 00:06:05 +08:00
2024 f2bd44e361 1 2024-01-18 20:44:30 +08:00
2024 04a970060b 1 2024-01-18 20:43:36 +08:00
2024 3b9b07c22b 1 2024-01-18 20:21:55 +08:00
2024 f415fc70e5 1 2024-01-17 21:45:39 +08:00
2024 6f1f38a769 1 2024-01-17 20:54:05 +08:00
2024 5bac636b4f 1 2024-01-17 09:02:48 +08:00
2024 37c6ef1eb8 1 2024-01-17 07:39:14 +08:00
2024 26ac6c0377 1 2024-01-15 22:46:15 +08:00
2024 c8f1bea8c5 1 2024-01-15 20:52:31 +08:00
2024 b5f07a0f15 1 2024-01-14 23:50:14 +08:00
2024 8a8548d2a8 1 2024-01-14 19:43:14 +08:00
2024 27ff8ccf67 1 2024-01-14 19:36:02 +08:00
2024 5e42d35200 1 2024-01-14 19:24:10 +08:00
2024 f9f2fec6cc 1 2024-01-14 16:43:00 +08:00
2024 d4893c1d79 1 2024-01-14 16:07:33 +08:00
2024 9e80bad4a2 1 2024-01-13 15:46:24 +08:00
6dylan6 30e830936c Merge pull request #204 from quewen08/main
1
2024-01-13 00:01:40 +08:00
2024 1c7380f623 1 2024-01-12 22:04:24 +08:00
2024 c3de2cb984 1 2024-01-12 20:33:24 +08:00
quewen08 fd19b8b382 Merge branch '6dylan6:main' into main 2024-01-11 09:50:39 +08:00
2024 3315962bf9 1 2024-01-10 21:36:19 +08:00
2024 38cc556343 1 2024-01-10 14:17:47 +08:00
que c163a74a6a 👽 🐛 [jd试用] 支持新版青龙面板文件 2024-01-10 10:21:19 +08:00
2024 9fa4158e87 1 2024-01-10 00:21:21 +08:00
2024 3dfb204f6f 1 2024-01-10 00:03:52 +08:00
2024 74f2e87309 1 2024-01-09 21:05:19 +08:00
2024 f81d85408f 1 2024-01-09 19:42:21 +08:00
2024 c04271cfc8 1 2024-01-08 16:54:01 +08:00
2024 764f01bd3d 1 2024-01-06 12:06:54 +08:00
2024 98ea6bb364 1 2024-01-05 19:09:35 +08:00
2024 60e93a4a46 1 2024-01-04 23:38:05 +08:00
2024 db4061c707 1 2024-01-04 21:56:55 +08:00
2024 dc730bdd75 1 2024-01-03 23:32:01 +08:00
2024 b3c42ddfff · 2024-01-02 21:21:05 +08:00
2024 b0d500e08d 1 2024-01-02 21:12:35 +08:00
2024 ede2f2b59d 1 2024-01-02 20:59:48 +08:00
183 changed files with 12369 additions and 1278 deletions
-18
View File
@@ -1,18 +0,0 @@
name: 问题反馈 🐞
description: 有问题先更新订阅,不行才提
body:
- type: input
id: version
attributes:
label: 青龙版本
validations:
required: true
- type: textarea
id: description
attributes:
label: 问题描述
description: 尽量详细描述问题,附上错误日志或截图。
placeholder: 请描述
validations:
required: true
-5
View File
@@ -1,5 +0,0 @@
blank_issues_enabled: false
contact_links:
- name: TG Chat
url: https://t.me/dylan_jdpro
about: 关注tg不迷路
@@ -1,9 +0,0 @@
name: "💡功能建议"
description: 为项目提想法
labels: ["pending","feature"]
body:
- type: textarea
id: require
attributes:
label: 需求描述
placeholder: 请描述
+38 -38
View File
@@ -6,15 +6,15 @@
### [TG CHANEL](https://t.me/dylan_jdpro)
国内机(带加速,也不太稳):
国内机(带代理):
```
ql repo https://js.googo.win/https://github.com/6dylan6/jdpro.git "jd_|jx_|jddj_" "backUp" "^jd[^_]|USER|JD|function|sendNotify|utils"
ql repo https://js.jdpro.site/https://github.com/6dylan6/jdpro.git "jd_|jx_|jddj_" "backUp" "^jd[^_]|USER|JD|function|sendNotify|utils"
```
默认代理拉不了,自行找可用代理
国外机(国外ip有限制可能有些任务不能正常运行):
国外机:
```
ql repo https://github.com/6dylan6/jdpro.git "jd_|jx_|jddj_" "backUp" "^jd[^_]|USER|JD|function|sendNotify|utils"
@@ -22,19 +22,31 @@ ql repo https://github.com/6dylan6/jdpro.git "jd_|jx_|jddj_" "backUp" "^jd[^_]|U
```
定时随意
## 使用
1、部署青龙登陆,版本不用追新,稳定才好,推荐部署到内网(不要外网访问,2.20.2以下版本面板会被免密登录偷家,如果必须外网就用最新版本吧)。
线报监控类,[入口](https://github.com/6dylan6/jdm.git)
2、到订阅管理创建订阅并运行;正确配置[参考](https://github.com/6dylan6/jdpro/issues/22)
带图评价(PC版CK,本库也有简化版可用)[入口](https://github.com/6dylan6/auto_comment.git)
3、订阅执行完,到定时任务搜索依赖安装(jd_indeps)任务执行;
4、到环境变量,创建变量,名称: JD_COOKIE,值:抓的CK(要安全就手抓),多个每行建一个,不要全写在一个;
## 简要流程
1、部署青龙并登陆。
2、到配置管理config.sh修改,差不多在17行(特别注意,没有修改此配置,sh类型任务拉不下来);
RepoFileExtensions="js py"修改为 RepoFileExtensions="js py sh" 保存;
3、到订阅管理创建订阅并运行;正确配置[参考](https://github.com/6dylan6/jdpro/issues/22)
4、订阅运行完毕,到定时任务搜索依赖安装任务执行;
4、到环境变量,创建变量,名称: JD_COOKIE,值:抓的CK(要安全就手抓),多个依次创建;
5、配置通知,通知的key填写到配置管理config.sh文件;
6、sendnotify.js文件用库里的到青龙deps目录下,否则会被青龙自带覆盖
<details>
<summary>笔记</summary>
@@ -68,52 +80,40 @@ export NOTIFY_SHOWNAMETYPE="4" 效果是 : 账号名称:备注
3、因为青龙有随机延时(可以在配置文件设置为0,默认300秒),所以涉及准点运行的任务,最后加now,如果是desi或conc不用加也会准时跑。
4、脚本的通知,需把通知key变量在config.sh文件配置
4、青龙系统通知(新增删除任务、登录等通知,需把通知变量写到config.sh文件,在环境变量里只发脚本运行通知哈
5、建议调整任务运行超时时间,青龙默认1小时有些跑不完就被强制结束,config.sh里配置。CommandTimeoutTime="3h" 即改为3小时,根据自己ck数量调整
5、如果通知文件发现和库里的不一致,那是被青龙自带的覆盖了,手动拷贝一份到deps目录下
6、ck掉线,不是常用地ip,短时间内连续获得豆可能就会会触发风控掉线
## 通用环境变量(到配置管理-config.sh里添加变量,export xxx='xxx'格式)
AUTOCFG='true' 自动配置sendNotify文件到deps目录
代理API模式(API代理是通过url接得到随机可用代理ip,格式是:xxx.xxx.xxx.xxx:xxxx
DY_PROXY='URL1#URL2' 多个#分割
PERMIT_API='test' 需要走API代理的js关键词,多个&分割,可不设置,支持的js都会走
DY_PROXY_RENUM='5' 获取IP失败重试次数
DY_PROXY_REDELAY='3' 获取失败重试间隔 单位秒
6、建议调整任务运行超时时间,青龙默认1小时有些跑不完就被强制结束,config.sh里配置。CommandTimeoutTime="3h" 即改为3小时,根据自己ck数量调整。
</code></pre>
</details>
代理池模式(就是一个代理服务器的地址)
如需禁止某些CK参加所有活动或某些活动功能,实现重组CK顺序功能,包括随机、优先、轮换、组队、分段等功能,把[task_before](./docker/task_before.sh)文件内容复制到配置管理task_before.sh保存
DP_POOL='http://xxx' 代理池url
常用变量举例:
PERMIT_JS='farm&plant&opencard' 需要走代理池的js关键词,多个&分割(可不设置,如果不设置就是所有的js都会走)
Recombin_CK_Mode="1" 全部顺序随机
Recombin_CK_Mode="2" Recombin_CK_ARG1="15" 假设有100个CK,前15个CK按正常顺序靠前,其余CK随机乱序
Recombin_CK_Mode="3" Recombin_CK_ARG1="5" Recombin_CK_ARG2="5" 假设有100个CK,希望前5个账号始终保持在前部,剩余95个账号按照轮换模式每天轮换5个
BANPIN 禁止某pin执行任务
其他用法具体参考[文档](https://docs.qq.com/doc/DTXh6QUVjRXJ1TFdN)
ALLOWPIN 只执行某pin执行任务
## 通用变量
多个任务同pin:任务1|任务2@pin1,pin2
自定义sign export SIGN_URL='url'
多个任务不同pin:任务1@pin,pin2&任务2@pin2,pin3
代理API export DY_PROXY='url'(部分js支持)
不指定任务只写pin:全部任务
API白名单模式 export PERMIT_API='fruit'
示例
代理池 export DP_POOL='url'(全部js支持)
export BANPIN='draw@pin1,pin2'
代理池白名单(js文件名关键字如fruit),如fruit export PERMIT_JS='fruit'
export ALLOWPIN='draw@pin1,pin2'
## 支持的通知方式
+11 -6
View File
@@ -1,12 +1,17 @@
version: '2'
services:
ql_web:
image: whyour/qinglong:2.17.9
image: whyour/qinglong:2.11.3
container_name: ql
volumes:
- ./qinglong/data:/ql/data
- ./qinglong/deps/pnpm:/root/.local/share/pnpm
- ./qinglong/deps/pip3:/usr/local/lib/python3.11/site-packages
- ./data/config:/ql/config
- ./data/log:/ql/log
- ./data/db:/ql/db
- ./data/scripts:/ql/scripts
- ./data/repo:/ql/repo
ports:
- "5700:5700"
restart: unless-stopped
- "0.0.0.0:5700:5700"
environment:
- ENABLE_HANGUP=true
- ENABLE_WEB_PANEL=true
restart: always
+17 -8
View File
@@ -46,16 +46,25 @@ cd $ql_path
cat > docker-compose.yml <<EOF
version: '2'
services:
ql_web:
image: whyour/qinglong:2.17.9
container_name: ql
qinglong:
image: whyour/qinglong:2.11.3
container_name: qinglong
volumes:
- ./qinglong/data:/ql/data
- ./qinglong/deps/pnpm:/root/.local/share/pnpm
- ./qinglong/deps/pip3:/usr/local/lib/python3.11/site-packages
- ./data/config:/ql/config
- ./data/log:/ql/log
- ./data/db:/ql/db
- ./data/scripts:/ql/scripts
- ./data/repo:/ql/repo
ports:
- "5700:5700"
restart: unless-stopped
- "0.0.0.0:5500:5700"
networks:
- net
environment:
- ENABLE_HANGUP=true
- ENABLE_WEB_PANEL=true
restart: always
networks:
net:
EOF
docker-compose up -d
if [ $? -ne 0 ] ; then
+2 -7
View File
@@ -1,11 +1,11 @@
#!/usr/bin/env bash
## Build 20220831-001-test
## 6dylan6_20240905
## 6dylan6_0212
name_js=(
jd_farm_help
jd_farmnew_code_help
jd_farm_help_new
#jd_pet
jd_plantBean_help
#jd_dreamFactory
@@ -18,7 +18,6 @@ name_js=(
#jd_sgmh
#jd_cfd
jd_health
jd_farmshare
#jd_carnivalcity
#jd_city
#jd_moneyTree
@@ -39,7 +38,6 @@ name_config=(
#Sgmh
#Cfd
Health
Fruit_new
#Carni
#City
#MoneyTree
@@ -60,7 +58,6 @@ name_chinese=(
#闪购盲盒
#京喜财富岛
东东健康社区
农场小程序助力
#京东手机狂欢城
#城城领现金
#摇钱树
@@ -81,7 +78,6 @@ env_name=(
#JDSGMH_SHARECODES ## 11、闪购盲盒互助码
#JDCFD_SHARECODES ## 12、京喜财富岛互助码
JDHEALTH_SHARECODES ## 13、东东健康社区互助码
NEWFRUITSHARECODES ## 14、新农场小程序
#JD818_SHARECODES ## 14、京东手机狂欢城互助码
#CITY_SHARECODES ## 15、城城领现金互助码
#MONEYTREE_SHARECODES ## 16、摇钱树
@@ -102,7 +98,6 @@ var_name=(
#ForOtherSgmh ## 11、闪购盲盒互助规则
#ForOtherCfd ## 12、京喜财富岛互助规则
ForOtherHealth ## 13、东东健康社区互助规则
ForOtherFruit_new ## 新农场小程序
#ForOtherCarni ## 14、京东手机狂欢城互助规则
#ForOtherCity ## 15、城城领现金互助规则
#ForOtherMoneyTree ## 16、摇钱树
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
+72
View File
@@ -0,0 +1,72 @@
import axios from "axios"
import {format} from "date-fns"
import * as CryptoJS from 'crypto-js'
class H5ST {
tk: string;
timestamp: string;
rd: string;
appId: string;
fp: string;
time: number;
ua: string
enc: string;
constructor(appId: string, ua: string, fp: string) {
this.appId = appId
this.ua = ua
this.fp = fp || this.__genFp()
}
__genFp() {
let e = "0123456789";
let a = 13;
let i = '';
for (; a--;)
i += e[Math.random() * e.length | 0];
return (i + Date.now()).slice(0, 16)
}
async __genAlgo() {
this.time = Date.now()
this.timestamp = format(this.time, "yyyyMMddHHmmssSSS")
let {data} = await axios.post(`https://cactus.jd.com/request_algo?g_ty=ajax`, {
'version': '3.0',
'fp': this.fp,
'appId': this.appId.toString(),
'timestamp': this.time,
'platform': 'web',
'expandParams': ''
}, {
headers: {
'Host': 'cactus.jd.com',
'accept': 'application/json',
'content-type': 'application/json',
'user-agent': this.ua,
}
})
this.tk = data.data.result.tk
this.rd = data.data.result.algo.match(/rd='(.*)'/)[1]
this.enc = data.data.result.algo.match(/algo\.(.*)\(/)[1]
}
__genKey(tk: string, fp: string, ts: string, ai: string, algo: object) {
let str = `${tk}${fp}${ts}${ai}${this.rd}`;
return algo[this.enc](str, tk)
}
__genH5st(body: object) {
let y = this.__genKey(this.tk, this.fp, this.timestamp, this.appId, CryptoJS).toString(CryptoJS.enc.Hex)
let s = ''
for (let key of Object.keys(body)) {
key === 'body' ? s += `${key}:${CryptoJS.SHA256(body[key]).toString(CryptoJS.enc.Hex)}&` : s += `${key}:${body[key]}&`
}
s = s.slice(0, -1)
s = CryptoJS.HmacSHA256(s, y).toString(CryptoJS.enc.Hex)
return encodeURIComponent(`${this.timestamp};${this.fp};${this.appId.toString()};${this.tk};${s};3.0;${this.time.toString()}`)
}
}
export {
H5ST
}
+1 -1
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
+137 -150
View File
@@ -4,160 +4,147 @@ const got = require('got');
require('dotenv').config();
const { readFile } = require('fs/promises');
const path = require('path');
const qlDir = '/ql';
const fs = require('fs');
const tokenFileList = ['/ql/data/db/keyv.sqlite', '/ql/data/config/auth.json', '/ql/config/auth.json'];
let authFile = getLatestFile(tokenFileList);
const HOSTS = ['http://127.0.0.1:5600','http://127.0.0.1:5700'];
function api(options){
const req = got.extend({prefixUrl: HOSTS[0],retry:{limit:0},timeout:{request:5000}})(options);
['json','text','buffer'].forEach(m=>{
const orig=req[m].bind(req);
req[m]=()=>orig().catch(e=>['ECONNREFUSED','ETIMEDOUT'].includes(e.code)?got.extend({prefixUrl:HOSTS[1],retry:{limit:0},timeout:{request:5000}})(options)[m]():Promise.reject(e));
});
return req;
}
function getLatestFile(files) {
let latestFile = null;
let latestMtime = 0;
for (const file of files) {
try {
const stats = fs.statSync(file);
const mtime = stats.mtimeMs;
if (mtime > latestMtime) {
latestMtime = mtime;
latestFile = file;
}
} catch (e) {
}
}
return latestFile;
}
let Fileexists = fs.existsSync('/ql/data/config/auth.json');
let authFile="";
if (Fileexists)
authFile="/ql/data/config/auth.json"
else
authFile="/ql/config/auth.json"
//const authFile = path.join(qlDir, 'config/auth.json');
const api = got.extend({
prefixUrl: 'http://127.0.0.1:5600',
retry: { limit: 0 },
});
async function getToken() {
const authConfig = await readFile(authFile);
// console.log(authConfig.toString().match(/"token":"(.*?)",/)[1])
return authConfig.toString().match(/"token":"([^"]*)"(?!.*"token":)/)[1];
const authConfig = JSON.parse(await readFile(authFile));
return authConfig.token;
}
// getToken()
module.exports.getEnvs = async () => {
const token = await getToken();
const body = await api({
url: 'api/envs',
searchParams: {
searchValue: 'JD_COOKIE',
t: Date.now(),
},
headers: {
Accept: 'application/json',
authorization: `Bearer ${token}`,
},
}).json();
return body.data;
module.exports.getEnvs = async () => {
const token = await getToken();
const body = await api({
url: 'api/envs',
searchParams: {
searchValue: 'JD_COOKIE',
t: Date.now(),
},
headers: {
Accept: 'application/json',
authorization: `Bearer ${token}`,
},
}).json();
return body.data;
};
module.exports.getEnvsCount = async () => {
const data = await this.getEnvs();
return data.length;
const data = await this.getEnvs();
return data.length;
};
module.exports.addEnv = async (cookie, remarks) => {
const token = await getToken();
const body = await api({
method: 'post',
url: 'api/envs',
params: { t: Date.now() },
json: [{
name: 'JD_COOKIE',
value: cookie,
remarks,
}],
headers: {
Accept: 'application/json',
authorization: `Bearer ${token}`,
'Content-Type': 'application/json;charset=UTF-8',
},
}).json();
return body;
const token = await getToken();
const body = await api({
method: 'post',
url: 'api/envs',
params: { t: Date.now() },
json: [{
name: 'JD_COOKIE',
value: cookie,
remarks,
}],
headers: {
Accept: 'application/json',
authorization: `Bearer ${token}`,
'Content-Type': 'application/json;charset=UTF-8',
},
}).json();
return body;
};
module.exports.updateEnv = async (cookie, eid, remarks) => {
const token = await getToken();
const body = await api({
method: 'put',
url: 'api/envs',
params: { t: Date.now() },
json: {
name: 'JD_COOKIE',
value: cookie,
_id: eid,
remarks,
},
headers: {
Accept: 'application/json',
authorization: `Bearer ${token}`,
'Content-Type': 'application/json;charset=UTF-8',
},
}).json();
return body;
const token = await getToken();
const body = await api({
method: 'put',
url: 'api/envs',
params: { t: Date.now() },
json: {
name: 'JD_COOKIE',
value: cookie,
_id: eid,
remarks,
},
headers: {
Accept: 'application/json',
authorization: `Bearer ${token}`,
'Content-Type': 'application/json;charset=UTF-8',
},
}).json();
return body;
};
module.exports.updateEnv11 = async (cookie, eid, remarks) => {
const token = await getToken();
const body = await api({
method: 'put',
url: 'api/envs',
params: { t: Date.now() },
json: {
name: 'JD_COOKIE',
value: cookie,
id: eid,
remarks,
},
headers: {
Accept: 'application/json',
authorization: `Bearer ${token}`,
'Content-Type': 'application/json;charset=UTF-8',
},
}).json();
return body;
const token = await getToken();
const body = await api({
method: 'put',
url: 'api/envs',
params: { t: Date.now() },
json: {
name: 'JD_COOKIE',
value: cookie,
id: eid,
remarks,
},
headers: {
Accept: 'application/json',
authorization: `Bearer ${token}`,
'Content-Type': 'application/json;charset=UTF-8',
},
}).json();
return body;
};
module.exports.DisableCk = async (eid) => {
const token = await getToken();
const body = await api({
method: 'put',
url: 'api/envs/disable',
params: { t: Date.now() },
body: JSON.stringify([eid]),
headers: {
Accept: 'application/json',
authorization: `Bearer ${token}`,
'Content-Type': 'application/json;charset=UTF-8',
},
}).json();
return body;
const token = await getToken();
const body = await api({
method: 'put',
url: 'api/envs/disable',
params: { t: Date.now() },
body: JSON.stringify([eid]),
headers: {
Accept: 'application/json',
authorization: `Bearer ${token}`,
'Content-Type': 'application/json;charset=UTF-8',
},
}).json();
return body;
};
module.exports.EnableCk = async (eid) => {
const token = await getToken();
const body = await api({
method: 'put',
url: 'api/envs/enable',
params: { t: Date.now() },
body: JSON.stringify([eid]),
headers: {
Accept: 'application/json',
authorization: `Bearer ${token}`,
'Content-Type': 'application/json;charset=UTF-8',
},
}).json();
return body;
const token = await getToken();
const body = await api({
method: 'put',
url: 'api/envs/enable',
params: { t: Date.now() },
body: JSON.stringify([eid]),
headers: {
Accept: 'application/json',
authorization: `Bearer ${token}`,
'Content-Type': 'application/json;charset=UTF-8',
},
}).json();
return body;
};
module.exports.getstatus = async (eid) => {
module.exports.getstatus = async(eid) => {
const envs = await this.getEnvs();
var tempid = 0;
for (let i = 0; i < envs.length; i++) {
tempid = 0;
tempid = 0;
if (envs[i]._id) {
tempid = envs[i]._id;
}
@@ -171,7 +158,7 @@ module.exports.getstatus = async (eid) => {
return 99;
};
module.exports.getEnvById = async (eid) => {
module.exports.getEnvById = async(eid) => {
const envs = await this.getEnvs();
var tempid = 0;
for (let i = 0; i < envs.length; i++) {
@@ -190,28 +177,28 @@ module.exports.getEnvById = async (eid) => {
};
module.exports.getEnvByPtPin = async (Ptpin) => {
const envs = await this.getEnvs();
for (let i = 0; i < envs.length; i++) {
var tempptpin = decodeURIComponent(envs[i].value.match(/pt_pin=([^; ]+)(?=;?)/) && envs[i].value.match(/pt_pin=([^; ]+)(?=;?)/)[1]);
if (tempptpin == Ptpin) {
return envs[i];
}
}
return "";
const envs = await this.getEnvs();
for (let i = 0; i < envs.length; i++) {
var tempptpin = decodeURIComponent(envs[i].value.match(/pt_pin=([^; ]+)(?=;?)/) && envs[i].value.match(/pt_pin=([^; ]+)(?=;?)/)[1]);
if(tempptpin==Ptpin){
return envs[i];
}
}
return "";
};
module.exports.delEnv = async (eid) => {
const token = await getToken();
const body = await api({
method: 'delete',
url: 'api/envs',
params: { t: Date.now() },
body: JSON.stringify([eid]),
headers: {
Accept: 'application/json',
authorization: `Bearer ${token}`,
'Content-Type': 'application/json;charset=UTF-8',
},
}).json();
return body;
const token = await getToken();
const body = await api({
method: 'delete',
url: 'api/envs',
params: { t: Date.now() },
body: JSON.stringify([eid]),
headers: {
Accept: 'application/json',
authorization: `Bearer ${token}`,
'Content-Type': 'application/json;charset=UTF-8',
},
}).json();
return body;
};
File diff suppressed because one or more lines are too long
+5130
View File
File diff suppressed because one or more lines are too long
+131 -194
View File
@@ -3,27 +3,27 @@
*/
//此处填写京东账号cookie。
let CookieJDs = [
'',//账号一ck,例:pt_key=XXX;pt_pin=XXX;
'',//账号二ck,例:pt_key=XXX;pt_pin=XXX;如有更多,依次类推
'',//账号一ck,例:pt_key=XXX;pt_pin=XXX;
'',//账号二ck,例:pt_key=XXX;pt_pin=XXX;如有更多,依次类推
]
let IP = '';
// 判断环境变量里面是否有京东ck
if (process.env.JD_COOKIE) {
if (process.env.JD_COOKIE.indexOf('&') > -1) {
CookieJDs = process.env.JD_COOKIE.split('&');
} else if (process.env.JD_COOKIE.indexOf('\n') > -1) {
CookieJDs = process.env.JD_COOKIE.split('\n');
} else {
CookieJDs = [process.env.JD_COOKIE];
}
if (process.env.JD_COOKIE.indexOf('&') > -1) {
CookieJDs = process.env.JD_COOKIE.split('&');
} else if (process.env.JD_COOKIE.indexOf('\n') > -1) {
CookieJDs = process.env.JD_COOKIE.split('\n');
} else {
CookieJDs = [process.env.JD_COOKIE];
}
}
if (JSON.stringify(process.env).indexOf('GITHUB') > -1) {
console.log(`请勿使用github action运行此脚本,无论你是从你自己的私库还是其他哪里拉取的源代码,都会导致我被封号\n`);
!(async () => {
await require('./sendNotify').sendNotify('提醒', `请勿使用github action、滥用github资源会封我仓库以及账号`)
await process.exit(0);
})()
}
//if (JSON.stringify(process.env).indexOf('GITHUB') > -1) {
// console.log(`请勿使用github action运行此脚本,无论你是从你自己的私库还是其他哪里拉取的源代码,都会导致我被封号\n`);
// !(async () => {
// await require('./sendNotify').sendNotify('提醒', `请勿使用github action、滥用github资源会封我仓库以及账号`)
// await process.exit(0);
// })()
//}
//!(async () => {
// IP = await getIP();
// try {
@@ -33,208 +33,145 @@ if (process.env.JD_COOKIE) {
//})()
CookieJDs = [...new Set(CookieJDs.filter(item => !!item))]
if (process.env.JD_DEBUG && process.env.JD_DEBUG === 'false') console.log = () => { };
if (process.env.BANPIN) {
try {
let banpin = process.env.BANPIN;
if (banpin.includes('@')) {
const arr = banpin.split('&');
for (let i of arr) {
//if (process.mainModule.filename.includes(i.split('^')[0])) {
if (i.split('@')[0].split('|').filter(x => process.argv[1].includes(x)).length != 0) {
let pinarr = i.split('@')[1].split(',');
console.log(`\n❗已配置该任务不执行pin: ${JSON.stringify(pinarr)}`);
for (let j of pinarr) {
j = decodeURIComponent(j);
CookieJDs = CookieJDs.filter(x => !x.includes(encodeURIComponent(j)));
}
}
}
} else {
let pinarr = banpin.split(',');
console.log(`\n❗已配置全部任务不执行pin: ${JSON.stringify(pinarr)}`);
for (let i of pinarr) {
i = decodeURIComponent(i);
CookieJDs = CookieJDs.filter(x => !x.includes(encodeURIComponent(i)));
}
}
} catch { }
}
if (process.env.ALLOWPIN) {
try {
const pin = process.env.ALLOWPIN;
const runck = [];
if (pin.includes('@')) {
const arr = pin.split('&');
for (let i of arr) {
//if (process.mainModule.filename.includes(i.split('^')[0])) {
if (i.split('@')[0].split('|').filter(x => process.argv[1].includes(x)).length != 0) {
let pinarr = i.split('@')[1].split(',');
console.log(`\n❗已配置该任务只执行pin: ${JSON.stringify(pinarr)}`);
for (let j of pinarr) {
j = decodeURIComponent(j);
runck.push(...CookieJDs.filter(x => x.includes(encodeURIComponent(j))));
}
}
}
} else {
let pinarr = pin.split(',');
console.log(`\n❗已配置全部任务只执行pin: ${JSON.stringify(pinarr)}`);
for (let i of pinarr) {
i = decodeURIComponent(i);
runck.push(...CookieJDs.filter(x => x.includes(encodeURIComponent(i))));
}
}
if (runck.length > 0) {
CookieJDs = runck
}
} catch { }
}
console.log(`\n====================共${CookieJDs.length}个京东账号Cookie=================`);
console.log(`===========脚本执行时间:${formatdate(new Date(new Date().getTime() + new Date().getTimezoneOffset() * 60 * 1000 + 8 * 60 * 60 * 1000))}============`);
console.log('>>>>>>>>>>>>6dylan6提醒您:有问题先更新不行在反馈>>>>>>>>>>>>>\n');
console.log(`Tips:‼️青龙2.20.2以下版本不要外网访问,已被爆破可任意登录!必须要外网的就全新安装新版吧,升级不行\n`);
console.log('>>>>>>>>>>>>6Dy提醒您:有问题先更新不行在反馈>>>>>>>>>>>>>\n');
for (let i = 0; i < CookieJDs.length; i++) {
if (!CookieJDs[i].match(/pt_pin=(.+?);/) || !CookieJDs[i].match(/pt_key=(.+?);/)) console.log(`\n提示:京东cookie 【${CookieJDs[i]}】填写不规范,可能会影响部分脚本正常使用。正确格式为: pt_key=xxx;pt_pin=xxx;(分号;不可少)\n`);
CookieJDs[i] = CookieJDs[i].replace(/[\u4e00-\u9fa5]/g, (str) => encodeURI(str));
const index = (i + 1 === 1) ? '' : (i + 1);
exports['CookieJD' + index] = CookieJDs[i].trim();
if (!CookieJDs[i].match(/pt_pin=(.+?);/) || !CookieJDs[i].match(/pt_key=(.+?);/)) console.log(`\n提示:京东cookie 【${CookieJDs[i]}】填写不规范,可能会影响部分脚本正常使用。正确格式为: pt_key=xxx;pt_pin=xxx;(分号;不可少)\n`);
CookieJDs[i] = CookieJDs[i].replace(/[\u4e00-\u9fa5]/g, (str) => encodeURI(str));
const index = (i + 1 === 1) ? '' : (i + 1);
exports['CookieJD' + index] = CookieJDs[i].trim();
}
let permit = process.env.PERMIT_JS ? process.env.PERMIT_JS.split('&') : '';
if (process.env.DP_POOL) {
if (permit && permit.filter(x => process.mainModule.filename.includes(x)).length != 0) {
try {
require("global-agent/bootstrap");
global.GLOBAL_AGENT.HTTP_PROXY = process.env.DP_POOL;
global.GLOBAL_AGENT.NO_PROXY = process.env.NO_PROXY || '127.0.0.1,localhost';
console.log(`\n---------------使用代理池模式---------------\n`);
} catch {
throw new Error(`请安装global-agent依赖,才能启用代理!`);
}
} else {
if (permit && permit.filter(x => process.mainModule.filename.includes(x)).length != 0) {
try {
require("global-agent/bootstrap");
global.GLOBAL_AGENT.HTTP_PROXY = process.env.DP_POOL;
console.log(`\n---------------使用代理池模式---------------\n`);
} catch {
throw new Error(`请安装global-agent依赖,才能启用代理!`);
}
} else {
}
}
function getIP() {
const https = require('https');
return new Promise((resolve, reject) => {
let opt = {
hostname: "www.cip.cc",
port: 443,
path: "/",
method: "GET",
headers: {
"User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36',
},
timeout: 5000
}
const req = https.request(opt, (res) => {
res.setEncoding('utf-8');
let tmp = '';
res.on('error', reject);
res.on('data', d => tmp += d);
res.on('end', () => resolve(tmp));
});
req.on('error', reject);
req.end();
const https = require('https');
return new Promise((resolve, reject) => {
let opt = {
hostname: "www.cip.cc",
port: 443,
path: "/",
method: "GET",
headers: {
"User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36',
},
timeout: 5000
}
const req = https.request(opt, (res) => {
res.setEncoding('utf-8');
let tmp = '';
res.on('error', reject);
res.on('data', d => tmp += d);
res.on('end', () => resolve(tmp));
});
req.on('error', reject);
req.end();
});
}
// 以下为注入互助码环境变量(仅nodejs内起效)的代码
function SetShareCodesEnv(nameChinese = "", nameConfig = "", envName = "") {
let rawCodeConfig = {}
let fs = require('fs')
// 读取互助码
let shareCodeLogPath = fs.existsSync(`${process.env.QL_DIR}/data`) ? `${process.env.QL_DIR}/data/log/.ShareCode/${nameConfig}.log` : `${process.env.QL_DIR}/log/.ShareCode/${nameConfig}.log`;
if (fs.existsSync(shareCodeLogPath)) {
// 因为faker2目前没有自带ini,改用已有的dotenv来解析
// // 利用ini模块读取原始互助码和互助组信息
// let ini = require('ini')
// rawCodeConfig = ini.parse(fs.readFileSync(shareCodeLogPath, 'utf-8'))
let rawCodeConfig = {}
let fs = require('fs')
// 读取互助码
let shareCodeLogPath = fs.existsSync(`${process.env.QL_DIR}/data`) ? `${process.env.QL_DIR}/data/log/.ShareCode/${nameConfig}.log` : `${process.env.QL_DIR}/log/.ShareCode/${nameConfig}.log`;
if (fs.existsSync(shareCodeLogPath)) {
// 因为faker2目前没有自带ini,改用已有的dotenv来解析
// // 利用ini模块读取原始互助码和互助组信息
// let ini = require('ini')
// rawCodeConfig = ini.parse(fs.readFileSync(shareCodeLogPath, 'utf-8'))
// 使用env模块
require('dotenv').config({ path: shareCodeLogPath })
rawCodeConfig = process.env
// 使用env模块
require('dotenv').config({ path: shareCodeLogPath })
rawCodeConfig = process.env
}
// 解析每个用户的互助码
let codes = {}
Object.keys(rawCodeConfig).forEach(function (key) {
if (key.startsWith(`My${nameConfig}`)) {
codes[key] = rawCodeConfig[key]
}
});
// 解析每个用户的互助码
let codes = {}
Object.keys(rawCodeConfig).forEach(function (key) {
if (key.startsWith(`My${nameConfig}`)) {
codes[key] = rawCodeConfig[key]
}
});
// 解析每个用户要帮助的互助码组,将用户实际的互助码填充进去
let helpOtherCodes = {}
Object.keys(rawCodeConfig).forEach(function (key) {
if (key.startsWith(`ForOther${nameConfig}`)) {
let helpCode = rawCodeConfig[key]
for (const [codeEnv, codeVal] of Object.entries(codes)) {
helpCode = helpCode.replace("${" + codeEnv + "}", codeVal)
}
// 解析每个用户要帮助的互助码组,将用户实际的互助码填充进去
let helpOtherCodes = {}
Object.keys(rawCodeConfig).forEach(function (key) {
if (key.startsWith(`ForOther${nameConfig}`)) {
let helpCode = rawCodeConfig[key]
for (const [codeEnv, codeVal] of Object.entries(codes)) {
helpCode = helpCode.replace("${" + codeEnv + "}", codeVal)
}
helpOtherCodes[key] = helpCode
}
});
// 按顺序用&拼凑到一起,并放入环境变量,供目标脚本使用
let shareCodes = []
let leftIndex = 1, rightIndex = Object.keys(helpOtherCodes).length
// 判断是否是ptask并行触发,若是,则修改实际需要设置的互助码范围
let ptaskLeft = process.env.PTASK_LEFT
let ptaskRight = process.env.PTASK_RIGHT
if (ptaskLeft && ptaskRight) {
leftIndex = Number(ptaskLeft)
rightIndex = Number(ptaskRight)
helpOtherCodes[key] = helpCode
}
});
for (let idx = leftIndex; idx <= rightIndex; idx++) {
shareCodes.push(helpOtherCodes[`ForOther${nameConfig}${idx}`])
}
let shareCodesStr = shareCodes.join('&')
process.env[envName] = shareCodesStr
// 按顺序用&拼凑到一起,并放入环境变量,供目标脚本使用
let shareCodes = []
let leftIndex = 1, rightIndex = Object.keys(helpOtherCodes).length
let totalCodeCount = rightIndex - leftIndex + 1
//console.info(`${nameChinese}的 互助码环境变量 ${envName},共计 ${totalCodeCount} 组互助码,总大小为 ${shareCodesStr.length} 字节`)
// 判断是否是ptask并行触发,若是,则修改实际需要设置的互助码范围
let ptaskLeft = process.env.PTASK_LEFT
let ptaskRight = process.env.PTASK_RIGHT
if (ptaskLeft && ptaskRight) {
leftIndex = Number(ptaskLeft)
rightIndex = Number(ptaskRight)
}
for (let idx = leftIndex; idx <= rightIndex; idx++) {
shareCodes.push(helpOtherCodes[`ForOther${nameConfig}${idx}`])
}
let shareCodesStr = shareCodes.join('&')
process.env[envName] = shareCodesStr
let totalCodeCount = rightIndex - leftIndex + 1
//console.info(`${nameChinese}的 互助码环境变量 ${envName},共计 ${totalCodeCount} 组互助码,总大小为 ${shareCodesStr.length} 字节`)
}
// 判断当前活动脚本是否在互助脚本列表中
function IsShareJsFile() {
// 尝试获取在task_before.sh中设置的 互助活动的脚本文件名的关键部分 列表
let rawJsNameList = process.env.ShareCodeJSNameList
if (!rawJsNameList) {
return false
// 尝试获取在task_before.sh中设置的 互助活动的脚本文件名的关键部分 列表
let rawJsNameList = process.env.ShareCodeJSNameList
if (!rawJsNameList) {
return false
}
// 转换为list
let jsNameList = process.env.ShareCodeJSNameList.split(" ")
// 判断当前
let currentActivityScriptFileName = GetCurrentActivityScriptFileName()
let isShareJsFile = false
for (let idx = 0; idx < jsNameList.length; idx++) {
if (currentActivityScriptFileName.includes(jsNameList[idx])) {
isShareJsFile = true
break
}
}
// 转换为list
let jsNameList = process.env.ShareCodeJSNameList.split(" ")
// 判断当前
let currentActivityScriptFileName = GetCurrentActivityScriptFileName()
let isShareJsFile = false
for (let idx = 0; idx < jsNameList.length; idx++) {
if (currentActivityScriptFileName.includes(jsNameList[idx])) {
isShareJsFile = true
break
}
}
return isShareJsFile
return isShareJsFile
}
// 获取当前活动脚本的文件名
function GetCurrentActivityScriptFileName() {
const path = require('path')
return path.basename(process.argv[1])
const path = require('path')
return path.basename(process.argv[1])
}
// 若在task_before.sh 中设置了要设置互助码环境变量的活动名称和环境变量名称信息,则在nodejs中处理,供活动使用
@@ -242,14 +179,14 @@ let nameChinese = process.env.ShareCodeConfigChineseName
let nameConfig = process.env.ShareCodeConfigName
let envName = process.env.ShareCodeEnvName
if (nameChinese && nameConfig && envName) {
SetShareCodesEnv(nameChinese, nameConfig, envName)
SetShareCodesEnv(nameChinese, nameConfig, envName)
}
function formatdate(date) {
const year = date.getFullYear();
const month = ('0' + (date.getMonth() + 1)).slice(-2);
const day = ('0' + date.getDate()).slice(-2);
const hours = ('0' + date.getHours()).slice(-2);
const minutes = ('0' + date.getMinutes()).slice(-2);
const seconds = ('0' + date.getSeconds()).slice(-2);
return `${year}/${month}/${day} ${hours}:${minutes}:${seconds}`;
const year = date.getFullYear();
const month = ('0' + (date.getMonth() + 1)).slice(-2);
const day = ('0' + date.getDate()).slice(-2);
const hours = ('0' + date.getHours()).slice(-2);
const minutes = ('0' + date.getMinutes()).slice(-2);
const seconds = ('0' + date.getSeconds()).slice(-2);
return `${year}/${month}/${day} ${hours}:${minutes}:${seconds}`;
}
+10
View File
File diff suppressed because one or more lines are too long
+15
View File
File diff suppressed because one or more lines are too long
+1 -2
View File
File diff suppressed because one or more lines are too long
+2 -2
View File
File diff suppressed because one or more lines are too long
+2679 -3
View File
File diff suppressed because one or more lines are too long
+766 -4
View File
File diff suppressed because one or more lines are too long
+1 -4
View File
@@ -114,10 +114,7 @@ async function bean() {
}
}
} else {
// 完全无数据时才抛出异常,否则返回之前统计出来的数据
if (!todayArr.length && !yesterdayArr.length) {
$.errorMsg = `数据异常`;
}
$.errorMsg = `数据异常`;
// $.msg($.name, ``, `账号${$.index}${$.nickName}\n${$.errorMsg}`);
t = 1;
}
-7
View File
File diff suppressed because one or more lines are too long
+18
View File
File diff suppressed because one or more lines are too long
+7
View File
File diff suppressed because one or more lines are too long
+1 -2
View File
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
+8
View File
File diff suppressed because one or more lines are too long
-6
View File
File diff suppressed because one or more lines are too long
-7
View File
File diff suppressed because one or more lines are too long
+207
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
-7
View File
File diff suppressed because one or more lines are too long
+12
View File
File diff suppressed because one or more lines are too long
+12
View File
File diff suppressed because one or more lines are too long
+12
View File
File diff suppressed because one or more lines are too long
+12
View File
File diff suppressed because one or more lines are too long
+12
View File
File diff suppressed because one or more lines are too long
+12
View File
File diff suppressed because one or more lines are too long
+12
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
+2 -2
View File
File diff suppressed because one or more lines are too long
+18 -1
View File
File diff suppressed because one or more lines are too long
+6 -4
View File
File diff suppressed because one or more lines are too long
+7
View File
File diff suppressed because one or more lines are too long
+7
View File
File diff suppressed because one or more lines are too long
+7
View File
File diff suppressed because one or more lines are too long
+20
View File
File diff suppressed because one or more lines are too long
+11
View File
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+5 -3
View File
File diff suppressed because one or more lines are too long
+10 -3
View File
File diff suppressed because one or more lines are too long
+12
View File
File diff suppressed because one or more lines are too long
-7
View File
File diff suppressed because one or more lines are too long
+18
View File
File diff suppressed because one or more lines are too long
+2 -3
View File
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+7
View File
File diff suppressed because one or more lines are too long
+8
View File
File diff suppressed because one or more lines are too long
+10
View File
File diff suppressed because one or more lines are too long
+13
View File
File diff suppressed because one or more lines are too long
+10
View File
File diff suppressed because one or more lines are too long
+427
View File
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
-7
View File
File diff suppressed because one or more lines are too long
-8
View File
File diff suppressed because one or more lines are too long
-7
View File
File diff suppressed because one or more lines are too long
+38
View File
@@ -0,0 +1,38 @@
#!/usr/bin/env bash
#依赖安装,运行一次就好
#0 8 5 5 * jd_indeps.sh
#new Env('依赖安装');
#
npm_ver=`pnpm -v|awk -F. '{print $1}'`
if [[ $npm_ver -ge 7 ]];then
export PNPM_HOME="/root/.local/share/pnpm"
export PATH="$PNPM_HOME:$PATH"
fi
echo -e "安装脚本所需依赖,不一定一次全部安装成功,请自己检查\n"
echo -e "开始安装............\n"
#apk add g++ make pixman-dev pango-dev cairo-dev pkgconf --no-cache
#apk add g++ make --no-cache
pnpm config set registry https://registry.npmmirror.com
pnpm install -g
pnpm install -g ds
pnpm install -g png-js
pnpm install -g date-fns
pnpm install -g axios
pnpm install -g crypto-js
pnpm install -g ts-md5
pnpm install -g tslib
pnpm install -g @types/node
pnpm install -g request
pnpm install -g jsdom
pnpm install -g moment
pnpm install -g cheerio
pnpm install -g tough-cookie
pnpm install -g https-proxy-agent
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple/ jieba
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple/ requests
rm -rf /usr/local/pnpm-global/5/node_modules/.pnpm/canvas*
rm -rf /root/.local/share/pnpm/global/5/.pnpm/canvas*
echo -e "\n所需依赖安装完成,请检查有没有报错,可尝试再次运行"
+328
View File
File diff suppressed because one or more lines are too long
+14
View File
File diff suppressed because one or more lines are too long
-7
View File
File diff suppressed because one or more lines are too long
+9
View File
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+2 -1
View File
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+8
View File
File diff suppressed because one or more lines are too long
-7
View File
File diff suppressed because one or more lines are too long
+213
View File
File diff suppressed because one or more lines are too long
+179
View File
@@ -0,0 +1,179 @@
/*
京东快递
@Leaf
*/
const $ = new Env('京东快递');
const got = require('got');
const envSplitor = ['&','\n','@']
const ckNames = ['JD_COOKIE']
const MAX_THREAD = parseInt(process.env['jd_jdkd_thread']) || 5
const DEFAULT_TIMEOUT=8000, DEFAULT_RETRY=3;
const default_UA = 'Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.31(0x18001f2f) NetType/WIFI Language/zh_CN miniProgram/wx73247c7819d61796'
const Referer = 'https://jingcai-h5.jd.com/'
const Origin = 'https://jingcai-h5.jd.com'
const client = got.extend({
headers:{
Connection:'keep-alive',
'User-Agent': default_UA,
Referer,
Origin,
AppParams: JSON.stringify({"appid":158,"ticket_type":"m"}),
ClientInfo: JSON.stringify({"appName":"jingcai","client":"m"}),
'LOP-DN': 'jingcai.jd.com',
'X-Requested-With': 'XMLHttpRequest',
},
retry: {limit:0},
timeout: DEFAULT_TIMEOUT,
followRedirect: false,
})
class BasicClass{constructor(){this.index=$.userIdx++;this.name='';} log(msg,opt={}){var m='',n=$.userCount.toString().length;;if(this.index)m+=`账号[${$.padStr(this.index,n)}]`;if(this.name)m+=`[${this.name}]`;$.log(m+msg,opt);} async request(opt){var resp=null,count=0;var fn=opt.fn||opt.url;opt.method=opt?.method?.toUpperCase()||'GET';while(count++<DEFAULT_RETRY){try{await client(opt).then(t=>{resp=t},e=>{resp=e.response});if(((resp?.statusCode/100)|0)<=4)break;}catch(e){if(e.name=='TimeoutError'){this.log(`[${fn}]请求超时,重试第${count}`);}else{this.log(`[${fn}]请求错误(${e.message}),重试第${count}`);}};} if(resp==null)return Promise.resolve({statusCode:-1,headers:null,result:null});let{statusCode,headers,body}=resp;if(body)try{body=JSON.parse(body);}catch{};return Promise.resolve({statusCode,headers,result:body})}}
let http = new BasicClass();
class UserClass extends BasicClass {
constructor(ck) {
super()
this.cookie = ck
this.pt_pin = ck.match(/pin=([\w\-\%]+)/) ? ck.match(/pin=([\w\-\%]+)/)[1] : ''
this.name = decodeURIComponent(this.pt_pin)
}
async queryTaskList() {
try {
let options = {
fn: 'queryTaskList',
method: 'post',
url: 'https://lop-proxy.jd.com/ESGApi/queryTaskList',
headers: {Cookie:this.cookie,'event-id':$.randomPattern('xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx')},
json: [{"pin":"$cooMrdGatewayUid$"}],
}
let {result} = await this.request(options)
let code = result?.code
if(code == 1) {
//console.log(JSON.stringify(result?.content?.taskInfoList))
for(let task of (result?.content?.taskInfoList||[]).filter(x => x.taskReachNum < x.taskNeedReachNum && x.triggerType==1 && !x.taskTitle.includes('加购'))) {
await this.reachTaskInfo(task);
await $.wait(1000);
break;
}
} else {
let errCode = code || result?.error_response?.code
let errMsg = result?.msg || result?.error_response?.zh_desc
this.log(`查询任务列表出错[${errCode}]: ${errMsg}`)
}
} catch (e) {
$.log(e)
} finally {
return Promise.resolve()
}
}
async reachTaskInfo(task) {
try {
let options = {
fn: 'reachTaskInfo',
method: 'post',
url: 'https://lop-proxy.jd.com/ESGApi/reachTaskInfo',
headers: {Cookie:this.cookie,'event-id':$.randomPattern('xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx')},
json: [{
taskNo: task.taskNo,
childTaskId: task.childTaskId,
pin: "$cooMrdGatewayUid$",
}],
}
let {result} = await this.request(options)
let code = result?.code
if(code == 1) {
this.log(`完成任务[${task.taskTitle}]成功`);
await $.wait(1000);
await this.queryTaskList();
} else {
let errCode = code || result?.error_response?.code
let errMsg = result?.msg || result?.error_response?.zh_desc
this.log(`完成任务[${task.taskTitle}]失败[${errCode}]: ${errMsg}`)
}
} catch (e) {
$.log(e)
} finally {
return Promise.resolve()
}
}
async queryCanGetRewardTaskList() {
try {
let options = {
fn: 'queryCanGetRewardTaskList',
method: 'post',
url: 'https://lop-proxy.jd.com/ESGApi/queryCanGetRewardTaskList',
headers: {Cookie:this.cookie,'event-id':$.randomPattern('xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx')},
json: [{"pin":"$cooMrdGatewayUid$"}],
}
let {result} = await this.request(options)
let code = result?.code
if(code == 1) {
for(let item of (result?.content?.personalCarbonRewardRespDtoList||[])) {
await this.operationPersonalCarbonIntegral(item)
}
} else {
let errCode = code || result?.error_response?.code
let errMsg = result?.msg || result?.error_response?.zh_desc
this.log(`查询可领取奖励出错[${errCode}]: ${errMsg}`)
}
} catch (e) {
$.log(e)
} finally {
return Promise.resolve()
}
}
async operationPersonalCarbonIntegral(item) {
try {
let options = {
fn: 'operationPersonalCarbonIntegral',
method: 'post',
url: 'https://lop-proxy.jd.com/ESGApi/operationPersonalCarbonIntegral',
headers: {Cookie:this.cookie,'event-id':$.randomPattern('xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx')},
json: [{
type: 2,
operationType: 1,
rewardNo: item.rewardNo,
taskNo: item.taskNo,
pin: "$cooMrdGatewayUid$",
}],
}
let {result} = await this.request(options)
let code = result?.code
if(code == 1) {
this.log(`收取[${item.taskTitle}]奖励成功, 现在有${result?.content?.carbonIntegral}g能量`)
} else {
let errCode = code || result?.error_response?.code
let errMsg = result?.msg || result?.error_response?.zh_desc
this.log(`收取[${item.taskTitle}]奖励失败[${errCode}]: ${errMsg}`)
}
} catch (e) {
$.log(e)
} finally {
return Promise.resolve()
}
}
async userTask() {
await this.queryTaskList();
await this.queryCanGetRewardTaskList();
}
}
!(async () => {
$.read_env(UserClass);
await $.threadTask('userTask',MAX_THREAD)
})()
.catch((e) => $.log(e))
.finally(() => $.exitNow())
function Env(name){return new class{constructor(name){this.name=name;this.startTime=Date.now();this.log(`[${this.name}]开始运行\n`,{time:true});this.notifyStr=[];this.notifyFlag=true;this.userIdx=0;this.userList=[];this.userCount=0;} log(msg,options={}){let opt={console:true};Object.assign(opt,options);if(opt.time){let fmt=opt.fmt||'hh:mm:ss';msg=`[${this.time(fmt)}]`+msg;} if(opt.notify)this.notifyStr.push(msg);if(opt.console)console.log(msg);} read_env(Class){let envStrList=ckNames.map(x=>process.env[x]);for(let env_str of envStrList.filter(x=>!!x)){let sp=envSplitor.filter(x=>env_str.includes(x));let splitor=sp.length>0?sp[0]:envSplitor[0];for(let ck of env_str.split(splitor).filter(x=>!!x)){this.userList.push(new Class(ck));}} this.userCount=this.userList.length;if(!this.userCount){this.log(`未找到变量,请检查变量${ckNames.map(x => '['+x+']').join('或')}`,{notify:true});return false;} this.log(`共找到${this.userCount}个账号`);return true;} async threads(taskName,conf,opt={}){while(conf.idx<$.userList.length){let user=$.userList[conf.idx++];await user[taskName](opt);}} async threadTask(taskName,thread){let taskAll=[];let taskConf={idx:0};while(thread--)taskAll.push(this.threads(taskName,taskConf));await Promise.all(taskAll);} time(t,x=null){let xt=x?new Date(x):new Date;let e={"M+":xt.getMonth()+1,"d+":xt.getDate(),"h+":xt.getHours(),"m+":xt.getMinutes(),"s+":xt.getSeconds(),"q+":Math.floor((xt.getMonth()+3)/3),S:this.padStr(xt.getMilliseconds(),3)};/(y+)/.test(t)&&(t=t.replace(RegExp.$1,(xt.getFullYear()+"").substr(4-RegExp.$1.length)));for(let s in e)new RegExp("("+s+")").test(t)&&(t=t.replace(RegExp.$1,1==RegExp.$1.length?e[s]:("00"+e[s]).substr((""+e[s]).length)));return t;} async showmsg(){if(!this.notifyFlag)return;if(!this.notifyStr.length)return;var notify=require('./sendNotify');this.log('\n============== 推送 ==============');await notify.sendNotify(this.name,this.notifyStr.join('\n'));} padStr(num,length,opt={}){let padding=opt.padding||'0';let mode=opt.mode||'l';let numStr=String(num);let numPad=(length>numStr.length)?(length-numStr.length):0;let pads='';for(let i=0;i<numPad;i++){pads+=padding;} if(mode=='r'){numStr=numStr+pads;}else{numStr=pads+numStr;} return numStr;} json2str(obj,c,encode=false){let ret=[];for(let keys of Object.keys(obj).sort()){let v=obj[keys];if(v&&encode)v=encodeURIComponent(v);ret.push(keys+'='+v);} return ret.join(c);} str2json(str,decode=false){let ret={};for(let item of str.split('&')){if(!item)continue;let idx=item.indexOf('=');if(idx==-1)continue;let k=item.substr(0,idx);let v=item.substr(idx+1);if(decode)v=decodeURIComponent(v);ret[k]=v;} return ret;} randomPattern(pattern,charset='abcdef0123456789'){let str='';for(let chars of pattern){if(chars=='x'){str+=charset.charAt(Math.floor(Math.random()*charset.length));}else if(chars=='X'){str+=charset.charAt(Math.floor(Math.random()*charset.length)).toUpperCase();}else{str+=chars;}} return str;} randomString(len,charset='abcdef0123456789'){let str='';for(let i=0;i<len;i++){str+=charset.charAt(Math.floor(Math.random()*charset.length));} return str;} randomList(a){let idx=Math.floor(Math.random()*a.length);return a[idx];} wait(t){return new Promise(e=>setTimeout(e,t));} async exitNow(){await this.showmsg();let e=Date.now();let s=(e-this.startTime)/1000;this.log('');this.log(`[${this.name}]运行结束,共运行了${s}`,{time:true});process.exit(0);}} (name)}
+26
View File
File diff suppressed because one or more lines are too long
-7
View File
File diff suppressed because one or more lines are too long
-7
View File
File diff suppressed because one or more lines are too long
-6
View File
File diff suppressed because one or more lines are too long

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