mirror of
https://github.com/KimigaiiWuyi/GenshinUID.git
synced 2025-07-04 14:03:31 +00:00
Compare commits
763 Commits
ntchat
...
nonebot2-b
Author | SHA1 | Date | |
---|---|---|---|
acd5408552 | |||
31b6bc7de4 | |||
4db59f2b1d | |||
99496abd40 | |||
d372757f72 | |||
689efe6595 | |||
7ec5618d56 | |||
b4817ef539 | |||
739a14237c | |||
c7f7130db3 | |||
15671c5204 | |||
a9644b6af2 | |||
ca793d9b50 | |||
b2564f3303 | |||
bf530c7c49 | |||
d3214bd468 | |||
04e05d708a | |||
986dc750de | |||
e0f6e68fb8 | |||
94aaa52fd6 | |||
f684f0e833 | |||
772d54ef99 | |||
b6c855c1ae | |||
558f280996 | |||
d75a023d10 | |||
cd2eb1d217 | |||
1a69c787b2 | |||
e77b8b74b4 | |||
5da43afd78 | |||
fa3319a48d | |||
4f349cd253 | |||
955ff47542 | |||
ae38504e7e | |||
03e31d6416 | |||
4f0a3202ea | |||
32e15df3cd | |||
3a202afd19 | |||
28227236da | |||
ed68e42385 | |||
b850f099d1 | |||
768619e0c1 | |||
137c83471e | |||
20319c02ac | |||
79d90deae0 | |||
9fee49e090 | |||
cc145d9a5c | |||
1fbecaee53 | |||
f7ff22ad4c | |||
416cc371fc | |||
e73cd9e6eb | |||
ec622d1388 | |||
bdfc63a6c7 | |||
0c7d737ab7 | |||
e0ae84ac89 | |||
b9519acf89 | |||
6f22752b07 | |||
e13b3e5a52 | |||
8b3771a3a0 | |||
4ec467e154 | |||
5b6384764a | |||
7838611f14 | |||
24257cdf90 | |||
7692e9799a | |||
bdff2b31c1 | |||
052d3c1c73 | |||
e5824e407e | |||
5540fab06a | |||
6240d020eb | |||
59c93fd6ef | |||
668ad813c8 | |||
5eb4675628 | |||
261437f466 | |||
b24708f913 | |||
3ff5b4f2fa | |||
698d310684 | |||
18ed57b93a | |||
ea486f7ff5 | |||
cd4ecb462c | |||
3c3785cd48 | |||
37a6d2f7a8 | |||
29c46a93d6 | |||
5ba1ba09e6 | |||
21c7049fdd | |||
76469c56a7 | |||
b30bd4fa9c | |||
eb6e822b6f | |||
80f8a12789 | |||
278cbcaa63 | |||
ac98c9f896 | |||
c02d1f2f07 | |||
0f1a0b02c2 | |||
f4d1d47554 | |||
fb4c6b569c | |||
5e52c9abd4 | |||
c413e7d65c | |||
9e6cd2a2a8 | |||
38910e9a2b | |||
933e97ff97 | |||
09aa9af93a | |||
f1ff90c423 | |||
897399b77e | |||
0099d16072 | |||
519aef0ca1 | |||
a6f66c5231 | |||
63488e7bbf | |||
c7ceb7a14c | |||
49612280fa | |||
e18e69aeed | |||
1b402defbc | |||
245446e329 | |||
0832d9d79e | |||
376f537701 | |||
a5933222c5 | |||
455e9207ff | |||
fee7e8a936 | |||
ba2b4aa86f | |||
76f18d9c7c | |||
95dbe36cf9 | |||
d0d56f1a6d | |||
b3a64c8aec | |||
9d34e463ec | |||
0cb727784b | |||
1b743e9096 | |||
1ec87752a4 | |||
94050454e6 | |||
2886cbfebf | |||
fddc85c91e | |||
63f5d0686b | |||
21a6a3eafc | |||
a7eb2a33cb | |||
aaf7431c92 | |||
49a77f7fb9 | |||
ef923c5ba9 | |||
68c42305e5 | |||
7fb4a4d572 | |||
ecdb232beb | |||
8cd9570e2d | |||
e42ef039d1 | |||
28dce2f15c | |||
5ee22c89bf | |||
9ddba001be | |||
58cabae6ee | |||
b59b406027 | |||
e6d4d452a5 | |||
8d82fba7af | |||
0a81e2b9fa | |||
98e0174348 | |||
9596199a3a | |||
b9406eb634 | |||
30f164b2a1 | |||
66224ece5b | |||
db9860531b | |||
d8d2ede988 | |||
044701e730 | |||
2d1f766d7c | |||
b01117c224 | |||
8ca7237075 | |||
41f047a96f | |||
ad3859ed71 | |||
e62f9ba574 | |||
93bcf9fbbc | |||
3ac2267cee | |||
c46f14e59f | |||
99be740d11 | |||
21ddfa3cd6 | |||
00bdc5fccb | |||
918632ad71 | |||
b4f8371e5d | |||
59cc1e35c4 | |||
798069565a | |||
0b3dddb870 | |||
58a0df17b8 | |||
bdd4f26fe3 | |||
c3ae3ed0db | |||
ecd7a57ef3 | |||
c231cb4267 | |||
26eb980e5b | |||
ffb2558fec | |||
a9f26bb102 | |||
2c1ad1466b | |||
25ffbfc4bc | |||
34eb5093d9 | |||
9ac01864c5 | |||
db3ba78639 | |||
7617c29b6d | |||
62d8ee5cd3 | |||
bec03e8acc | |||
396015763b | |||
4a1c402c38 | |||
5fc6df94f6 | |||
c39ddf30c2 | |||
124de5aff3 | |||
3e61f3411a | |||
1488e3eebb | |||
f32e40d362 | |||
60af532185 | |||
ff317b8f7c | |||
a703593836 | |||
5f801276f5 | |||
a2a6228b66 | |||
712380c24b | |||
27db2e14c4 | |||
3005b435d2 | |||
46a6e846e6 | |||
954e1dd965 | |||
f40730e510 | |||
a60baf7975 | |||
7b9aec2761 | |||
a40a0ea74d | |||
711fe2ad1c | |||
391bf0aa0b | |||
56a609226b | |||
bc17763617 | |||
a5a418f51c | |||
aeec83f982 | |||
85171c0172 | |||
1c363b7ff3 | |||
19dd446219 | |||
6c778f1fcb | |||
7dad667064 | |||
c0532c06dd | |||
245121b318 | |||
501e8398b0 | |||
bac4d7061c | |||
2cddf1c481 | |||
973c64a2dc | |||
d4fd84da9b | |||
fd1f366db3 | |||
86cc55cf78 | |||
70bc3b5143 | |||
6838ce7d5a | |||
75269479be | |||
5d426aa4b4 | |||
34af5a7c27 | |||
dbd60d4ac4 | |||
ad4af70e21 | |||
06fa1a71fa | |||
8cffc3f070 | |||
670cf730e7 | |||
76a350a834 | |||
830a246d96 | |||
5f7dfb93fc | |||
113613bc94 | |||
bb6a2666ff | |||
0e90dd9613 | |||
2a5144b1d6 | |||
1591cc6052 | |||
d8ec80bcd2 | |||
a50f26ecdc | |||
e59d42e168 | |||
0941cd1196 | |||
3e22dae35f | |||
ca40fad6d3 | |||
11bee5a2fc | |||
9cd5fbd0dc | |||
5443ef8ae2 | |||
6e90802e30 | |||
79f9aa9237 | |||
81da9e5735 | |||
fe439f7fb8 | |||
2608259a14 | |||
ca49ee0682 | |||
c0ab255b32 | |||
99146c70ac | |||
8b7a1f5da7 | |||
d1312c5ecc | |||
f2e3687f17 | |||
fbc76e5f8c | |||
4511f6c6c2 | |||
7d98e374ee | |||
c917459e79 | |||
63710928f4 | |||
5d21214a65 | |||
ab83a6689f | |||
c8238e83cf | |||
79bb8c2595 | |||
2ba6701304 | |||
29a5a1a8b5 | |||
0faeef3544 | |||
efb31d55af | |||
997e024681 | |||
1445e0decb | |||
2a55819cd5 | |||
cbf8d26005 | |||
4dc93cb7c2 | |||
43e1202499 | |||
47fbf74e29 | |||
27b343a95e | |||
e8642ac7d8 | |||
ffd27fe2db | |||
b8395ab3fe | |||
e95f1ce4e3 | |||
cf67c7f1ea | |||
5bd4890add | |||
38471d4f11 | |||
d3e1b24fdb | |||
3cefc786ff | |||
d2f9c95e95 | |||
bdfd5714d2 | |||
244e4ae414 | |||
0f225418be | |||
82f7b05a69 | |||
78daf6a934 | |||
843166211b | |||
9fffc3be60 | |||
0643b7d888 | |||
0dff2bf76a | |||
ee88d072a1 | |||
89181be54a | |||
bc522c2259 | |||
6f8c5b60e0 | |||
b5992535c8 | |||
1354400e27 | |||
a96cb5b92f | |||
2682b0c807 | |||
7788067def | |||
7ba36afa97 | |||
3c6f46bf7b | |||
3c8a706d2d | |||
fe1dad35ab | |||
7c6d123bff | |||
45e3781020 | |||
40af1c28db | |||
f325cc136b | |||
31d3f6f783 | |||
e8ca7f7853 | |||
ff4ee1929d | |||
1b8e05d02b | |||
5dbea107ab | |||
09b47a5f2d | |||
03cc73696a | |||
6cbb92423b | |||
79dff3fe7c | |||
0c4719dc07 | |||
f9e1c3f7dd | |||
b67eed8089 | |||
f604d7a007 | |||
d222368ba8 | |||
2e361247c8 | |||
46f389e5eb | |||
cbb7947dd0 | |||
c52c2192e7 | |||
5402f034fe | |||
7d50cc134b | |||
71bcb82082 | |||
7061832664 | |||
bb119bfd6f | |||
ee987c11ed | |||
d80706beaf | |||
09f1f39d62 | |||
d95c1a0c2d | |||
10a0199fdb | |||
edc86d456d | |||
445d190d34 | |||
b84c00c6a1 | |||
de78a3b13c | |||
68baa744b2 | |||
0aaf186615 | |||
22febab01c | |||
47929f764c | |||
72ebb26b12 | |||
8333d61eae | |||
9efaf75c0a | |||
9bd0085982 | |||
21150c7514 | |||
2a337ce8e9 | |||
51866deb99 | |||
331198fa5a | |||
017fbf6683 | |||
6c68ba3657 | |||
a05fdfb9b8 | |||
4a211dd32f | |||
96628af1c8 | |||
d53f920bb3 | |||
4c84a729d0 | |||
3548477289 | |||
b836263039 | |||
7ddf72ea17 | |||
e960a19060 | |||
44934543ea | |||
f9fc8539eb | |||
4002f8597a | |||
fa490d744a | |||
a6dfb9489c | |||
5f074c645c | |||
3b1e03a8ac | |||
10fb6c23f8 | |||
6071903db4 | |||
97eafe0c4f | |||
4f7ee1b8fc | |||
790c6c363a | |||
a680fd40c0 | |||
e7d6b90950 | |||
8dc4bf8b38 | |||
372a03baaa | |||
9a22c2f0a0 | |||
e7f934342e | |||
b385d78655 | |||
d853a3bffe | |||
2331e54519 | |||
84111f11b9 | |||
2120c5387c | |||
0c1d0c8dd3 | |||
ca81bbf131 | |||
418399abf2 | |||
1fca111eef | |||
02627e9743 | |||
e0f19e144f | |||
2f88ca9f96 | |||
55296b8ca7 | |||
a1ad2a2ab5 | |||
d7cd6b0955 | |||
5e706cc04d | |||
18ae78863c | |||
ab8cfe3290 | |||
91c4224b01 | |||
f60716f3fe | |||
8e4c3aa3e7 | |||
0aa94deaae | |||
2eafb87fe5 | |||
3205499096 | |||
9e13b43d8d | |||
efbfea22e1 | |||
3f55b031b2 | |||
df7245d9c7 | |||
3191714394 | |||
1bf87585cf | |||
e6be183259 | |||
ba1da7f328 | |||
32fd9c66e1 | |||
e42fe4d745 | |||
88395108dc | |||
6b01b98f1f | |||
300f907985 | |||
9c196a7341 | |||
8dc2494bed | |||
0da4c273e7 | |||
c371f64449 | |||
0f4f02c687 | |||
9bf5c26b22 | |||
641d4a5ad9 | |||
816feb22e6 | |||
64c145c68d | |||
a8b2ad5fbc | |||
8a57b016cd | |||
e76eff24fe | |||
1105ff1ac7 | |||
cf6ea4bc6a | |||
a70061b158 | |||
5fa9ef4b84 | |||
bc02c23cee | |||
beb9a566a3 | |||
3480677c52 | |||
ea86619795 | |||
e2d75b3752 | |||
6269277b96 | |||
31941d31b2 | |||
55bfd25f64 | |||
6706fd1312 | |||
35d0596f17 | |||
5ab0693f7b | |||
4277a40450 | |||
cfa3f91379 | |||
4b1ad04662 | |||
c854194fcc | |||
451e871d1b | |||
4bc1533063 | |||
62649caa31 | |||
0c9b291ee9 | |||
29df398de6 | |||
0694443bca | |||
75b078810a | |||
7aa07579db | |||
a50a6167e2 | |||
382068070e | |||
782307e4bb | |||
94f3c3a7cb | |||
d441c25c51 | |||
675e8e4f65 | |||
3a02a8f496 | |||
387f618c59 | |||
0bacc8c674 | |||
ee74e054d8 | |||
83681c8e15 | |||
27572a3af4 | |||
2ad9b6242e | |||
01de70c1af | |||
00c5280ec6 | |||
cca8c34bba | |||
bf259f805d | |||
ebdbec5fcd | |||
d96c7b0e06 | |||
a6130424d5 | |||
b8ce462636 | |||
7c1508fd23 | |||
5581b85332 | |||
5dc5110ee3 | |||
fe31910a09 | |||
04a486a256 | |||
d1ca4da918 | |||
75d6083419 | |||
c2e87458a1 | |||
202e86ee77 | |||
27eef2e13e | |||
9c9bae7cc6 | |||
6c41b75e42 | |||
bfbf3140ac | |||
a2305773a9 | |||
ec250a3cbb | |||
f7d62129cb | |||
d24a3109f0 | |||
e2b52b0987 | |||
8fb71cb0be | |||
a974b7b1b7 | |||
a475fd8811 | |||
74e471380a | |||
6f9d251fd1 | |||
8e87716175 | |||
daffc0e39f | |||
ac2346def6 | |||
e7c9071a2a | |||
07ac6fc212 | |||
6bb12944b8 | |||
46d94cebe3 | |||
94838c0a0a | |||
4e2f6d8ee0 | |||
47bc645b68 | |||
60d1c59f2c | |||
96d4ba3211 | |||
26fbb1b38c | |||
d201c33278 | |||
97fee4c824 | |||
12bd7ba921 | |||
29a98bab97 | |||
e4c4e66e58 | |||
f74d04f53a | |||
ead44f46f6 | |||
894da9c2a6 | |||
ae25d5c6b1 | |||
4f605e8654 | |||
ca8ecb677b | |||
89db8d35ca | |||
65c3496e37 | |||
eccfe329a3 | |||
86e22f7374 | |||
62fccbedef | |||
4ef0be08e8 | |||
1fd5b6c564 | |||
1a88b93efd | |||
1b3706a46b | |||
ecad374c03 | |||
fa4ca0be51 | |||
240a01fb18 | |||
7103e7d8ca | |||
728ea9abc2 | |||
2f90e0ee3b | |||
42d28f2fed | |||
1893edf8a7 | |||
92b9e1737f | |||
d4c5d515c8 | |||
1198c71160 | |||
6d4704da56 | |||
4234cc2d2e | |||
c07e864aa0 | |||
de97644fd0 | |||
3b862cb54f | |||
192682ea2a | |||
3593c2d163 | |||
9ae88a11d5 | |||
7efc532f3e | |||
c2e62045fd | |||
5de79b499f | |||
dffdbcc4c6 | |||
90e5b9d3e7 | |||
6b6d9ee479 | |||
3ae3611d36 | |||
7c75145a50 | |||
ad88bc5011 | |||
18a16db8db | |||
bb385e3f9f | |||
d600d4ff9a | |||
71620ce015 | |||
19d9781107 | |||
f42788c008 | |||
6c95472351 | |||
1a92f35fcc | |||
f800581446 | |||
b63c5b9ba3 | |||
22204b115d | |||
35b884a2d3 | |||
7440ef2805 | |||
c54facc919 | |||
4390193184 | |||
23ec1dce8d | |||
d3853a6eb4 | |||
dfe71c99f0 | |||
6ef6005112 | |||
e39094f54a | |||
435e4a2d9a | |||
746cb89bf3 | |||
83a8c53449 | |||
0907e10271 | |||
e07183beae | |||
8daec54d15 | |||
0fc4d899b6 | |||
53b9026d0a | |||
0ec2685d37 | |||
656fbb4749 | |||
2a4da7699d | |||
b5ff2b3613 | |||
c121c95a4c | |||
cbcaa41640 | |||
2e37a0ff9a | |||
4389d23bcc | |||
a2b2f2f3d3 | |||
0ddad55580 | |||
1cc1d4e765 | |||
72bd7be66e | |||
b1ff73ef0d | |||
72d9fa0828 | |||
82e33b153b | |||
06c67c85f8 | |||
fdeafed874 | |||
e3fb49c791 | |||
71db7d8f0f | |||
223f519ee1 | |||
8d6b3c5c77 | |||
a60b64181c | |||
5260abac14 | |||
7838150f35 | |||
cd0c38700c | |||
70c23164c5 | |||
f3c5cb80a1 | |||
f28d7ae0a0 | |||
017c561008 | |||
35dcd29d74 | |||
3c4c7a83c8 | |||
5f20fbd347 | |||
d0f334c9aa | |||
0333757b92 | |||
89fe126579 | |||
b9991ac7d2 | |||
ef0913e6dd | |||
564f3b2783 | |||
d49c3297ed | |||
3df56c1249 | |||
e43392253c | |||
2d1339f8c1 | |||
9597a6d1ba | |||
8f3bc1f9ee | |||
b8279048c1 | |||
d2a8c048a1 | |||
b785adf105 | |||
414e384f1c | |||
0ca23df74f | |||
e6b629d9e1 | |||
c37e008261 | |||
f3eb0b0aa1 | |||
563933f78f | |||
89a8883f07 | |||
adc0a86ce0 | |||
0fb37e41ab | |||
ce110cba99 | |||
bf51b8a2a6 | |||
a3e9a00568 | |||
5adf659ac5 | |||
7500be4078 | |||
c933d5d9ef | |||
157ad92eda | |||
82d2fbcda1 | |||
2afaa437b7 | |||
b7c896e18a | |||
16dc1fe974 | |||
586481062c | |||
fd0e60796e | |||
e91564ac08 | |||
e9042d42fd | |||
b92ff01ddb | |||
5d736dbda1 | |||
a5006183ae | |||
3b919f54fb | |||
9c3e260d1a | |||
0054148196 | |||
0be58c1f43 | |||
02d4809d2c | |||
cea56eb3ea | |||
e53a1d2299 | |||
2f0f8ccbd6 | |||
c120bf65a3 | |||
dd0720a32c | |||
ed8d169134 | |||
e59d4ed1e5 | |||
7955f52ba9 | |||
fc9e35ed05 | |||
c7cc86ca2d | |||
199c2f3a78 | |||
5c9960b5af | |||
81d5e52528 | |||
8f70742528 | |||
d00b7bcbd9 | |||
c47d091c40 | |||
7ff2609f2d | |||
1e2f605776 | |||
05f53275f6 | |||
5728d4ecad | |||
91758947ac | |||
a6e06dce57 | |||
bc49efa759 | |||
ad88859ca6 | |||
3dce0539c6 | |||
fcc038abc1 | |||
247709b06a | |||
a4fbaccee8 | |||
0fce1cbe92 | |||
823e998114 | |||
66e76c71ba | |||
926b48a890 | |||
22b7a53e58 | |||
f09547ba04 | |||
6f54c0c99a | |||
5bc89880fe | |||
aab3d148c4 | |||
c23e577c45 | |||
69250a8700 | |||
5a9e63c54a | |||
336c3f2aaf | |||
9ba855fa17 | |||
bd47c1dce8 | |||
d04dd57aef | |||
18a054ae66 | |||
1b6dc2a194 | |||
421291929d | |||
ecf9419186 | |||
b5362fe575 | |||
ac223d02b3 | |||
babac2d270 | |||
7ea57c069e | |||
68a0fc6073 | |||
cedd47a453 | |||
b72594f20e | |||
61cf1ce79e | |||
997688fa67 | |||
6aa62f2451 | |||
96a2bf6a46 | |||
53a58d458c | |||
4452e35f6a | |||
608c505d7a | |||
da36b1ae0d | |||
d72bdf87ad | |||
dd19fc6bd2 | |||
a51d03c6ee | |||
d73a6d57e4 | |||
84b46699ba | |||
9bdb8dfc3f | |||
286a74d004 | |||
3cd332d8f5 | |||
2a3db3784f | |||
1cea32424d | |||
207c82dfab | |||
dff8992adc | |||
8a7fdb1709 | |||
94682d43fe | |||
2e34937700 |
42
.github/workflows/unittest.yml
vendored
Normal file
42
.github/workflows/unittest.yml
vendored
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
name: Unittest
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- nonebot2-beta1
|
||||||
|
pull_request:
|
||||||
|
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
test:
|
||||||
|
name: Test
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
version: ["3.8", "3.9", "3.10", "3.11"]
|
||||||
|
os: [ubuntu-latest, windows-latest]
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
env:
|
||||||
|
OS: ${{ matrix.os }}
|
||||||
|
PYTHON_VERSION: ${{ matrix.python-version }}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Install poetry
|
||||||
|
run: pipx install poetry
|
||||||
|
shell: bash
|
||||||
|
|
||||||
|
- uses: actions/setup-python@v4
|
||||||
|
with:
|
||||||
|
python-version: ${{ matrix.version }}
|
||||||
|
architecture: "x64"
|
||||||
|
cache: "poetry"
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: poetry install --with test --without dev
|
||||||
|
shell: bash
|
||||||
|
|
||||||
|
- name: Run Pytest
|
||||||
|
run: |
|
||||||
|
cd tests
|
||||||
|
poetry run pytest
|
@ -1,5 +1,7 @@
|
|||||||
ci:
|
ci:
|
||||||
autofix_commit_msg: ":rotating_light: auto fix by pre-commit-ci"
|
autofix_commit_msg: ":rotating_light: auto fix by pre-commit-ci"
|
||||||
|
skip:
|
||||||
|
- "poetry-lock"
|
||||||
autofix_prs: true
|
autofix_prs: true
|
||||||
autoupdate_branch: master
|
autoupdate_branch: master
|
||||||
autoupdate_schedule: monthly
|
autoupdate_schedule: monthly
|
||||||
|
@ -1,39 +1,25 @@
|
|||||||
|
from pathlib import Path
|
||||||
|
from pkgutil import iter_modules
|
||||||
|
|
||||||
from nonebot.log import logger
|
from nonebot.log import logger
|
||||||
from nonebot import require, load_all_plugins, get_plugin_by_module_name
|
from nonebot import require, load_all_plugins, get_plugin_by_module_name
|
||||||
|
|
||||||
|
from .config import config as _config
|
||||||
|
|
||||||
require('nonebot_plugin_apscheduler')
|
require('nonebot_plugin_apscheduler')
|
||||||
|
|
||||||
if get_plugin_by_module_name("GenshinUID"):
|
if get_plugin_by_module_name("GenshinUID"):
|
||||||
logger.info("推荐直接加载 GenshinUID 仓库文件夹")
|
logger.info("推荐直接加载 GenshinUID 仓库文件夹")
|
||||||
load_all_plugins(
|
load_all_plugins(
|
||||||
[
|
[
|
||||||
'GenshinUID.genshinuid_abyss',
|
f"GenshinUID.{module.name}"
|
||||||
'GenshinUID.genshinuid_adv',
|
for module in iter_modules([str(Path(__file__).parent)])
|
||||||
'GenshinUID.genshinuid_ann',
|
if module.ispkg
|
||||||
'GenshinUID.genshinuid_gcg',
|
and (
|
||||||
'GenshinUID.genshinuid_xkdata',
|
(name := module.name[11:]) == "meta"
|
||||||
'GenshinUID.genshinuid_check',
|
or name not in _config.disabled_plugins
|
||||||
'GenshinUID.genshinuid_collection',
|
)
|
||||||
'GenshinUID.genshinuid_config',
|
# module.name[:11] == genshinuid_
|
||||||
'GenshinUID.genshinuid_enka',
|
|
||||||
'GenshinUID.genshinuid_etcimg',
|
|
||||||
'GenshinUID.genshinuid_eventlist',
|
|
||||||
'GenshinUID.genshinuid_gachalog',
|
|
||||||
'GenshinUID.genshinuid_guide',
|
|
||||||
'GenshinUID.genshinuid_help',
|
|
||||||
'GenshinUID.genshinuid_map',
|
|
||||||
'GenshinUID.genshinuid_meta',
|
|
||||||
'GenshinUID.genshinuid_mhybbscoin',
|
|
||||||
'GenshinUID.genshinuid_mys',
|
|
||||||
'GenshinUID.genshinuid_note',
|
|
||||||
'GenshinUID.genshinuid_resin',
|
|
||||||
'GenshinUID.genshinuid_resource',
|
|
||||||
'GenshinUID.genshinuid_roleinfo',
|
|
||||||
'GenshinUID.genshinuid_signin',
|
|
||||||
'GenshinUID.genshinuid_user',
|
|
||||||
'GenshinUID.genshinuid_wikitext',
|
|
||||||
'GenshinUID.genshinuid_webconsole',
|
|
||||||
'GenshinUID.genshinuid_update',
|
|
||||||
],
|
],
|
||||||
[],
|
[],
|
||||||
)
|
)
|
||||||
|
@ -1,5 +1,15 @@
|
|||||||
from nonebot import get_driver
|
from typing import Set
|
||||||
|
|
||||||
config = get_driver().config
|
from nonebot import get_driver
|
||||||
SUPERUSERS = {x for x in config.superusers}
|
from pydantic import Field, BaseModel
|
||||||
priority = 2
|
|
||||||
|
|
||||||
|
class Config(BaseModel):
|
||||||
|
disabled_plugins: Set[str] = Field(
|
||||||
|
default_factory=set, alias="genshinuid_disabled_plugins"
|
||||||
|
)
|
||||||
|
priority: int = Field(2, alias="genshinuid_priority")
|
||||||
|
|
||||||
|
|
||||||
|
config = Config.parse_obj(get_driver().config)
|
||||||
|
priority = config.priority
|
||||||
|
@ -1,18 +1,22 @@
|
|||||||
from typing import Any, Tuple
|
from typing import Any, Tuple, Union
|
||||||
|
|
||||||
from nonebot import on_regex
|
from nonebot import on_regex
|
||||||
from nonebot.log import logger
|
from nonebot.log import logger
|
||||||
from nonebot.matcher import Matcher
|
from nonebot.matcher import Matcher
|
||||||
from nonebot.params import RegexGroup
|
from nonebot.params import Depends, RegexGroup
|
||||||
from nonebot.adapters.ntchat import MessageSegment, TextMessageEvent
|
from nonebot.adapters.onebot.v11 import (
|
||||||
|
MessageSegment,
|
||||||
|
GroupMessageEvent,
|
||||||
|
PrivateMessageEvent,
|
||||||
|
)
|
||||||
|
|
||||||
from ..genshinuid_meta import register_menu
|
from ..genshinuid_meta import register_menu
|
||||||
from .draw_abyss_card import draw_abyss_img
|
from .draw_abyss_card import draw_abyss_img
|
||||||
from ..utils.message.error_reply import UID_HINT
|
from ..utils.message.error_reply import UID_HINT
|
||||||
from ..utils.db_operation.db_operation import select_db
|
from ..utils.db_operation.db_operation import select_db
|
||||||
|
from ..utils.message.get_image_and_at import ImageAndAt
|
||||||
from ..utils.mhy_api.convert_mysid_to_uid import convert_mysid
|
from ..utils.mhy_api.convert_mysid_to_uid import convert_mysid
|
||||||
from ..utils.exception.handle_exception import handle_exception
|
from ..utils.exception.handle_exception import handle_exception
|
||||||
from ..utils.draw_image_tools.send_image_tool import convert_img
|
|
||||||
|
|
||||||
get_abyss_info = on_regex(
|
get_abyss_info = on_regex(
|
||||||
r'^(\[CQ:at,qq=[0-9]+\])?( )?'
|
r'^(\[CQ:at,qq=[0-9]+\])?( )?'
|
||||||
@ -21,7 +25,6 @@ get_abyss_info = on_regex(
|
|||||||
r'(\[CQ:at,qq=[0-9]+\])?( )?$',
|
r'(\[CQ:at,qq=[0-9]+\])?( )?$',
|
||||||
block=True,
|
block=True,
|
||||||
)
|
)
|
||||||
# 恢复了查询二字,和其他的查询打架下次解决
|
|
||||||
|
|
||||||
|
|
||||||
@get_abyss_info.handle()
|
@get_abyss_info.handle()
|
||||||
@ -53,19 +56,15 @@ get_abyss_info = on_regex(
|
|||||||
),
|
),
|
||||||
)
|
)
|
||||||
async def send_abyss_info(
|
async def send_abyss_info(
|
||||||
event: TextMessageEvent,
|
event: Union[GroupMessageEvent, PrivateMessageEvent],
|
||||||
matcher: Matcher,
|
matcher: Matcher,
|
||||||
args: Tuple[Any, ...] = RegexGroup(),
|
args: Tuple[Any, ...] = RegexGroup(),
|
||||||
|
custom: ImageAndAt = Depends(),
|
||||||
):
|
):
|
||||||
logger.info('开始执行[查询深渊信息]')
|
logger.info('开始执行[查询深渊信息]')
|
||||||
logger.info(f'[查询深渊信息]参数: {args}')
|
logger.info(f'[查询深渊信息]参数: {args}')
|
||||||
qid = event.from_wxid
|
at = custom.get_first_at()
|
||||||
if event.at_user_list:
|
qid = at or event.user_id
|
||||||
for user in event.at_user_list:
|
|
||||||
user = user.strip()
|
|
||||||
if user != "":
|
|
||||||
qid = user
|
|
||||||
|
|
||||||
if args[2] == 'mys':
|
if args[2] == 'mys':
|
||||||
uid = await convert_mysid(args[3])
|
uid = await convert_mysid(args[3])
|
||||||
elif args[3] is None:
|
elif args[3] is None:
|
||||||
@ -98,7 +97,6 @@ async def send_abyss_info(
|
|||||||
if isinstance(im, str):
|
if isinstance(im, str):
|
||||||
await matcher.finish(im)
|
await matcher.finish(im)
|
||||||
elif isinstance(im, bytes):
|
elif isinstance(im, bytes):
|
||||||
im = await convert_img(im)
|
|
||||||
await matcher.finish(MessageSegment.image(im))
|
await matcher.finish(MessageSegment.image(im))
|
||||||
else:
|
else:
|
||||||
await matcher.finish('发生了未知错误,请联系管理员检查后台输出!')
|
await matcher.finish('发生了未知错误,请联系管理员检查后台输出!')
|
||||||
|
@ -2,7 +2,7 @@ from nonebot import on_command
|
|||||||
from nonebot.log import logger
|
from nonebot.log import logger
|
||||||
from nonebot.matcher import Matcher
|
from nonebot.matcher import Matcher
|
||||||
from nonebot.params import CommandArg
|
from nonebot.params import CommandArg
|
||||||
from nonebot.adapters.ntchat import Message
|
from nonebot.adapters.onebot.v11 import Message
|
||||||
|
|
||||||
from ..config import priority
|
from ..config import priority
|
||||||
from .get_achi_desc import get_achi, get_daily_achi
|
from .get_achi_desc import get_achi, get_daily_achi
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
import base64
|
|
||||||
import random
|
import random
|
||||||
import asyncio
|
import asyncio
|
||||||
|
|
||||||
@ -8,11 +7,11 @@ from nonebot.params import CommandArg
|
|||||||
from nonebot import get_bot, on_command
|
from nonebot import get_bot, on_command
|
||||||
from nonebot.permission import SUPERUSER
|
from nonebot.permission import SUPERUSER
|
||||||
from nonebot_plugin_apscheduler import scheduler
|
from nonebot_plugin_apscheduler import scheduler
|
||||||
from nonebot.adapters.ntchat.message import Message
|
from nonebot.adapters.onebot.v11 import (
|
||||||
from nonebot.adapters.ntchat import (
|
Message,
|
||||||
MessageEvent,
|
MessageEvent,
|
||||||
MessageSegment,
|
MessageSegment,
|
||||||
TextMessageEvent,
|
GroupMessageEvent,
|
||||||
)
|
)
|
||||||
|
|
||||||
from .util import black_ids
|
from .util import black_ids
|
||||||
@ -62,19 +61,19 @@ async def send_ann_pic(
|
|||||||
@reg_ann.handle()
|
@reg_ann.handle()
|
||||||
@handle_exception('设置原神公告', '设置原神公告失败')
|
@handle_exception('设置原神公告', '设置原神公告失败')
|
||||||
async def send_reg_ann(
|
async def send_reg_ann(
|
||||||
event: TextMessageEvent,
|
event: GroupMessageEvent,
|
||||||
matcher: Matcher,
|
matcher: Matcher,
|
||||||
):
|
):
|
||||||
await matcher.finish(sub_ann(event.room_wxid))
|
await matcher.finish(sub_ann(event.group_id))
|
||||||
|
|
||||||
|
|
||||||
@unreg_ann.handle()
|
@unreg_ann.handle()
|
||||||
@handle_exception('取消原神公告', '取消设置原神公告失败')
|
@handle_exception('取消原神公告', '取消设置原神公告失败')
|
||||||
async def send_unreg_ann(
|
async def send_unreg_ann(
|
||||||
event: TextMessageEvent,
|
event: GroupMessageEvent,
|
||||||
matcher: Matcher,
|
matcher: Matcher,
|
||||||
):
|
):
|
||||||
await matcher.finish(unsub_ann(event.room_wxid))
|
await matcher.finish(unsub_ann(event.group_id))
|
||||||
|
|
||||||
|
|
||||||
@consume_ann.handle()
|
@consume_ann.handle()
|
||||||
@ -83,7 +82,7 @@ async def send_consume_ann(
|
|||||||
event: MessageEvent,
|
event: MessageEvent,
|
||||||
matcher: Matcher,
|
matcher: Matcher,
|
||||||
):
|
):
|
||||||
qid = event.from_wxid
|
qid = event.user_id
|
||||||
uid = await select_db(qid, mode='uid')
|
uid = await select_db(qid, mode='uid')
|
||||||
uid = str(uid)
|
uid = str(uid)
|
||||||
if '未找到绑定的UID' in uid:
|
if '未找到绑定的UID' in uid:
|
||||||
@ -100,9 +99,11 @@ async def check_ann_state():
|
|||||||
logger.info('[原神公告] 定时任务: 原神公告查询..')
|
logger.info('[原神公告] 定时任务: 原神公告查询..')
|
||||||
ids = string_config.get_config('Ann_Ids')
|
ids = string_config.get_config('Ann_Ids')
|
||||||
sub_list = string_config.get_config('Ann_Groups')
|
sub_list = string_config.get_config('Ann_Groups')
|
||||||
|
|
||||||
if not sub_list:
|
if not sub_list:
|
||||||
logger.info('没有群订阅, 取消获取数据')
|
logger.info('没有群订阅, 取消获取数据')
|
||||||
return
|
return
|
||||||
|
|
||||||
if not ids:
|
if not ids:
|
||||||
ids = await ann().get_ann_ids()
|
ids = await ann().get_ann_ids()
|
||||||
if not ids:
|
if not ids:
|
||||||
@ -110,9 +111,10 @@ async def check_ann_state():
|
|||||||
string_config.set_config('Ann_Ids', ids)
|
string_config.set_config('Ann_Ids', ids)
|
||||||
logger.info('初始成功, 将在下个轮询中更新.')
|
logger.info('初始成功, 将在下个轮询中更新.')
|
||||||
return
|
return
|
||||||
new_ids = await ann().get_ann_ids()
|
|
||||||
|
|
||||||
|
new_ids = await ann().get_ann_ids()
|
||||||
new_ann = set(ids) ^ set(new_ids)
|
new_ann = set(ids) ^ set(new_ids)
|
||||||
|
|
||||||
if not new_ann:
|
if not new_ann:
|
||||||
logger.info('[原神公告] 没有最新公告')
|
logger.info('[原神公告] 没有最新公告')
|
||||||
return
|
return
|
||||||
@ -123,20 +125,18 @@ async def check_ann_state():
|
|||||||
try:
|
try:
|
||||||
img = await ann_detail_card(ann_id) # 防止抛出异常报错
|
img = await ann_detail_card(ann_id) # 防止抛出异常报错
|
||||||
bot = get_bot()
|
bot = get_bot()
|
||||||
b64img = base64.b64encode(img)
|
|
||||||
|
|
||||||
for group in sub_list:
|
for group in sub_list:
|
||||||
try:
|
try:
|
||||||
await bot.call_api(
|
await bot.call_api(
|
||||||
api='send_image',
|
api='send_group_msg',
|
||||||
to_wxid=str(group),
|
group_id=group,
|
||||||
file_path="base64://" + b64img.decode(),
|
message=MessageSegment.image(img),
|
||||||
)
|
)
|
||||||
await asyncio.sleep(random.uniform(1, 3))
|
await asyncio.sleep(random.uniform(1, 3))
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.exception(e)
|
logger.exception(e)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.exception(e)
|
logger.exception(str(e))
|
||||||
|
|
||||||
logger.info('[原神公告] 推送完毕, 更新数据库')
|
logger.info('[原神公告] 推送完毕, 更新数据库')
|
||||||
string_config.set_config('Ann_Ids', new_ids)
|
string_config.set_config('Ann_Ids', new_ids)
|
||||||
|
@ -1,12 +1,17 @@
|
|||||||
import random
|
import random
|
||||||
import asyncio
|
import asyncio
|
||||||
|
from typing import Union
|
||||||
|
|
||||||
from nonebot import on_command
|
from nonebot import on_command
|
||||||
from nonebot.log import logger
|
from nonebot.log import logger
|
||||||
from nonebot.matcher import Matcher
|
from nonebot.matcher import Matcher
|
||||||
from nonebot.permission import SUPERUSER
|
from nonebot.permission import SUPERUSER
|
||||||
from nonebot_plugin_apscheduler import scheduler
|
from nonebot_plugin_apscheduler import scheduler
|
||||||
from nonebot.adapters.ntchat import Bot, TextMessageEvent
|
from nonebot.adapters.onebot.v11 import (
|
||||||
|
Bot,
|
||||||
|
GroupMessageEvent,
|
||||||
|
PrivateMessageEvent,
|
||||||
|
)
|
||||||
|
|
||||||
from ..config import priority
|
from ..config import priority
|
||||||
from .backup_data import data_backup
|
from .backup_data import data_backup
|
||||||
@ -20,17 +25,11 @@ from ..utils.message.get_cqhttp_data import (
|
|||||||
get_group_member_list,
|
get_group_member_list,
|
||||||
)
|
)
|
||||||
|
|
||||||
backup = on_command(
|
backup = on_command('gs清除缓存', rule=FullCommand(), priority=priority)
|
||||||
'gs清除缓存', rule=FullCommand(), priority=priority, permission=SUPERUSER
|
check = on_command('校验全部Cookies', rule=FullCommand(), priority=priority)
|
||||||
)
|
check_stoken = on_command('校验全部Stoken', rule=FullCommand(), priority=priority)
|
||||||
check = on_command(
|
|
||||||
'校验全部Cookies', rule=FullCommand(), priority=priority, permission=SUPERUSER
|
|
||||||
)
|
|
||||||
check_stoken = on_command(
|
|
||||||
'校验全部Stoken', rule=FullCommand(), priority=priority, permission=SUPERUSER
|
|
||||||
)
|
|
||||||
remove_invalid_user = on_command(
|
remove_invalid_user = on_command(
|
||||||
'清除无效用户', rule=FullCommand(), priority=priority, permission=SUPERUSER
|
'清除无效用户', rule=FullCommand(), priority=priority
|
||||||
)
|
)
|
||||||
|
|
||||||
backup_scheduler = scheduler
|
backup_scheduler = scheduler
|
||||||
@ -58,7 +57,7 @@ async def daily_refresh_charData():
|
|||||||
)
|
)
|
||||||
async def send_backup_msg(
|
async def send_backup_msg(
|
||||||
bot: Bot,
|
bot: Bot,
|
||||||
event: TextMessageEvent,
|
event: Union[GroupMessageEvent, PrivateMessageEvent],
|
||||||
matcher: Matcher,
|
matcher: Matcher,
|
||||||
):
|
):
|
||||||
if not await SUPERUSER(bot, event):
|
if not await SUPERUSER(bot, event):
|
||||||
@ -85,7 +84,7 @@ async def send_backup_msg(
|
|||||||
)
|
)
|
||||||
async def send_remove_invalid_user_msg(
|
async def send_remove_invalid_user_msg(
|
||||||
bot: Bot,
|
bot: Bot,
|
||||||
event: TextMessageEvent,
|
event: Union[GroupMessageEvent, PrivateMessageEvent],
|
||||||
matcher: Matcher,
|
matcher: Matcher,
|
||||||
):
|
):
|
||||||
if not await SUPERUSER(bot, event):
|
if not await SUPERUSER(bot, event):
|
||||||
|
@ -1,13 +1,20 @@
|
|||||||
|
from typing import Union
|
||||||
|
|
||||||
from nonebot import on_command
|
from nonebot import on_command
|
||||||
from nonebot.log import logger
|
from nonebot.log import logger
|
||||||
from nonebot.matcher import Matcher
|
from nonebot.matcher import Matcher
|
||||||
from nonebot.params import CommandArg
|
from nonebot.params import Depends, CommandArg
|
||||||
from nonebot.adapters.ntchat.message import Message
|
from nonebot.adapters.onebot.v11 import (
|
||||||
from nonebot.adapters.ntchat import MessageSegment, TextMessageEvent
|
Message,
|
||||||
|
MessageSegment,
|
||||||
|
GroupMessageEvent,
|
||||||
|
PrivateMessageEvent,
|
||||||
|
)
|
||||||
|
|
||||||
from ..genshinuid_meta import register_menu
|
from ..genshinuid_meta import register_menu
|
||||||
from ..utils.data_convert.get_uid import get_uid
|
from ..utils.data_convert.get_uid import get_uid
|
||||||
from ..utils.message.error_reply import UID_HINT
|
from ..utils.message.error_reply import UID_HINT
|
||||||
|
from ..utils.message.get_image_and_at import ImageAndAt
|
||||||
from ..utils.exception.handle_exception import handle_exception
|
from ..utils.exception.handle_exception import handle_exception
|
||||||
from .draw_collection_card import draw_explora_img, draw_collection_img
|
from .draw_collection_card import draw_explora_img, draw_collection_img
|
||||||
|
|
||||||
@ -42,20 +49,23 @@ get_explora_info = on_command('查询探索', aliases={'探索', 'ts'}, block=Tr
|
|||||||
),
|
),
|
||||||
)
|
)
|
||||||
async def send_collection_info(
|
async def send_collection_info(
|
||||||
event: TextMessageEvent,
|
event: Union[GroupMessageEvent, PrivateMessageEvent],
|
||||||
matcher: Matcher,
|
matcher: Matcher,
|
||||||
args: Message = CommandArg(),
|
args: Message = CommandArg(),
|
||||||
|
custom: ImageAndAt = Depends(),
|
||||||
):
|
):
|
||||||
logger.info('开始执行[查询收集信息]')
|
logger.info('开始执行[查询收集信息]')
|
||||||
logger.info('[查询收集信息]参数: {}'.format(args))
|
logger.info('[查询收集信息]参数: {}'.format(args))
|
||||||
raw_mes = args.extract_plain_text().strip()
|
raw_mes = args.extract_plain_text().strip()
|
||||||
if event.at_user_list:
|
at = custom.get_first_at()
|
||||||
qid = event.at_user_list[0]
|
if at:
|
||||||
|
qid = at
|
||||||
else:
|
else:
|
||||||
qid = event.from_wxid
|
qid = event.user_id
|
||||||
|
|
||||||
|
# 获取uid
|
||||||
uid = await get_uid(qid, raw_mes)
|
uid = await get_uid(qid, raw_mes)
|
||||||
logger.info('[查询收集信息]uid: {}'.format(uid))
|
logger.info('[查询角色面板]uid: {}'.format(uid))
|
||||||
|
|
||||||
if '未找到绑定的UID' in uid:
|
if '未找到绑定的UID' in uid:
|
||||||
await matcher.finish(UID_HINT)
|
await matcher.finish(UID_HINT)
|
||||||
@ -72,20 +82,23 @@ async def send_collection_info(
|
|||||||
@get_explora_info.handle()
|
@get_explora_info.handle()
|
||||||
@handle_exception('查询探索信息')
|
@handle_exception('查询探索信息')
|
||||||
async def send_explora_info(
|
async def send_explora_info(
|
||||||
event: TextMessageEvent,
|
event: Union[GroupMessageEvent, PrivateMessageEvent],
|
||||||
matcher: Matcher,
|
matcher: Matcher,
|
||||||
args: Message = CommandArg(),
|
args: Message = CommandArg(),
|
||||||
|
custom: ImageAndAt = Depends(),
|
||||||
):
|
):
|
||||||
logger.info('开始执行[查询探索信息]')
|
logger.info('开始执行[查询探索信息]')
|
||||||
logger.info('[查询探索信息]参数: {}'.format(args))
|
logger.info('[查询探索信息]参数: {}'.format(args))
|
||||||
raw_mes = args.extract_plain_text().strip()
|
raw_mes = args.extract_plain_text().strip()
|
||||||
if event.at_user_list:
|
at = custom.get_first_at()
|
||||||
qid = event.at_user_list[0]
|
if at:
|
||||||
|
qid = at
|
||||||
else:
|
else:
|
||||||
qid = event.from_wxid
|
qid = event.user_id
|
||||||
|
|
||||||
|
# 获取uid
|
||||||
uid = await get_uid(qid, raw_mes)
|
uid = await get_uid(qid, raw_mes)
|
||||||
logger.info('[查询探索信息]uid: {}'.format(uid))
|
logger.info('[查询角色面板]uid: {}'.format(uid))
|
||||||
|
|
||||||
if '未找到绑定的UID' in uid:
|
if '未找到绑定的UID' in uid:
|
||||||
await matcher.finish(UID_HINT)
|
await matcher.finish(UID_HINT)
|
||||||
|
@ -1,17 +1,23 @@
|
|||||||
from typing import Any, Tuple
|
from typing import Any, Tuple, Union
|
||||||
|
|
||||||
from nonebot.log import logger
|
from nonebot.log import logger
|
||||||
from nonebot.matcher import Matcher
|
from nonebot.matcher import Matcher
|
||||||
from nonebot.params import RegexGroup
|
|
||||||
from nonebot import on_regex, on_command
|
from nonebot import on_regex, on_command
|
||||||
from nonebot.permission import SUPERUSER
|
from nonebot.permission import SUPERUSER
|
||||||
from nonebot.adapters.ntchat import Bot, MessageSegment, TextMessageEvent
|
from nonebot.params import Depends, CommandArg, RegexGroup
|
||||||
|
from nonebot.adapters.onebot.v11 import (
|
||||||
|
Bot,
|
||||||
|
Message,
|
||||||
|
MessageSegment,
|
||||||
|
GroupMessageEvent,
|
||||||
|
PrivateMessageEvent,
|
||||||
|
)
|
||||||
|
|
||||||
from ..genshinuid_meta import register_menu
|
from ..genshinuid_meta import register_menu
|
||||||
from ..utils.nonebot2.rule import FullCommand
|
|
||||||
from .draw_config_card import draw_config_img
|
from .draw_config_card import draw_config_img
|
||||||
from ..utils.message.error_reply import UID_HINT
|
from ..utils.message.error_reply import UID_HINT
|
||||||
from ..utils.db_operation.db_operation import select_db
|
from ..utils.db_operation.db_operation import select_db
|
||||||
|
from ..utils.message.get_image_and_at import ImageAndAt
|
||||||
from .set_config import set_push_value, set_config_func
|
from .set_config import set_push_value, set_config_func
|
||||||
from ..utils.exception.handle_exception import handle_exception
|
from ..utils.exception.handle_exception import handle_exception
|
||||||
|
|
||||||
@ -27,7 +33,7 @@ push_config = on_regex(
|
|||||||
r'(\[CQ:at,qq=[0-9]+\])?( )?$'
|
r'(\[CQ:at,qq=[0-9]+\])?( )?$'
|
||||||
)
|
)
|
||||||
|
|
||||||
config_card = on_command('gs配置', rule=FullCommand())
|
config_card = on_command('gs配置')
|
||||||
|
|
||||||
|
|
||||||
@config_card.handle()
|
@config_card.handle()
|
||||||
@ -44,7 +50,9 @@ config_card = on_command('gs配置', rule=FullCommand())
|
|||||||
'- <ft color=(238,120,0)>gs配置</ft>'
|
'- <ft color=(238,120,0)>gs配置</ft>'
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
async def send_config_card(matcher: Matcher):
|
async def send_config_card(matcher: Matcher, args: Message = CommandArg()):
|
||||||
|
if args:
|
||||||
|
await matcher.finish()
|
||||||
logger.info('开始执行[gs配置]')
|
logger.info('开始执行[gs配置]')
|
||||||
im = await draw_config_img()
|
im = await draw_config_img()
|
||||||
if isinstance(im, str):
|
if isinstance(im, str):
|
||||||
@ -77,59 +85,38 @@ async def send_config_card(matcher: Matcher):
|
|||||||
)
|
)
|
||||||
async def send_config_msg(
|
async def send_config_msg(
|
||||||
bot: Bot,
|
bot: Bot,
|
||||||
event: TextMessageEvent,
|
event: Union[GroupMessageEvent, PrivateMessageEvent],
|
||||||
matcher: Matcher,
|
matcher: Matcher,
|
||||||
args: Tuple[Any, ...] = RegexGroup(),
|
args: Tuple[Any, ...] = RegexGroup(),
|
||||||
|
custom: ImageAndAt = Depends(),
|
||||||
):
|
):
|
||||||
logger.info('开始执行[设置阈值信息]')
|
logger.info('开始执行[设置阈值信息]')
|
||||||
logger.info('[设置阈值信息]参数: {}'.format(args))
|
logger.info('[设置阈值信息]参数: {}'.format(args))
|
||||||
wxid_list = []
|
qid = event.user_id
|
||||||
wxid_list.append(event.from_wxid)
|
at = custom.get_first_at()
|
||||||
qid = event.from_wxid
|
|
||||||
if event.at_user_list:
|
|
||||||
for user in event.at_user_list:
|
|
||||||
user = user.strip()
|
|
||||||
if user != "" and await SUPERUSER(bot, event):
|
|
||||||
qid = user
|
|
||||||
else:
|
|
||||||
await matcher.finish(
|
|
||||||
MessageSegment.room_at_msg(
|
|
||||||
content="{$@}你没有权限操作别人的状态噢~", at_list=wxid_list
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
|
if at and await SUPERUSER(bot, event):
|
||||||
|
qid = at
|
||||||
|
elif at and at != qid:
|
||||||
|
await matcher.finish('你没有权限操作别人的状态噢~', at_sender=True)
|
||||||
logger.info('[设置阈值信息]qid: {}'.format(qid))
|
logger.info('[设置阈值信息]qid: {}'.format(qid))
|
||||||
|
|
||||||
try:
|
try:
|
||||||
uid = await select_db(qid, mode='uid')
|
uid = await select_db(qid, mode='uid')
|
||||||
except TypeError:
|
except TypeError:
|
||||||
await matcher.finish(
|
await matcher.finish(UID_HINT)
|
||||||
MessageSegment.room_at_msg(
|
|
||||||
content='{$@}' + UID_HINT, at_list=wxid_list
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
func = args[4].replace('阈值', '')
|
func = args[4].replace('阈值', '')
|
||||||
if args[5]:
|
if args[5]:
|
||||||
try:
|
try:
|
||||||
value = int(args[5])
|
value = int(args[5])
|
||||||
except ValueError:
|
except ValueError:
|
||||||
await matcher.finish(
|
await matcher.finish('请输入数字哦~', at_sender=True)
|
||||||
MessageSegment.room_at_msg(
|
|
||||||
content="{$@}请输入数字哦~", at_list=wxid_list
|
|
||||||
)
|
|
||||||
)
|
|
||||||
else:
|
else:
|
||||||
await matcher.finish(
|
await matcher.finish('请输入正确的阈值数字!', at_sender=True)
|
||||||
MessageSegment.room_at_msg(
|
|
||||||
content="{$@}请输入正确的阈值数字!", at_list=wxid_list
|
|
||||||
)
|
|
||||||
)
|
|
||||||
logger.info('[设置阈值信息]func: {}, value: {}'.format(func, value))
|
logger.info('[设置阈值信息]func: {}, value: {}'.format(func, value))
|
||||||
im = await set_push_value(func, str(uid), value)
|
im = await set_push_value(func, str(uid), value)
|
||||||
await matcher.finish(
|
await matcher.finish(im, at_sender=True)
|
||||||
MessageSegment.room_at_msg(content="{$@}" + f"{im}", at_list=wxid_list)
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
# 开启 自动签到 和 推送树脂提醒 功能
|
# 开启 自动签到 和 推送树脂提醒 功能
|
||||||
@ -154,49 +141,38 @@ async def send_config_msg(
|
|||||||
)
|
)
|
||||||
async def open_switch_func(
|
async def open_switch_func(
|
||||||
bot: Bot,
|
bot: Bot,
|
||||||
event: TextMessageEvent,
|
event: Union[GroupMessageEvent, PrivateMessageEvent],
|
||||||
matcher: Matcher,
|
matcher: Matcher,
|
||||||
args: Tuple[Any, ...] = RegexGroup(),
|
args: Tuple[Any, ...] = RegexGroup(),
|
||||||
|
at: ImageAndAt = Depends(),
|
||||||
):
|
):
|
||||||
wxid_list = []
|
qid = event.user_id
|
||||||
wxid_list.append(event.from_wxid)
|
atqq = at.get_first_at() if at else None
|
||||||
qid = event.from_wxid
|
|
||||||
if event.at_user_list:
|
|
||||||
for user in event.at_user_list:
|
|
||||||
user = user.strip()
|
|
||||||
if user != "" and await SUPERUSER(bot, event):
|
|
||||||
qid = user
|
|
||||||
else:
|
|
||||||
await matcher.finish(
|
|
||||||
MessageSegment.room_at_msg(
|
|
||||||
content="{$@}你没有权限操作别人的状态噢~", at_list=wxid_list
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
config_name = args[4]
|
config_name = args[4]
|
||||||
|
|
||||||
logger.info(f'[{qid}]尝试[{args[3]}]了[{config_name}]功能')
|
logger.info(f'[{qid}]尝试[{args[3]}]了[{config_name}]功能')
|
||||||
|
|
||||||
fake_seession = f'group_{event.room_wxid}_{event.from_wxid}'
|
|
||||||
|
|
||||||
if args[3] == '开启':
|
if args[3] == '开启':
|
||||||
query = 'OPEN'
|
query = 'OPEN'
|
||||||
gid = (
|
gid = (
|
||||||
fake_seession.split('_')[1]
|
event.get_session_id().split('_')[1]
|
||||||
if len(fake_seession.split('_')) == 3
|
if len(event.get_session_id().split('_')) == 3
|
||||||
else 'on'
|
else 'on'
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
query = 'CLOSED'
|
query = 'CLOSED'
|
||||||
gid = 'off'
|
gid = 'off'
|
||||||
|
is_admin = await SUPERUSER(bot, event)
|
||||||
|
if atqq:
|
||||||
|
if is_admin:
|
||||||
|
qid = atqq
|
||||||
|
elif atqq != qid:
|
||||||
|
await matcher.finish('你没有权限操作别人的状态噢~', at_sender=True)
|
||||||
|
|
||||||
uid = await select_db(qid, mode='uid')
|
uid = await select_db(qid, mode='uid')
|
||||||
if uid is None or not isinstance(uid, str) or not uid.isdecimal():
|
if uid is None or not isinstance(uid, str) or not uid.isdecimal():
|
||||||
await matcher.finish(
|
await matcher.finish(UID_HINT)
|
||||||
MessageSegment.room_at_msg(
|
|
||||||
content='{$@}' + UID_HINT, at_list=wxid_list
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
im = await set_config_func(
|
im = await set_config_func(
|
||||||
config_name=config_name,
|
config_name=config_name,
|
||||||
@ -204,8 +180,6 @@ async def open_switch_func(
|
|||||||
qid=str(qid),
|
qid=str(qid),
|
||||||
option=gid,
|
option=gid,
|
||||||
query=query,
|
query=query,
|
||||||
is_admin=await SUPERUSER(bot, event),
|
is_admin=is_admin,
|
||||||
)
|
|
||||||
await matcher.finish(
|
|
||||||
MessageSegment.room_at_msg(content="{$@}" + f"{im}", at_list=wxid_list)
|
|
||||||
)
|
)
|
||||||
|
await matcher.finish(im, at_sender=True)
|
||||||
|
@ -5,7 +5,7 @@ from ..utils.download_resource.RESOURCE_PATH import MAIN_PATH
|
|||||||
from ..utils.db_operation.db_operation import get_all_bind, get_user_bind_data
|
from ..utils.db_operation.db_operation import get_all_bind, get_user_bind_data
|
||||||
|
|
||||||
DATA_PATH = MAIN_PATH / 'v3_data.json'
|
DATA_PATH = MAIN_PATH / 'v3_data.json'
|
||||||
BOT_ID = 'ntchat'
|
BOT_ID = 'onebot'
|
||||||
RECOGNIZE_SERVER = {
|
RECOGNIZE_SERVER = {
|
||||||
'1': 'cn_gf01',
|
'1': 'cn_gf01',
|
||||||
'2': 'cn_gf01',
|
'2': 'cn_gf01',
|
||||||
|
@ -1,21 +1,20 @@
|
|||||||
import re
|
import re
|
||||||
import random
|
import random
|
||||||
import asyncio
|
import asyncio
|
||||||
from typing import Tuple
|
from typing import Tuple, Union
|
||||||
|
|
||||||
from nonebot import on_command
|
from nonebot import on_command
|
||||||
from nonebot.log import logger
|
from nonebot.log import logger
|
||||||
from nonebot.matcher import Matcher
|
from nonebot.matcher import Matcher
|
||||||
from nonebot.params import CommandArg
|
|
||||||
from nonebot.permission import SUPERUSER
|
from nonebot.permission import SUPERUSER
|
||||||
|
from nonebot.params import Depends, CommandArg
|
||||||
from nonebot_plugin_apscheduler import scheduler
|
from nonebot_plugin_apscheduler import scheduler
|
||||||
from nonebot.adapters.ntchat.message import Message
|
from nonebot.adapters.onebot.v11 import (
|
||||||
from nonebot.adapters.ntchat import (
|
|
||||||
Bot,
|
Bot,
|
||||||
MessageEvent,
|
Message,
|
||||||
MessageSegment,
|
MessageSegment,
|
||||||
TextMessageEvent,
|
GroupMessageEvent,
|
||||||
QuoteMessageEvent,
|
PrivateMessageEvent,
|
||||||
)
|
)
|
||||||
|
|
||||||
from ..config import priority
|
from ..config import priority
|
||||||
@ -27,13 +26,14 @@ from ..utils.message.error_reply import UID_HINT
|
|||||||
from ..utils.enka_api.get_enka_data import switch_api
|
from ..utils.enka_api.get_enka_data import switch_api
|
||||||
from ..utils.enka_api.enka_to_card import enka_to_card
|
from ..utils.enka_api.enka_to_card import enka_to_card
|
||||||
from ..utils.enka_api.enka_to_data import enka_to_data
|
from ..utils.enka_api.enka_to_data import enka_to_data
|
||||||
|
from ..utils.message.get_image_and_at import ImageAndAt
|
||||||
from ..utils.download_resource.RESOURCE_PATH import TEMP_PATH
|
from ..utils.download_resource.RESOURCE_PATH import TEMP_PATH
|
||||||
from ..utils.exception.handle_exception import handle_exception
|
from ..utils.exception.handle_exception import handle_exception
|
||||||
from ..utils.db_operation.db_operation import select_db, get_all_uid
|
from ..utils.db_operation.db_operation import select_db, get_all_uid
|
||||||
|
|
||||||
refresh = on_command('强制刷新')
|
refresh = on_command('强制刷新')
|
||||||
original_pic = on_command('原图', rule=FullCommand())
|
original_pic = on_command('原图', rule=FullCommand())
|
||||||
change_api = on_command('切换api', rule=FullCommand())
|
change_api = on_command('切换api')
|
||||||
get_charcard_list = on_command('毕业度统计')
|
get_charcard_list = on_command('毕业度统计')
|
||||||
get_char_info = on_command(
|
get_char_info = on_command(
|
||||||
'查询',
|
'查询',
|
||||||
@ -60,10 +60,11 @@ refresh_scheduler = scheduler
|
|||||||
)
|
)
|
||||||
async def send_change_api_info(
|
async def send_change_api_info(
|
||||||
bot: Bot,
|
bot: Bot,
|
||||||
event: MessageEvent,
|
event: Union[GroupMessageEvent, PrivateMessageEvent],
|
||||||
matcher: Matcher,
|
matcher: Matcher,
|
||||||
|
args: Message = CommandArg(),
|
||||||
):
|
):
|
||||||
if not await SUPERUSER(bot, event):
|
if args or not await SUPERUSER(bot, event):
|
||||||
return
|
return
|
||||||
|
|
||||||
im = await switch_api()
|
im = await switch_api()
|
||||||
@ -86,15 +87,16 @@ async def send_change_api_info(
|
|||||||
),
|
),
|
||||||
)
|
)
|
||||||
async def send_original_pic(
|
async def send_original_pic(
|
||||||
event: QuoteMessageEvent,
|
event: Union[GroupMessageEvent, PrivateMessageEvent],
|
||||||
matcher: Matcher,
|
matcher: Matcher,
|
||||||
):
|
):
|
||||||
msg_id = event.quote_message_id
|
if event.reply:
|
||||||
path = TEMP_PATH / f'{msg_id}.jpg'
|
msg_id = event.reply.message_id
|
||||||
if path.exists():
|
path = TEMP_PATH / f'{msg_id}.jpg'
|
||||||
logger.info('[原图]访问图片: {}'.format(path))
|
if path.exists():
|
||||||
with open(path, 'rb') as f:
|
logger.info('[原图]访问图片: {}'.format(path))
|
||||||
await matcher.finish(MessageSegment.image(f.read()))
|
with open(path, 'rb') as f:
|
||||||
|
await matcher.finish(MessageSegment.image(f.read()))
|
||||||
|
|
||||||
|
|
||||||
@get_char_info.handle()
|
@get_char_info.handle()
|
||||||
@ -145,33 +147,28 @@ async def send_original_pic(
|
|||||||
),
|
),
|
||||||
)
|
)
|
||||||
async def send_char_info(
|
async def send_char_info(
|
||||||
event: TextMessageEvent,
|
event: Union[GroupMessageEvent, PrivateMessageEvent],
|
||||||
matcher: Matcher,
|
matcher: Matcher,
|
||||||
args: Message = CommandArg(),
|
args: Message = CommandArg(),
|
||||||
|
custom: ImageAndAt = Depends(),
|
||||||
):
|
):
|
||||||
raw_mes = args.extract_plain_text().strip()
|
raw_mes = args.extract_plain_text().strip()
|
||||||
name = ''.join(re.findall('[\u4e00-\u9fa5]', raw_mes))
|
name = ''.join(re.findall('[\u4e00-\u9fa5]', raw_mes))
|
||||||
# 如果输入中(查询之后的内容)没有其他字符串(如角色名等)则忽略。
|
|
||||||
if not name:
|
if not name:
|
||||||
return
|
return
|
||||||
# 若查询中有@则排除@后内容,排除后若@前没有 其他内容则不继续运行下方代码 防止与roleinfo查询打架
|
|
||||||
# 修改后@人应该在命令末尾 如:查询万叶@XXXX
|
|
||||||
if "@" in raw_mes:
|
|
||||||
raw_mes = raw_mes.split("@")[0]
|
|
||||||
if not raw_mes:
|
|
||||||
return
|
|
||||||
logger.info('开始执行[查询角色面板]')
|
logger.info('开始执行[查询角色面板]')
|
||||||
# 获取被@的Wxid,排除""
|
at = custom.get_first_at()
|
||||||
qid = event.from_wxid
|
img = custom.get_first_image()
|
||||||
if event.at_user_list:
|
|
||||||
for user in event.at_user_list:
|
if at:
|
||||||
user = user.strip()
|
qid = at
|
||||||
if user != "":
|
else:
|
||||||
qid = user
|
qid = event.user_id
|
||||||
logger.info('[查询角色面板]WXID: {}'.format(qid))
|
logger.info('[查询角色面板]QQ: {}'.format(qid))
|
||||||
|
|
||||||
# 获取uid
|
# 获取uid
|
||||||
uid = re.findall(r'\d+', raw_mes.split("@")[0])
|
uid = re.findall(r'\d+', raw_mes)
|
||||||
if uid:
|
if uid:
|
||||||
uid = uid[0]
|
uid = uid[0]
|
||||||
else:
|
else:
|
||||||
@ -182,15 +179,15 @@ async def send_char_info(
|
|||||||
if '未找到绑定的UID' in uid:
|
if '未找到绑定的UID' in uid:
|
||||||
await matcher.finish(UID_HINT)
|
await matcher.finish(UID_HINT)
|
||||||
|
|
||||||
im = await draw_enka_img(raw_mes, uid, None)
|
im = await draw_enka_img(raw_mes, uid, img)
|
||||||
|
|
||||||
if isinstance(im, str):
|
if isinstance(im, str):
|
||||||
await matcher.finish(im)
|
await matcher.finish(im)
|
||||||
elif isinstance(im, Tuple):
|
elif isinstance(im, Tuple):
|
||||||
await matcher.send(MessageSegment.image(im[0]))
|
req = await matcher.send(MessageSegment.image(im[0]))
|
||||||
# msg_id = req['message_id']
|
msg_id = req['message_id']
|
||||||
if im[1]:
|
if im[1]:
|
||||||
with open(TEMP_PATH / f'{uid}.jpg', 'wb') as f:
|
with open(TEMP_PATH / f'{msg_id}.jpg', 'wb') as f:
|
||||||
f.write(im[1])
|
f.write(im[1])
|
||||||
else:
|
else:
|
||||||
await matcher.finish('发生了未知错误,请联系管理员检查后台输出!')
|
await matcher.finish('发生了未知错误,请联系管理员检查后台输出!')
|
||||||
@ -248,19 +245,17 @@ async def daily_refresh_charData():
|
|||||||
async def send_card_info(
|
async def send_card_info(
|
||||||
bot: Bot,
|
bot: Bot,
|
||||||
matcher: Matcher,
|
matcher: Matcher,
|
||||||
event: TextMessageEvent,
|
event: Union[GroupMessageEvent, PrivateMessageEvent],
|
||||||
args: Message = CommandArg(),
|
args: Message = CommandArg(),
|
||||||
|
custom: ImageAndAt = Depends(),
|
||||||
):
|
):
|
||||||
message = args.extract_plain_text().strip().replace(' ', '')
|
message = args.extract_plain_text().strip().replace(' ', '')
|
||||||
uid = re.findall(r'\d+', message.split("@")[0]) # str
|
uid = re.findall(r'\d+', message) # str
|
||||||
m = ''.join(re.findall('[\u4e00-\u9fa5]', message))
|
m = ''.join(re.findall('[\u4e00-\u9fa5]', message))
|
||||||
# 获取被@的Wxid,排除""
|
qid = event.user_id
|
||||||
qid = event.from_wxid
|
at = custom.get_first_at()
|
||||||
if event.at_user_list:
|
if at:
|
||||||
for user in event.at_user_list:
|
qid = at
|
||||||
user = user.strip()
|
|
||||||
if user != "":
|
|
||||||
qid = user
|
|
||||||
|
|
||||||
if len(uid) >= 1:
|
if len(uid) >= 1:
|
||||||
uid = uid[0]
|
uid = uid[0]
|
||||||
@ -306,21 +301,19 @@ async def send_card_info(
|
|||||||
),
|
),
|
||||||
)
|
)
|
||||||
async def send_charcard_list(
|
async def send_charcard_list(
|
||||||
event: TextMessageEvent,
|
event: Union[GroupMessageEvent, PrivateMessageEvent],
|
||||||
matcher: Matcher,
|
matcher: Matcher,
|
||||||
args: Message = CommandArg(),
|
args: Message = CommandArg(),
|
||||||
|
custom: ImageAndAt = Depends(),
|
||||||
):
|
):
|
||||||
raw_mes = args.extract_plain_text().strip()
|
raw_mes = args.extract_plain_text().strip()
|
||||||
# 获取被@的Wxid,排除""
|
qid = event.user_id
|
||||||
qid = event.from_wxid
|
at = custom.get_first_at()
|
||||||
if event.at_user_list:
|
if at:
|
||||||
for user in event.at_user_list:
|
qid = at
|
||||||
user = user.strip()
|
|
||||||
if user != "":
|
|
||||||
qid = user
|
|
||||||
|
|
||||||
# 获取uid
|
# 获取uid
|
||||||
uid = re.findall(r'\d+', raw_mes.split("@")[0])
|
uid = re.findall(r'\d+', raw_mes)
|
||||||
if uid:
|
if uid:
|
||||||
uid = uid[0]
|
uid = uid[0]
|
||||||
else:
|
else:
|
||||||
|
@ -5,8 +5,7 @@ from nonebot.log import logger
|
|||||||
from nonebot.matcher import Matcher
|
from nonebot.matcher import Matcher
|
||||||
from nonebot import on_regex, on_command
|
from nonebot import on_regex, on_command
|
||||||
from nonebot.params import CommandArg, RegexGroup
|
from nonebot.params import CommandArg, RegexGroup
|
||||||
from nonebot.adapters.ntchat import MessageSegment
|
from nonebot.adapters.onebot.v11 import Message, MessageSegment
|
||||||
from nonebot.adapters.ntchat.message import Message
|
|
||||||
|
|
||||||
from ..version import Genshin_version
|
from ..version import Genshin_version
|
||||||
from ..genshinuid_meta import register_menu
|
from ..genshinuid_meta import register_menu
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
from nonebot import on_command
|
from nonebot import on_command
|
||||||
from nonebot.matcher import Matcher
|
from nonebot.matcher import Matcher
|
||||||
from nonebot_plugin_apscheduler import scheduler
|
from nonebot_plugin_apscheduler import scheduler
|
||||||
from nonebot.adapters.ntchat import MessageSegment
|
from nonebot.adapters.onebot.v11 import MessageSegment
|
||||||
|
|
||||||
from ..config import priority
|
from ..config import priority
|
||||||
from ..genshinuid_meta import register_menu
|
from ..genshinuid_meta import register_menu
|
||||||
|
Binary file not shown.
Before Width: | Height: | Size: 307 KiB |
Binary file not shown.
Before Width: | Height: | Size: 411 KiB |
@ -1,15 +1,13 @@
|
|||||||
import os
|
from typing import Union
|
||||||
import asyncio
|
|
||||||
|
|
||||||
from nonebot.log import logger
|
from nonebot.log import logger
|
||||||
from nonebot.rule import is_type
|
|
||||||
from nonebot.matcher import Matcher
|
from nonebot.matcher import Matcher
|
||||||
from nonebot import get_bot, on_command, on_message
|
from nonebot import get_bot, on_notice, on_command
|
||||||
from nonebot.adapters.ntchat.permission import GROUP
|
from nonebot.adapters.onebot.v11 import (
|
||||||
from nonebot.adapters.ntchat import (
|
NoticeEvent,
|
||||||
MessageSegment,
|
MessageSegment,
|
||||||
FileMessageEvent,
|
GroupMessageEvent,
|
||||||
TextMessageEvent,
|
PrivateMessageEvent,
|
||||||
)
|
)
|
||||||
|
|
||||||
from .get_gachalogs import save_gachalogs
|
from .get_gachalogs import save_gachalogs
|
||||||
@ -23,8 +21,8 @@ from .export_and_import import export_gachalogs, import_gachalogs
|
|||||||
|
|
||||||
get_gacha_log = on_command('刷新抽卡记录', aliases={'强制刷新抽卡记录'}, rule=FullCommand())
|
get_gacha_log = on_command('刷新抽卡记录', aliases={'强制刷新抽卡记录'}, rule=FullCommand())
|
||||||
get_gacha_log_card = on_command('抽卡记录', rule=FullCommand())
|
get_gacha_log_card = on_command('抽卡记录', rule=FullCommand())
|
||||||
import_gacha_log = on_message(block=False, rule=(is_type(FileMessageEvent)))
|
import_gacha_log = on_notice()
|
||||||
export_gacha_log = on_command('导出抽卡记录', rule=FullCommand(), permission=GROUP)
|
export_gacha_log = on_command('导出抽卡记录', rule=FullCommand())
|
||||||
|
|
||||||
|
|
||||||
@export_gacha_log.handle()
|
@export_gacha_log.handle()
|
||||||
@ -43,12 +41,12 @@ export_gacha_log = on_command('导出抽卡记录', rule=FullCommand(), permissi
|
|||||||
),
|
),
|
||||||
)
|
)
|
||||||
async def export_gacha_log_info(
|
async def export_gacha_log_info(
|
||||||
event: TextMessageEvent,
|
event: GroupMessageEvent,
|
||||||
matcher: Matcher,
|
matcher: Matcher,
|
||||||
):
|
):
|
||||||
logger.info('开始执行[导出抽卡记录]')
|
logger.info('开始执行[导出抽卡记录]')
|
||||||
qid = event.from_wxid
|
qid = event.user_id
|
||||||
gid = event.room_wxid
|
gid = event.group_id
|
||||||
uid = await select_db(qid, mode='uid')
|
uid = await select_db(qid, mode='uid')
|
||||||
bot = get_bot()
|
bot = get_bot()
|
||||||
if not isinstance(uid, str) or '未找到绑定的UID' in uid:
|
if not isinstance(uid, str) or '未找到绑定的UID' in uid:
|
||||||
@ -56,9 +54,10 @@ async def export_gacha_log_info(
|
|||||||
raw_data = await export_gachalogs(uid)
|
raw_data = await export_gachalogs(uid)
|
||||||
if raw_data['retcode'] == 'ok':
|
if raw_data['retcode'] == 'ok':
|
||||||
await bot.call_api(
|
await bot.call_api(
|
||||||
'send_file',
|
'upload_group_file',
|
||||||
to_wxid=gid,
|
group_id=gid,
|
||||||
file_path=raw_data['url'],
|
name=raw_data['name'],
|
||||||
|
file=raw_data['url'],
|
||||||
)
|
)
|
||||||
logger.info(f'[导出抽卡记录] UID{uid}成功!')
|
logger.info(f'[导出抽卡记录] UID{uid}成功!')
|
||||||
await matcher.finish('上传成功!')
|
await matcher.finish('上传成功!')
|
||||||
@ -82,22 +81,21 @@ async def export_gacha_log_info(
|
|||||||
'- <ft color=(238,120,0)>私聊发送json格式的离线文件</ft>'
|
'- <ft color=(238,120,0)>私聊发送json格式的离线文件</ft>'
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
async def import_gacha_log_info(event: FileMessageEvent, matcher: Matcher):
|
async def import_gacha_log_info(event: NoticeEvent, matcher: Matcher):
|
||||||
await asyncio.sleep(2) # 等待下载文件,避免占用
|
args = event.dict()
|
||||||
# 检测文件是否存在并小于8MB
|
if args['notice_type'] != 'offline_file':
|
||||||
if (
|
|
||||||
os.path.exists(event.file)
|
|
||||||
and os.path.getsize(event.file) <= 8 * 1024 * 1024
|
|
||||||
and event.file_name.endswith(".json")
|
|
||||||
):
|
|
||||||
uid = await select_db(event.from_wxid, mode='uid')
|
|
||||||
if not isinstance(uid, str) or '未找到绑定的UID' in uid:
|
|
||||||
await matcher.finish(UID_HINT)
|
|
||||||
logger.info('开始执行[导入抽卡记录]')
|
|
||||||
im = await import_gachalogs(event.file, uid)
|
|
||||||
await matcher.finish(im)
|
|
||||||
else:
|
|
||||||
await matcher.finish()
|
await matcher.finish()
|
||||||
|
url = args['file']['url']
|
||||||
|
name: str = args['file']['name']
|
||||||
|
if not name.endswith('.json'):
|
||||||
|
return
|
||||||
|
qid = args['user_id']
|
||||||
|
uid = await select_db(qid, mode='uid')
|
||||||
|
if not isinstance(uid, str) or '未找到绑定的UID' in uid:
|
||||||
|
await matcher.finish(UID_HINT)
|
||||||
|
logger.info('开始执行[导入抽卡记录]')
|
||||||
|
im = await import_gachalogs(url, uid)
|
||||||
|
await matcher.finish(im)
|
||||||
|
|
||||||
|
|
||||||
@get_gacha_log_card.handle()
|
@get_gacha_log_card.handle()
|
||||||
@ -116,14 +114,14 @@ async def import_gacha_log_info(event: FileMessageEvent, matcher: Matcher):
|
|||||||
),
|
),
|
||||||
)
|
)
|
||||||
async def send_gacha_log_card_info(
|
async def send_gacha_log_card_info(
|
||||||
event: TextMessageEvent,
|
event: Union[GroupMessageEvent, PrivateMessageEvent],
|
||||||
matcher: Matcher,
|
matcher: Matcher,
|
||||||
):
|
):
|
||||||
logger.info('开始执行[抽卡记录]')
|
logger.info('开始执行[抽卡记录]')
|
||||||
|
|
||||||
uid = await select_db(event.from_wxid, mode='uid')
|
uid = await select_db(event.user_id, mode='uid')
|
||||||
if isinstance(uid, str):
|
if isinstance(uid, str):
|
||||||
im = await draw_gachalogs_img(uid, event.from_wxid) # type: ignore
|
im = await draw_gachalogs_img(uid, event.user_id)
|
||||||
if isinstance(im, bytes):
|
if isinstance(im, bytes):
|
||||||
await matcher.finish(MessageSegment.image(im))
|
await matcher.finish(MessageSegment.image(im))
|
||||||
else:
|
else:
|
||||||
@ -148,21 +146,15 @@ async def send_gacha_log_card_info(
|
|||||||
),
|
),
|
||||||
)
|
)
|
||||||
async def send_daily_info(
|
async def send_daily_info(
|
||||||
event: TextMessageEvent,
|
event: Union[GroupMessageEvent, PrivateMessageEvent],
|
||||||
matcher: Matcher,
|
matcher: Matcher,
|
||||||
):
|
):
|
||||||
logger.info('开始执行[刷新抽卡记录]')
|
logger.info('开始执行[刷新抽卡记录]')
|
||||||
wxid_list = []
|
uid = await select_db(event.user_id, mode='uid')
|
||||||
wxid_list.append(event.from_wxid)
|
|
||||||
uid = await select_db(event.from_wxid, mode='uid')
|
|
||||||
if isinstance(uid, str):
|
if isinstance(uid, str):
|
||||||
is_force = False
|
is_force = False
|
||||||
if event.msg.startswith('强制'):
|
if event.raw_message.startswith('强制'):
|
||||||
is_force = True
|
is_force = True
|
||||||
tip = '正在刷新抽卡记录,请耐心等待,不要重复发送命令。'
|
|
||||||
await matcher.send(
|
|
||||||
MessageSegment.room_at_msg(content=tip, at_list=wxid_list)
|
|
||||||
)
|
|
||||||
im = await save_gachalogs(uid, None, is_force)
|
im = await save_gachalogs(uid, None, is_force)
|
||||||
await matcher.finish(im)
|
await matcher.finish(im)
|
||||||
else:
|
else:
|
||||||
|
@ -16,30 +16,22 @@ INT_TO_TYPE = {
|
|||||||
|
|
||||||
|
|
||||||
async def import_gachalogs(history_url: str, uid: str) -> str:
|
async def import_gachalogs(history_url: str, uid: str) -> str:
|
||||||
# 是否Json文件检测
|
history_data: dict = json.loads(get(history_url).text)
|
||||||
try:
|
data_uid = history_data['info']['uid']
|
||||||
if not history_url.startswith(('http', 'https')):
|
if data_uid != uid:
|
||||||
with open(history_url, 'r', encoding='utf-8') as history_url_files:
|
return f'该抽卡记录UID{data_uid}与你绑定UID{uid}不符合!'
|
||||||
history_data = json.load(history_url_files)
|
raw_data = history_data['list']
|
||||||
else:
|
result = {'新手祈愿': [], '常驻祈愿': [], '角色祈愿': [], '武器祈愿': []}
|
||||||
history_data: dict = get(history_url).json()
|
for item in raw_data:
|
||||||
data_uid = history_data['info']['uid']
|
item['uid'] = uid
|
||||||
if data_uid != uid:
|
item['item_id'] = ''
|
||||||
return f'该抽卡记录UID{data_uid}与你绑定UID{uid}不符合!'
|
item['count'] = '1'
|
||||||
raw_data = history_data['list']
|
item['lang'] = 'zh-cn'
|
||||||
result = {'新手祈愿': [], '常驻祈愿': [], '角色祈愿': [], '武器祈愿': []}
|
item['id'] = str(item['id'])
|
||||||
for item in raw_data:
|
del item['uigf_gacha_type']
|
||||||
item['uid'] = uid
|
result[INT_TO_TYPE[item['gacha_type']]].append(item)
|
||||||
item['item_id'] = ''
|
im = await save_gachalogs(uid, result)
|
||||||
item['count'] = '1'
|
return im
|
||||||
item['lang'] = 'zh-cn'
|
|
||||||
item['id'] = str(item['id'])
|
|
||||||
del item['uigf_gacha_type']
|
|
||||||
result[INT_TO_TYPE[item['gacha_type']]].append(item)
|
|
||||||
im = await save_gachalogs(uid, result)
|
|
||||||
return im
|
|
||||||
except Exception:
|
|
||||||
return '导入失败,请检查你的Json文件!'
|
|
||||||
|
|
||||||
|
|
||||||
async def export_gachalogs(uid: str) -> dict:
|
async def export_gachalogs(uid: str) -> dict:
|
||||||
|
43
GenshinUID/genshinuid_gachaurl/__init__.py
Normal file
43
GenshinUID/genshinuid_gachaurl/__init__.py
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
from nonebot import on_command
|
||||||
|
from nonebot.log import logger
|
||||||
|
from nonebot.matcher import Matcher
|
||||||
|
from nonebot.adapters.onebot.v11 import Bot, GroupMessageEvent
|
||||||
|
|
||||||
|
from .gacha_url import post_url
|
||||||
|
from ..genshinuid_meta import register_menu
|
||||||
|
from ..utils.nonebot2.rule import FullCommand
|
||||||
|
from ..utils.message.error_reply import UID_HINT
|
||||||
|
from ..utils.db_operation.db_operation import select_db
|
||||||
|
from ..utils.exception.handle_exception import handle_exception
|
||||||
|
|
||||||
|
get_gacha_url = on_command(
|
||||||
|
'获取抽卡记录链接', aliases={'抽卡链接', '抽卡记录链接'}, rule=FullCommand()
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@get_gacha_url.handle()
|
||||||
|
@handle_exception('获取抽卡记录链接')
|
||||||
|
@register_menu(
|
||||||
|
'获取抽卡记录链接',
|
||||||
|
'获取抽卡记录链接',
|
||||||
|
'获取用户的抽卡记录链接',
|
||||||
|
trigger_method='群聊指令',
|
||||||
|
detail_des=(
|
||||||
|
'介绍:\n'
|
||||||
|
'导出抽卡记录的链接以用于原神小程序\n'
|
||||||
|
' \n'
|
||||||
|
'指令:\n'
|
||||||
|
'- <ft color=(238,120,0)>抽卡链接</ft>'
|
||||||
|
),
|
||||||
|
)
|
||||||
|
async def _(
|
||||||
|
bot: Bot,
|
||||||
|
event: GroupMessageEvent,
|
||||||
|
matcher: Matcher,
|
||||||
|
):
|
||||||
|
await get_gacha_url.send("正在获取抽卡记录链接")
|
||||||
|
logger.info('开始执行[获取抽卡记录链接]')
|
||||||
|
uid = await select_db(event.user_id, mode='uid')
|
||||||
|
if not isinstance(uid, str) or '未找到绑定的UID' in uid:
|
||||||
|
await matcher.finish(UID_HINT)
|
||||||
|
await post_url(bot, uid, str(event.group_id), str(event.user_id))
|
53
GenshinUID/genshinuid_gachaurl/gacha_url.py
Normal file
53
GenshinUID/genshinuid_gachaurl/gacha_url.py
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
import time
|
||||||
|
from urllib.parse import quote
|
||||||
|
|
||||||
|
from nonebot.adapters.onebot.v11 import Bot
|
||||||
|
|
||||||
|
from ..utils.message.error_reply import SK_HINT
|
||||||
|
from ..utils.message.send_msg import send_forward_msg
|
||||||
|
from ..utils.mhy_api.get_mhy_data import get_authkey_by_cookie
|
||||||
|
|
||||||
|
|
||||||
|
async def post_url(bot: Bot, uid: str, group_id: str, qid: str):
|
||||||
|
async def send_group_msg(msg: str):
|
||||||
|
await bot.call_api(
|
||||||
|
api='send_group_msg',
|
||||||
|
group_id=group_id,
|
||||||
|
message=msg,
|
||||||
|
)
|
||||||
|
return ''
|
||||||
|
|
||||||
|
authkey = await get_authkey_by_cookie(uid)
|
||||||
|
if authkey == {}:
|
||||||
|
return await send_group_msg(SK_HINT)
|
||||||
|
authkey = authkey['data']['authkey']
|
||||||
|
now = time.time()
|
||||||
|
region = ""
|
||||||
|
if uid[0] == "1" or uid[0] == "2":
|
||||||
|
region = 'cn_gf01'
|
||||||
|
elif uid[0] == "5":
|
||||||
|
region = "'cn_qd01'"
|
||||||
|
elif uid[0] == "6":
|
||||||
|
region = "'os_usa'"
|
||||||
|
elif uid[0] == "7":
|
||||||
|
region = "'os_euro'"
|
||||||
|
elif uid[0] == "8":
|
||||||
|
region = "'os_asia'"
|
||||||
|
elif uid[0] == "9":
|
||||||
|
region = "'os_cht'"
|
||||||
|
else:
|
||||||
|
region = 'cn_gf01'
|
||||||
|
msgs = []
|
||||||
|
msgs.append(f"uid:{uid}的抽卡记录链接为:")
|
||||||
|
url = (
|
||||||
|
f"https://hk4e-api.mihoyo.com/event/gacha_info/api/getGachaLog?"
|
||||||
|
f"authkey_ver=1&sign_type=2&auth_appid=webview_gacha&init_type=301&"
|
||||||
|
f"gacha_id=fecafa7b6560db5f3182222395d88aaa6aaac1bc"
|
||||||
|
f"×tamp={str(int(now))}"
|
||||||
|
f"&lang=zh-cn&device_type=mobile&plat_type=ios®ion={region}"
|
||||||
|
f"&authkey={quote(authkey,'utf-8')}"
|
||||||
|
f"&game_biz=hk4e_cn&gacha_type=301&page=1&size=5&end_id=0"
|
||||||
|
)
|
||||||
|
msgs.append(url)
|
||||||
|
await send_forward_msg(bot, group_id, "抽卡链接", qid, msgs)
|
||||||
|
return "成功执行"
|
@ -3,13 +3,13 @@ import re
|
|||||||
from nonebot import on_command
|
from nonebot import on_command
|
||||||
from nonebot.log import logger
|
from nonebot.log import logger
|
||||||
from nonebot.matcher import Matcher
|
from nonebot.matcher import Matcher
|
||||||
from nonebot.params import CommandArg
|
from nonebot.params import Depends, CommandArg
|
||||||
from nonebot.adapters.ntchat.message import Message
|
from nonebot.adapters.onebot.v11 import Message, MessageEvent, MessageSegment
|
||||||
from nonebot.adapters.ntchat import MessageSegment, TextMessageEvent
|
|
||||||
|
|
||||||
from ..config import priority
|
from ..config import priority
|
||||||
from .draw_gcginfo import draw_gcg_info
|
from .draw_gcginfo import draw_gcg_info
|
||||||
from ..utils.db_operation.db_operation import select_db
|
from ..utils.db_operation.db_operation import select_db
|
||||||
|
from ..utils.message.get_image_and_at import ImageAndAt
|
||||||
from ..utils.message.error_reply import CK_HINT, UID_HINT
|
from ..utils.message.error_reply import CK_HINT, UID_HINT
|
||||||
from ..utils.exception.handle_exception import handle_exception
|
from ..utils.exception.handle_exception import handle_exception
|
||||||
|
|
||||||
@ -20,30 +20,26 @@ get_gcg_info = on_command('七圣召唤', aliases={'七圣', '召唤'}, priority
|
|||||||
@get_gcg_info.handle()
|
@get_gcg_info.handle()
|
||||||
@handle_exception('七圣召唤', '获取/发送七圣召唤失败', '@未找到绑定信息\n' + CK_HINT)
|
@handle_exception('七圣召唤', '获取/发送七圣召唤失败', '@未找到绑定信息\n' + CK_HINT)
|
||||||
async def send_gcg_pic(
|
async def send_gcg_pic(
|
||||||
event: TextMessageEvent,
|
event: MessageEvent,
|
||||||
matcher: Matcher,
|
matcher: Matcher,
|
||||||
args: Message = CommandArg(),
|
args: Message = CommandArg(),
|
||||||
|
custom: ImageAndAt = Depends(),
|
||||||
):
|
):
|
||||||
raw_mes = args.extract_plain_text().strip().replace(' ', '')
|
raw_mes = args.extract_plain_text().strip().replace(' ', '')
|
||||||
if "@" in raw_mes:
|
name = ''.join(re.findall('[\u4e00-\u9fa5]', raw_mes))
|
||||||
name = ''.join(re.findall('^[\u4e00-\u9fa5]+', raw_mes.split("@")[0]))
|
if name:
|
||||||
if name:
|
return
|
||||||
return
|
at = custom.get_first_at()
|
||||||
else:
|
|
||||||
name = ''.join(re.findall('^[\u4e00-\u9fa5]+', raw_mes))
|
|
||||||
if name:
|
|
||||||
return
|
|
||||||
logger.info('开始执行[七圣召唤]')
|
logger.info('开始执行[七圣召唤]')
|
||||||
qid = event.from_wxid
|
|
||||||
if event.at_user_list:
|
if at:
|
||||||
for user in event.at_user_list:
|
qid = at
|
||||||
user = user.strip()
|
else:
|
||||||
if user != "":
|
qid = event.user_id
|
||||||
qid = user
|
logger.info('[七圣召唤]QQ: {}'.format(qid))
|
||||||
logger.info('[七圣召唤]WXID: {}'.format(qid))
|
|
||||||
|
|
||||||
# 获取uid
|
# 获取uid
|
||||||
uid = re.findall(r'\d+', raw_mes.split("@")[0])
|
uid = re.findall(r'\d+', raw_mes)
|
||||||
if uid:
|
if uid:
|
||||||
uid = uid[0]
|
uid = uid[0]
|
||||||
else:
|
else:
|
||||||
|
@ -7,8 +7,12 @@ from nonebot.log import logger
|
|||||||
from nonebot.matcher import Matcher
|
from nonebot.matcher import Matcher
|
||||||
from nonebot import on_regex, on_command
|
from nonebot import on_regex, on_command
|
||||||
from nonebot.params import CommandArg, RegexGroup
|
from nonebot.params import CommandArg, RegexGroup
|
||||||
from nonebot.adapters.ntchat import MessageSegment
|
from nonebot.adapters.onebot.v11 import (
|
||||||
from nonebot.adapters.ntchat.message import Message
|
Bot,
|
||||||
|
Message,
|
||||||
|
MessageSegment,
|
||||||
|
GroupMessageEvent,
|
||||||
|
)
|
||||||
|
|
||||||
from .get_card import get_gs_card
|
from .get_card import get_gs_card
|
||||||
from .get_guide import get_gs_guide
|
from .get_guide import get_gs_guide
|
||||||
@ -23,6 +27,7 @@ get_bluekun_pic = on_command('参考面板')
|
|||||||
get_card = on_command('原牌')
|
get_card = on_command('原牌')
|
||||||
get_abyss = on_command('版本深渊')
|
get_abyss = on_command('版本深渊')
|
||||||
|
|
||||||
|
|
||||||
IMG_PATH = Path(__file__).parent / 'img'
|
IMG_PATH = Path(__file__).parent / 'img'
|
||||||
|
|
||||||
|
|
||||||
@ -110,8 +115,10 @@ async def send_gscard_pic(matcher: Matcher, args: Message = CommandArg()):
|
|||||||
|
|
||||||
|
|
||||||
@get_abyss.handle()
|
@get_abyss.handle()
|
||||||
@handle_exception('版本深渊')
|
@handle_exception('原牌')
|
||||||
async def send_abyss_review(
|
async def send_abyss_review(
|
||||||
|
bot: Bot,
|
||||||
|
event: GroupMessageEvent,
|
||||||
matcher: Matcher,
|
matcher: Matcher,
|
||||||
args: Message = CommandArg(),
|
args: Message = CommandArg(),
|
||||||
):
|
):
|
||||||
@ -121,8 +128,22 @@ async def send_abyss_review(
|
|||||||
version = str(args[0])
|
version = str(args[0])
|
||||||
im = await get_review(version)
|
im = await get_review(version)
|
||||||
if isinstance(im, List):
|
if isinstance(im, List):
|
||||||
im = '\n'.join(im)
|
mes = []
|
||||||
await matcher.finish(im)
|
for msg in im:
|
||||||
|
mes.append(
|
||||||
|
{
|
||||||
|
'type': 'node',
|
||||||
|
'data': {
|
||||||
|
'name': '小仙',
|
||||||
|
'uin': '3399214199',
|
||||||
|
'content': msg,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
)
|
||||||
|
await bot.call_api(
|
||||||
|
'send_group_forward_msg', group_id=event.group_id, messages=mes
|
||||||
|
)
|
||||||
|
await matcher.finish()
|
||||||
elif isinstance(im, str):
|
elif isinstance(im, str):
|
||||||
await matcher.finish(im)
|
await matcher.finish(im)
|
||||||
elif isinstance(im, bytes):
|
elif isinstance(im, bytes):
|
||||||
|
@ -5,7 +5,7 @@ from pathlib import Path
|
|||||||
from nonebot import on_command
|
from nonebot import on_command
|
||||||
from nonebot.log import logger
|
from nonebot.log import logger
|
||||||
from nonebot.matcher import Matcher
|
from nonebot.matcher import Matcher
|
||||||
from nonebot.adapters.ntchat import MessageSegment
|
from nonebot.adapters.onebot.v11 import MessageSegment
|
||||||
|
|
||||||
from .draw_help_card import draw_help_img
|
from .draw_help_card import draw_help_img
|
||||||
from ..genshinuid_meta import register_menu
|
from ..genshinuid_meta import register_menu
|
||||||
|
@ -1,11 +1,16 @@
|
|||||||
from typing import Any, Dict
|
from typing import Any, Dict, Union
|
||||||
|
|
||||||
from nonebot.log import logger
|
from nonebot.log import logger
|
||||||
from nonebot.matcher import Matcher
|
from nonebot.matcher import Matcher
|
||||||
from nonebot.params import RegexDict
|
from nonebot.params import RegexDict
|
||||||
from nonebot import on_regex, on_command
|
from nonebot import on_regex, on_command
|
||||||
from nonebot.permission import SUPERUSER
|
from nonebot.permission import SUPERUSER
|
||||||
from nonebot.adapters.ntchat import Bot, MessageSegment, TextMessageEvent
|
from nonebot.adapters.onebot.v11 import (
|
||||||
|
Bot,
|
||||||
|
MessageSegment,
|
||||||
|
GroupMessageEvent,
|
||||||
|
PrivateMessageEvent,
|
||||||
|
)
|
||||||
|
|
||||||
from ..config import priority
|
from ..config import priority
|
||||||
from ..genshinuid_meta import register_menu
|
from ..genshinuid_meta import register_menu
|
||||||
@ -55,7 +60,7 @@ MAP_CHN_NAME = {
|
|||||||
)
|
)
|
||||||
async def send_change_map_msg(
|
async def send_change_map_msg(
|
||||||
bot: Bot,
|
bot: Bot,
|
||||||
event: TextMessageEvent,
|
event: Union[GroupMessageEvent, PrivateMessageEvent],
|
||||||
matcher: Matcher,
|
matcher: Matcher,
|
||||||
):
|
):
|
||||||
if not await SUPERUSER(bot, event):
|
if not await SUPERUSER(bot, event):
|
||||||
@ -124,6 +129,7 @@ async def send_find_map_msg(
|
|||||||
logger.info('本地未缓存,正在渲染...')
|
logger.info('本地未缓存,正在渲染...')
|
||||||
im = await draw_genshin_map(name, map_id, map_name)
|
im = await draw_genshin_map(name, map_id, map_name)
|
||||||
if isinstance(im, str):
|
if isinstance(im, str):
|
||||||
|
# 如果无结果,直接不返回
|
||||||
await matcher.finish()
|
await matcher.finish()
|
||||||
elif isinstance(im, bytes):
|
elif isinstance(im, bytes):
|
||||||
await matcher.finish(MessageSegment.image(im))
|
await matcher.finish(MessageSegment.image(im))
|
||||||
|
@ -6,11 +6,12 @@ from nonebot.matcher import Matcher
|
|||||||
from nonebot import get_bot, on_command
|
from nonebot import get_bot, on_command
|
||||||
from nonebot.permission import SUPERUSER
|
from nonebot.permission import SUPERUSER
|
||||||
from nonebot_plugin_apscheduler import scheduler
|
from nonebot_plugin_apscheduler import scheduler
|
||||||
from nonebot.adapters.ntchat import Bot, MessageEvent, MessageSegment
|
from nonebot.adapters.onebot.v11 import MessageEvent
|
||||||
|
|
||||||
from ..config import SUPERUSERS, priority
|
from ..config import priority
|
||||||
from ..genshinuid_meta import register_menu
|
from ..genshinuid_meta import register_menu
|
||||||
from ..utils.nonebot2.rule import FullCommand
|
from ..utils.nonebot2.rule import FullCommand
|
||||||
|
from ..utils.nonebot2.utils import get_superusers
|
||||||
from ..utils.db_operation.db_operation import config_check
|
from ..utils.db_operation.db_operation import config_check
|
||||||
from ..utils.exception.handle_exception import handle_exception
|
from ..utils.exception.handle_exception import handle_exception
|
||||||
from .daily_mihoyo_bbs_coin import mihoyo_coin, all_daily_mihoyo_bbs_coin
|
from .daily_mihoyo_bbs_coin import mihoyo_coin, all_daily_mihoyo_bbs_coin
|
||||||
@ -19,7 +20,7 @@ bbscoin_scheduler = scheduler
|
|||||||
|
|
||||||
get_mihoyo_coin = on_command('开始获取米游币', priority=priority, rule=FullCommand())
|
get_mihoyo_coin = on_command('开始获取米游币', priority=priority, rule=FullCommand())
|
||||||
all_bbscoin_recheck = on_command(
|
all_bbscoin_recheck = on_command(
|
||||||
'全部重获取', priority=priority, rule=FullCommand()
|
'全部重获取', permission=SUPERUSER, priority=priority, rule=FullCommand()
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@ -39,16 +40,10 @@ all_bbscoin_recheck = on_command(
|
|||||||
),
|
),
|
||||||
)
|
)
|
||||||
async def send_mihoyo_coin(event: MessageEvent, matcher: Matcher):
|
async def send_mihoyo_coin(event: MessageEvent, matcher: Matcher):
|
||||||
wxid_list = []
|
await matcher.send('开始操作……', at_sender=True)
|
||||||
wxid_list.append(event.from_wxid)
|
qid = event.user_id
|
||||||
await matcher.send(
|
|
||||||
MessageSegment.room_at_msg(content='{$@}开始操作……', at_list=wxid_list)
|
|
||||||
)
|
|
||||||
qid = event.from_wxid
|
|
||||||
im = await mihoyo_coin(qid)
|
im = await mihoyo_coin(qid)
|
||||||
await matcher.finish(
|
await matcher.finish(im, at_sender=True)
|
||||||
MessageSegment.room_at_msg(content="{$@}" + f'{im}', at_list=wxid_list)
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
@all_bbscoin_recheck.handle()
|
@all_bbscoin_recheck.handle()
|
||||||
@ -65,13 +60,12 @@ async def send_mihoyo_coin(event: MessageEvent, matcher: Matcher):
|
|||||||
'- <ft color=(238,120,0)>全部重获取</ft>'
|
'- <ft color=(238,120,0)>全部重获取</ft>'
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
async def bbs_recheck(bot: Bot, event: MessageEvent, matcher: Matcher):
|
async def bbs_recheck(
|
||||||
if await SUPERUSER(bot, event):
|
matcher: Matcher,
|
||||||
await matcher.send('已开始执行!可能需要较久时间!')
|
):
|
||||||
await send_daily_mihoyo_bbs_sign()
|
await matcher.send('已开始执行!可能需要较久时间!')
|
||||||
await matcher.finish('执行完成!')
|
await send_daily_mihoyo_bbs_sign()
|
||||||
else:
|
await matcher.finish('执行完成!')
|
||||||
return
|
|
||||||
|
|
||||||
|
|
||||||
# 每日一点十六分进行米游币获取
|
# 每日一点十六分进行米游币获取
|
||||||
@ -86,12 +80,12 @@ async def send_daily_mihoyo_bbs_sign():
|
|||||||
im, im_private = await all_daily_mihoyo_bbs_coin()
|
im, im_private = await all_daily_mihoyo_bbs_coin()
|
||||||
if im_private:
|
if im_private:
|
||||||
for user_id in im_private:
|
for user_id in im_private:
|
||||||
await bot.call_api(
|
await bot.send_private_msg(
|
||||||
'send_text', to_wxid=user_id, content=im_private[user_id]
|
user_id=user_id, message=im_private[user_id]
|
||||||
)
|
)
|
||||||
await asyncio.sleep(5 + random.randint(1, 3))
|
await asyncio.sleep(5 + random.randint(1, 3))
|
||||||
if await config_check('PrivateReport'):
|
if await config_check('PrivateReport'):
|
||||||
for qid in SUPERUSERS:
|
for qid in get_superusers():
|
||||||
await bot.call_api(api='send_text', to_wxid=qid, content=im)
|
await bot.call_api(api='send_private_msg', user_id=qid, message=im)
|
||||||
await asyncio.sleep(5 + random.randint(1, 3))
|
await asyncio.sleep(5 + random.randint(1, 3))
|
||||||
logger.info('米游币获取已结束。')
|
logger.info('米游币获取已结束。')
|
||||||
|
@ -1,22 +1,23 @@
|
|||||||
|
import asyncio
|
||||||
from typing import Any, Tuple
|
from typing import Any, Tuple
|
||||||
|
|
||||||
from nonebot.log import logger
|
from nonebot.log import logger
|
||||||
from nonebot.matcher import Matcher
|
from nonebot.matcher import Matcher
|
||||||
from nonebot.params import RegexGroup
|
from nonebot.params import RegexGroup
|
||||||
from nonebot import on_regex, on_command
|
from nonebot import on_regex, on_command
|
||||||
from nonebot.adapters.ntchat import (
|
from nonebot.adapters.onebot.v11 import (
|
||||||
Bot,
|
Bot,
|
||||||
MessageEvent,
|
MessageEvent,
|
||||||
MessageSegment,
|
MessageSegment,
|
||||||
TextMessageEvent,
|
GroupMessageEvent,
|
||||||
)
|
)
|
||||||
|
|
||||||
from ..config import priority
|
from ..config import priority
|
||||||
from .get_lots_data import get_lots_msg
|
from .get_lots_data import get_lots_msg
|
||||||
from .get_meme_card import get_meme_img
|
from .get_meme_card import get_meme_img
|
||||||
from .get_mys_data import get_task_detail
|
|
||||||
from ..genshinuid_meta import register_menu
|
from ..genshinuid_meta import register_menu
|
||||||
from ..utils.nonebot2.rule import FullCommand
|
from ..utils.nonebot2.rule import FullCommand
|
||||||
|
from .get_mys_data import get_region_task, get_task_detail
|
||||||
from ..utils.exception.handle_exception import handle_exception
|
from ..utils.exception.handle_exception import handle_exception
|
||||||
|
|
||||||
get_task_adv = on_regex(
|
get_task_adv = on_regex(
|
||||||
@ -49,11 +50,10 @@ get_lots = on_command('御神签', priority=priority, rule=FullCommand())
|
|||||||
)
|
)
|
||||||
async def send_task_adv(
|
async def send_task_adv(
|
||||||
bot: Bot,
|
bot: Bot,
|
||||||
event: TextMessageEvent,
|
event: GroupMessageEvent,
|
||||||
matcher: Matcher,
|
matcher: Matcher,
|
||||||
args: Tuple[Any, ...] = RegexGroup(),
|
args: Tuple[Any, ...] = RegexGroup(),
|
||||||
):
|
):
|
||||||
'''
|
|
||||||
if str(args[2]) in ['须弥', '层岩', '海岛']:
|
if str(args[2]) in ['须弥', '层岩', '海岛']:
|
||||||
im = await get_region_task(str(args[2]))
|
im = await get_region_task(str(args[2]))
|
||||||
for i in im:
|
for i in im:
|
||||||
@ -63,9 +63,8 @@ async def send_task_adv(
|
|||||||
await asyncio.sleep(1)
|
await asyncio.sleep(1)
|
||||||
await matcher.finish()
|
await matcher.finish()
|
||||||
else:
|
else:
|
||||||
'''
|
im = await get_task_detail(str(args[2]))
|
||||||
im = await get_task_detail(str(args[2]))
|
await matcher.finish(im)
|
||||||
await matcher.finish(im)
|
|
||||||
|
|
||||||
|
|
||||||
@get_meme.handle()
|
@get_meme.handle()
|
||||||
@ -99,7 +98,7 @@ async def send_meme_card(matcher: Matcher):
|
|||||||
),
|
),
|
||||||
)
|
)
|
||||||
async def send_lots_data(matcher: Matcher, event: MessageEvent):
|
async def send_lots_data(matcher: Matcher, event: MessageEvent):
|
||||||
qid = event.from_wxid
|
qid = event.user_id
|
||||||
logger.info('开始执行[御神签]')
|
logger.info('开始执行[御神签]')
|
||||||
im = await get_lots_msg(qid)
|
im = await get_lots_msg(qid)
|
||||||
await matcher.finish(im)
|
await matcher.finish(im)
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
from nonebot import on_command
|
from nonebot import on_command
|
||||||
from nonebot.log import logger
|
from nonebot.log import logger
|
||||||
from nonebot.matcher import Matcher
|
from nonebot.matcher import Matcher
|
||||||
from nonebot.adapters.ntchat import MessageEvent, MessageSegment
|
from nonebot.adapters.onebot.v11 import MessageEvent, MessageSegment
|
||||||
|
|
||||||
from .note_text import award
|
from .note_text import award
|
||||||
from ..config import priority
|
from ..config import priority
|
||||||
@ -33,23 +33,15 @@ async def send_monthly_data(
|
|||||||
event: MessageEvent,
|
event: MessageEvent,
|
||||||
matcher: Matcher,
|
matcher: Matcher,
|
||||||
):
|
):
|
||||||
qid = event.from_wxid
|
qid = event.user_id
|
||||||
wxid_list = []
|
|
||||||
wxid_list.append(event.from_wxid)
|
|
||||||
uid = await select_db(qid, mode='uid')
|
uid = await select_db(qid, mode='uid')
|
||||||
if isinstance(uid, str):
|
if isinstance(uid, str):
|
||||||
if '未找到绑定的UID' in uid:
|
if '未找到绑定的UID' in uid:
|
||||||
await matcher.finish(
|
await matcher.finish(UID_HINT)
|
||||||
MessageSegment.room_at_msg(
|
|
||||||
content='{$@}' + UID_HINT, at_list=wxid_list
|
|
||||||
)
|
|
||||||
)
|
|
||||||
else:
|
else:
|
||||||
await matcher.finish('发生未知错误...')
|
await matcher.finish('发生未知错误...')
|
||||||
im = await award(uid)
|
im = await award(uid)
|
||||||
await matcher.finish(
|
await matcher.finish(im, at_sender=True)
|
||||||
MessageSegment.room_at_msg(content="{$@}" + f'{im}', at_list=wxid_list)
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
# 群聊内 每月统计 功能
|
# 群聊内 每月统计 功能
|
||||||
@ -73,17 +65,11 @@ async def send_monthly_pic(
|
|||||||
event: MessageEvent,
|
event: MessageEvent,
|
||||||
matcher: Matcher,
|
matcher: Matcher,
|
||||||
):
|
):
|
||||||
qid = event.from_wxid
|
qid = event.user_id
|
||||||
wxid_list = []
|
|
||||||
wxid_list.append(event.from_wxid)
|
|
||||||
uid = await select_db(qid, mode='uid')
|
uid = await select_db(qid, mode='uid')
|
||||||
if isinstance(uid, str):
|
if isinstance(uid, str):
|
||||||
if '未找到绑定的UID' in uid:
|
if '未找到绑定的UID' in uid:
|
||||||
await matcher.finish(
|
await matcher.finish(UID_HINT)
|
||||||
MessageSegment.room_at_msg(
|
|
||||||
content='{$@}' + UID_HINT, at_list=wxid_list
|
|
||||||
)
|
|
||||||
)
|
|
||||||
else:
|
else:
|
||||||
await matcher.finish('发生未知错误...')
|
await matcher.finish('发生未知错误...')
|
||||||
logger.info(f'[原石札记] 开始绘制,UID: {uid}')
|
logger.info(f'[原石札记] 开始绘制,UID: {uid}')
|
||||||
|
@ -1,10 +1,16 @@
|
|||||||
import asyncio
|
import asyncio
|
||||||
|
from typing import Union
|
||||||
|
|
||||||
from nonebot.log import logger
|
from nonebot.log import logger
|
||||||
|
from nonebot.params import Depends
|
||||||
from nonebot.matcher import Matcher
|
from nonebot.matcher import Matcher
|
||||||
from nonebot import get_bot, on_command
|
from nonebot import get_bot, on_command
|
||||||
from nonebot_plugin_apscheduler import scheduler
|
from nonebot_plugin_apscheduler import scheduler
|
||||||
from nonebot.adapters.ntchat import MessageSegment, TextMessageEvent
|
from nonebot.adapters.onebot.v11 import (
|
||||||
|
MessageSegment,
|
||||||
|
GroupMessageEvent,
|
||||||
|
PrivateMessageEvent,
|
||||||
|
)
|
||||||
|
|
||||||
from .notice import get_notice_list
|
from .notice import get_notice_list
|
||||||
from .resin_text import get_resin_text
|
from .resin_text import get_resin_text
|
||||||
@ -13,6 +19,7 @@ from ..genshinuid_meta import register_menu
|
|||||||
from ..utils.nonebot2.rule import FullCommand
|
from ..utils.nonebot2.rule import FullCommand
|
||||||
from ..utils.message.error_reply import UID_HINT
|
from ..utils.message.error_reply import UID_HINT
|
||||||
from ..utils.db_operation.db_operation import select_db
|
from ..utils.db_operation.db_operation import select_db
|
||||||
|
from ..utils.message.get_image_and_at import ImageAndAt
|
||||||
from ..utils.exception.handle_exception import handle_exception
|
from ..utils.exception.handle_exception import handle_exception
|
||||||
|
|
||||||
notice_scheduler = scheduler
|
notice_scheduler = scheduler
|
||||||
@ -40,17 +47,16 @@ get_daily_info = on_command('当前状态', rule=FullCommand())
|
|||||||
),
|
),
|
||||||
)
|
)
|
||||||
async def send_daily_info(
|
async def send_daily_info(
|
||||||
event: TextMessageEvent,
|
event: Union[GroupMessageEvent, PrivateMessageEvent],
|
||||||
matcher: Matcher,
|
matcher: Matcher,
|
||||||
|
custom: ImageAndAt = Depends(),
|
||||||
):
|
):
|
||||||
logger.info('开始执行[每日信息文字版]')
|
logger.info('开始执行[每日信息文字版]')
|
||||||
|
|
||||||
qid = event.from_wxid
|
at = custom.get_first_at()
|
||||||
if event.at_user_list:
|
qid = event.user_id
|
||||||
for user in event.at_user_list:
|
if at:
|
||||||
user = user.strip()
|
qid = at
|
||||||
if user != "":
|
|
||||||
qid = user
|
|
||||||
logger.info('[每日信息文字版]QQ号: {}'.format(qid))
|
logger.info('[每日信息文字版]QQ号: {}'.format(qid))
|
||||||
|
|
||||||
uid: str = await select_db(qid, mode='uid') # type: ignore
|
uid: str = await select_db(qid, mode='uid') # type: ignore
|
||||||
@ -113,19 +119,19 @@ async def notice_job():
|
|||||||
),
|
),
|
||||||
)
|
)
|
||||||
async def send_uid_info(
|
async def send_uid_info(
|
||||||
event: TextMessageEvent,
|
event: Union[GroupMessageEvent, PrivateMessageEvent],
|
||||||
matcher: Matcher,
|
matcher: Matcher,
|
||||||
|
custom: ImageAndAt = Depends(),
|
||||||
):
|
):
|
||||||
logger.info('开始执行[每日信息]')
|
logger.info('开始执行[每日信息]')
|
||||||
qid = event.from_wxid
|
|
||||||
if event.at_user_list:
|
at = custom.get_first_at()
|
||||||
for user in event.at_user_list:
|
qid = event.user_id
|
||||||
user = user.strip()
|
if at:
|
||||||
if user != "":
|
qid = at
|
||||||
qid = user
|
|
||||||
logger.info('[每日信息]QQ号: {}'.format(qid))
|
logger.info('[每日信息]QQ号: {}'.format(qid))
|
||||||
|
|
||||||
im = await get_resin_img(qid) # type:ignore
|
im = await get_resin_img(qid)
|
||||||
if isinstance(im, str):
|
if isinstance(im, str):
|
||||||
await matcher.finish(im)
|
await matcher.finish(im)
|
||||||
elif isinstance(im, bytes):
|
elif isinstance(im, bytes):
|
||||||
|
@ -1,11 +1,16 @@
|
|||||||
import asyncio
|
import asyncio
|
||||||
import threading
|
import threading
|
||||||
|
from typing import Union
|
||||||
|
|
||||||
from nonebot import on_command
|
from nonebot import on_command
|
||||||
from nonebot.log import logger
|
from nonebot.log import logger
|
||||||
from nonebot.matcher import Matcher
|
from nonebot.matcher import Matcher
|
||||||
from nonebot.permission import SUPERUSER
|
from nonebot.permission import SUPERUSER
|
||||||
from nonebot.adapters.ntchat import Bot, TextMessageEvent
|
from nonebot.adapters.onebot.v11 import (
|
||||||
|
Bot,
|
||||||
|
GroupMessageEvent,
|
||||||
|
PrivateMessageEvent,
|
||||||
|
)
|
||||||
|
|
||||||
from ..genshinuid_meta import register_menu
|
from ..genshinuid_meta import register_menu
|
||||||
from ..utils.nonebot2.rule import FullCommand
|
from ..utils.nonebot2.rule import FullCommand
|
||||||
@ -34,7 +39,7 @@ download_resource = on_command('下载全部资源', rule=FullCommand())
|
|||||||
)
|
)
|
||||||
async def send_download_resource_msg(
|
async def send_download_resource_msg(
|
||||||
bot: Bot,
|
bot: Bot,
|
||||||
event: TextMessageEvent,
|
event: Union[GroupMessageEvent, PrivateMessageEvent],
|
||||||
matcher: Matcher,
|
matcher: Matcher,
|
||||||
):
|
):
|
||||||
if not await SUPERUSER(bot, event):
|
if not await SUPERUSER(bot, event):
|
||||||
|
@ -1,11 +1,16 @@
|
|||||||
import re
|
import re
|
||||||
|
from typing import Union
|
||||||
|
|
||||||
from nonebot import on_command
|
from nonebot import on_command
|
||||||
from nonebot.log import logger
|
from nonebot.log import logger
|
||||||
from nonebot.matcher import Matcher
|
from nonebot.matcher import Matcher
|
||||||
from nonebot.params import CommandArg
|
from nonebot.params import Depends, CommandArg
|
||||||
from nonebot.adapters.ntchat.message import Message
|
from nonebot.adapters.onebot.v11 import (
|
||||||
from nonebot.adapters.ntchat import MessageSegment, TextMessageEvent
|
Message,
|
||||||
|
MessageSegment,
|
||||||
|
GroupMessageEvent,
|
||||||
|
PrivateMessageEvent,
|
||||||
|
)
|
||||||
|
|
||||||
from .get_regtime import calc_reg_time
|
from .get_regtime import calc_reg_time
|
||||||
from .draw_roleinfo_card import draw_pic
|
from .draw_roleinfo_card import draw_pic
|
||||||
@ -13,6 +18,7 @@ from ..genshinuid_meta import register_menu
|
|||||||
from ..utils.nonebot2.rule import FullCommand
|
from ..utils.nonebot2.rule import FullCommand
|
||||||
from ..utils.message.error_reply import UID_HINT
|
from ..utils.message.error_reply import UID_HINT
|
||||||
from ..utils.db_operation.db_operation import select_db
|
from ..utils.db_operation.db_operation import select_db
|
||||||
|
from ..utils.message.get_image_and_at import ImageAndAt
|
||||||
from ..utils.exception.handle_exception import handle_exception
|
from ..utils.exception.handle_exception import handle_exception
|
||||||
|
|
||||||
get_role_info = on_command('uid', aliases={'查询'})
|
get_role_info = on_command('uid', aliases={'查询'})
|
||||||
@ -47,31 +53,22 @@ get_reg_time = on_command(
|
|||||||
),
|
),
|
||||||
)
|
)
|
||||||
async def send_role_info(
|
async def send_role_info(
|
||||||
event: TextMessageEvent,
|
event: Union[GroupMessageEvent, PrivateMessageEvent],
|
||||||
matcher: Matcher,
|
matcher: Matcher,
|
||||||
args: Message = CommandArg(),
|
args: Message = CommandArg(),
|
||||||
|
custom: ImageAndAt = Depends(),
|
||||||
):
|
):
|
||||||
raw_mes = args.extract_plain_text().strip().replace(' ', '')
|
raw_mes = args.extract_plain_text().strip().replace(' ', '')
|
||||||
# 若@在文本中 先无视@后面内容 如果@前面有内容则无视并停止执行下方命令 避免与enka查询打架
|
name = ''.join(re.findall('[\u4e00-\u9fa5]', raw_mes))
|
||||||
if "@" in raw_mes:
|
if name:
|
||||||
name = ''.join(re.findall('^[\u4e00-\u9fa5]+', raw_mes.split("@")[0]))
|
return
|
||||||
if name:
|
qid = event.user_id
|
||||||
return
|
at = custom.get_first_at()
|
||||||
else:
|
if at:
|
||||||
name = ''.join(re.findall('^[\u4e00-\u9fa5]+', raw_mes))
|
qid = at
|
||||||
if name:
|
|
||||||
return
|
|
||||||
|
|
||||||
qid = event.from_wxid
|
|
||||||
# 识别@的人 排除空
|
|
||||||
if event.at_user_list:
|
|
||||||
for user in event.at_user_list:
|
|
||||||
user = user.strip()
|
|
||||||
if user != "":
|
|
||||||
qid = user
|
|
||||||
|
|
||||||
# 获取uid
|
# 获取uid
|
||||||
uid = re.findall(r'\d+', raw_mes.split("@")[0])
|
uid = re.findall(r'\d+', raw_mes)
|
||||||
if uid:
|
if uid:
|
||||||
uid = uid[0]
|
uid = uid[0]
|
||||||
else:
|
else:
|
||||||
@ -97,16 +94,14 @@ async def send_role_info(
|
|||||||
|
|
||||||
@get_reg_time.handle()
|
@get_reg_time.handle()
|
||||||
async def regtime(
|
async def regtime(
|
||||||
event: TextMessageEvent,
|
event: Union[GroupMessageEvent, PrivateMessageEvent],
|
||||||
matcher: Matcher,
|
matcher: Matcher,
|
||||||
|
custom: ImageAndAt = Depends(),
|
||||||
):
|
):
|
||||||
qid = event.from_wxid
|
qid = event.user_id
|
||||||
# 识别@的人 排除空
|
at = custom.get_first_at()
|
||||||
if event.at_user_list:
|
if at:
|
||||||
for user in event.at_user_list:
|
qid = at
|
||||||
user = user.strip()
|
|
||||||
if user != "":
|
|
||||||
qid = user
|
|
||||||
|
|
||||||
uid = await select_db(qid, mode='uid')
|
uid = await select_db(qid, mode='uid')
|
||||||
uid = str(uid)
|
uid = str(uid)
|
||||||
|
@ -5,8 +5,7 @@ from nonebot.log import logger
|
|||||||
from nonebot.matcher import Matcher
|
from nonebot.matcher import Matcher
|
||||||
from nonebot import get_bot, on_command
|
from nonebot import get_bot, on_command
|
||||||
from nonebot.permission import SUPERUSER
|
from nonebot.permission import SUPERUSER
|
||||||
from nonebot_plugin_apscheduler import scheduler
|
from nonebot.adapters.onebot.v11 import MessageEvent
|
||||||
from nonebot.adapters.ntchat import Bot, MessageEvent, MessageSegment
|
|
||||||
|
|
||||||
from ..config import priority
|
from ..config import priority
|
||||||
|
|
||||||
@ -15,6 +14,8 @@ try:
|
|||||||
except ImportError:
|
except ImportError:
|
||||||
from .sign import sign_in, daily_sign
|
from .sign import sign_in, daily_sign
|
||||||
|
|
||||||
|
from nonebot_plugin_apscheduler import scheduler
|
||||||
|
|
||||||
from ..genshinuid_meta import register_menu
|
from ..genshinuid_meta import register_menu
|
||||||
from ..utils.nonebot2.rule import FullCommand
|
from ..utils.nonebot2.rule import FullCommand
|
||||||
from ..utils.exception.handle_exception import handle_exception
|
from ..utils.exception.handle_exception import handle_exception
|
||||||
@ -23,7 +24,9 @@ from ..utils.db_operation.db_operation import select_db, config_check
|
|||||||
sign_scheduler = scheduler
|
sign_scheduler = scheduler
|
||||||
|
|
||||||
get_sign = on_command('签到', priority=priority, rule=FullCommand())
|
get_sign = on_command('签到', priority=priority, rule=FullCommand())
|
||||||
all_recheck = on_command('全部重签', priority=priority, rule=FullCommand())
|
all_recheck = on_command(
|
||||||
|
'全部重签', permission=SUPERUSER, priority=priority, rule=FullCommand()
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
# 每日零点半执行米游社原神签到
|
# 每日零点半执行米游社原神签到
|
||||||
@ -53,16 +56,12 @@ async def get_sign_func(
|
|||||||
matcher: Matcher,
|
matcher: Matcher,
|
||||||
):
|
):
|
||||||
logger.info('开始执行[签到]')
|
logger.info('开始执行[签到]')
|
||||||
qid = event.from_wxid
|
qid = event.user_id
|
||||||
wxid_list = []
|
|
||||||
wxid_list.append(event.from_wxid)
|
|
||||||
logger.info('[签到]QQ号: {}'.format(qid))
|
logger.info('[签到]QQ号: {}'.format(qid))
|
||||||
uid = await select_db(qid, mode='uid')
|
uid = await select_db(qid, mode='uid')
|
||||||
logger.info('[签到]UID: {}'.format(uid))
|
logger.info('[签到]UID: {}'.format(uid))
|
||||||
im = await sign_in(uid)
|
im = await sign_in(uid)
|
||||||
await matcher.finish(
|
await matcher.finish(im, at_sender=True)
|
||||||
MessageSegment.room_at_msg(content="{$@}" + f'{im}', at_list=wxid_list)
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
@all_recheck.handle()
|
@all_recheck.handle()
|
||||||
@ -79,9 +78,7 @@ async def get_sign_func(
|
|||||||
'- <ft color=(238,120,0)>全部重签</ft>'
|
'- <ft color=(238,120,0)>全部重签</ft>'
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
async def recheck(bot: Bot, event: MessageEvent, matcher: Matcher):
|
async def recheck(matcher: Matcher):
|
||||||
if not await SUPERUSER(bot, event):
|
|
||||||
return
|
|
||||||
logger.info('开始执行[全部重签]')
|
logger.info('开始执行[全部重签]')
|
||||||
await matcher.send('已开始执行')
|
await matcher.send('已开始执行')
|
||||||
await send_daily_sign()
|
await send_daily_sign()
|
||||||
@ -101,9 +98,9 @@ async def send_daily_sign():
|
|||||||
for qid in private_msg_list:
|
for qid in private_msg_list:
|
||||||
try:
|
try:
|
||||||
await bot.call_api(
|
await bot.call_api(
|
||||||
api='send_text',
|
api='send_private_msg',
|
||||||
to_wxid=qid,
|
user_id=qid,
|
||||||
content=private_msg_list[qid],
|
message=private_msg_list[qid],
|
||||||
)
|
)
|
||||||
except Exception:
|
except Exception:
|
||||||
logger.warning(f'[每日全部签到] QQ {qid} 私聊推送失败!')
|
logger.warning(f'[每日全部签到] QQ {qid} 私聊推送失败!')
|
||||||
@ -125,16 +122,13 @@ async def send_daily_sign():
|
|||||||
report,
|
report,
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
msg_title = group_msg_list[gid]['push_message'].rstrip()
|
msg_title = group_msg_list[gid]['push_message']
|
||||||
# 发送群消息
|
# 发送群消息
|
||||||
at_wxid = []
|
|
||||||
at_wxid.append(group_msg_list[gid]['wxid'])
|
|
||||||
try:
|
try:
|
||||||
await bot.call_api(
|
await bot.call_api(
|
||||||
api='send_room_at_msg',
|
api='send_group_msg',
|
||||||
to_wxid=gid,
|
group_id=gid,
|
||||||
at_list=at_wxid,
|
message=msg_title,
|
||||||
content=msg_title,
|
|
||||||
)
|
)
|
||||||
except Exception:
|
except Exception:
|
||||||
logger.warning(f'[每日全部签到]群 {gid} 推送失败!')
|
logger.warning(f'[每日全部签到]群 {gid} 推送失败!')
|
||||||
|
@ -139,18 +139,16 @@ async def single_daily_sign(uid: str, gid: str, qid: str):
|
|||||||
# 如果失败, 则添加到推送列表
|
# 如果失败, 则添加到推送列表
|
||||||
if im.startswith('签到失败') or im.startswith('网络有点忙'):
|
if im.startswith('签到失败') or im.startswith('网络有点忙'):
|
||||||
# 不用MessageSegment.at(row[2]),因为不方便移植
|
# 不用MessageSegment.at(row[2]),因为不方便移植
|
||||||
message = f'UID:{uid} | {im}'
|
message = f'[CQ:at,qq={qid}] {im}'
|
||||||
group_msg_list[gid]['failed'] += 1
|
group_msg_list[gid]['failed'] += 1
|
||||||
group_msg_list[gid]['push_message'] += message + '\n'
|
group_msg_list[gid]['push_message'] += '\n' + message
|
||||||
else:
|
else:
|
||||||
group_msg_list[gid]['success'] += 1
|
group_msg_list[gid]['success'] += 1
|
||||||
# 没有开启简洁签到, 则每条消息都要携带@信息
|
# 没有开启简洁签到, 则每条消息都要携带@信息
|
||||||
else:
|
else:
|
||||||
# 不用MessageSegment.at(row[2]),因为不方便移植
|
# 不用MessageSegment.at(row[2]),因为不方便移植
|
||||||
# message = '{$@}' + f'UID:{uid} | {im}'
|
message = f'[CQ:at,qq={qid}] {im}'
|
||||||
message = f'UID:{uid} | {im}'
|
group_msg_list[gid]['push_message'] += '\n' + message
|
||||||
group_msg_list[gid]['wxid'] = qid
|
|
||||||
group_msg_list[gid]['push_message'] += message + '\n'
|
|
||||||
group_msg_list[gid]['success'] -= 1
|
group_msg_list[gid]['success'] -= 1
|
||||||
|
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@ from nonebot.matcher import Matcher
|
|||||||
from nonebot.params import RegexGroup
|
from nonebot.params import RegexGroup
|
||||||
from nonebot.permission import SUPERUSER
|
from nonebot.permission import SUPERUSER
|
||||||
from nonebot import get_bot, on_regex, get_driver, on_command
|
from nonebot import get_bot, on_regex, get_driver, on_command
|
||||||
from nonebot.adapters.ntchat import Bot, MessageEvent, MessageSegment
|
from nonebot.adapters.onebot.v11 import Bot, MessageEvent, MessageSegment
|
||||||
|
|
||||||
from ..genshinuid_meta import register_menu
|
from ..genshinuid_meta import register_menu
|
||||||
from ..utils.nonebot2.rule import FullCommand
|
from ..utils.nonebot2.rule import FullCommand
|
||||||
@ -32,15 +32,15 @@ async def _():
|
|||||||
return
|
return
|
||||||
if update_log['send_type'] == 'group':
|
if update_log['send_type'] == 'group':
|
||||||
await bot.call_api(
|
await bot.call_api(
|
||||||
api='send_room_at_msg',
|
api='send_group_msg',
|
||||||
to_wxid=update_log['send_to'],
|
group_id=update_log['send_to'],
|
||||||
content=update_log['msg'],
|
message=update_log['msg'],
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
await bot.call_api(
|
await bot.call_api(
|
||||||
api='send_text',
|
api='send_private_msg',
|
||||||
to_wxid=update_log['send_to'],
|
user_id=update_log['send_to'],
|
||||||
content=update_log['msg'],
|
message=update_log['msg'],
|
||||||
)
|
)
|
||||||
logger.info('遗留信息检查完毕!')
|
logger.info('遗留信息检查完毕!')
|
||||||
|
|
||||||
@ -89,7 +89,7 @@ async def send_restart_msg(
|
|||||||
if not await SUPERUSER(bot, event):
|
if not await SUPERUSER(bot, event):
|
||||||
return
|
return
|
||||||
logger.warning('开始执行[重启]')
|
logger.warning('开始执行[重启]')
|
||||||
qid = event.from_wxid
|
qid = event.user_id
|
||||||
if len(event.get_session_id().split('_')) == 3:
|
if len(event.get_session_id().split('_')) == 3:
|
||||||
send_id = event.get_session_id().split('_')[1]
|
send_id = event.get_session_id().split('_')[1]
|
||||||
send_type = 'group'
|
send_type = 'group'
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
import asyncio
|
|
||||||
from typing import Any, Tuple
|
from typing import Any, Tuple
|
||||||
|
|
||||||
from nonebot.log import logger
|
from nonebot.log import logger
|
||||||
@ -6,39 +5,33 @@ from nonebot.matcher import Matcher
|
|||||||
from nonebot import on_regex, on_command
|
from nonebot import on_regex, on_command
|
||||||
from nonebot.permission import SUPERUSER
|
from nonebot.permission import SUPERUSER
|
||||||
from nonebot.params import CommandArg, RegexGroup
|
from nonebot.params import CommandArg, RegexGroup
|
||||||
from nonebot.adapters.ntchat.message import Message
|
from nonebot.adapters.onebot.v11 import (
|
||||||
from nonebot.adapters.ntchat.permission import PRIVATE
|
PRIVATE_FRIEND,
|
||||||
from nonebot.adapters.ntchat import (
|
|
||||||
Bot,
|
Bot,
|
||||||
|
Message,
|
||||||
MessageEvent,
|
MessageEvent,
|
||||||
MessageSegment,
|
MessageSegment,
|
||||||
TextMessageEvent,
|
GroupMessageEvent,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
from .topup import topup_
|
||||||
from ..config import priority
|
from ..config import priority
|
||||||
from .topup import GOODS, topup_
|
|
||||||
from .qrlogin import qrcode_login
|
from .qrlogin import qrcode_login
|
||||||
|
from .get_ck_help_msg import get_ck_help
|
||||||
from .draw_user_card import get_user_card
|
from .draw_user_card import get_user_card
|
||||||
from ..genshinuid_meta import register_menu
|
from ..genshinuid_meta import register_menu
|
||||||
from ..utils.nonebot2.rule import FullCommand
|
from ..utils.nonebot2.rule import FullCommand
|
||||||
from .get_ck_help_msg import get_ck_help, get_qr_help
|
|
||||||
from ..utils.exception.handle_exception import handle_exception
|
from ..utils.exception.handle_exception import handle_exception
|
||||||
from .add_ck import deal_ck, get_ck_by_stoken, get_ck_by_all_stoken
|
from .add_ck import deal_ck, get_ck_by_stoken, get_ck_by_all_stoken
|
||||||
from ..utils.db_operation.db_operation import bind_db, delete_db, switch_db
|
from ..utils.db_operation.db_operation import bind_db, delete_db, switch_db
|
||||||
|
|
||||||
add_cookie = on_command('添加', permission=PRIVATE)
|
add_cookie = on_command('添加', permission=PRIVATE_FRIEND)
|
||||||
get_ck_msg = on_command(
|
get_ck_msg = on_command(
|
||||||
'绑定ck说明',
|
'绑定ck说明',
|
||||||
aliases={'ck帮助', '绑定ck'},
|
aliases={'ck帮助', '绑定ck'},
|
||||||
block=True,
|
block=True,
|
||||||
rule=FullCommand(),
|
rule=FullCommand(),
|
||||||
)
|
)
|
||||||
get_qr_msg = on_command(
|
|
||||||
'扫码登录说明',
|
|
||||||
aliases={'扫码帮助', '登录帮助', '登陆帮助'},
|
|
||||||
block=True,
|
|
||||||
rule=FullCommand(),
|
|
||||||
)
|
|
||||||
bind_info = on_command(
|
bind_info = on_command(
|
||||||
'绑定信息', priority=priority, block=True, rule=FullCommand()
|
'绑定信息', priority=priority, block=True, rule=FullCommand()
|
||||||
)
|
)
|
||||||
@ -65,40 +58,19 @@ get_qrcode_login = on_command(
|
|||||||
aliases={'扫码登陆', '扫码登入'},
|
aliases={'扫码登陆', '扫码登入'},
|
||||||
rule=FullCommand(),
|
rule=FullCommand(),
|
||||||
)
|
)
|
||||||
get_topup = on_command(
|
get_topup = on_command('gsrc', priority=priority, block=True, aliases={'原神充值'})
|
||||||
'gsrc', priority=priority, block=True, aliases={'原神充值', 'pay'}
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
@get_topup.handle()
|
@get_topup.handle()
|
||||||
async def send_topup(
|
async def send_topup(bot: Bot, event: GroupMessageEvent):
|
||||||
matcher: Matcher, event: TextMessageEvent, args: Message = CommandArg()
|
qid = event.user_id
|
||||||
):
|
goods_id = event.raw_message.replace('原神充值', '').replace('gsrc', '')
|
||||||
# 获取被@的Wxid,排除""
|
if goods_id == "":
|
||||||
qid = event.from_wxid
|
goods_id = 0
|
||||||
if event.at_user_list:
|
else:
|
||||||
for user in event.at_user_list:
|
goods_id = int(goods_id)
|
||||||
user = user.strip()
|
group_id = event.group_id
|
||||||
if user != "":
|
await topup_(bot, qid, group_id, goods_id)
|
||||||
qid = user
|
|
||||||
|
|
||||||
goods_id, method = 0, "alipay"
|
|
||||||
for s in str(args).split():
|
|
||||||
# 支持指定支付方式
|
|
||||||
if "微信" in s or "wx" in s:
|
|
||||||
method = "weixin"
|
|
||||||
continue
|
|
||||||
if "支付宝" in s or "zfb" in s:
|
|
||||||
method = "alipay"
|
|
||||||
# 输入物品别名识别
|
|
||||||
for gId, gData in GOODS.items():
|
|
||||||
if (s == gId) or (s in gData["aliases"]):
|
|
||||||
goods_id = gId
|
|
||||||
break
|
|
||||||
group_id = event.room_wxid
|
|
||||||
await matcher.finish(
|
|
||||||
await topup_(matcher, qid, group_id, goods_id, method)
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
@refresh_all_ck.handle()
|
@refresh_all_ck.handle()
|
||||||
@ -118,7 +90,7 @@ async def send_refresh_ck_msg(
|
|||||||
matcher: Matcher,
|
matcher: Matcher,
|
||||||
):
|
):
|
||||||
logger.info('开始执行[刷新CK]')
|
logger.info('开始执行[刷新CK]')
|
||||||
qid = event.from_wxid
|
qid = event.user_id
|
||||||
im = await get_ck_by_stoken(qid)
|
im = await get_ck_by_stoken(qid)
|
||||||
if isinstance(im, str):
|
if isinstance(im, str):
|
||||||
await matcher.finish(im)
|
await matcher.finish(im)
|
||||||
@ -128,12 +100,13 @@ async def send_refresh_ck_msg(
|
|||||||
@get_qrcode_login.handle()
|
@get_qrcode_login.handle()
|
||||||
async def send_qrcode_login(
|
async def send_qrcode_login(
|
||||||
bot: Bot,
|
bot: Bot,
|
||||||
event: MessageEvent,
|
event: GroupMessageEvent,
|
||||||
matcher: Matcher,
|
matcher: Matcher,
|
||||||
):
|
):
|
||||||
logger.info('开始执行[扫码登陆]')
|
logger.info('开始执行[扫码登陆]')
|
||||||
qid = event.from_wxid
|
qid = event.user_id
|
||||||
im = await qrcode_login(matcher, qid)
|
groupid = event.group_id
|
||||||
|
im = await qrcode_login(bot, groupid, qid)
|
||||||
if not im:
|
if not im:
|
||||||
return
|
return
|
||||||
im = await deal_ck(im, qid)
|
im = await deal_ck(im, qid)
|
||||||
@ -158,7 +131,7 @@ async def send_bind_card(
|
|||||||
matcher: Matcher,
|
matcher: Matcher,
|
||||||
):
|
):
|
||||||
logger.info('开始执行[查询用户绑定状态]')
|
logger.info('开始执行[查询用户绑定状态]')
|
||||||
qid = event.from_wxid
|
qid = event.user_id
|
||||||
im = await get_user_card(qid)
|
im = await get_user_card(qid)
|
||||||
logger.info('[查询用户绑定状态]完成!等待图片发送中...')
|
logger.info('[查询用户绑定状态]完成!等待图片发送中...')
|
||||||
await matcher.finish(MessageSegment.image(im))
|
await matcher.finish(MessageSegment.image(im))
|
||||||
@ -184,7 +157,7 @@ async def send_add_ck_msg(
|
|||||||
event: MessageEvent, matcher: Matcher, args: Message = CommandArg()
|
event: MessageEvent, matcher: Matcher, args: Message = CommandArg()
|
||||||
):
|
):
|
||||||
mes = args.extract_plain_text().strip().replace(' ', '')
|
mes = args.extract_plain_text().strip().replace(' ', '')
|
||||||
qid = event.from_wxid
|
qid = event.user_id
|
||||||
im = await deal_ck(mes, qid)
|
im = await deal_ck(mes, qid)
|
||||||
if isinstance(im, str):
|
if isinstance(im, str):
|
||||||
await matcher.finish(im)
|
await matcher.finish(im)
|
||||||
@ -245,9 +218,7 @@ async def send_link_uid_msg(
|
|||||||
):
|
):
|
||||||
logger.info('开始执行[绑定/解绑用户信息]')
|
logger.info('开始执行[绑定/解绑用户信息]')
|
||||||
logger.info('[绑定/解绑]参数: {}'.format(args))
|
logger.info('[绑定/解绑]参数: {}'.format(args))
|
||||||
qid = event.from_wxid
|
qid = event.user_id
|
||||||
wxid_list = []
|
|
||||||
wxid_list.append(event.from_wxid)
|
|
||||||
logger.info('[绑定/解绑]UserID: {}'.format(qid))
|
logger.info('[绑定/解绑]UserID: {}'.format(qid))
|
||||||
|
|
||||||
if args[0] in ('绑定'):
|
if args[0] in ('绑定'):
|
||||||
@ -265,23 +236,20 @@ async def send_link_uid_msg(
|
|||||||
im = await delete_db(qid, {'UID': args[2]})
|
im = await delete_db(qid, {'UID': args[2]})
|
||||||
else:
|
else:
|
||||||
im = await delete_db(qid, {'MYSID': args[2]})
|
im = await delete_db(qid, {'MYSID': args[2]})
|
||||||
await matcher.finish(
|
await matcher.finish(im, at_sender=True)
|
||||||
MessageSegment.room_at_msg(content="{$@}" + f'{im}', at_list=wxid_list)
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
@get_ck_msg.handle()
|
@get_ck_msg.handle()
|
||||||
async def send_ck_help(matcher: Matcher):
|
async def send_ck_help(bot: Bot, event: GroupMessageEvent):
|
||||||
msg_list = await get_ck_help()
|
msg_list = await get_ck_help()
|
||||||
|
forward_msg = []
|
||||||
for msg in msg_list:
|
for msg in msg_list:
|
||||||
await matcher.send(msg)
|
forward_msg.append(
|
||||||
await asyncio.sleep(0.5)
|
{
|
||||||
|
"type": "node",
|
||||||
|
"data": {"name": "小冰", "uin": "2854196306", "content": msg},
|
||||||
@get_qr_msg.handle()
|
}
|
||||||
async def send_qr_help(matcher: Matcher):
|
)
|
||||||
msg_list = await get_qr_help()
|
await bot.call_api(
|
||||||
for msg in msg_list:
|
'send_group_forward_msg', group_id=event.group_id, messages=forward_msg
|
||||||
await matcher.send(msg)
|
)
|
||||||
await asyncio.sleep(0.5)
|
|
||||||
await asyncio.sleep(0.5)
|
|
||||||
|
@ -55,7 +55,7 @@ async def get_ck_by_all_stoken():
|
|||||||
return im
|
return im
|
||||||
|
|
||||||
|
|
||||||
async def get_ck_by_stoken(qid: str):
|
async def get_ck_by_stoken(qid: int):
|
||||||
uid_list: List = await select_db(qid, mode='list') # type: ignore
|
uid_list: List = await select_db(qid, mode='list') # type: ignore
|
||||||
uid_dict = {uid: qid for uid in uid_list}
|
uid_dict = {uid: qid for uid in uid_list}
|
||||||
im = await refresh_ck_by_uid_list(uid_dict)
|
im = await refresh_ck_by_uid_list(uid_dict)
|
||||||
|
@ -1,241 +0,0 @@
|
|||||||
from io import BytesIO
|
|
||||||
from time import strftime, localtime
|
|
||||||
|
|
||||||
from httpx import AsyncClient
|
|
||||||
from PIL import Image, ImageDraw, ImageFont
|
|
||||||
|
|
||||||
from ..utils.genshin_fonts.genshin_fonts import FONT_ORIGIN_PATH
|
|
||||||
|
|
||||||
|
|
||||||
def font(size: int) -> ImageFont.FreeTypeFont:
|
|
||||||
"""Pillow 绘制字体设置"""
|
|
||||||
return ImageFont.truetype(str(FONT_ORIGIN_PATH), size=size)
|
|
||||||
|
|
||||||
|
|
||||||
# 支付宝充值图片绘制
|
|
||||||
async def draw_ali(
|
|
||||||
uid,
|
|
||||||
item_info: str,
|
|
||||||
item_price: str,
|
|
||||||
item_order_no: str,
|
|
||||||
qrcode,
|
|
||||||
item_icon: str,
|
|
||||||
item_create_time: int,
|
|
||||||
item_id: str,
|
|
||||||
) -> bytes:
|
|
||||||
"""充值图片绘制"""
|
|
||||||
async with AsyncClient() as client:
|
|
||||||
_img = await client.get(item_icon, timeout=10.0)
|
|
||||||
itemImg = Image.open(BytesIO(_img.content)).convert("RGBA")
|
|
||||||
|
|
||||||
themeColor = "#1678ff"
|
|
||||||
warning = 20 if item_id == 'ys_chn_blessofmoon_tier5' else 0
|
|
||||||
res = Image.new("RGBA", (450, 530), themeColor)
|
|
||||||
drawer = ImageDraw.Draw(res)
|
|
||||||
resample = getattr(Image, "Resampling", Image).LANCZOS
|
|
||||||
|
|
||||||
# 头部矩形背景
|
|
||||||
drawer.rectangle(
|
|
||||||
(75, 50 - warning, 375 - 1, 150 - warning), fill="#E5F9FF", width=0
|
|
||||||
)
|
|
||||||
# 商品图片
|
|
||||||
item = itemImg.resize((90, 90), resample=resample)
|
|
||||||
res.paste(item, (80, 55 - warning), item)
|
|
||||||
# 二维码图片
|
|
||||||
qrcode = Image.open(qrcode)
|
|
||||||
qrcode = qrcode.resize((300, 300), resample=resample)
|
|
||||||
res.paste(qrcode, (75, 150 + warning), qrcode)
|
|
||||||
# 商品名称
|
|
||||||
drawer.text(
|
|
||||||
(
|
|
||||||
int(175 + (195 - font(25).getlength(item_info)) / 2),
|
|
||||||
int(70 - warning + (30 - font(25).getbbox(item_info)[-1]) / 2),
|
|
||||||
),
|
|
||||||
item_info,
|
|
||||||
fill="#000000",
|
|
||||||
font=font(25),
|
|
||||||
)
|
|
||||||
# 价格
|
|
||||||
drawer.text(
|
|
||||||
(
|
|
||||||
int(175 + (195 - font(25).getlength(item_price)) / 2),
|
|
||||||
int(105 - warning + (30 - font(25).getbbox(item_price)[-1]) / 2),
|
|
||||||
),
|
|
||||||
item_price,
|
|
||||||
fill="#000000",
|
|
||||||
font=font(25),
|
|
||||||
)
|
|
||||||
# 商品充值 UID
|
|
||||||
drawer.text(
|
|
||||||
(
|
|
||||||
int((460 - font(15).getlength(f"充值到 UID{uid}")) / 2),
|
|
||||||
int(
|
|
||||||
155
|
|
||||||
+ warning
|
|
||||||
+ (20 - font(15).getbbox(f"充值到 UID{uid}")[-1]) / 2
|
|
||||||
),
|
|
||||||
),
|
|
||||||
f"充值到 UID{uid}",
|
|
||||||
fill="#333333",
|
|
||||||
font=font(15),
|
|
||||||
)
|
|
||||||
# 月卡相关商品警告
|
|
||||||
if warning:
|
|
||||||
# 首部矩形背景
|
|
||||||
drawer.rectangle((75, 130, 375 - 1, 170), fill="#eeeeee", width=0)
|
|
||||||
# 转换警告文字
|
|
||||||
warning_text = "特殊情况将直接返还 330 创世结晶"
|
|
||||||
drawer.text(
|
|
||||||
(
|
|
||||||
int((450 - font(15).getlength(warning_text)) / 2),
|
|
||||||
int(130 + (40 - font(15).getbbox(warning_text)[-1]) / 2),
|
|
||||||
),
|
|
||||||
warning_text,
|
|
||||||
fill="#ff5652",
|
|
||||||
font=font(15),
|
|
||||||
)
|
|
||||||
# 图片生成时间
|
|
||||||
timestamp = strftime("%Y-%m-%d %H:%M:%S", localtime(int(item_create_time)))
|
|
||||||
drawer.text(
|
|
||||||
(int((460 - font(15).getlength(timestamp)) / 2), 425 + warning),
|
|
||||||
timestamp,
|
|
||||||
fill="#1678ff",
|
|
||||||
font=font(15),
|
|
||||||
)
|
|
||||||
# 账单信息
|
|
||||||
ticket = f"支付宝账单编号 {item_order_no}"
|
|
||||||
drawer.text(
|
|
||||||
(int((450 - font(15).getlength(ticket)) / 2), 460 + warning),
|
|
||||||
ticket,
|
|
||||||
fill="#ffffff",
|
|
||||||
font=font(15),
|
|
||||||
)
|
|
||||||
# 免责声明
|
|
||||||
drawer.text(
|
|
||||||
(
|
|
||||||
int(
|
|
||||||
(
|
|
||||||
410
|
|
||||||
- font(15).getlength(
|
|
||||||
"免责声明:该充值接口由米游社提供,不对充值结果负责。\n请在充值前仔细阅读米哈游的充值条款。"
|
|
||||||
)
|
|
||||||
/ 2
|
|
||||||
)
|
|
||||||
),
|
|
||||||
490 + warning,
|
|
||||||
),
|
|
||||||
"免责声明:该充值接口由米游社提供,不对充值结果负责。\n 请在充值前仔细阅读米哈游的充值条款。",
|
|
||||||
fill="#FFA500",
|
|
||||||
font=font(12),
|
|
||||||
)
|
|
||||||
buf = BytesIO()
|
|
||||||
res.convert("RGB").save(buf, format="PNG")
|
|
||||||
return buf.getvalue()
|
|
||||||
|
|
||||||
|
|
||||||
# 微信充值图片绘制
|
|
||||||
async def draw_wx(
|
|
||||||
uid,
|
|
||||||
item_info: str,
|
|
||||||
item_price: str,
|
|
||||||
item_order_no: str,
|
|
||||||
item_icon: str,
|
|
||||||
item_create_time: int,
|
|
||||||
item_id: str,
|
|
||||||
) -> bytes:
|
|
||||||
"""充值图片绘制"""
|
|
||||||
async with AsyncClient() as client:
|
|
||||||
_img = await client.get(item_icon, timeout=10.0)
|
|
||||||
itemImg = Image.open(BytesIO(_img.content)).convert("RGBA")
|
|
||||||
|
|
||||||
themeColor = "#29ac66"
|
|
||||||
warning = 20 if item_id == 'ys_chn_blessofmoon_tier5' else 0
|
|
||||||
res = Image.new("RGBA", (450, 200), themeColor)
|
|
||||||
drawer = ImageDraw.Draw(res)
|
|
||||||
resample = getattr(Image, "Resampling", Image).LANCZOS
|
|
||||||
left = (450 - 370) / 2 # (图片宽度 - 矩形宽度) / 2
|
|
||||||
top = (200 - 130) / 2 # (图片高度 - 矩形高度) / 2
|
|
||||||
# 头部矩形背景
|
|
||||||
drawer.rectangle(
|
|
||||||
(
|
|
||||||
left,
|
|
||||||
top - warning,
|
|
||||||
left + 370,
|
|
||||||
top + 130 - warning,
|
|
||||||
), # 使用新的左上角和右下角的坐标
|
|
||||||
fill="#E5F9FF", # 保留原有的填充色
|
|
||||||
width=0, # 保留原有的边框宽度
|
|
||||||
)
|
|
||||||
|
|
||||||
# 商品图片
|
|
||||||
item = itemImg.resize((110, 110), resample=resample)
|
|
||||||
res.paste(item, (55, 50 - warning), item)
|
|
||||||
# 商品名称
|
|
||||||
drawer.text(
|
|
||||||
(
|
|
||||||
int(175 + (215 - font(25).getlength(item_info)) / 2),
|
|
||||||
int(50 - warning + (30 - font(25).getbbox(item_info)[-1]) / 2),
|
|
||||||
),
|
|
||||||
item_info,
|
|
||||||
fill="#000000",
|
|
||||||
font=font(25),
|
|
||||||
)
|
|
||||||
# 价格
|
|
||||||
drawer.text(
|
|
||||||
(
|
|
||||||
int(180 + (195 - font(25).getlength(item_price)) / 2),
|
|
||||||
int(80 - warning + (30 - font(25).getbbox(item_price)[-1]) / 2),
|
|
||||||
),
|
|
||||||
item_price,
|
|
||||||
fill="#000000",
|
|
||||||
font=font(25),
|
|
||||||
)
|
|
||||||
# 商品充值 UID
|
|
||||||
drawer.text(
|
|
||||||
(
|
|
||||||
int(185 + (195 - font(15).getlength(f"充值到 UID{uid}")) / 2),
|
|
||||||
int(
|
|
||||||
120
|
|
||||||
- warning
|
|
||||||
+ (20 - font(15).getbbox(f"充值到 UID{uid}")[-1]) / 2
|
|
||||||
),
|
|
||||||
),
|
|
||||||
f"充值到 UID{uid}",
|
|
||||||
fill="#000000",
|
|
||||||
font=font(15),
|
|
||||||
)
|
|
||||||
# 图片生成时间
|
|
||||||
timestamp = strftime("%Y-%m-%d %H:%M:%S", localtime(int(item_create_time)))
|
|
||||||
drawer.text(
|
|
||||||
(int(185 + (195 - font(15).getlength(timestamp)) / 2), 140 - warning),
|
|
||||||
timestamp,
|
|
||||||
fill="#29ac66",
|
|
||||||
font=font(15),
|
|
||||||
)
|
|
||||||
if warning:
|
|
||||||
# 首部矩形背景
|
|
||||||
drawer.rectangle(
|
|
||||||
(left, top + 110, left + 370, top + 130), fill="#eeeeee", width=0
|
|
||||||
)
|
|
||||||
# 转换警告文字
|
|
||||||
warning_text = "特殊情况将直接返还 330 创世结晶"
|
|
||||||
drawer.text(
|
|
||||||
(
|
|
||||||
int((450 - font(15).getlength(warning_text)) / 2),
|
|
||||||
int(135 + (40 - font(15).getbbox(warning_text)[-1]) / 2),
|
|
||||||
),
|
|
||||||
warning_text,
|
|
||||||
fill="#ff5652",
|
|
||||||
font=font(15),
|
|
||||||
)
|
|
||||||
# 账单信息
|
|
||||||
ticket = f"微信支付账单编号 {item_order_no}"
|
|
||||||
drawer.text(
|
|
||||||
(int((450 - font(15).getlength(ticket)) / 2), 170),
|
|
||||||
ticket,
|
|
||||||
fill="#ffffff",
|
|
||||||
font=font(15),
|
|
||||||
)
|
|
||||||
buf = BytesIO()
|
|
||||||
res.convert("RGB").save(buf, format="PNG")
|
|
||||||
return buf.getvalue()
|
|
@ -29,7 +29,7 @@ gs_font_15 = genshin_font_origin(15)
|
|||||||
gs_font_26 = genshin_font_origin(26)
|
gs_font_26 = genshin_font_origin(26)
|
||||||
|
|
||||||
|
|
||||||
async def get_user_card(qid: str) -> bytes:
|
async def get_user_card(qid: int) -> bytes:
|
||||||
uid_list: List = await select_db(qid, 'list') # type: ignore
|
uid_list: List = await select_db(qid, 'list') # type: ignore
|
||||||
w, h = 500, len(uid_list) * 210 + 330
|
w, h = 500, len(uid_list) * 210 + 330
|
||||||
img = await get_simple_bg(w, h)
|
img = await get_simple_bg(w, h)
|
||||||
|
@ -26,10 +26,6 @@ http://user.mihoyo.com/(国服)
|
|||||||
然后在和机器人的私聊窗口,粘贴发送即可
|
然后在和机器人的私聊窗口,粘贴发送即可
|
||||||
'''
|
'''
|
||||||
|
|
||||||
QRL = '''请在群里发送【扫码登录】并用米游社/原神进行扫码绑定
|
|
||||||
如果使用该功能,请先绑定UID后再进行登录
|
|
||||||
注意不要乱扫他人二维码'''
|
|
||||||
|
|
||||||
|
|
||||||
async def get_ck_help() -> List:
|
async def get_ck_help() -> List:
|
||||||
msg_list = []
|
msg_list = []
|
||||||
@ -38,9 +34,3 @@ async def get_ck_help() -> List:
|
|||||||
msg_list.append(CK_URL)
|
msg_list.append(CK_URL)
|
||||||
msg_list.append(SK_URL)
|
msg_list.append(SK_URL)
|
||||||
return msg_list
|
return msg_list
|
||||||
|
|
||||||
|
|
||||||
async def get_qr_help() -> List:
|
|
||||||
msg_list = []
|
|
||||||
msg_list.append(QRL)
|
|
||||||
return msg_list
|
|
||||||
|
@ -3,15 +3,13 @@ import json
|
|||||||
import base64
|
import base64
|
||||||
import asyncio
|
import asyncio
|
||||||
from http.cookies import SimpleCookie
|
from http.cookies import SimpleCookie
|
||||||
from typing import Any, List, Tuple, Union, Literal, NoReturn
|
from typing import Any, Tuple, Union, Literal
|
||||||
|
|
||||||
import qrcode
|
import qrcode
|
||||||
from nonebot.log import logger
|
from nonebot.log import logger
|
||||||
from nonebot.matcher import Matcher
|
|
||||||
from qrcode.constants import ERROR_CORRECT_L
|
from qrcode.constants import ERROR_CORRECT_L
|
||||||
from nonebot.adapters.ntchat import MessageSegment
|
|
||||||
|
|
||||||
from ..utils.message.error_reply import UID_HINT
|
from ..utils.message.send_msg import send_forward_msg
|
||||||
from ..utils.db_operation.db_operation import select_db
|
from ..utils.db_operation.db_operation import select_db
|
||||||
from ..utils.mhy_api.get_mhy_data import (
|
from ..utils.mhy_api.get_mhy_data import (
|
||||||
check_qrcode,
|
check_qrcode,
|
||||||
@ -22,13 +20,12 @@ from ..utils.mhy_api.get_mhy_data import (
|
|||||||
get_cookie_token_by_stoken,
|
get_cookie_token_by_stoken,
|
||||||
)
|
)
|
||||||
|
|
||||||
disnote = '''免责声明:您将通过扫码完成获取米游社sk以及ck。
|
disnote = '''免责声明:您将通过扫码完成获取米游社sk以及ck。
|
||||||
登录米游社相当于将账号授权于机器人,可能会带来未知的账号风险。
|
本Bot将不会保存您的登录状态。
|
||||||
|
我方仅提供米游社查询及相关游戏内容服务
|
||||||
若您的账号封禁、被盗等处罚与我方无关。
|
若您的账号封禁、被盗等处罚与我方无关。
|
||||||
登录后即代表您同意机器人使用协议并知晓会带来未知的账号风险!
|
害怕风险请勿扫码!
|
||||||
若想取消授权,请到米游社退出登录以清除机器人绑定的登录状态。
|
'''
|
||||||
|
|
||||||
请用米游社/原神扫描下方二维码登录:'''
|
|
||||||
|
|
||||||
|
|
||||||
def get_qrcode_base64(url):
|
def get_qrcode_base64(url):
|
||||||
@ -66,36 +63,41 @@ async def refresh(
|
|||||||
continue
|
continue
|
||||||
if status_data['data']['stat'] == 'Confirmed':
|
if status_data['data']['stat'] == 'Confirmed':
|
||||||
logger.info('二维码已确认')
|
logger.info('二维码已确认')
|
||||||
|
# print(status_data['data']['payload']['raw'])
|
||||||
break
|
break
|
||||||
return True, json.loads(status_data['data']['payload']['raw'])
|
return True, json.loads(status_data['data']['payload']['raw'])
|
||||||
|
|
||||||
|
|
||||||
async def qrcode_login(matcher: Matcher, user_id) -> str:
|
async def qrcode_login(bot, group_id, user_id) -> str:
|
||||||
async def send_group_msg(msg: str, at_list: List) -> NoReturn:
|
async def send_group_msg(msg: str):
|
||||||
await matcher.finish(
|
await bot.call_api(
|
||||||
MessageSegment.room_at_msg(content=msg, at_list=at_list)
|
api='send_group_msg',
|
||||||
|
group_id=group_id,
|
||||||
|
message=msg,
|
||||||
)
|
)
|
||||||
|
return ''
|
||||||
|
|
||||||
wxid_list = []
|
|
||||||
wxid_list.append(user_id)
|
|
||||||
code_data = await create_qrcode_url()
|
code_data = await create_qrcode_url()
|
||||||
try:
|
try:
|
||||||
await matcher.send(
|
im = []
|
||||||
MessageSegment.image(
|
im.append('请使用米游社扫描下方二维码登录:')
|
||||||
f'base64://{get_qrcode_base64(code_data["url"])}'
|
im.append(
|
||||||
)
|
f'[CQ:image,file=base64://{get_qrcode_base64(code_data["url"])}]'
|
||||||
)
|
)
|
||||||
await matcher.send(
|
im.append(
|
||||||
MessageSegment.room_at_msg(
|
'免责声明:您将通过扫码完成获取米游社sk以及ck。\n'
|
||||||
content='{$@}' + disnote, at_list=wxid_list
|
'本Bot将不会保存您的登录状态。\n'
|
||||||
)
|
'我方仅提供米游社查询及相关游戏内容服务,\n'
|
||||||
|
'若您的账号封禁、被盗等处罚与我方无关。\n'
|
||||||
|
'害怕风险请勿扫码~'
|
||||||
)
|
)
|
||||||
|
await send_forward_msg(bot, group_id, "扫码小助手", str(user_id), im)
|
||||||
except Exception:
|
except Exception:
|
||||||
logger.warning('[扫码登录] {user_id} 图片发送失败')
|
logger.warning(f'[扫码登录] {user_id} 图片发送失败')
|
||||||
status, game_token_data = await refresh(code_data)
|
status, game_token_data = await refresh(code_data)
|
||||||
if status:
|
if status:
|
||||||
assert game_token_data is not None # 骗过 pyright
|
assert game_token_data is not None # 骗过 pyright
|
||||||
logger.info('[扫码登录]game_token获取成功')
|
logger.info('game_token获取成功')
|
||||||
cookie_token = await get_cookie_token(**game_token_data)
|
cookie_token = await get_cookie_token(**game_token_data)
|
||||||
stoken_data = await get_stoken_by_game_token(
|
stoken_data = await get_stoken_by_game_token(
|
||||||
account_id=int(game_token_data['uid']),
|
account_id=int(game_token_data['uid']),
|
||||||
@ -109,6 +111,7 @@ async def qrcode_login(matcher: Matcher, user_id) -> str:
|
|||||||
ck = ck['data']['cookie_token']
|
ck = ck['data']['cookie_token']
|
||||||
cookie_check = f'account_id={account_id};cookie_token={ck}'
|
cookie_check = f'account_id={account_id};cookie_token={ck}'
|
||||||
get_uid = await get_mihoyo_bbs_info(account_id, cookie_check)
|
get_uid = await get_mihoyo_bbs_info(account_id, cookie_check)
|
||||||
|
# 剔除除了原神之外的其他游戏
|
||||||
im = None
|
im = None
|
||||||
if get_uid:
|
if get_uid:
|
||||||
for i in get_uid['data']['list']:
|
for i in get_uid['data']['list']:
|
||||||
@ -117,15 +120,18 @@ async def qrcode_login(matcher: Matcher, user_id) -> str:
|
|||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
im = f'你的米游社账号{account_id}尚未绑定原神账号,请前往米游社操作!'
|
im = f'你的米游社账号{account_id}尚未绑定原神账号,请前往米游社操作!'
|
||||||
await send_group_msg(im, wxid_list)
|
return await send_group_msg(im)
|
||||||
else:
|
else:
|
||||||
im = '请求失败, 请稍后再试...'
|
im = '请求失败, 请稍后再试...'
|
||||||
await send_group_msg(im, wxid_list)
|
return await send_group_msg(im)
|
||||||
|
|
||||||
uid_bind = await select_db(user_id, mode='uid')
|
uid_bind = await select_db(user_id, mode='uid')
|
||||||
|
# 没有在gsuid绑定uid的情况
|
||||||
if uid_bind == "未找到绑定的UID~":
|
if uid_bind == "未找到绑定的UID~":
|
||||||
logger.warning('game_token获取失败')
|
logger.warning('game_token获取失败')
|
||||||
await matcher.finish(UID_HINT)
|
im = '你还没有绑定uid,请输入[绑定uid123456]绑定你的uid,再发送[扫码登录]进行绑定'
|
||||||
|
return await send_group_msg(im)
|
||||||
|
# 比对gsuid数据库和扫码登陆获取到的uid
|
||||||
if str(uid_bind) == uid_check or str(uid_bind) == account_id:
|
if str(uid_bind) == uid_check or str(uid_bind) == account_id:
|
||||||
return SimpleCookie(
|
return SimpleCookie(
|
||||||
{
|
{
|
||||||
@ -136,12 +142,9 @@ async def qrcode_login(matcher: Matcher, user_id) -> str:
|
|||||||
}
|
}
|
||||||
).output(header='', sep=';')
|
).output(header='', sep=';')
|
||||||
else:
|
else:
|
||||||
logger.warning('game_token获取失败:非触发者本人扫码')
|
logger.warning('game_token获取失败')
|
||||||
im = (
|
im = 'game_token获取失败:被非绑定指定uid用户扫取,取消绑定,请重新发送[扫码登录]登录账号'
|
||||||
'{$@}' + f'检测到扫码登录UID{uid_check}与绑定UID{uid_bind}不同,'
|
|
||||||
'gametoken获取失败,请重新发送[扫码登录]进行登录'
|
|
||||||
)
|
|
||||||
await send_group_msg(im, wxid_list)
|
|
||||||
else:
|
else:
|
||||||
logger.warning('game_token获取失败')
|
logger.warning('game_token获取失败')
|
||||||
await send_group_msg('{$@}game_token获取失败:二维码已过期', wxid_list)
|
im = 'game_token获取失败:二维码已过期'
|
||||||
|
return await send_group_msg(im)
|
||||||
|
@ -2,73 +2,19 @@ import io
|
|||||||
import base64
|
import base64
|
||||||
import asyncio
|
import asyncio
|
||||||
import traceback
|
import traceback
|
||||||
from typing import List, NoReturn
|
|
||||||
|
|
||||||
import qrcode
|
import qrcode
|
||||||
from nonebot.log import logger
|
from nonebot.log import logger
|
||||||
from nonebot.matcher import Matcher
|
|
||||||
from qrcode.constants import ERROR_CORRECT_L
|
from qrcode.constants import ERROR_CORRECT_L
|
||||||
from nonebot.adapters.ntchat import MessageSegment
|
|
||||||
|
|
||||||
from .draw_topup_img import draw_wx, draw_ali
|
from ..utils.message.send_msg import send_forward_msg
|
||||||
from ..utils.message.error_reply import UID_HINT
|
|
||||||
from ..utils.db_operation.db_operation import select_db
|
from ..utils.db_operation.db_operation import select_db
|
||||||
from ..utils.mhy_api.get_mhy_data import topup, checkorder, fetchgoods
|
from ..utils.mhy_api.get_mhy_data import topup, checkorder, fetchgoods
|
||||||
|
|
||||||
disnote = '''免责声明:该充值接口由米游社提供,不对充值结果负责。
|
disnote = '''免责声明:
|
||||||
请在充值前仔细阅读米哈游的充值条款。'''
|
该充值接口由米游社提供,不对充值结果负责。
|
||||||
|
请在充值前仔细阅读米哈游的充值条款。
|
||||||
GOODS = {
|
'''
|
||||||
0: {
|
|
||||||
"title": "创世结晶×60",
|
|
||||||
"aliases": ["创世结晶x60", "结晶×60", "结晶x60", "创世结晶60", "结晶60"],
|
|
||||||
},
|
|
||||||
1: {
|
|
||||||
"title": "创世结晶×300",
|
|
||||||
"aliases": ["创世结晶x300", "结晶×300", "结晶x300", "创世结晶300", "结晶300", "30"],
|
|
||||||
},
|
|
||||||
2: {
|
|
||||||
"title": "创世结晶×980",
|
|
||||||
"aliases": ["创世结晶x980", "结晶×980", "结晶x980", "创世结晶980", "结晶980", "98"],
|
|
||||||
},
|
|
||||||
3: {
|
|
||||||
"title": "创世结晶×1980",
|
|
||||||
"aliases": [
|
|
||||||
"创世结晶x1980",
|
|
||||||
"结晶×1980",
|
|
||||||
"结晶x1980",
|
|
||||||
"创世结晶1980",
|
|
||||||
"结晶1980",
|
|
||||||
"198",
|
|
||||||
],
|
|
||||||
},
|
|
||||||
4: {
|
|
||||||
"title": "创世结晶×3280",
|
|
||||||
"aliases": [
|
|
||||||
"创世结晶x3280",
|
|
||||||
"结晶×3280",
|
|
||||||
"结晶x3280",
|
|
||||||
"创世结晶3280",
|
|
||||||
"结晶3280",
|
|
||||||
"328",
|
|
||||||
],
|
|
||||||
},
|
|
||||||
5: {
|
|
||||||
"title": "创世结晶×6480",
|
|
||||||
"aliases": [
|
|
||||||
"创世结晶x6480",
|
|
||||||
"结晶×6480",
|
|
||||||
"结晶x6480",
|
|
||||||
"创世结晶6480",
|
|
||||||
"结晶6480",
|
|
||||||
"648",
|
|
||||||
],
|
|
||||||
},
|
|
||||||
6: {
|
|
||||||
"title": "空月祝福",
|
|
||||||
"aliases": ["空月", "祝福", "月卡", "小月卡"],
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
def get_qrcode_base64(url):
|
def get_qrcode_base64(url):
|
||||||
@ -87,7 +33,7 @@ def get_qrcode_base64(url):
|
|||||||
return base64.b64encode(img_byte).decode()
|
return base64.b64encode(img_byte).decode()
|
||||||
|
|
||||||
|
|
||||||
async def refresh(order, uid, oid):
|
async def refresh(order, uid):
|
||||||
times = 0
|
times = 0
|
||||||
while True:
|
while True:
|
||||||
await asyncio.sleep(5)
|
await asyncio.sleep(5)
|
||||||
@ -95,91 +41,53 @@ async def refresh(order, uid, oid):
|
|||||||
if order_status != 900:
|
if order_status != 900:
|
||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
return "{$@}" + f"支付成功!\nUID:{uid}\n订单号:{oid}"
|
return "支付成功"
|
||||||
times += 1
|
times += 1
|
||||||
if times > 60:
|
if times > 60:
|
||||||
return "{$@}" + f"支付超时!\nUID:{uid}\n订单号:{oid}"
|
return "支付超时"
|
||||||
|
|
||||||
|
|
||||||
async def topup_(matcher: Matcher, qid, group_id, goods_id, method):
|
async def topup_(bot, qid, group_id, goods_id):
|
||||||
async def send_group_msg(msg: str, at_list: List) -> NoReturn:
|
async def send_group_msg(msg: str):
|
||||||
await matcher.finish(
|
await bot.call_api(
|
||||||
MessageSegment.room_at_msg(content=msg, at_list=at_list)
|
api='send_group_msg',
|
||||||
|
group_id=group_id,
|
||||||
|
message=msg,
|
||||||
)
|
)
|
||||||
|
return ''
|
||||||
|
|
||||||
wxid_list = []
|
|
||||||
wxid_list.append(qid)
|
|
||||||
uid = await select_db(qid, mode="uid")
|
uid = await select_db(qid, mode="uid")
|
||||||
if uid is None:
|
if uid is None:
|
||||||
await send_group_msg("{$@}" + UID_HINT, wxid_list)
|
await send_group_msg("未绑定米游社账号")
|
||||||
|
return
|
||||||
fetchgoods_data = await fetchgoods()
|
fetchgoods_data = await fetchgoods()
|
||||||
try:
|
try:
|
||||||
goods_data = fetchgoods_data[goods_id]
|
goods_data = fetchgoods_data[goods_id]
|
||||||
except Exception as e:
|
except Exception:
|
||||||
logger.warning(f'[充值]错误 {e}')
|
await send_group_msg("商品不存在,最大为" + str(len(fetchgoods_data) - 1))
|
||||||
await send_group_msg(
|
return
|
||||||
"{$@}商品不存在,最大为" + str(len(fetchgoods_data) - 1), wxid_list
|
|
||||||
)
|
|
||||||
try:
|
try:
|
||||||
order = await topup(uid, goods_data, method)
|
order = await topup(uid, goods_data)
|
||||||
except Exception as e:
|
except Exception:
|
||||||
logger.warning(f"[充值] {group_id} {qid} 错误:{e}")
|
await send_group_msg("出错了,可能是cookie过期或接口出错")
|
||||||
await send_group_msg("{$@}出错了,可能是Cookie过期或接口出错。", wxid_list)
|
logger.warning(f"[充值] {group_id} {qid}")
|
||||||
|
return
|
||||||
try:
|
try:
|
||||||
|
im = []
|
||||||
b64_data = get_qrcode_base64(order["encode_order"])
|
b64_data = get_qrcode_base64(order["encode_order"])
|
||||||
img_b64decode = base64.b64decode(b64_data)
|
qrc = f'[CQ:image,file=base64://{b64_data}]'
|
||||||
qrimage = io.BytesIO(img_b64decode) # 二维码
|
im.append(f"充值uid:{uid}")
|
||||||
item_icon_url: str = goods_data['goods_icon'] # 图标
|
im.append(
|
||||||
item_id: str = goods_data['goods_id'] # 商品内部id
|
f"商品名称:{goods_data['goods_name']}×{str(goods_data['goods_unit'])}"
|
||||||
item_pay_url: str = order['encode_order'] # 支付链接
|
|
||||||
item_name_full = (
|
|
||||||
f"{goods_data['goods_name']}×{str(goods_data['goods_unit'])}"
|
|
||||||
)
|
|
||||||
# 物品名字(非月卡)
|
|
||||||
item_name: str = (
|
|
||||||
item_name_full
|
|
||||||
if int(goods_data['goods_unit']) > 0
|
if int(goods_data['goods_unit']) > 0
|
||||||
else goods_data["goods_name"]
|
else goods_data["goods_name"],
|
||||||
)
|
)
|
||||||
# 物品名字
|
im.append(f'商品价格:{int(order["amount"])/100}')
|
||||||
item_price: str = order["currency"] + str(
|
im.append(f"订单号:{order['order_no']}")
|
||||||
int(order["amount"]) / 100
|
im.append(disnote)
|
||||||
) # 价格
|
im.append(qrc)
|
||||||
item_order_no: str = order['order_no'] # 订单号
|
await send_forward_msg(bot, group_id, "小助手", str(qid), im)
|
||||||
item_create_time: int = order['create_time'] # 创建时间
|
except Exception:
|
||||||
|
|
||||||
if method == 'alipay':
|
|
||||||
img_data = await draw_ali(
|
|
||||||
uid,
|
|
||||||
item_name,
|
|
||||||
item_price,
|
|
||||||
item_order_no,
|
|
||||||
qrimage,
|
|
||||||
item_icon_url,
|
|
||||||
item_create_time,
|
|
||||||
item_id,
|
|
||||||
)
|
|
||||||
return MessageSegment.image(img_data)
|
|
||||||
else:
|
|
||||||
img_data = await draw_wx(
|
|
||||||
uid,
|
|
||||||
item_name,
|
|
||||||
item_price,
|
|
||||||
item_order_no,
|
|
||||||
item_icon_url,
|
|
||||||
item_create_time,
|
|
||||||
item_id,
|
|
||||||
)
|
|
||||||
msg_text = '{$@}' + f' UID:{uid}\n{item_name}\n{item_create_time}'
|
|
||||||
msg_text2 = msg_text + f'\n\nZF:{item_pay_url}\n\n{disnote}'
|
|
||||||
at_msg = MessageSegment.room_at_msg(
|
|
||||||
content=msg_text2, at_list=wxid_list
|
|
||||||
)
|
|
||||||
return MessageSegment.image(img_data) + at_msg
|
|
||||||
|
|
||||||
except Exception as e:
|
|
||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
logger.warning(f"[充值] {group_id} 图片发送失败: {e}")
|
logger.warning(f"[充值] {group_id} 图片发送失败")
|
||||||
await send_group_msg(
|
await send_group_msg(await refresh(order, uid))
|
||||||
await refresh(order, uid, order['order_no']), wxid_list
|
|
||||||
)
|
|
||||||
|
@ -3,13 +3,19 @@ import re
|
|||||||
from nonebot import on_command
|
from nonebot import on_command
|
||||||
from nonebot.matcher import Matcher
|
from nonebot.matcher import Matcher
|
||||||
from nonebot.params import CommandArg
|
from nonebot.params import CommandArg
|
||||||
from nonebot.adapters.ntchat.message import Message
|
from nonebot.adapters.onebot.v11 import (
|
||||||
|
Bot,
|
||||||
|
Message,
|
||||||
|
MessageSegment,
|
||||||
|
GroupMessageEvent,
|
||||||
|
)
|
||||||
|
|
||||||
from ..config import priority
|
from ..config import priority
|
||||||
from ..genshinuid_meta import register_menu
|
from ..genshinuid_meta import register_menu
|
||||||
from ..utils.exception.handle_exception import handle_exception
|
from ..utils.exception.handle_exception import handle_exception
|
||||||
from .get_wiki_text import (
|
from .get_wiki_text import (
|
||||||
char_wiki,
|
char_wiki,
|
||||||
|
audio_wiki,
|
||||||
foods_wiki,
|
foods_wiki,
|
||||||
weapon_wiki,
|
weapon_wiki,
|
||||||
enemies_wiki,
|
enemies_wiki,
|
||||||
@ -26,8 +32,7 @@ get_audio = on_command('语音', priority=priority)
|
|||||||
get_artifacts = on_command('圣遗物', priority=priority)
|
get_artifacts = on_command('圣遗物', priority=priority)
|
||||||
get_food = on_command('食物', priority=priority)
|
get_food = on_command('食物', priority=priority)
|
||||||
|
|
||||||
# 语音暂时不支持
|
|
||||||
'''
|
|
||||||
@get_audio.handle()
|
@get_audio.handle()
|
||||||
@handle_exception('语音', '语音发送失败,可能是FFmpeg环境未配置。')
|
@handle_exception('语音', '语音发送失败,可能是FFmpeg环境未配置。')
|
||||||
@register_menu(
|
@register_menu(
|
||||||
@ -56,7 +61,6 @@ async def send_audio(matcher: Matcher, args: Message = CommandArg()):
|
|||||||
await matcher.finish(im)
|
await matcher.finish(im)
|
||||||
else:
|
else:
|
||||||
await matcher.finish(MessageSegment.record(im))
|
await matcher.finish(MessageSegment.record(im))
|
||||||
'''
|
|
||||||
|
|
||||||
|
|
||||||
@get_enemies.handle()
|
@get_enemies.handle()
|
||||||
@ -149,8 +153,6 @@ async def send_weapon(matcher: Matcher, args: Message = CommandArg()):
|
|||||||
await matcher.finish(im)
|
await matcher.finish(im)
|
||||||
|
|
||||||
|
|
||||||
# 天赋暂时不支持
|
|
||||||
'''
|
|
||||||
@get_talents.handle()
|
@get_talents.handle()
|
||||||
@handle_exception('天赋')
|
@handle_exception('天赋')
|
||||||
@register_menu(
|
@register_menu(
|
||||||
@ -171,6 +173,7 @@ async def send_weapon(matcher: Matcher, args: Message = CommandArg()):
|
|||||||
)
|
)
|
||||||
async def send_talents(
|
async def send_talents(
|
||||||
bot: Bot,
|
bot: Bot,
|
||||||
|
event: GroupMessageEvent,
|
||||||
matcher: Matcher,
|
matcher: Matcher,
|
||||||
args: Message = CommandArg(),
|
args: Message = CommandArg(),
|
||||||
):
|
):
|
||||||
@ -184,10 +187,10 @@ async def send_talents(
|
|||||||
'send_group_forward_msg', group_id=event.group_id, messages=im
|
'send_group_forward_msg', group_id=event.group_id, messages=im
|
||||||
)
|
)
|
||||||
await matcher.finish()
|
await matcher.finish()
|
||||||
|
return
|
||||||
else:
|
else:
|
||||||
im = '参数不正确。'
|
im = '参数不正确。'
|
||||||
await matcher.finish(im)
|
await matcher.finish(im)
|
||||||
'''
|
|
||||||
|
|
||||||
|
|
||||||
@get_char.handle()
|
@get_char.handle()
|
||||||
|
@ -6,7 +6,7 @@ from nonebot import on_command
|
|||||||
from nonebot.log import logger
|
from nonebot.log import logger
|
||||||
from nonebot.matcher import Matcher
|
from nonebot.matcher import Matcher
|
||||||
from nonebot_plugin_apscheduler import scheduler
|
from nonebot_plugin_apscheduler import scheduler
|
||||||
from nonebot.adapters.ntchat import MessageSegment
|
from nonebot.adapters.onebot.v11 import MessageSegment
|
||||||
|
|
||||||
from .draw_abyss_total import TOTAL_IMG, draw_xk_abyss_img
|
from .draw_abyss_total import TOTAL_IMG, draw_xk_abyss_img
|
||||||
from ..utils.exception.handle_exception import handle_exception
|
from ..utils.exception.handle_exception import handle_exception
|
||||||
|
@ -11,7 +11,7 @@ class UidDataDAL:
|
|||||||
def __init__(self, db_session: Session):
|
def __init__(self, db_session: Session):
|
||||||
self.db_session = db_session
|
self.db_session = db_session
|
||||||
|
|
||||||
async def get_user_data(self, userid: str) -> Optional[UidData]:
|
async def get_user_data(self, userid: int) -> Optional[UidData]:
|
||||||
"""
|
"""
|
||||||
:说明:
|
:说明:
|
||||||
获取用户的绑定信息
|
获取用户的绑定信息
|
||||||
@ -37,7 +37,7 @@ class UidDataDAL:
|
|||||||
bind_list.append(item.__dict__)
|
bind_list.append(item.__dict__)
|
||||||
return bind_list
|
return bind_list
|
||||||
|
|
||||||
async def user_exists(self, userid: str) -> bool:
|
async def user_exists(self, userid: int) -> bool:
|
||||||
"""
|
"""
|
||||||
:说明:
|
:说明:
|
||||||
是否存在用户的绑定信息
|
是否存在用户的绑定信息
|
||||||
@ -67,7 +67,7 @@ class UidDataDAL:
|
|||||||
uid_list.extend(item.UID.split("_"))
|
uid_list.extend(item.UID.split("_"))
|
||||||
return uid_list
|
return uid_list
|
||||||
|
|
||||||
async def get_uid_list(self, userid: str) -> List[str]:
|
async def get_uid_list(self, userid: int) -> List[str]:
|
||||||
"""
|
"""
|
||||||
:说明:
|
:说明:
|
||||||
获得用户的绑定UID列表
|
获得用户的绑定UID列表
|
||||||
@ -83,7 +83,7 @@ class UidDataDAL:
|
|||||||
return uid_list
|
return uid_list
|
||||||
return []
|
return []
|
||||||
|
|
||||||
async def get_uid(self, userid: str) -> str:
|
async def get_uid(self, userid: int) -> str:
|
||||||
"""
|
"""
|
||||||
:说明:
|
:说明:
|
||||||
获得用户绑定的UID
|
获得用户绑定的UID
|
||||||
@ -98,14 +98,14 @@ class UidDataDAL:
|
|||||||
else:
|
else:
|
||||||
return '未找到绑定的UID~'
|
return '未找到绑定的UID~'
|
||||||
|
|
||||||
async def switch_uid(self, userid: str, uid: Optional[str] = None) -> str:
|
async def switch_uid(self, userid: int, uid: Optional[str] = None) -> str:
|
||||||
"""
|
"""
|
||||||
:说明:
|
:说明:
|
||||||
切换绑定的UID列表,绑定一个UID的情况下返回无法切换
|
切换绑定的UID列表,绑定一个UID的情况下返回无法切换
|
||||||
切换前 -> 12_13_14
|
切换前 -> 12_13_14
|
||||||
切换后 -> 13_12_14
|
切换后 -> 13_12_14
|
||||||
:参数:
|
:参数:
|
||||||
* userid (int): WX号。
|
* userid (int): QQ号。
|
||||||
* uid (str): 切换的UID, 可选, 不传入的话自动切换下一个。
|
* uid (str): 切换的UID, 可选, 不传入的话自动切换下一个。
|
||||||
:返回:
|
:返回:
|
||||||
* msg (str): 回调信息。
|
* msg (str): 回调信息。
|
||||||
@ -126,7 +126,7 @@ class UidDataDAL:
|
|||||||
else:
|
else:
|
||||||
return '你还没有绑定过UID噢~'
|
return '你还没有绑定过UID噢~'
|
||||||
|
|
||||||
async def get_mysid_list(self, userid: str) -> List[str]:
|
async def get_mysid_list(self, userid: int) -> List[str]:
|
||||||
"""
|
"""
|
||||||
:说明:
|
:说明:
|
||||||
获得用户的绑定MYSID列表
|
获得用户的绑定MYSID列表
|
||||||
@ -142,7 +142,7 @@ class UidDataDAL:
|
|||||||
return mys_list
|
return mys_list
|
||||||
return []
|
return []
|
||||||
|
|
||||||
async def get_mysid(self, userid: str) -> str:
|
async def get_mysid(self, userid: int) -> str:
|
||||||
"""
|
"""
|
||||||
:说明:
|
:说明:
|
||||||
获得用户绑定的MYSID
|
获得用户绑定的MYSID
|
||||||
@ -157,7 +157,7 @@ class UidDataDAL:
|
|||||||
else:
|
else:
|
||||||
return "未找到绑定的MYSID~"
|
return "未找到绑定的MYSID~"
|
||||||
|
|
||||||
async def get_anyid(self, userid: str) -> str:
|
async def get_anyid(self, userid: int) -> str:
|
||||||
"""
|
"""
|
||||||
:说明:
|
:说明:
|
||||||
获得用户绑定的ID信息
|
获得用户绑定的ID信息
|
||||||
@ -176,7 +176,7 @@ class UidDataDAL:
|
|||||||
else:
|
else:
|
||||||
return '未找到绑定的ID信息~'
|
return '未找到绑定的ID信息~'
|
||||||
|
|
||||||
async def bind_db(self, userid: str, data: dict) -> str:
|
async def bind_db(self, userid: int, data: dict) -> str:
|
||||||
"""
|
"""
|
||||||
:说明:
|
:说明:
|
||||||
绑定UID或者MYSID
|
绑定UID或者MYSID
|
||||||
@ -229,7 +229,7 @@ class UidDataDAL:
|
|||||||
await self.db_session.flush() # type: ignore
|
await self.db_session.flush() # type: ignore
|
||||||
return _bind
|
return _bind
|
||||||
|
|
||||||
async def delete_db(self, userid: str, data: Optional[dict]) -> str:
|
async def delete_db(self, userid: int, data: Optional[dict]) -> str:
|
||||||
"""
|
"""
|
||||||
:说明:
|
:说明:
|
||||||
删除用户的绑定UID或者MYSID
|
删除用户的绑定UID或者MYSID
|
||||||
@ -284,7 +284,7 @@ class UidDataDAL:
|
|||||||
|
|
||||||
async def update_db(
|
async def update_db(
|
||||||
self,
|
self,
|
||||||
userid: str,
|
userid: int,
|
||||||
data: Optional[dict],
|
data: Optional[dict],
|
||||||
):
|
):
|
||||||
"""
|
"""
|
||||||
|
@ -33,7 +33,7 @@ class PushData(SQLModel, table=True):
|
|||||||
|
|
||||||
class UidData(SQLModel, table=True):
|
class UidData(SQLModel, table=True):
|
||||||
__table_args__ = {'keep_existing': True}
|
__table_args__ = {'keep_existing': True}
|
||||||
USERID: str = Field(default='WX_100001', primary_key=True, title='WX号')
|
USERID: int = Field(default=100000000, primary_key=True, title='QQ号')
|
||||||
UID: Optional[str] = Field(title='UID')
|
UID: Optional[str] = Field(title='UID')
|
||||||
MYSID: Optional[str] = Field(title='米游社通行证(废弃)')
|
MYSID: Optional[str] = Field(title='米游社通行证(废弃)')
|
||||||
|
|
||||||
@ -42,7 +42,7 @@ class NewCookiesTable(SQLModel, table=True):
|
|||||||
__table_args__ = {'keep_existing': True}
|
__table_args__ = {'keep_existing': True}
|
||||||
UID: int = Field(default=100000000, primary_key=True, title='UID')
|
UID: int = Field(default=100000000, primary_key=True, title='UID')
|
||||||
Cookies: str = Field(title='CK')
|
Cookies: str = Field(title='CK')
|
||||||
QID: str = Field(title='QQ号')
|
QID: int = Field(title='QQ号')
|
||||||
StatusA: str = Field(title='全局推送开关')
|
StatusA: str = Field(title='全局推送开关')
|
||||||
StatusB: str = Field(title='自动签到')
|
StatusB: str = Field(title='自动签到')
|
||||||
StatusC: str = Field(title='自动米游币')
|
StatusC: str = Field(title='自动米游币')
|
||||||
|
@ -92,7 +92,7 @@ async def get_all_stoken() -> List:
|
|||||||
|
|
||||||
|
|
||||||
async def select_db(
|
async def select_db(
|
||||||
userid: str, mode: str = 'auto'
|
userid: int, mode: str = 'auto'
|
||||||
) -> Union[List[str], str, None]:
|
) -> Union[List[str], str, None]:
|
||||||
"""
|
"""
|
||||||
:说明:
|
:说明:
|
||||||
@ -126,14 +126,14 @@ async def select_db(
|
|||||||
return im
|
return im
|
||||||
|
|
||||||
|
|
||||||
async def switch_db(userid: str, uid: Optional[str] = None) -> str:
|
async def switch_db(userid: int, uid: Optional[str] = None) -> str:
|
||||||
"""
|
"""
|
||||||
:说明:
|
:说明:
|
||||||
切换绑定的UID列表,绑定一个UID的情况下返回无法切换
|
切换绑定的UID列表,绑定一个UID的情况下返回无法切换
|
||||||
切换前 -> 12_13_14
|
切换前 -> 12_13_14
|
||||||
切换后 -> 13_14_12
|
切换后 -> 13_14_12
|
||||||
:参数:
|
:参数:
|
||||||
* userid (str): WX号。
|
* userid (str): QQ号。
|
||||||
:返回:
|
:返回:
|
||||||
* im (str): 回调信息。
|
* im (str): 回调信息。
|
||||||
"""
|
"""
|
||||||
@ -144,7 +144,7 @@ async def switch_db(userid: str, uid: Optional[str] = None) -> str:
|
|||||||
return im
|
return im
|
||||||
|
|
||||||
|
|
||||||
async def delete_db(userid: str, data: dict) -> str:
|
async def delete_db(userid: int, data: dict) -> str:
|
||||||
"""
|
"""
|
||||||
:说明:
|
:说明:
|
||||||
删除当前绑定的UID信息
|
删除当前绑定的UID信息
|
||||||
|
@ -184,7 +184,10 @@ async def get_level_pic(level: int) -> Image.Image:
|
|||||||
async def get_qq_avatar(
|
async def get_qq_avatar(
|
||||||
qid: Optional[Union[int, str]] = None, avatar_url: Optional[str] = None
|
qid: Optional[Union[int, str]] = None, avatar_url: Optional[str] = None
|
||||||
) -> Image.Image:
|
) -> Image.Image:
|
||||||
avatar_url = 'https://s2.loli.net/2022/01/31/kwCIl3cF1Z2GxnR.png'
|
if qid:
|
||||||
|
avatar_url = f'http://q1.qlogo.cn/g?b=qq&nk={qid}&s=640'
|
||||||
|
elif avatar_url is None:
|
||||||
|
avatar_url = 'https://q1.qlogo.cn/g?b=qq&nk=3399214199&s=640'
|
||||||
char_pic = Image.open(BytesIO(get(avatar_url).content)).convert('RGBA')
|
char_pic = Image.open(BytesIO(get(avatar_url).content)).convert('RGBA')
|
||||||
return char_pic
|
return char_pic
|
||||||
|
|
||||||
|
@ -52,4 +52,4 @@ async def convert_img(
|
|||||||
else:
|
else:
|
||||||
async with aiofiles.open(img, 'rb') as fp:
|
async with aiofiles.open(img, 'rb') as fp:
|
||||||
img = await fp.read()
|
img = await fp.read()
|
||||||
return f'base64://{b64encode(img).decode()}'
|
return f'[CQ:image,file=base64://{b64encode(img).decode()}]'
|
||||||
|
@ -4,6 +4,7 @@ from typing import Optional
|
|||||||
from nonebot.log import logger
|
from nonebot.log import logger
|
||||||
from nonebot.matcher import Matcher
|
from nonebot.matcher import Matcher
|
||||||
from nonebot.exception import FinishedException
|
from nonebot.exception import FinishedException
|
||||||
|
from nonebot.adapters.onebot.v11 import ActionFailed
|
||||||
|
|
||||||
|
|
||||||
def handle_exception(
|
def handle_exception(
|
||||||
@ -29,6 +30,10 @@ def handle_exception(
|
|||||||
matcher: Matcher = kwargs['matcher']
|
matcher: Matcher = kwargs['matcher']
|
||||||
try:
|
try:
|
||||||
await func(**kwargs)
|
await func(**kwargs)
|
||||||
|
except ActionFailed as e:
|
||||||
|
# 此为bot本身由于风控或网络问题发不出消息,并非代码本身出问题
|
||||||
|
await matcher.send(f'发送消息失败{e.info["wording"]}')
|
||||||
|
logger.exception(f'发送{name}消息失败')
|
||||||
except FinishedException:
|
except FinishedException:
|
||||||
# `finish` 会抛出此异常,应予以抛出而不处理
|
# `finish` 会抛出此异常,应予以抛出而不处理
|
||||||
raise
|
raise
|
||||||
@ -41,7 +46,9 @@ def handle_exception(
|
|||||||
if not fail_msg:
|
if not fail_msg:
|
||||||
fail_msg = log_msg
|
fail_msg = log_msg
|
||||||
if fail_msg[0] == '@':
|
if fail_msg[0] == '@':
|
||||||
await matcher.send(f'{fail_msg[1:]}\n错误信息为{e}')
|
await matcher.send(
|
||||||
|
f'{fail_msg[1:]}\n错误信息为{e}', at_sender=True
|
||||||
|
)
|
||||||
else:
|
else:
|
||||||
await matcher.send(f'{fail_msg}\n错误信息为{e}')
|
await matcher.send(f'{fail_msg}\n错误信息为{e}')
|
||||||
if log_msg[0] == '@':
|
if log_msg[0] == '@':
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
from typing import List
|
from typing import List
|
||||||
|
|
||||||
from nonebot.adapters.ntchat import Bot
|
from nonebot.adapters.onebot.v11 import Bot
|
||||||
|
|
||||||
|
|
||||||
async def get_all_friend_list(bot: Bot) -> List[int]:
|
async def get_all_friend_list(bot: Bot) -> List[int]:
|
||||||
friend_list = []
|
friend_list = []
|
||||||
friend_dict_list = await bot.call_api('get_contacts')
|
friend_dict_list = await bot.call_api('get_friend_list')
|
||||||
for friend in friend_dict_list:
|
for friend in friend_dict_list:
|
||||||
friend_list.append(friend['user_id'])
|
friend_list.append(friend['user_id'])
|
||||||
return friend_list
|
return friend_list
|
||||||
@ -14,7 +14,7 @@ async def get_all_friend_list(bot: Bot) -> List[int]:
|
|||||||
async def get_group_member_list(bot: Bot, group_id: int) -> List[int]:
|
async def get_group_member_list(bot: Bot, group_id: int) -> List[int]:
|
||||||
member_list = []
|
member_list = []
|
||||||
group_member_list = await bot.call_api(
|
group_member_list = await bot.call_api(
|
||||||
'get_room_members', group_id=group_id
|
'get_group_member_list', group_id=group_id
|
||||||
)
|
)
|
||||||
for group_member in group_member_list:
|
for group_member in group_member_list:
|
||||||
member_list.append(group_member['user_id'])
|
member_list.append(group_member['user_id'])
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
from typing import List
|
from typing import List
|
||||||
|
|
||||||
from nonebot.adapters.qqguild import Bot
|
from nonebot.adapters.onebot.v11 import Bot
|
||||||
|
|
||||||
|
|
||||||
# 发送聊天记录
|
# 发送聊天记录
|
||||||
async def send_forward_msg(
|
async def send_forward_msg(
|
||||||
bot: Bot,
|
bot: Bot,
|
||||||
userid: int,
|
groupid: int,
|
||||||
name: str,
|
name: str,
|
||||||
uin: str,
|
uin: str,
|
||||||
msgs: List[str],
|
msgs: List[str],
|
||||||
@ -19,5 +19,5 @@ async def send_forward_msg(
|
|||||||
|
|
||||||
messages = [to_json(msg) for msg in msgs]
|
messages = [to_json(msg) for msg in msgs]
|
||||||
await bot.call_api(
|
await bot.call_api(
|
||||||
"send_private_forward_msg", user_id=userid, messages=messages
|
"send_group_forward_msg", group_id=groupid, messages=messages
|
||||||
)
|
)
|
||||||
|
@ -877,7 +877,7 @@ async def fetchgoods():
|
|||||||
return goodslist["data"]["goods_list"]
|
return goodslist["data"]["goods_list"]
|
||||||
|
|
||||||
|
|
||||||
async def topup(uid, goods, method):
|
async def topup(uid, goods):
|
||||||
device_id = str(uuid.uuid4())
|
device_id = str(uuid.uuid4())
|
||||||
HEADER = copy.deepcopy(_HEADER)
|
HEADER = copy.deepcopy(_HEADER)
|
||||||
HEADER["Cookie"] = await owner_cookies(uid)
|
HEADER["Cookie"] = await owner_cookies(uid)
|
||||||
@ -902,7 +902,7 @@ async def topup(uid, goods, method):
|
|||||||
"price_tier": goods["tier_id"],
|
"price_tier": goods["tier_id"],
|
||||||
# "price_tier": "Tier_1",
|
# "price_tier": "Tier_1",
|
||||||
"currency": "CNY",
|
"currency": "CNY",
|
||||||
"pay_plat": method,
|
"pay_plat": "alipay",
|
||||||
}
|
}
|
||||||
data = {"order": order, "sign": gen_payment_sign(order)}
|
data = {"order": order, "sign": gen_payment_sign(order)}
|
||||||
HEADER["x-rpc-device_id"] = device_id
|
HEADER["x-rpc-device_id"] = device_id
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
from nonebot.rule import Rule
|
from nonebot.rule import Rule
|
||||||
from nonebot.params import Depends, CommandArg
|
from nonebot.params import Depends, CommandArg
|
||||||
from nonebot.adapters.ntchat.message import Message
|
from nonebot.adapters.onebot.v11 import Message
|
||||||
|
|
||||||
|
|
||||||
async def full_command(arg: Message = CommandArg()) -> bool:
|
async def full_command(arg: Message = CommandArg()) -> bool:
|
||||||
|
124
poetry.lock
generated
124
poetry.lock
generated
@ -889,32 +889,32 @@ test = ["objgraph", "psutil"]
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "h11"
|
name = "h11"
|
||||||
version = "0.12.0"
|
version = "0.14.0"
|
||||||
description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1"
|
description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1"
|
||||||
category = "main"
|
category = "main"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.6"
|
python-versions = ">=3.7"
|
||||||
files = [
|
files = [
|
||||||
{file = "h11-0.12.0-py3-none-any.whl", hash = "sha256:36a3cb8c0a032f56e2da7084577878a035d3b61d104230d4bd49c0c6b555a9c6"},
|
{file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"},
|
||||||
{file = "h11-0.12.0.tar.gz", hash = "sha256:47222cb6067e4a307d535814917cd98fd0a57b6788ce715755fa2b6c28b56042"},
|
{file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "httpcore"
|
name = "httpcore"
|
||||||
version = "0.15.0"
|
version = "0.16.3"
|
||||||
description = "A minimal low-level HTTP client."
|
description = "A minimal low-level HTTP client."
|
||||||
category = "main"
|
category = "main"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7"
|
python-versions = ">=3.7"
|
||||||
files = [
|
files = [
|
||||||
{file = "httpcore-0.15.0-py3-none-any.whl", hash = "sha256:1105b8b73c025f23ff7c36468e4432226cbb959176eab66864b8e31c4ee27fa6"},
|
{file = "httpcore-0.16.3-py3-none-any.whl", hash = "sha256:da1fb708784a938aa084bde4feb8317056c55037247c787bd7e19eb2c2949dc0"},
|
||||||
{file = "httpcore-0.15.0.tar.gz", hash = "sha256:18b68ab86a3ccf3e7dc0f43598eaddcf472b602aba29f9aa6ab85fe2ada3980b"},
|
{file = "httpcore-0.16.3.tar.gz", hash = "sha256:c5d6f04e2fc530f39e0c077e6a30caa53f1451096120f1f38b954afd0b17c0cb"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
anyio = ">=3.0.0,<4.0.0"
|
anyio = ">=3.0,<5.0"
|
||||||
certifi = "*"
|
certifi = "*"
|
||||||
h11 = ">=0.11,<0.13"
|
h11 = ">=0.13,<0.15"
|
||||||
sniffio = ">=1.0.0,<2.0.0"
|
sniffio = ">=1.0.0,<2.0.0"
|
||||||
|
|
||||||
[package.extras]
|
[package.extras]
|
||||||
@ -923,19 +923,19 @@ socks = ["socksio (>=1.0.0,<2.0.0)"]
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "httpx"
|
name = "httpx"
|
||||||
version = "0.23.0"
|
version = "0.23.3"
|
||||||
description = "The next generation HTTP client."
|
description = "The next generation HTTP client."
|
||||||
category = "main"
|
category = "main"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7"
|
python-versions = ">=3.7"
|
||||||
files = [
|
files = [
|
||||||
{file = "httpx-0.23.0-py3-none-any.whl", hash = "sha256:42974f577483e1e932c3cdc3cd2303e883cbfba17fe228b0f63589764d7b9c4b"},
|
{file = "httpx-0.23.3-py3-none-any.whl", hash = "sha256:a211fcce9b1254ea24f0cd6af9869b3d29aba40154e947d2a07bb499b3e310d6"},
|
||||||
{file = "httpx-0.23.0.tar.gz", hash = "sha256:f28eac771ec9eb4866d3fb4ab65abd42d38c424739e80c08d8d20570de60b0ef"},
|
{file = "httpx-0.23.3.tar.gz", hash = "sha256:9818458eb565bb54898ccb9b8b251a28785dd4a55afbc23d0eb410754fe7d0f9"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
certifi = "*"
|
certifi = "*"
|
||||||
httpcore = ">=0.15.0,<0.16.0"
|
httpcore = ">=0.15.0,<0.17.0"
|
||||||
rfc3986 = {version = ">=1.3,<2", extras = ["idna2008"]}
|
rfc3986 = {version = ">=1.3,<2", extras = ["idna2008"]}
|
||||||
sniffio = "*"
|
sniffio = "*"
|
||||||
|
|
||||||
@ -1174,6 +1174,79 @@ files = [
|
|||||||
{file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"},
|
{file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"},
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "msgpack"
|
||||||
|
version = "1.0.5"
|
||||||
|
description = "MessagePack serializer"
|
||||||
|
category = "main"
|
||||||
|
optional = false
|
||||||
|
python-versions = "*"
|
||||||
|
files = [
|
||||||
|
{file = "msgpack-1.0.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:525228efd79bb831cf6830a732e2e80bc1b05436b086d4264814b4b2955b2fa9"},
|
||||||
|
{file = "msgpack-1.0.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4f8d8b3bf1ff2672567d6b5c725a1b347fe838b912772aa8ae2bf70338d5a198"},
|
||||||
|
{file = "msgpack-1.0.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cdc793c50be3f01106245a61b739328f7dccc2c648b501e237f0699fe1395b81"},
|
||||||
|
{file = "msgpack-1.0.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5cb47c21a8a65b165ce29f2bec852790cbc04936f502966768e4aae9fa763cb7"},
|
||||||
|
{file = "msgpack-1.0.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e42b9594cc3bf4d838d67d6ed62b9e59e201862a25e9a157019e171fbe672dd3"},
|
||||||
|
{file = "msgpack-1.0.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:55b56a24893105dc52c1253649b60f475f36b3aa0fc66115bffafb624d7cb30b"},
|
||||||
|
{file = "msgpack-1.0.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:1967f6129fc50a43bfe0951c35acbb729be89a55d849fab7686004da85103f1c"},
|
||||||
|
{file = "msgpack-1.0.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:20a97bf595a232c3ee6d57ddaadd5453d174a52594bf9c21d10407e2a2d9b3bd"},
|
||||||
|
{file = "msgpack-1.0.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d25dd59bbbbb996eacf7be6b4ad082ed7eacc4e8f3d2df1ba43822da9bfa122a"},
|
||||||
|
{file = "msgpack-1.0.5-cp310-cp310-win32.whl", hash = "sha256:382b2c77589331f2cb80b67cc058c00f225e19827dbc818d700f61513ab47bea"},
|
||||||
|
{file = "msgpack-1.0.5-cp310-cp310-win_amd64.whl", hash = "sha256:4867aa2df9e2a5fa5f76d7d5565d25ec76e84c106b55509e78c1ede0f152659a"},
|
||||||
|
{file = "msgpack-1.0.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9f5ae84c5c8a857ec44dc180a8b0cc08238e021f57abdf51a8182e915e6299f0"},
|
||||||
|
{file = "msgpack-1.0.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9e6ca5d5699bcd89ae605c150aee83b5321f2115695e741b99618f4856c50898"},
|
||||||
|
{file = "msgpack-1.0.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5494ea30d517a3576749cad32fa27f7585c65f5f38309c88c6d137877fa28a5a"},
|
||||||
|
{file = "msgpack-1.0.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1ab2f3331cb1b54165976a9d976cb251a83183631c88076613c6c780f0d6e45a"},
|
||||||
|
{file = "msgpack-1.0.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28592e20bbb1620848256ebc105fc420436af59515793ed27d5c77a217477705"},
|
||||||
|
{file = "msgpack-1.0.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fe5c63197c55bce6385d9aee16c4d0641684628f63ace85f73571e65ad1c1e8d"},
|
||||||
|
{file = "msgpack-1.0.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ed40e926fa2f297e8a653c954b732f125ef97bdd4c889f243182299de27e2aa9"},
|
||||||
|
{file = "msgpack-1.0.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:b2de4c1c0538dcb7010902a2b97f4e00fc4ddf2c8cda9749af0e594d3b7fa3d7"},
|
||||||
|
{file = "msgpack-1.0.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:bf22a83f973b50f9d38e55c6aade04c41ddda19b00c4ebc558930d78eecc64ed"},
|
||||||
|
{file = "msgpack-1.0.5-cp311-cp311-win32.whl", hash = "sha256:c396e2cc213d12ce017b686e0f53497f94f8ba2b24799c25d913d46c08ec422c"},
|
||||||
|
{file = "msgpack-1.0.5-cp311-cp311-win_amd64.whl", hash = "sha256:6c4c68d87497f66f96d50142a2b73b97972130d93677ce930718f68828b382e2"},
|
||||||
|
{file = "msgpack-1.0.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:a2b031c2e9b9af485d5e3c4520f4220d74f4d222a5b8dc8c1a3ab9448ca79c57"},
|
||||||
|
{file = "msgpack-1.0.5-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f837b93669ce4336e24d08286c38761132bc7ab29782727f8557e1eb21b2080"},
|
||||||
|
{file = "msgpack-1.0.5-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1d46dfe3832660f53b13b925d4e0fa1432b00f5f7210eb3ad3bb9a13c6204a6"},
|
||||||
|
{file = "msgpack-1.0.5-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:366c9a7b9057e1547f4ad51d8facad8b406bab69c7d72c0eb6f529cf76d4b85f"},
|
||||||
|
{file = "msgpack-1.0.5-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:4c075728a1095efd0634a7dccb06204919a2f67d1893b6aa8e00497258bf926c"},
|
||||||
|
{file = "msgpack-1.0.5-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:f933bbda5a3ee63b8834179096923b094b76f0c7a73c1cfe8f07ad608c58844b"},
|
||||||
|
{file = "msgpack-1.0.5-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:36961b0568c36027c76e2ae3ca1132e35123dcec0706c4b7992683cc26c1320c"},
|
||||||
|
{file = "msgpack-1.0.5-cp36-cp36m-win32.whl", hash = "sha256:b5ef2f015b95f912c2fcab19c36814963b5463f1fb9049846994b007962743e9"},
|
||||||
|
{file = "msgpack-1.0.5-cp36-cp36m-win_amd64.whl", hash = "sha256:288e32b47e67f7b171f86b030e527e302c91bd3f40fd9033483f2cacc37f327a"},
|
||||||
|
{file = "msgpack-1.0.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:137850656634abddfb88236008339fdaba3178f4751b28f270d2ebe77a563b6c"},
|
||||||
|
{file = "msgpack-1.0.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0c05a4a96585525916b109bb85f8cb6511db1c6f5b9d9cbcbc940dc6b4be944b"},
|
||||||
|
{file = "msgpack-1.0.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56a62ec00b636583e5cb6ad313bbed36bb7ead5fa3a3e38938503142c72cba4f"},
|
||||||
|
{file = "msgpack-1.0.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ef8108f8dedf204bb7b42994abf93882da1159728a2d4c5e82012edd92c9da9f"},
|
||||||
|
{file = "msgpack-1.0.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:1835c84d65f46900920b3708f5ba829fb19b1096c1800ad60bae8418652a951d"},
|
||||||
|
{file = "msgpack-1.0.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:e57916ef1bd0fee4f21c4600e9d1da352d8816b52a599c46460e93a6e9f17086"},
|
||||||
|
{file = "msgpack-1.0.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:17358523b85973e5f242ad74aa4712b7ee560715562554aa2134d96e7aa4cbbf"},
|
||||||
|
{file = "msgpack-1.0.5-cp37-cp37m-win32.whl", hash = "sha256:cb5aaa8c17760909ec6cb15e744c3ebc2ca8918e727216e79607b7bbce9c8f77"},
|
||||||
|
{file = "msgpack-1.0.5-cp37-cp37m-win_amd64.whl", hash = "sha256:ab31e908d8424d55601ad7075e471b7d0140d4d3dd3272daf39c5c19d936bd82"},
|
||||||
|
{file = "msgpack-1.0.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:b72d0698f86e8d9ddf9442bdedec15b71df3598199ba33322d9711a19f08145c"},
|
||||||
|
{file = "msgpack-1.0.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:379026812e49258016dd84ad79ac8446922234d498058ae1d415f04b522d5b2d"},
|
||||||
|
{file = "msgpack-1.0.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:332360ff25469c346a1c5e47cbe2a725517919892eda5cfaffe6046656f0b7bb"},
|
||||||
|
{file = "msgpack-1.0.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:476a8fe8fae289fdf273d6d2a6cb6e35b5a58541693e8f9f019bfe990a51e4ba"},
|
||||||
|
{file = "msgpack-1.0.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9985b214f33311df47e274eb788a5893a761d025e2b92c723ba4c63936b69b1"},
|
||||||
|
{file = "msgpack-1.0.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:48296af57cdb1d885843afd73c4656be5c76c0c6328db3440c9601a98f303d87"},
|
||||||
|
{file = "msgpack-1.0.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:addab7e2e1fcc04bd08e4eb631c2a90960c340e40dfc4a5e24d2ff0d5a3b3edb"},
|
||||||
|
{file = "msgpack-1.0.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:916723458c25dfb77ff07f4c66aed34e47503b2eb3188b3adbec8d8aa6e00f48"},
|
||||||
|
{file = "msgpack-1.0.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:821c7e677cc6acf0fd3f7ac664c98803827ae6de594a9f99563e48c5a2f27eb0"},
|
||||||
|
{file = "msgpack-1.0.5-cp38-cp38-win32.whl", hash = "sha256:1c0f7c47f0087ffda62961d425e4407961a7ffd2aa004c81b9c07d9269512f6e"},
|
||||||
|
{file = "msgpack-1.0.5-cp38-cp38-win_amd64.whl", hash = "sha256:bae7de2026cbfe3782c8b78b0db9cbfc5455e079f1937cb0ab8d133496ac55e1"},
|
||||||
|
{file = "msgpack-1.0.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:20c784e66b613c7f16f632e7b5e8a1651aa5702463d61394671ba07b2fc9e025"},
|
||||||
|
{file = "msgpack-1.0.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:266fa4202c0eb94d26822d9bfd7af25d1e2c088927fe8de9033d929dd5ba24c5"},
|
||||||
|
{file = "msgpack-1.0.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:18334484eafc2b1aa47a6d42427da7fa8f2ab3d60b674120bce7a895a0a85bdd"},
|
||||||
|
{file = "msgpack-1.0.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:57e1f3528bd95cc44684beda696f74d3aaa8a5e58c816214b9046512240ef437"},
|
||||||
|
{file = "msgpack-1.0.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:586d0d636f9a628ddc6a17bfd45aa5b5efaf1606d2b60fa5d87b8986326e933f"},
|
||||||
|
{file = "msgpack-1.0.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a740fa0e4087a734455f0fc3abf5e746004c9da72fbd541e9b113013c8dc3282"},
|
||||||
|
{file = "msgpack-1.0.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:3055b0455e45810820db1f29d900bf39466df96ddca11dfa6d074fa47054376d"},
|
||||||
|
{file = "msgpack-1.0.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:a61215eac016f391129a013c9e46f3ab308db5f5ec9f25811e811f96962599a8"},
|
||||||
|
{file = "msgpack-1.0.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:362d9655cd369b08fda06b6657a303eb7172d5279997abe094512e919cf74b11"},
|
||||||
|
{file = "msgpack-1.0.5-cp39-cp39-win32.whl", hash = "sha256:ac9dd47af78cae935901a9a500104e2dea2e253207c924cc95de149606dc43cc"},
|
||||||
|
{file = "msgpack-1.0.5-cp39-cp39-win_amd64.whl", hash = "sha256:06f5174b5f8ed0ed919da0e62cbd4ffde676a374aba4020034da05fab67b9164"},
|
||||||
|
{file = "msgpack-1.0.5.tar.gz", hash = "sha256:c075544284eadc5cddc70f4757331d99dcbc16b2bbd4849d15f8aae4cf36d31c"},
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "multidict"
|
name = "multidict"
|
||||||
version = "6.0.4"
|
version = "6.0.4"
|
||||||
@ -1286,19 +1359,20 @@ files = [
|
|||||||
setuptools = "*"
|
setuptools = "*"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "nonebot-adapter-ntchat"
|
name = "nonebot-adapter-onebot"
|
||||||
version = "0.3.5"
|
version = "2.2.1"
|
||||||
description = "a wechat adapter for nonebot2"
|
description = "OneBot(CQHTTP) adapter for nonebot2"
|
||||||
category = "main"
|
category = "main"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.8"
|
python-versions = ">=3.8,<4.0"
|
||||||
files = [
|
files = [
|
||||||
{file = "nonebot-adapter-ntchat-0.3.5.tar.gz", hash = "sha256:52a19d9eeb71a534e5543f3804c5cb68997411f309d9b3c848f27f39de25301e"},
|
{file = "nonebot_adapter_onebot-2.2.1-py3-none-any.whl", hash = "sha256:db22c92a541f243ef427a7080096fb28751fec213bc75b111e2c9ed89e121d94"},
|
||||||
{file = "nonebot_adapter_ntchat-0.3.5-py3-none-any.whl", hash = "sha256:ee8851ac28b6463413066dc32ccae08f478df68c6b37e117d48c43698f5e5881"},
|
{file = "nonebot_adapter_onebot-2.2.1.tar.gz", hash = "sha256:2f77ff2345cc98e493c3bf00a5fd7112cf20e66ebeac062bbb8de56b4d07040e"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
httpx = "0.23.0"
|
msgpack = ">=1.0.3,<2.0.0"
|
||||||
|
nonebot2 = ">=2.0.0-beta.3,<3.0.0"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "nonebot-plugin-apscheduler"
|
name = "nonebot-plugin-apscheduler"
|
||||||
@ -1346,20 +1420,20 @@ websockets = ["websockets (>=10.0,<11.0)"]
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "nonebug"
|
name = "nonebug"
|
||||||
version = "0.2.3"
|
version = "0.3.1"
|
||||||
description = "nonebot2 test framework"
|
description = "nonebot2 test framework"
|
||||||
category = "dev"
|
category = "dev"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.8,<4.0"
|
python-versions = ">=3.8,<4.0"
|
||||||
files = [
|
files = [
|
||||||
{file = "nonebug-0.2.3-py3-none-any.whl", hash = "sha256:5c83bd885899b2857323fa19eff6bbc3f160729453b2f289d8305a99b7b95fc9"},
|
{file = "nonebug-0.3.1-py3-none-any.whl", hash = "sha256:b33e93d486e3f187e890a516ad8d9432ea736e50b0270341ddc78fecfe080d5f"},
|
||||||
{file = "nonebug-0.2.3.tar.gz", hash = "sha256:3e59757b32b6b96cd8c36c4c9fd6050e611b1ffad058ec5fa82cba3f86495c61"},
|
{file = "nonebug-0.3.1.tar.gz", hash = "sha256:96637bbdc406e7673e625492fbe928a9db467cd630d6fd04cfde0999f58f9a7a"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
asgiref = ">=3.4.0,<4.0.0"
|
asgiref = ">=3.4.0,<4.0.0"
|
||||||
async-asgi-testclient = ">=1.4.8,<2.0.0"
|
async-asgi-testclient = ">=1.4.8,<2.0.0"
|
||||||
nonebot2 = ">=2.0.0-beta.1,<3.0.0"
|
nonebot2 = ">=2.0.0-rc.2,<3.0.0"
|
||||||
pytest = ">=7.0.0,<8.0.0"
|
pytest = ">=7.0.0,<8.0.0"
|
||||||
typing-extensions = ">=4.0.0,<5.0.0"
|
typing-extensions = ">=4.0.0,<5.0.0"
|
||||||
|
|
||||||
@ -2378,4 +2452,4 @@ multidict = ">=4.0"
|
|||||||
[metadata]
|
[metadata]
|
||||||
lock-version = "2.0"
|
lock-version = "2.0"
|
||||||
python-versions = "^3.8.1"
|
python-versions = "^3.8.1"
|
||||||
content-hash = "c2a8ce5e8f1cc95b81fb90639eb323995941dd9bbd60372327e7e7067572e8c7"
|
content-hash = "5de28f6fa03c9bf7e2207a3d3688e379c2c4aa7ed672718583c99f7f0907bc1c"
|
||||||
|
@ -18,7 +18,7 @@ extra_standard_library = ["typing_extensions"]
|
|||||||
asyncio_mode = "auto"
|
asyncio_mode = "auto"
|
||||||
|
|
||||||
[build-system]
|
[build-system]
|
||||||
requires = ["poetry-core>=1.0.0"]
|
requires = ["poetry-core>=1.2.0"]
|
||||||
build-backend = "poetry.core.masonry.api"
|
build-backend = "poetry.core.masonry.api"
|
||||||
|
|
||||||
[tool.poetry]
|
[tool.poetry]
|
||||||
@ -28,7 +28,7 @@ description = "基于HoshinoBot/NoneBot2/QQ官方频道/微信Bot的原神面板
|
|||||||
authors = ["KimigaiiWuyi <444835641@qq.com>"]
|
authors = ["KimigaiiWuyi <444835641@qq.com>"]
|
||||||
license = "GPL-3.0-or-later"
|
license = "GPL-3.0-or-later"
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
homepage = "https://github.com/KimigaiiWuyi/GenshinUID/tree/ntchat"
|
homepage = "https://github.com/KimigaiiWuyi/GenshinUID/tree/nonebot2-beta1"
|
||||||
repository = "https://github.com/KimigaiiWuyi/GenshinUID"
|
repository = "https://github.com/KimigaiiWuyi/GenshinUID"
|
||||||
documentation = "https://github.com/KimigaiiWuyi/GenshinUID/wiki"
|
documentation = "https://github.com/KimigaiiWuyi/GenshinUID/wiki"
|
||||||
packages = [
|
packages = [
|
||||||
@ -42,7 +42,7 @@ exclude = ["tests", "deploy"]
|
|||||||
[tool.poetry.dependencies]
|
[tool.poetry.dependencies]
|
||||||
python = "^3.8.1"
|
python = "^3.8.1"
|
||||||
nonebot2 = ">=2.0.0b4"
|
nonebot2 = ">=2.0.0b4"
|
||||||
nonebot-adapter-ntchat = ">=0.3.4"
|
nonebot-adapter-onebot = ">=2.1.1"
|
||||||
httpx = ">=0.23.0"
|
httpx = ">=0.23.0"
|
||||||
beautifulsoup4 = ">=4.11.1"
|
beautifulsoup4 = ">=4.11.1"
|
||||||
lxml = ">=4.9.2"
|
lxml = ">=4.9.2"
|
||||||
@ -70,7 +70,9 @@ flake8 = "^6.0.0"
|
|||||||
black = "^22.12.0"
|
black = "^22.12.0"
|
||||||
isort = "^5.11.5"
|
isort = "^5.11.5"
|
||||||
pre-commit = "^2.21.0"
|
pre-commit = "^2.21.0"
|
||||||
nonebug = "^0.2.2"
|
pycln = "^2.1.2"
|
||||||
|
|
||||||
|
[tool.poetry.group.test.dependencies]
|
||||||
|
nonebug = "^0.3.0"
|
||||||
pytest = "^7.2.0"
|
pytest = "^7.2.0"
|
||||||
pytest-asyncio = "^0.20.3"
|
pytest-asyncio = "^0.20.3"
|
||||||
pycln = "^2.1.2"
|
|
||||||
|
@ -22,14 +22,15 @@ frozenlist==1.3.3 ; python_full_version >= "3.8.1" and python_full_version < "4.
|
|||||||
gitdb==4.0.10 ; python_full_version >= "3.8.1" and python_full_version < "4.0.0"
|
gitdb==4.0.10 ; python_full_version >= "3.8.1" and python_full_version < "4.0.0"
|
||||||
gitpython==3.1.31 ; python_full_version >= "3.8.1" and python_full_version < "4.0.0"
|
gitpython==3.1.31 ; python_full_version >= "3.8.1" and python_full_version < "4.0.0"
|
||||||
greenlet==2.0.2 ; python_full_version >= "3.8.1" and (platform_machine == "aarch64" or platform_machine == "ppc64le" or platform_machine == "x86_64" or platform_machine == "amd64" or platform_machine == "AMD64" or platform_machine == "win32" or platform_machine == "WIN32") and python_full_version < "4.0.0"
|
greenlet==2.0.2 ; python_full_version >= "3.8.1" and (platform_machine == "aarch64" or platform_machine == "ppc64le" or platform_machine == "x86_64" or platform_machine == "amd64" or platform_machine == "AMD64" or platform_machine == "win32" or platform_machine == "WIN32") and python_full_version < "4.0.0"
|
||||||
h11==0.12.0 ; python_full_version >= "3.8.1" and python_full_version < "4.0.0"
|
h11==0.14.0 ; python_full_version >= "3.8.1" and python_full_version < "4.0.0"
|
||||||
httpcore==0.15.0 ; python_full_version >= "3.8.1" and python_full_version < "4.0.0"
|
httpcore==0.16.3 ; python_full_version >= "3.8.1" and python_full_version < "4.0.0"
|
||||||
httpx==0.23.0 ; python_full_version >= "3.8.1" and python_full_version < "4.0.0"
|
httpx==0.23.3 ; python_full_version >= "3.8.1" and python_full_version < "4.0.0"
|
||||||
idna==3.4 ; python_full_version >= "3.8.1" and python_version < "4.0"
|
idna==3.4 ; python_full_version >= "3.8.1" and python_version < "4.0"
|
||||||
loguru==0.6.0 ; python_full_version >= "3.8.1" and python_version < "4.0"
|
loguru==0.6.0 ; python_full_version >= "3.8.1" and python_version < "4.0"
|
||||||
lxml==4.9.2 ; python_full_version >= "3.8.1" and python_full_version < "4.0.0"
|
lxml==4.9.2 ; python_full_version >= "3.8.1" and python_full_version < "4.0.0"
|
||||||
|
msgpack==1.0.5 ; python_full_version >= "3.8.1" and python_version < "4.0"
|
||||||
multidict==6.0.4 ; python_full_version >= "3.8.1" and python_version < "4.0"
|
multidict==6.0.4 ; python_full_version >= "3.8.1" and python_version < "4.0"
|
||||||
nonebot-adapter-ntchat==0.3.5 ; python_full_version >= "3.8.1" and python_full_version < "4.0.0"
|
nonebot-adapter-onebot==2.2.1 ; python_full_version >= "3.8.1" and python_version < "4.0"
|
||||||
nonebot-plugin-apscheduler==0.2.0 ; python_full_version >= "3.8.1" and python_version < "4.0"
|
nonebot-plugin-apscheduler==0.2.0 ; python_full_version >= "3.8.1" and python_version < "4.0"
|
||||||
nonebot2==2.0.0rc3 ; python_full_version >= "3.8.1" and python_version < "4.0"
|
nonebot2==2.0.0rc3 ; python_full_version >= "3.8.1" and python_version < "4.0"
|
||||||
openpyxl==3.1.1 ; python_full_version >= "3.8.1" and python_full_version < "4.0.0"
|
openpyxl==3.1.1 ; python_full_version >= "3.8.1" and python_full_version < "4.0.0"
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
LOG_LEVEL=TRACE
|
LOG_LEVEL=TRACE
|
||||||
NICKNAME=["test"]
|
NICKNAME=["test"]
|
||||||
SUPERUSERS=["10000"]
|
SUPERUSERS=["onebot:10000","10001","other:10002","abcdef"]
|
||||||
COMMAND_START=["", "/"]
|
COMMAND_START=["", "/"]
|
||||||
|
DRIVER="~none"
|
||||||
|
@ -1,34 +1,23 @@
|
|||||||
from typing import TYPE_CHECKING, Optional
|
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
import nonebot
|
||||||
|
from nonebug import NONEBOT_INIT_KWARGS
|
||||||
|
from nonebot.adapters.onebot.v11 import Adapter
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
PLUGINS = ["meta", "adv", "etcimg", "guide"]
|
||||||
from nonebot.plugin import Plugin
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture(scope="session", autouse=True)
|
||||||
def load_metadata(nonebug_init: None) -> Optional["Plugin"]:
|
def load_bot():
|
||||||
import nonebot
|
driver = nonebot.get_driver()
|
||||||
|
driver.register_adapter(Adapter)
|
||||||
|
|
||||||
return nonebot.load_plugin("GenshinUID.genshinuid_meta")
|
nonebot.load_all_plugins(
|
||||||
|
[f"GenshinUID.genshinuid_{name}" for name in PLUGINS], []
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
def pytest_configure(config: pytest.Config):
|
||||||
def load_adv(nonebug_init: None) -> Optional["Plugin"]:
|
config.stash[NONEBOT_INIT_KWARGS] = {
|
||||||
import nonebot
|
"genshinuid_disabled_plugins": {"xkdata", "abyss", "adv"},
|
||||||
|
"genshinuid_priority": 5,
|
||||||
return nonebot.load_plugin("GenshinUID.genshinuid_adv")
|
}
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
|
||||||
def load_etc(nonebug_init: None) -> Optional["Plugin"]:
|
|
||||||
import nonebot
|
|
||||||
|
|
||||||
return nonebot.load_plugin("GenshinUID.genshinuid_etcimg")
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
|
||||||
def load_guide(nonebug_init: None) -> Optional["Plugin"]:
|
|
||||||
import nonebot
|
|
||||||
|
|
||||||
return nonebot.load_plugin("GenshinUID.genshinuid_guide")
|
|
||||||
|
@ -6,12 +6,18 @@ MESSAGE = """「安柏」
|
|||||||
推荐5★武器:阿莫斯之弓、天空之翼、终末嗟叹之诗
|
推荐5★武器:阿莫斯之弓、天空之翼、终末嗟叹之诗
|
||||||
推荐4★武器:绝弦
|
推荐4★武器:绝弦
|
||||||
推荐圣遗物搭配:
|
推荐圣遗物搭配:
|
||||||
[昔日宗室之仪]四件套"""
|
[昔日宗室之仪]四件套
|
||||||
|
-=-=-=-=-=-=-=-=-=-
|
||||||
|
备注:
|
||||||
|
原神御三家之一,必胜客联动看板角色之一;
|
||||||
|
身份西风骑士团侦查骑士,蒙德飞行冠军,柏菈图的拼图(误);
|
||||||
|
人送外号解谜点火真君/打火姬
|
||||||
|
通常情况下,安柏的大世界解谜意义大于其深渊实战意义,建议根据实际需求选择投入资源培养"""
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.asyncio
|
@pytest.mark.asyncio
|
||||||
@pytest.mark.parametrize(argnames="alias", argvalues=["安柏用什么", "安柏怎么养"])
|
@pytest.mark.parametrize(argnames="alias", argvalues=["安柏用什么", "安柏怎么养"])
|
||||||
async def test_adv_char_chat(app: App, alias, load_adv: None):
|
async def test_adv_char_chat(app: App, alias):
|
||||||
from utils import make_event
|
from utils import make_event
|
||||||
from nonebot.adapters.onebot.v11 import Bot, Message
|
from nonebot.adapters.onebot.v11 import Bot, Message
|
||||||
|
|
||||||
|
8
tests/test_base.py
Normal file
8
tests/test_base.py
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
from nonebug import App
|
||||||
|
|
||||||
|
|
||||||
|
def test_config(app: App):
|
||||||
|
from GenshinUID import config
|
||||||
|
|
||||||
|
assert config.config.disabled_plugins == {"xkdata", "abyss", "adv"}
|
||||||
|
assert config.priority == 5
|
@ -6,7 +6,7 @@ from nonebug import App
|
|||||||
|
|
||||||
@pytest.mark.asyncio
|
@pytest.mark.asyncio
|
||||||
@pytest.mark.parametrize(argnames="alias", argvalues=["版本规划", "原石预估"])
|
@pytest.mark.parametrize(argnames="alias", argvalues=["版本规划", "原石预估"])
|
||||||
async def test_get_primogems_data(app: App, alias, load_etc: None):
|
async def test_get_primogems_data(app: App, alias):
|
||||||
from utils import make_event
|
from utils import make_event
|
||||||
from nonebot.adapters.onebot.v11 import Bot, Message, MessageSegment
|
from nonebot.adapters.onebot.v11 import Bot, Message, MessageSegment
|
||||||
|
|
||||||
@ -37,7 +37,7 @@ async def test_get_primogems_data(app: App, alias, load_etc: None):
|
|||||||
|
|
||||||
|
|
||||||
@pytest.mark.asyncio
|
@pytest.mark.asyncio
|
||||||
async def test_primogems_version(app: App, load_etc: None):
|
async def test_primogems_version(app: App):
|
||||||
from utils import make_event
|
from utils import make_event
|
||||||
from nonebot.adapters.onebot.v11 import Bot, Message, MessageSegment
|
from nonebot.adapters.onebot.v11 import Bot, Message, MessageSegment
|
||||||
|
|
||||||
@ -68,7 +68,7 @@ async def test_primogems_version(app: App, load_etc: None):
|
|||||||
|
|
||||||
|
|
||||||
@pytest.mark.asyncio
|
@pytest.mark.asyncio
|
||||||
async def test_primogems_failed(app: App, load_etc: None):
|
async def test_primogems_failed(app: App):
|
||||||
from utils import make_event
|
from utils import make_event
|
||||||
from nonebot.adapters.onebot.v11 import Bot, Message
|
from nonebot.adapters.onebot.v11 import Bot, Message
|
||||||
|
|
||||||
@ -100,7 +100,7 @@ async def test_primogems_failed(app: App, load_etc: None):
|
|||||||
"伤害乘区",
|
"伤害乘区",
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
async def test_get_img_data(app: App, alias, load_etc: None):
|
async def test_get_img_data(app: App, alias):
|
||||||
from utils import make_event
|
from utils import make_event
|
||||||
from nonebot.adapters.onebot.v11 import Bot, Message, MessageSegment
|
from nonebot.adapters.onebot.v11 import Bot, Message, MessageSegment
|
||||||
|
|
||||||
|
@ -3,72 +3,72 @@ from pathlib import Path
|
|||||||
import pytest
|
import pytest
|
||||||
from nonebug import App
|
from nonebug import App
|
||||||
|
|
||||||
|
# TODO: update guide tests
|
||||||
|
# @pytest.mark.asyncio
|
||||||
|
# @pytest.mark.parametrize(
|
||||||
|
# argnames="alias",
|
||||||
|
# argvalues=[
|
||||||
|
# "钟离推荐",
|
||||||
|
# "钟离攻略",
|
||||||
|
# "岩王爷攻略", # alias
|
||||||
|
# ],
|
||||||
|
# )
|
||||||
|
# async def test_get_guide_pic(app: App, alias ):
|
||||||
|
# from utils import make_event
|
||||||
|
# from nonebot.adapters.onebot.v11 import Bot, Message, MessageSegment
|
||||||
|
|
||||||
@pytest.mark.asyncio
|
# from GenshinUID.genshinuid_guide import get_guide_pic
|
||||||
@pytest.mark.parametrize(
|
|
||||||
argnames="alias",
|
|
||||||
argvalues=[
|
|
||||||
"钟离推荐",
|
|
||||||
"钟离攻略",
|
|
||||||
"岩王爷攻略", # alias
|
|
||||||
],
|
|
||||||
)
|
|
||||||
async def test_get_guide_pic(app: App, alias, load_guide: None):
|
|
||||||
from utils import make_event
|
|
||||||
from nonebot.adapters.onebot.v11 import Bot, Message, MessageSegment
|
|
||||||
|
|
||||||
from GenshinUID.genshinuid_guide import get_guide_pic
|
# async with app.test_matcher(get_guide_pic) as ctx:
|
||||||
|
# bot = ctx.create_bot(base=Bot)
|
||||||
|
|
||||||
async with app.test_matcher(get_guide_pic) as ctx:
|
# event = make_event(message=Message(alias))
|
||||||
bot = ctx.create_bot(base=Bot)
|
# ctx.receive_event(bot, event)
|
||||||
|
# ctx.should_call_send(
|
||||||
event = make_event(message=Message(alias))
|
# event,
|
||||||
ctx.receive_event(bot, event)
|
# MessageSegment.image(
|
||||||
ctx.should_call_send(
|
# "https://file.microgg.cn/MiniGG/guide/钟离.jpg"
|
||||||
event,
|
# ),
|
||||||
MessageSegment.image(
|
# True,
|
||||||
"https://file.microgg.cn/MiniGG/guide/钟离.jpg"
|
# )
|
||||||
),
|
# ctx.should_finished()
|
||||||
True,
|
|
||||||
)
|
|
||||||
ctx.should_finished()
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.asyncio
|
# @pytest.mark.asyncio
|
||||||
async def test_get_guide_pic_traveler(app: App, load_guide: None):
|
# async def test_get_guide_pic_traveler(app: App ):
|
||||||
from utils import make_event
|
# from utils import make_event
|
||||||
from nonebot.adapters.onebot.v11 import Bot, Message, MessageSegment
|
# from nonebot.adapters.onebot.v11 import Bot, Message, MessageSegment
|
||||||
|
|
||||||
from GenshinUID.genshinuid_guide import get_guide_pic
|
# from GenshinUID.genshinuid_guide import get_guide_pic
|
||||||
|
|
||||||
async with app.test_matcher(get_guide_pic) as ctx:
|
# async with app.test_matcher(get_guide_pic) as ctx:
|
||||||
bot = ctx.create_bot(base=Bot)
|
# bot = ctx.create_bot(base=Bot)
|
||||||
|
|
||||||
event = make_event(message=Message("旅行者风推荐"))
|
# event = make_event(message=Message("旅行者风推荐"))
|
||||||
ctx.receive_event(bot, event)
|
# ctx.receive_event(bot, event)
|
||||||
ctx.should_call_send(
|
# ctx.should_call_send(
|
||||||
event,
|
# event,
|
||||||
MessageSegment.image(
|
# MessageSegment.image(
|
||||||
"https://file.microgg.cn/MiniGG/guide/旅行者-风.jpg"
|
# "https://file.microgg.cn/MiniGG/guide/旅行者-风.jpg"
|
||||||
),
|
# ),
|
||||||
True,
|
# True,
|
||||||
)
|
# )
|
||||||
ctx.should_finished()
|
# ctx.should_finished()
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.asyncio
|
# @pytest.mark.asyncio
|
||||||
async def test_get_guide_pic_failed(app: App, load_guide: None):
|
# async def test_get_guide_pic_failed(app: App ):
|
||||||
from utils import make_event
|
# from utils import make_event
|
||||||
from nonebot.adapters.onebot.v11 import Bot, Message
|
# from nonebot.adapters.onebot.v11 import Bot, Message
|
||||||
|
|
||||||
from GenshinUID.genshinuid_guide import get_guide_pic
|
# from GenshinUID.genshinuid_guide import get_guide_pic
|
||||||
|
|
||||||
async with app.test_matcher(get_guide_pic) as ctx:
|
# async with app.test_matcher(get_guide_pic) as ctx:
|
||||||
bot = ctx.create_bot(base=Bot)
|
# bot = ctx.create_bot(base=Bot)
|
||||||
|
|
||||||
event = make_event(message=Message("蔡徐坤攻略"))
|
# event = make_event(message=Message("蔡徐坤攻略"))
|
||||||
ctx.receive_event(bot, event)
|
# ctx.receive_event(bot, event)
|
||||||
ctx.should_finished()
|
# ctx.should_finished()
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.asyncio
|
@pytest.mark.asyncio
|
||||||
@ -79,7 +79,7 @@ async def test_get_guide_pic_failed(app: App, load_guide: None):
|
|||||||
"参考面板岩王爷", # alias
|
"参考面板岩王爷", # alias
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
async def test_get_bluekun_pic(app: App, alias, load_guide: None):
|
async def test_get_bluekun_pic(app: App, alias):
|
||||||
from utils import make_event
|
from utils import make_event
|
||||||
from nonebot.adapters.onebot.v11 import Bot, Message, MessageSegment
|
from nonebot.adapters.onebot.v11 import Bot, Message, MessageSegment
|
||||||
|
|
||||||
@ -104,7 +104,7 @@ async def test_get_bluekun_pic(app: App, alias, load_guide: None):
|
|||||||
"冰",
|
"冰",
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
async def test_get_bluekun_pic_element(app: App, alias, load_guide: None):
|
async def test_get_bluekun_pic_element(app: App, alias):
|
||||||
from utils import make_event
|
from utils import make_event
|
||||||
from nonebot.adapters.onebot.v11 import Bot, Message, MessageSegment
|
from nonebot.adapters.onebot.v11 import Bot, Message, MessageSegment
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@ from nonebug import App
|
|||||||
|
|
||||||
|
|
||||||
@pytest.mark.asyncio
|
@pytest.mark.asyncio
|
||||||
async def test_metadata(app: App, load_metadata: None):
|
async def test_metadata(app: App):
|
||||||
from GenshinUID.genshinuid_meta import __plugin_meta__
|
from GenshinUID.genshinuid_meta import __plugin_meta__
|
||||||
|
|
||||||
assert __plugin_meta__.name == 'GenshinUID'
|
assert __plugin_meta__.name == 'GenshinUID'
|
||||||
@ -13,7 +13,7 @@ async def test_metadata(app: App, load_metadata: None):
|
|||||||
|
|
||||||
|
|
||||||
@pytest.mark.asyncio
|
@pytest.mark.asyncio
|
||||||
async def test_register_menu(app: App, load_metadata: None):
|
async def test_register_menu(app: App):
|
||||||
from GenshinUID.genshinuid_meta import sub_menus, register_menu
|
from GenshinUID.genshinuid_meta import sub_menus, register_menu
|
||||||
|
|
||||||
@register_menu(
|
@register_menu(
|
||||||
@ -26,10 +26,11 @@ async def test_register_menu(app: App, load_metadata: None):
|
|||||||
async def _example() -> None:
|
async def _example() -> None:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
assert len(sub_menus) == 1
|
menu = {
|
||||||
menu = sub_menus[0]
|
"func": "test",
|
||||||
assert menu['func'] == 'test'
|
"trigger_condition": "trigger",
|
||||||
assert menu['trigger_condition'] == 'trigger'
|
"trigger_method": "114514",
|
||||||
assert menu['trigger_method'] == '114514'
|
"brief_des": "test register_menu",
|
||||||
assert menu['brief_des'] == 'test register_menu'
|
"detail_des": "test register_menu",
|
||||||
assert menu['detail_des'] == 'test register_menu'
|
}
|
||||||
|
assert menu in sub_menus
|
||||||
|
9
tests/test_utils/test_nonebot2.py
Normal file
9
tests/test_utils/test_nonebot2.py
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
from nonebug import App
|
||||||
|
|
||||||
|
|
||||||
|
def test_get_superusers(app: App):
|
||||||
|
from GenshinUID.utils.nonebot2.utils import get_superusers
|
||||||
|
|
||||||
|
superusers = get_superusers()
|
||||||
|
assert len(superusers) == 2
|
||||||
|
assert set(superusers) == {10000, 10001}
|
@ -104,6 +104,5 @@ def make_event(
|
|||||||
"anonymous": anonymous,
|
"anonymous": anonymous,
|
||||||
**kwargs,
|
**kwargs,
|
||||||
},
|
},
|
||||||
str(self_id),
|
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
Reference in New Issue
Block a user