reywechat 1.0.22__py3-none-any.whl → 1.0.24__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- reywechat/rclient.py +8 -8
- reywechat/rdb.py +257 -195
- reywechat/rlog.py +4 -4
- reywechat/rreceive.py +169 -107
- reywechat/rschedule.py +5 -49
- reywechat/rsend.py +108 -228
- reywechat/rtrigger.py +6 -4
- reywechat/rwechat.py +22 -24
- {reywechat-1.0.22.dist-info → reywechat-1.0.24.dist-info}/METADATA +1 -1
- reywechat-1.0.24.dist-info/RECORD +16 -0
- reywechat-1.0.22.dist-info/RECORD +0 -16
- {reywechat-1.0.22.dist-info → reywechat-1.0.24.dist-info}/WHEEL +0 -0
- {reywechat-1.0.22.dist-info → reywechat-1.0.24.dist-info}/licenses/LICENSE +0 -0
reywechat/rlog.py
CHANGED
@@ -31,18 +31,18 @@ class WeChatLog(BaseWeChat):
|
|
31
31
|
|
32
32
|
def __init__(
|
33
33
|
self,
|
34
|
-
|
34
|
+
wechat: WeChat
|
35
35
|
) -> None:
|
36
36
|
"""
|
37
37
|
Build instance attributes.
|
38
38
|
|
39
39
|
Parameters
|
40
40
|
----------
|
41
|
-
|
41
|
+
wechat : `WeChatClient` instance.
|
42
42
|
"""
|
43
43
|
|
44
44
|
# Set attribute.
|
45
|
-
self.
|
45
|
+
self.wechat = wechat
|
46
46
|
|
47
47
|
# Logger.
|
48
48
|
self.rrlog = Log('WeChat')
|
@@ -74,7 +74,7 @@ class WeChatLog(BaseWeChat):
|
|
74
74
|
self.rrlog_print.add_print(format_=format_)
|
75
75
|
|
76
76
|
## Add handler file.
|
77
|
-
file_path = os_join(self.
|
77
|
+
file_path = os_join(self.wechat.dir_log, 'WeChat')
|
78
78
|
self.rrlog_file.add_file(
|
79
79
|
file_path,
|
80
80
|
time='m',
|
reywechat/rreceive.py
CHANGED
@@ -20,7 +20,7 @@ from reykit.rbase import throw, catch_exc
|
|
20
20
|
from reykit.rimage import decode_qrcode
|
21
21
|
from reykit.rnet import compute_stream_time, listen_socket
|
22
22
|
from reykit.ros import File, Folder, os_exists
|
23
|
-
from reykit.rre import search
|
23
|
+
from reykit.rre import search, findall
|
24
24
|
from reykit.rtask import ThreadPool
|
25
25
|
from reykit.rtime import sleep, wait
|
26
26
|
from reykit.rwrap import wrap_thread, wrap_exc
|
@@ -36,8 +36,17 @@ __all__ = (
|
|
36
36
|
)
|
37
37
|
|
38
38
|
|
39
|
-
|
40
|
-
|
39
|
+
MessageParameterFile = TypedDict(
|
40
|
+
'MessageParameterFile',
|
41
|
+
{
|
42
|
+
'path': str,
|
43
|
+
'name': str,
|
44
|
+
'md5': str,
|
45
|
+
'size': int
|
46
|
+
}
|
47
|
+
)
|
48
|
+
MessageParameter = TypedDict(
|
49
|
+
'MessageParameter',
|
41
50
|
{
|
42
51
|
'time': int,
|
43
52
|
'id': int,
|
@@ -47,7 +56,7 @@ MessageParameters = TypedDict(
|
|
47
56
|
'type': int,
|
48
57
|
'display': str,
|
49
58
|
'data': str,
|
50
|
-
'file':
|
59
|
+
'file': MessageParameterFile
|
51
60
|
}
|
52
61
|
)
|
53
62
|
|
@@ -57,6 +66,8 @@ class WeChatMessage(BaseWeChat):
|
|
57
66
|
WeChat message type.
|
58
67
|
"""
|
59
68
|
|
69
|
+
SendEnum = WeChatSendEnum
|
70
|
+
|
60
71
|
|
61
72
|
def __init__(
|
62
73
|
self,
|
@@ -69,7 +80,7 @@ class WeChatMessage(BaseWeChat):
|
|
69
80
|
data: str,
|
70
81
|
user: str | None = None,
|
71
82
|
room: str | None = None,
|
72
|
-
file:
|
83
|
+
file: MessageParameterFile | None = None
|
73
84
|
) -> None:
|
74
85
|
"""
|
75
86
|
Build instance attributes.
|
@@ -112,11 +123,14 @@ class WeChatMessage(BaseWeChat):
|
|
112
123
|
self.user = user
|
113
124
|
self.room = room
|
114
125
|
self.file = file
|
126
|
+
self._window: str | None = None
|
115
127
|
self._user_name: str | None = None
|
116
128
|
self._room_name: str | None = None
|
129
|
+
self._window_name: str | None = None
|
117
130
|
self._is_quote: bool | None = None
|
118
131
|
self._is_quote_self: bool | None = None
|
119
132
|
self._quote_params: dict[Literal['text', 'quote_id', 'quote_type', 'quote_user', 'quote_user_name', 'quote_data'], str] | None = None
|
133
|
+
self._at_names: list[str] = None
|
120
134
|
self._is_at: bool | None = None
|
121
135
|
self._is_at_self: bool | None = None
|
122
136
|
self._is_new_user: bool | None = None
|
@@ -141,7 +155,7 @@ class WeChatMessage(BaseWeChat):
|
|
141
155
|
|
142
156
|
|
143
157
|
@property
|
144
|
-
def params(self) ->
|
158
|
+
def params(self) -> MessageParameter:
|
145
159
|
"""
|
146
160
|
Return parameters dictionary.
|
147
161
|
|
@@ -151,7 +165,7 @@ class WeChatMessage(BaseWeChat):
|
|
151
165
|
"""
|
152
166
|
|
153
167
|
# Get parameter.
|
154
|
-
params = {
|
168
|
+
params: MessageParameter = {
|
155
169
|
'time': self.time,
|
156
170
|
'id': self.id,
|
157
171
|
'number': self.number,
|
@@ -181,6 +195,29 @@ class WeChatMessage(BaseWeChat):
|
|
181
195
|
return params_str
|
182
196
|
|
183
197
|
|
198
|
+
@property
|
199
|
+
def window(self) -> str:
|
200
|
+
"""
|
201
|
+
Message sender window ID.
|
202
|
+
|
203
|
+
Returns
|
204
|
+
-------
|
205
|
+
Window ID.
|
206
|
+
"""
|
207
|
+
|
208
|
+
# Cache.
|
209
|
+
if self._window is not None:
|
210
|
+
return self._window
|
211
|
+
|
212
|
+
# Set.
|
213
|
+
if self.room is None:
|
214
|
+
self._window = self.user
|
215
|
+
else:
|
216
|
+
self._window = self.room
|
217
|
+
|
218
|
+
return self._window
|
219
|
+
|
220
|
+
|
184
221
|
@property
|
185
222
|
def user_name(self) -> str:
|
186
223
|
"""
|
@@ -191,12 +228,12 @@ class WeChatMessage(BaseWeChat):
|
|
191
228
|
User name.
|
192
229
|
"""
|
193
230
|
|
194
|
-
#
|
231
|
+
# Cache.
|
195
232
|
if self._user_name is not None:
|
196
233
|
return self._user_name
|
197
234
|
|
198
235
|
# Set.
|
199
|
-
self._user_name = self.receiver.
|
236
|
+
self._user_name = self.receiver.wechat.client.get_contact_name(
|
200
237
|
self.user
|
201
238
|
)
|
202
239
|
|
@@ -204,7 +241,7 @@ class WeChatMessage(BaseWeChat):
|
|
204
241
|
|
205
242
|
|
206
243
|
@property
|
207
|
-
def room_name(self) -> str:
|
244
|
+
def room_name(self) -> str | None:
|
208
245
|
"""
|
209
246
|
Message sender chat room name.
|
210
247
|
|
@@ -217,18 +254,41 @@ class WeChatMessage(BaseWeChat):
|
|
217
254
|
if self.room is None:
|
218
255
|
return
|
219
256
|
|
220
|
-
#
|
257
|
+
# Cache.
|
221
258
|
if self._room_name is not None:
|
222
259
|
return self._room_name
|
223
260
|
|
224
261
|
# Set.
|
225
|
-
self._room_name = self.receiver.
|
262
|
+
self._room_name = self.receiver.wechat.client.get_contact_name(
|
226
263
|
self.room
|
227
264
|
)
|
228
265
|
|
229
266
|
return self._room_name
|
230
267
|
|
231
268
|
|
269
|
+
@property
|
270
|
+
def window_name(self) -> str:
|
271
|
+
"""
|
272
|
+
Message sender window name.
|
273
|
+
|
274
|
+
Returns
|
275
|
+
-------
|
276
|
+
Window name.
|
277
|
+
"""
|
278
|
+
|
279
|
+
# Cache.
|
280
|
+
if self._window_name is not None:
|
281
|
+
return self._window_name
|
282
|
+
|
283
|
+
# Set.
|
284
|
+
if self.room is None:
|
285
|
+
self._window_name = self.user_name
|
286
|
+
else:
|
287
|
+
self._window_name = self.room_name
|
288
|
+
|
289
|
+
return self._window_name
|
290
|
+
|
291
|
+
|
232
292
|
@property
|
233
293
|
def is_quote(self) -> bool:
|
234
294
|
"""
|
@@ -239,7 +299,7 @@ class WeChatMessage(BaseWeChat):
|
|
239
299
|
Judge result.
|
240
300
|
"""
|
241
301
|
|
242
|
-
#
|
302
|
+
# Cache.
|
243
303
|
if self._is_quote is not None:
|
244
304
|
return self._is_quote
|
245
305
|
|
@@ -262,14 +322,14 @@ class WeChatMessage(BaseWeChat):
|
|
262
322
|
Judge result.
|
263
323
|
"""
|
264
324
|
|
265
|
-
#
|
325
|
+
# Cache.
|
266
326
|
if self._is_quote_self is not None:
|
267
327
|
return self._is_quote_self
|
268
328
|
|
269
329
|
# Judge.
|
270
330
|
self._is_quote_self = (
|
271
331
|
self.is_quote
|
272
|
-
and '<chatusr>%s</chatusr>' % self.receiver.
|
332
|
+
and '<chatusr>%s</chatusr>' % self.receiver.wechat.client.login_info['id'] in self.data
|
273
333
|
)
|
274
334
|
|
275
335
|
return self._is_quote_self
|
@@ -277,7 +337,7 @@ class WeChatMessage(BaseWeChat):
|
|
277
337
|
|
278
338
|
@property
|
279
339
|
def quote_params(self) -> dict[
|
280
|
-
Literal['text', 'quote_id', 'quote_type', 'quote_user', 'quote_user_name', 'quote_data'],
|
340
|
+
Literal['text', 'quote_id', 'quote_time', 'quote_type', 'quote_user', 'quote_user_name', 'quote_data'],
|
281
341
|
str | None
|
282
342
|
]:
|
283
343
|
"""
|
@@ -288,6 +348,7 @@ class WeChatMessage(BaseWeChat):
|
|
288
348
|
Quote parameters of message.
|
289
349
|
- `Key 'text'`: Message text.
|
290
350
|
- `Key 'quote_id'`: Quote message ID.
|
351
|
+
- `Key 'quote_time'`: Quote message timestamp, unit is seconds.
|
291
352
|
- `Key 'quote_type'`: Quote message type.
|
292
353
|
- `Key 'quote_user'`: Quote message user ID.
|
293
354
|
- `Key 'quote_user_name'`: Quote message user name.
|
@@ -304,20 +365,26 @@ class WeChatMessage(BaseWeChat):
|
|
304
365
|
|
305
366
|
# Extract.
|
306
367
|
pattern = '<title>(.+?)</title>'
|
307
|
-
text = search(pattern, self.data)
|
368
|
+
text: str = search(pattern, self.data)
|
308
369
|
pattern = r'<svrid>(\w+?)</svrid>'
|
309
370
|
quote_id = search(pattern, self.data)
|
371
|
+
quote_id = int(quote_id)
|
372
|
+
pattern = r'<createtime>(\d{10})</createtime>'
|
373
|
+
quote_time = search(pattern, self.data)
|
374
|
+
quote_time = int(quote_time)
|
310
375
|
pattern = r'<refermsg>\s*<type>(\d+?)</type>'
|
311
|
-
quote_type =
|
376
|
+
quote_type = search(pattern, self.data)
|
377
|
+
quote_type = int(quote_type)
|
312
378
|
pattern = r'<chatusr>(\w+?)</chatusr>'
|
313
|
-
quote_user = search(pattern, self.data)
|
379
|
+
quote_user: str = search(pattern, self.data)
|
314
380
|
pattern = '<displayname>(.+?)</displayname>'
|
315
|
-
quote_user_name = search(pattern, self.data)
|
381
|
+
quote_user_name: str = search(pattern, self.data)
|
316
382
|
pattern = '<content>(.+?)</content>'
|
317
|
-
quote_data = search(pattern, self.data)
|
383
|
+
quote_data: str = search(pattern, self.data)
|
318
384
|
self._quote_params = {
|
319
385
|
'text': text,
|
320
386
|
'quote_id': quote_id,
|
387
|
+
'quote_time': quote_time,
|
321
388
|
'quote_type': quote_type,
|
322
389
|
'quote_user': quote_user,
|
323
390
|
'quote_user_name': quote_user_name,
|
@@ -327,6 +394,29 @@ class WeChatMessage(BaseWeChat):
|
|
327
394
|
return self._quote_params
|
328
395
|
|
329
396
|
|
397
|
+
@property
|
398
|
+
def at_names(self) -> list[str]:
|
399
|
+
"""
|
400
|
+
Return `@` names.
|
401
|
+
|
402
|
+
Returns
|
403
|
+
-------
|
404
|
+
`@` names.
|
405
|
+
"""
|
406
|
+
|
407
|
+
# Cache.
|
408
|
+
if self._at_names is not None:
|
409
|
+
return self._at_names
|
410
|
+
|
411
|
+
# Get.
|
412
|
+
if self.type == 1:
|
413
|
+
text = self.data
|
414
|
+
elif self.is_quote:
|
415
|
+
text = self.quote_params['text']
|
416
|
+
pattern = r'@\w+\u2005'
|
417
|
+
self._at_names = findall(pattern, text)
|
418
|
+
|
419
|
+
|
330
420
|
@property
|
331
421
|
def is_at(self) -> bool:
|
332
422
|
"""
|
@@ -337,18 +427,12 @@ class WeChatMessage(BaseWeChat):
|
|
337
427
|
Judge result.
|
338
428
|
"""
|
339
429
|
|
340
|
-
#
|
430
|
+
# Cache.
|
341
431
|
if self._is_at is not None:
|
342
432
|
return self._is_at
|
343
433
|
|
344
434
|
# Judge.
|
345
|
-
|
346
|
-
text = self.data
|
347
|
-
elif self.is_quote:
|
348
|
-
text = self.quote_params['text']
|
349
|
-
pattern = r'@\w+ '
|
350
|
-
result = search(pattern, text)
|
351
|
-
self._is_at = result is not None
|
435
|
+
self._is_at = self.at_names != []
|
352
436
|
|
353
437
|
return self._is_at
|
354
438
|
|
@@ -363,18 +447,13 @@ class WeChatMessage(BaseWeChat):
|
|
363
447
|
Judge result.
|
364
448
|
"""
|
365
449
|
|
366
|
-
#
|
450
|
+
# Cache.
|
367
451
|
if self._is_at_self is not None:
|
368
452
|
return self._is_at_self
|
369
453
|
|
370
454
|
# Judge.
|
371
|
-
|
372
|
-
|
373
|
-
elif self.is_quote:
|
374
|
-
text = self.quote_params['text']
|
375
|
-
pattern = '@%s ' % self.receiver.rwechat.client.login_info['name']
|
376
|
-
result = search(pattern, text)
|
377
|
-
self._is_at_self = result is not None
|
455
|
+
pattern = '@%s\u2005' % self.receiver.wechat.client.login_info['name']
|
456
|
+
self._is_at_self = pattern in self.at_names
|
378
457
|
|
379
458
|
return self._is_at_self
|
380
459
|
|
@@ -389,7 +468,7 @@ class WeChatMessage(BaseWeChat):
|
|
389
468
|
Judge result.
|
390
469
|
"""
|
391
470
|
|
392
|
-
#
|
471
|
+
# Cache.
|
393
472
|
if self._is_new_user is not None:
|
394
473
|
return self._is_new_user
|
395
474
|
|
@@ -415,7 +494,7 @@ class WeChatMessage(BaseWeChat):
|
|
415
494
|
Judge result.
|
416
495
|
"""
|
417
496
|
|
418
|
-
#
|
497
|
+
# Cache.
|
419
498
|
if self._is_new_room is not None:
|
420
499
|
return self._is_new_room
|
421
500
|
|
@@ -441,7 +520,7 @@ class WeChatMessage(BaseWeChat):
|
|
441
520
|
Judge result.
|
442
521
|
"""
|
443
522
|
|
444
|
-
#
|
523
|
+
# Cache.
|
445
524
|
if self._is_new_room_user is not None:
|
446
525
|
return self._is_new_room_user
|
447
526
|
|
@@ -487,7 +566,7 @@ class WeChatMessage(BaseWeChat):
|
|
487
566
|
Judge result.
|
488
567
|
"""
|
489
568
|
|
490
|
-
#
|
569
|
+
# Cache.
|
491
570
|
if self._is_change_room_name is not None:
|
492
571
|
return self._is_change_room_name
|
493
572
|
|
@@ -532,7 +611,7 @@ class WeChatMessage(BaseWeChat):
|
|
532
611
|
Judge result.
|
533
612
|
"""
|
534
613
|
|
535
|
-
#
|
614
|
+
# Cache.
|
536
615
|
if self._is_kick_out_room is not None:
|
537
616
|
return self._is_kick_out_room
|
538
617
|
|
@@ -556,7 +635,7 @@ class WeChatMessage(BaseWeChat):
|
|
556
635
|
Judge result.
|
557
636
|
"""
|
558
637
|
|
559
|
-
#
|
638
|
+
# Cache.
|
560
639
|
if self._is_dissolve_room is not None:
|
561
640
|
return self._is_dissolve_room
|
562
641
|
|
@@ -580,7 +659,7 @@ class WeChatMessage(BaseWeChat):
|
|
580
659
|
Judge result.
|
581
660
|
"""
|
582
661
|
|
583
|
-
#
|
662
|
+
# Cache.
|
584
663
|
if self._is_image is not None:
|
585
664
|
return self._is_image
|
586
665
|
|
@@ -624,7 +703,7 @@ class WeChatMessage(BaseWeChat):
|
|
624
703
|
Judge result.
|
625
704
|
"""
|
626
705
|
|
627
|
-
#
|
706
|
+
# Cache.
|
628
707
|
if self._is_xml is not None:
|
629
708
|
return self._is_xml
|
630
709
|
|
@@ -647,7 +726,7 @@ class WeChatMessage(BaseWeChat):
|
|
647
726
|
Judge result.
|
648
727
|
"""
|
649
728
|
|
650
|
-
#
|
729
|
+
# Cache.
|
651
730
|
if self._is_app is not None:
|
652
731
|
return self._is_app
|
653
732
|
|
@@ -711,7 +790,7 @@ class WeChatMessage(BaseWeChat):
|
|
711
790
|
return self._valid
|
712
791
|
|
713
792
|
# Judge.
|
714
|
-
self._valid = self.receiver.
|
793
|
+
self._valid = self.receiver.wechat.database.is_valid(self)
|
715
794
|
|
716
795
|
return self._valid
|
717
796
|
|
@@ -773,7 +852,7 @@ class WeChatMessage(BaseWeChat):
|
|
773
852
|
|
774
853
|
def reply(
|
775
854
|
self,
|
776
|
-
send_type: WeChatSendEnum
|
855
|
+
send_type: WeChatSendEnum,
|
777
856
|
**params: Any
|
778
857
|
) -> None:
|
779
858
|
"""
|
@@ -804,19 +883,13 @@ class WeChatMessage(BaseWeChat):
|
|
804
883
|
text = 'can only be used by reply trigger'
|
805
884
|
throw(WeChatTriggerError, self.trigger_rule, text=text)
|
806
885
|
|
807
|
-
# Get parameter.
|
808
|
-
if self.room is None:
|
809
|
-
receive_id = self.user
|
810
|
-
else:
|
811
|
-
receive_id = self.room
|
812
|
-
|
813
886
|
# Status.
|
814
887
|
self.replied = True
|
815
888
|
|
816
|
-
#
|
817
|
-
self.receiver.
|
889
|
+
# Swend.
|
890
|
+
self.receiver.wechat.sender.send(
|
818
891
|
send_type,
|
819
|
-
receive_id=
|
892
|
+
receive_id=self.window,
|
820
893
|
**params
|
821
894
|
)
|
822
895
|
|
@@ -826,30 +899,29 @@ class WechatReceiver(BaseWeChat):
|
|
826
899
|
WeChat receiver type.
|
827
900
|
"""
|
828
901
|
|
902
|
+
SendEnum = WeChatSendEnum
|
903
|
+
|
829
904
|
|
830
905
|
def __init__(
|
831
906
|
self,
|
832
|
-
|
833
|
-
max_receiver: int
|
834
|
-
bandwidth_downstream: float
|
907
|
+
wechat: WeChat,
|
908
|
+
max_receiver: int
|
835
909
|
) -> None:
|
836
910
|
"""
|
837
911
|
Build instance attributes.
|
838
912
|
|
839
913
|
Parameters
|
840
914
|
----------
|
841
|
-
|
915
|
+
wechat : `WeChatClient` instance.
|
842
916
|
max_receiver : Maximum number of receivers.
|
843
|
-
bandwidth_downstream : Download bandwidth, impact receive timeout, unit Mpbs.
|
844
917
|
"""
|
845
918
|
|
846
919
|
# Import.
|
847
920
|
from .rtrigger import WeChatTrigger
|
848
921
|
|
849
922
|
# Set attribute.
|
850
|
-
self.
|
923
|
+
self.wechat = wechat
|
851
924
|
self.max_receiver = max_receiver
|
852
|
-
self.bandwidth_downstream = bandwidth_downstream
|
853
925
|
self.queue: Queue[WeChatMessage] = Queue()
|
854
926
|
self.handlers: list[Callable[[WeChatMessage], Any]] = []
|
855
927
|
self.started: bool | None = False
|
@@ -858,9 +930,9 @@ class WechatReceiver(BaseWeChat):
|
|
858
930
|
# Start.
|
859
931
|
self.__start_callback()
|
860
932
|
self.__start_receiver(self.max_receiver)
|
861
|
-
self.
|
933
|
+
self.wechat.client.hook_message(
|
862
934
|
'127.0.0.1',
|
863
|
-
self.
|
935
|
+
self.wechat.client.message_callback_port,
|
864
936
|
60
|
865
937
|
)
|
866
938
|
|
@@ -908,7 +980,7 @@ class WechatReceiver(BaseWeChat):
|
|
908
980
|
# Listen socket.
|
909
981
|
listen_socket(
|
910
982
|
'127.0.0.1',
|
911
|
-
self.
|
983
|
+
self.wechat.client.message_callback_port,
|
912
984
|
put_queue
|
913
985
|
)
|
914
986
|
|
@@ -965,7 +1037,7 @@ class WechatReceiver(BaseWeChat):
|
|
965
1037
|
handler(message)
|
966
1038
|
|
967
1039
|
# Log.
|
968
|
-
self.
|
1040
|
+
self.wechat.log.log_receive(message)
|
969
1041
|
|
970
1042
|
|
971
1043
|
# Thread pool.
|
@@ -1041,8 +1113,8 @@ class WechatReceiver(BaseWeChat):
|
|
1041
1113
|
Handle file message.
|
1042
1114
|
"""
|
1043
1115
|
|
1044
|
-
#
|
1045
|
-
|
1116
|
+
# Download.
|
1117
|
+
folder = Folder(self.wechat.dir_cache)
|
1046
1118
|
generate_path = None
|
1047
1119
|
match message.type:
|
1048
1120
|
|
@@ -1052,18 +1124,19 @@ class WechatReceiver(BaseWeChat):
|
|
1052
1124
|
### Get attribute.
|
1053
1125
|
file_name = f'{message.id}.jpg'
|
1054
1126
|
pattern = r'length="(\d+)".*?md5="([\da-f]{32})"'
|
1055
|
-
|
1127
|
+
result: tuple[str, str] = search(pattern, message.data)
|
1128
|
+
file_size, file_md5 = result
|
1056
1129
|
file_size = int(file_size)
|
1057
1130
|
|
1058
1131
|
### Exist.
|
1059
1132
|
pattern = f'^{file_md5}$'
|
1060
|
-
|
1133
|
+
cache_path = folder.search(pattern)
|
1061
1134
|
|
1062
1135
|
### Generate.
|
1063
|
-
if
|
1064
|
-
self.
|
1136
|
+
if cache_path is None:
|
1137
|
+
self.wechat.client.download_file(message.id)
|
1065
1138
|
generate_path = '%swxhelper/image/%s.dat' % (
|
1066
|
-
self.
|
1139
|
+
self.wechat.client.login_info['account_data_path'],
|
1067
1140
|
message.id
|
1068
1141
|
)
|
1069
1142
|
|
@@ -1077,12 +1150,12 @@ class WechatReceiver(BaseWeChat):
|
|
1077
1150
|
file_md5 = None
|
1078
1151
|
|
1079
1152
|
### Generate.
|
1080
|
-
self.
|
1153
|
+
self.wechat.client.download_voice(
|
1081
1154
|
message.id,
|
1082
|
-
self.
|
1155
|
+
self.wechat.dir_cache
|
1083
1156
|
)
|
1084
1157
|
generate_path = '%s/%s.amr' % (
|
1085
|
-
self.
|
1158
|
+
self.wechat.dir_cache,
|
1086
1159
|
message.id
|
1087
1160
|
)
|
1088
1161
|
|
@@ -1098,13 +1171,13 @@ class WechatReceiver(BaseWeChat):
|
|
1098
1171
|
|
1099
1172
|
### Exist.
|
1100
1173
|
pattern = f'^{file_md5}$'
|
1101
|
-
|
1174
|
+
cache_path = folder.search(pattern)
|
1102
1175
|
|
1103
1176
|
### Generate.
|
1104
|
-
if
|
1105
|
-
self.
|
1177
|
+
if cache_path is None:
|
1178
|
+
self.wechat.client.download_file(message.id)
|
1106
1179
|
generate_path = '%swxhelper/video/%s.mp4' % (
|
1107
|
-
self.
|
1180
|
+
self.wechat.client.login_info['account_data_path'],
|
1108
1181
|
message.id
|
1109
1182
|
)
|
1110
1183
|
|
@@ -1127,13 +1200,13 @@ class WechatReceiver(BaseWeChat):
|
|
1127
1200
|
|
1128
1201
|
### Exist.
|
1129
1202
|
pattern = f'^{file_md5}$'
|
1130
|
-
|
1203
|
+
cache_path = folder.search(pattern)
|
1131
1204
|
|
1132
1205
|
### Generate.
|
1133
|
-
if
|
1134
|
-
self.
|
1206
|
+
if cache_path is None:
|
1207
|
+
self.wechat.client.download_file(message.id)
|
1135
1208
|
generate_path = '%swxhelper/file/%s_%s' % (
|
1136
|
-
self.
|
1209
|
+
self.wechat.client.login_info['account_data_path'],
|
1137
1210
|
message.id,
|
1138
1211
|
file_name
|
1139
1212
|
)
|
@@ -1142,44 +1215,33 @@ class WechatReceiver(BaseWeChat):
|
|
1142
1215
|
case _:
|
1143
1216
|
return
|
1144
1217
|
|
1145
|
-
# Wait.
|
1146
1218
|
if generate_path is not None:
|
1147
|
-
|
1148
|
-
|
1219
|
+
|
1220
|
+
## Wait.
|
1149
1221
|
wait(
|
1150
1222
|
os_exists,
|
1151
1223
|
generate_path,
|
1152
1224
|
_interval = 0.05,
|
1153
|
-
_timeout=
|
1225
|
+
_timeout=3600
|
1154
1226
|
)
|
1155
1227
|
sleep(0.2)
|
1156
1228
|
|
1157
|
-
|
1158
|
-
if generate_path is None:
|
1159
|
-
save_path = '%s/%s' % (
|
1160
|
-
self.rwechat.dir_file,
|
1161
|
-
file_md5
|
1162
|
-
)
|
1163
|
-
else:
|
1229
|
+
## Move.
|
1164
1230
|
rfile = File(generate_path)
|
1165
|
-
|
1231
|
+
cache_path = None
|
1166
1232
|
if file_md5 is None:
|
1167
1233
|
file_md5 = rfile.md5
|
1168
1234
|
|
1169
1235
|
### Exist.
|
1170
1236
|
pattern = f'^{file_md5}$'
|
1171
|
-
|
1237
|
+
cache_path = folder.search(pattern)
|
1172
1238
|
|
1173
|
-
if
|
1174
|
-
|
1175
|
-
self.rwechat.dir_file,
|
1176
|
-
file_md5
|
1177
|
-
)
|
1178
|
-
rfile.move(save_path)
|
1239
|
+
if cache_path is None:
|
1240
|
+
rfile.move(cache_path)
|
1179
1241
|
|
1180
1242
|
# Set parameter.
|
1181
|
-
file = {
|
1182
|
-
'path':
|
1243
|
+
file: MessageParameter = {
|
1244
|
+
'path': cache_path,
|
1183
1245
|
'name': file_name,
|
1184
1246
|
'md5': file_md5,
|
1185
1247
|
'size': file_size
|