reywechat 1.0.30__py3-none-any.whl → 1.0.32__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 CHANGED
@@ -211,7 +211,7 @@ class WeChatClient(BaseWeChat):
211
211
  Inject DLL file of start API into the WeChat client process.
212
212
  """
213
213
 
214
- # Get parameter.
214
+ # Handle parameter.
215
215
  dll_file_relpath = './data/client_api.dll'
216
216
  dll_file_path = find_relpath(__file__, dll_file_relpath)
217
217
 
@@ -250,10 +250,9 @@ class WeChatClient(BaseWeChat):
250
250
  Client response content dictionary.
251
251
  """
252
252
 
253
- # Get parameter.
253
+ # Handle parameter.
254
254
  url = f'http://127.0.0.1:{self.client_api_port}/api/{api}'
255
- if data is None:
256
- data = {}
255
+ data = data or {}
257
256
  if type(success_code) == int:
258
257
  success_code = [success_code]
259
258
  if type(fail_code) == int:
@@ -299,7 +298,7 @@ class WeChatClient(BaseWeChat):
299
298
  Check result.
300
299
  """
301
300
 
302
- # Get parameter.
301
+ # Handle parameter.
303
302
  api = 'checkLogin'
304
303
 
305
304
  # Request.
@@ -352,7 +351,7 @@ class WeChatClient(BaseWeChat):
352
351
  - `Key 'decrypt_key'`: WeChatDatabase decrypt key.
353
352
  """
354
353
 
355
- # Get parameter.
354
+ # Handle parameter.
356
355
  api = 'userInfo'
357
356
 
358
357
  # Request.
@@ -402,7 +401,7 @@ class WeChatClient(BaseWeChat):
402
401
  timeout : Request timeout seconds.
403
402
  """
404
403
 
405
- # Get parameter.
404
+ # Handle parameter.
406
405
  api = 'hookSyncMsg'
407
406
  port = str(port)
408
407
  timeout_ms_str = str(int(timeout * 1000))
@@ -440,7 +439,7 @@ class WeChatClient(BaseWeChat):
440
439
  Unhook the message.
441
440
  """
442
441
 
443
- # Get parameter.
442
+ # Handle parameter.
444
443
  api = 'unhookSyncMsg'
445
444
 
446
445
  # Request.
@@ -462,7 +461,7 @@ class WeChatClient(BaseWeChat):
462
461
  id\\_ : Message ID.
463
462
  """
464
463
 
465
- # Get parameter.
464
+ # Handle parameter.
466
465
  api = 'downloadAttach'
467
466
  data = {'msgId': id_}
468
467
 
@@ -484,7 +483,7 @@ class WeChatClient(BaseWeChat):
484
483
  dir\\_ : Save directory.
485
484
  """
486
485
 
487
- # Get parameter.
486
+ # Handle parameter.
488
487
  api = 'getVoiceByMsgId'
489
488
  dir_ = os_abspath(dir_)
490
489
  data = {
@@ -517,7 +516,7 @@ class WeChatClient(BaseWeChat):
517
516
  - `Key 'name'`: User nickname or chat room name.
518
517
  """
519
518
 
520
- # Get parameter.
519
+ # Handle parameter.
521
520
  api = 'getContactList'
522
521
  filter_names = {
523
522
  'filehelper': '朋友推荐消息',
@@ -586,7 +585,7 @@ class WeChatClient(BaseWeChat):
586
585
  User nickname or chat room name.
587
586
  """
588
587
 
589
- # Get parameter.
588
+ # Handle parameter.
590
589
  api = 'getContactProfile'
591
590
  data = {'wxid': id_}
592
591
 
@@ -619,7 +618,7 @@ class WeChatClient(BaseWeChat):
619
618
  List of chat room member user ID.
620
619
  """
621
620
 
622
- # Get parameter.
621
+ # Handle parameter.
623
622
  api = 'getMemberFromChatRoom'
624
623
  data = {'chatRoomId': room_id}
625
624
 
@@ -679,7 +678,7 @@ class WeChatClient(BaseWeChat):
679
678
  text : Message text.
680
679
  """
681
680
 
682
- # Get parameter.
681
+ # Handle parameter.
683
682
  api = 'sendTextMsg'
684
683
  data = {
685
684
  'wxid': receive_id,
@@ -709,7 +708,7 @@ class WeChatClient(BaseWeChat):
709
708
  text : Message text.
710
709
  """
711
710
 
712
- # Get parameter.
711
+ # Handle parameter.
713
712
  api = 'sendAtText'
714
713
  if type(user_id) != str:
715
714
  user_id = ','.join(user_id)
@@ -737,7 +736,7 @@ class WeChatClient(BaseWeChat):
737
736
  path : Message file path.
738
737
  """
739
738
 
740
- # Get parameter.
739
+ # Handle parameter.
741
740
  api = 'sendFileMsg'
742
741
  data = {
743
742
  'wxid': receive_id,
@@ -762,7 +761,7 @@ class WeChatClient(BaseWeChat):
762
761
  path : Message image file path.
763
762
  """
764
763
 
765
- # Get parameter.
764
+ # Handle parameter.
766
765
  api = 'sendImagesMsg'
767
766
  data = {
768
767
  'wxid': receive_id,
@@ -787,7 +786,7 @@ class WeChatClient(BaseWeChat):
787
786
  path : Message emotion file path.
788
787
  """
789
788
 
790
- # Get parameter.
789
+ # Handle parameter.
791
790
  api = 'sendCustomEmotion'
792
791
  data = {
793
792
  'wxid': receive_id,
@@ -812,7 +811,7 @@ class WeChatClient(BaseWeChat):
812
811
  user_id : User ID of pat.
813
812
  """
814
813
 
815
- # Get parameter.
814
+ # Handle parameter.
816
815
  api = 'sendPatMsg'
817
816
  data = {
818
817
  'wxid': receive_id,
@@ -847,15 +846,11 @@ class WeChatClient(BaseWeChat):
847
846
  public_id : Control public account ID.
848
847
  """
849
848
 
850
- # Get parameter.
851
- if text is None:
852
- text = ''
853
- if image_url is None:
854
- image_url = ''
855
- if public_name is None:
856
- public_name = ''
857
- if public_id is None:
858
- public_id = ''
849
+ # Handle parameter.
850
+ text = text or ''
851
+ image_url = image_url or ''
852
+ public_name = public_name or ''
853
+ public_id = public_id or ''
859
854
  api = 'forwardPublicMsg'
860
855
  data = {
861
856
  'wxid': receive_id,
@@ -885,7 +880,7 @@ class WeChatClient(BaseWeChat):
885
880
  message_id : Forward message ID.
886
881
  """
887
882
 
888
- # Get parameter.
883
+ # Handle parameter.
889
884
  api = 'sendImagesMsg'
890
885
  data = {
891
886
  'wxid': receive_id,
reywechat/rdb.py CHANGED
@@ -934,7 +934,7 @@ class WeChatDatabase(BaseWeChat):
934
934
  sendparam : `WeChatSendParameter` instance.
935
935
  """
936
936
 
937
- # Get parameter.
937
+ # Handle parameter.
938
938
  if sendparam.exc_reports == []:
939
939
  status = 2
940
940
  else:
@@ -1001,7 +1001,7 @@ class WeChatDatabase(BaseWeChat):
1001
1001
  Read record from table `message_send`, put send queue.
1002
1002
  """
1003
1003
 
1004
- # Get parameter.
1004
+ # Handle parameter.
1005
1005
  conn = self.rdatabase_wechat.connect()
1006
1006
 
1007
1007
  # Read.
@@ -1220,7 +1220,7 @@ class WeChatDatabase(BaseWeChat):
1220
1220
  params : Send parameters.
1221
1221
  """
1222
1222
 
1223
- # Get parameter.
1223
+ # Handle parameter.
1224
1224
  data = {
1225
1225
  'status': 0,
1226
1226
  'type': send_type,
reywechat/rlog.py CHANGED
@@ -118,7 +118,7 @@ class WeChatLog(BaseWeChat):
118
118
  Result.
119
119
  """
120
120
 
121
- # Get parameter.
121
+ # Handle parameter.
122
122
  result = self.rrlog.print_colour
123
123
 
124
124
  return result
reywechat/rreceive.py CHANGED
@@ -20,7 +20,7 @@ from reykit.rbase import throw
20
20
  from reykit.rimage import decode_qrcode
21
21
  from reykit.rnet import listen_socket
22
22
  from reykit.ros import File, os_exists
23
- from reykit.rre import search, findall
23
+ from reykit.rre import search, search_batch, 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
@@ -134,6 +134,7 @@ class WeChatMessage(BaseWeChat):
134
134
  self._is_at: bool | None = None
135
135
  self._is_at_self: bool | None = None
136
136
  self._is_call: bool | None = None
137
+ self._call_text: str | None = None
137
138
  self._is_new_user: bool | None = None
138
139
  self._is_new_room: bool | None = None
139
140
  self._is_new_room_user: bool | None = None
@@ -165,7 +166,7 @@ class WeChatMessage(BaseWeChat):
165
166
  Parameters dictionary.
166
167
  """
167
168
 
168
- # Get parameter.
169
+ # Handle parameter.
169
170
  params: MessageParameter = {
170
171
  'time': self.time,
171
172
  'id': self.id,
@@ -414,7 +415,7 @@ class WeChatMessage(BaseWeChat):
414
415
  text = self.data
415
416
  elif self.is_quote:
416
417
  text = self.quote_params['text']
417
- pattern = r'@\w+\u2005'
418
+ pattern = r'@(\w+)\u2005'
418
419
  self._at_names = findall(pattern, text)
419
420
 
420
421
  return self._at_names
@@ -455,8 +456,7 @@ class WeChatMessage(BaseWeChat):
455
456
  return self._is_at_self
456
457
 
457
458
  # Judge.
458
- pattern = '@%s\u2005' % self.receiver.wechat.client.login_info['name']
459
- self._is_at_self = pattern in self.at_names
459
+ self._is_at_self = self.receiver.wechat.client.login_info['name'] in self.at_names
460
460
 
461
461
  return self._is_at_self
462
462
 
@@ -464,7 +464,7 @@ class WeChatMessage(BaseWeChat):
464
464
  @property
465
465
  def is_call(self) -> bool:
466
466
  """
467
- Whether if is message of call self.
467
+ Whether if is message of call self name.
468
468
 
469
469
  Returns
470
470
  -------
@@ -475,39 +475,83 @@ class WeChatMessage(BaseWeChat):
475
475
  if self._is_call is not None:
476
476
  return self._is_call
477
477
 
478
+ # Text.
479
+ if self.type == 1:
480
+ text = self.data
481
+ elif self.is_quote:
482
+ text = self.quote_params['text']
483
+ else:
484
+ self._is_call = False
485
+ self._call_text = None
486
+ return self._is_call
487
+ text = text.strip()
488
+
489
+ ## At self.
490
+ at_self_keyword = '@%s\u2005' % self.receiver.wechat.client.login_info['name']
491
+ if at_self_keyword in text:
492
+ is_at_self = True
493
+ text = text.replace(at_self_keyword, '')
494
+ else:
495
+ is_at_self = False
496
+
497
+ ## Call self.
498
+ pattern = fr'^{self.receiver.call_name}[\s,,]*(.*)$'
499
+ result: str | None = search(pattern, text)
500
+ if result is not None:
501
+ is_call_name = True
502
+ text = result
503
+ else:
504
+ is_call_name = False
505
+
478
506
  # Judge.
479
- is_call = False
480
507
  if (
481
508
 
482
509
  ## Private chat.
483
510
  self.room is None
484
511
 
485
512
  ## At self.
486
- or self.is_at_self
513
+ or is_at_self
514
+
515
+ ## Call self.
516
+ or is_call_name
487
517
 
488
518
  ## Quote self.
489
519
  or self.is_quote_self
520
+
490
521
  ):
491
522
  is_call = True
492
-
493
- ## Call name.
494
- if self.type == 1:
495
- text = self.data
496
- elif self.is_quote:
497
- text = self.quote_params['text']
523
+ call_text = text
498
524
  else:
499
- self._is_call = False
500
- return self._is_call
501
- pattern = fr'^\s*{self.receiver.call_name}[\s,,]*(.*?)\s*$'
502
- result: str | None = search(pattern, text)
503
- if result is not None:
504
- is_call = True
525
+ is_call = False
526
+ call_text = None
505
527
 
506
528
  self._is_call = is_call
529
+ self._call_text = call_text
507
530
 
508
531
  return self._is_call
509
532
 
510
533
 
534
+ @property
535
+ def call_text(self) -> str:
536
+ """
537
+ Message call text of call self name.
538
+
539
+ Returns
540
+ -------
541
+ Call text.
542
+ """
543
+
544
+ # Cache.
545
+ if self._call_text is not None:
546
+ return self._call_text
547
+
548
+ # Check.
549
+ if not self.is_call:
550
+ throw(AssertionError, self.is_call)
551
+
552
+ return self._call_text
553
+
554
+
511
555
  @property
512
556
  def is_new_user(self) -> bool:
513
557
  """
@@ -845,6 +889,50 @@ class WeChatMessage(BaseWeChat):
845
889
  return self._valid
846
890
 
847
891
 
892
+ @property
893
+ def check_call(self) -> None:
894
+ """
895
+ Check if is call self name, if not, throw exception `WeChatTriggerContinueExit`.
896
+ """
897
+
898
+ # Check.
899
+ if not self.is_call:
900
+ self.trigger_continue()
901
+
902
+
903
+ def check_search_text(self, *patterns: str, text: str | None = None) -> str | tuple[str | None, ...]:
904
+ """
905
+ Regular search text, return first successful match.
906
+ When no match, then throw exception `WeChatTriggerContinueExit`.
907
+
908
+ Parameters
909
+ ----------
910
+ pattern : Regular pattern, period match any character.
911
+ text : Match text.
912
+ - `None`: Use `self.data`.
913
+
914
+ Returns
915
+ -------
916
+ Matching result.
917
+ - When match to and not use `group`, then return `str`.
918
+ - When match to and use `group`, then return tuple with value `str` or `None`.
919
+ If tuple length is `1`, extract and return `str`.
920
+ - When no match, then return `None`.
921
+ """
922
+
923
+ # Handle parameter.
924
+ text = text or self.data
925
+
926
+ # Search.
927
+ result = search_batch(text, *patterns)
928
+
929
+ # Check.
930
+ if result is None:
931
+ self.trigger_continue
932
+
933
+ return result
934
+
935
+
848
936
  @overload
849
937
  def reply(
850
938
  self,
@@ -975,8 +1063,7 @@ class WechatReceiver(BaseWeChat):
975
1063
  # Set attribute.
976
1064
  self.wechat = wechat
977
1065
  self.max_receiver = max_receiver
978
- if call_name is None:
979
- call_name = self.wechat.client.login_info['name']
1066
+ call_name = call_name or self.wechat.client.login_info['name']
980
1067
  self.call_name = call_name
981
1068
  self.queue: Queue[WeChatMessage] = Queue()
982
1069
  self.handlers: list[Callable[[WeChatMessage], Any]] = []
@@ -1258,8 +1345,7 @@ class WechatReceiver(BaseWeChat):
1258
1345
 
1259
1346
  ## Cache.
1260
1347
  download_file = File(download_path)
1261
- if file_name is None:
1262
- file_name = f'{download_file.md5}.{file_name_suffix}'
1348
+ file_name = file_name or f'{download_file.md5}.{file_name_suffix}'
1263
1349
  cache_path = self.wechat.cache.store(download_path, file_name, delete=True)
1264
1350
 
1265
1351
  # Set parameter.
reywechat/rschedule.py CHANGED
@@ -63,7 +63,7 @@ class WeChatSchedule(BaseWeChat):
63
63
  trigger_kwargs : Trigger keyword arguments.
64
64
  """
65
65
 
66
- # Get parameter.
66
+ # Handle parameter.
67
67
  args = (self,)
68
68
 
69
69
  # Add.
reywechat/rsend.py CHANGED
@@ -389,7 +389,7 @@ class WeChatSender(BaseWeChat):
389
389
  Added text.
390
390
  """
391
391
 
392
- # Get parameter.
392
+ # Handle parameter.
393
393
  member_dict = self.wechat.client.get_room_member_dict(room_id)
394
394
  login_id = self.wechat.client.login_info['id']
395
395
  if login_id in member_dict:
reywechat/rtrigger.py CHANGED
@@ -135,7 +135,7 @@ class WeChatTrigger(BaseWeChat):
135
135
  is_reply : Whehter is reply function, allow call `WeChatMessage.reply`, can only reply once function.
136
136
  """
137
137
 
138
- # Get parameter.
138
+ # Handle parameter.
139
139
  rule: TriggerRule = {
140
140
  'level': level,
141
141
  'execute': execute,
reywechat/rwechat.py CHANGED
@@ -149,7 +149,7 @@ class WeChat(BaseWeChat):
149
149
  Result.
150
150
  """
151
151
 
152
- # Get parameter.
152
+ # Handle parameter.
153
153
  result = self.log.rrlog.print_colour
154
154
 
155
155
  return result
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: reywechat
3
- Version: 1.0.30
3
+ Version: 1.0.32
4
4
  Summary: WeChat method set.
5
5
  Project-URL: homepage, https://github.com/reyxbo/reywechat/
6
6
  Author-email: Rey <reyxbo@163.com>
@@ -0,0 +1,17 @@
1
+ reywechat/__init__.py,sha256=BL4PUpTguszJ612qsZf4-sOXxRIsiYRQ_m__FGMd1RQ,513
2
+ reywechat/rall.py,sha256=zEW-mLL2uP8aT2_foCMFGmMi_3RCrGl8qutnSVkmY1E,397
3
+ reywechat/rbase.py,sha256=0NunIUIXra2ML2N6odwMk5oENTE0r6VSBHWXUvgI-lc,1124
4
+ reywechat/rcache.py,sha256=Hh_HE-t_KUMlrz4gEFPh1AjmhnrSgH520IFJPumWb7A,908
5
+ reywechat/rclient.py,sha256=MEvQB3pHb5ORukKbKntalRtFcKIOP9BGtDsMt5ihQfM,22524
6
+ reywechat/rdb.py,sha256=euMCZBYz6b4Pw27zPUKYOwPHxK7g47pYfWFfNZMh0mU,40342
7
+ reywechat/rlog.py,sha256=x4WFLNoeKqGjPVoI81ZZNEd9ctdYToSg5hEFuESmCQY,5254
8
+ reywechat/rreceive.py,sha256=fcuCOehzKY3kNDZsUa4_wA4trwmIved-T09Q7z5EpNg,35175
9
+ reywechat/rschedule.py,sha256=bZEEZV3K4zrJvupe1Eq6kGR7kunbVq5dfGnqFKYF3JI,1857
10
+ reywechat/rsend.py,sha256=UmdKCOb1cPKEmBPHt9htjxB8fPyi5jW5pGwpRQIZdKA,13720
11
+ reywechat/rtrigger.py,sha256=n8kUNovh62r7crlXrp33uaKvbILT-wcfvUqeyGt7YhM,4956
12
+ reywechat/rwechat.py,sha256=d9yNnLLz0YI1buatf5j4YMhj6tUH6yWsDnx91EyAhow,4926
13
+ reywechat/data/client_api.dll,sha256=H9uj-x9Ztg0jFZK0yY6NsnyH5_119dQRFfoVVMidxRs,592384
14
+ reywechat-1.0.32.dist-info/METADATA,sha256=W0Z4P7Aq_AhtwznYsbnW_y-8XJuddfOEgFw-IkLBu5E,1551
15
+ reywechat-1.0.32.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
16
+ reywechat-1.0.32.dist-info/licenses/LICENSE,sha256=UYLPqp7BvPiH8yEZduJqmmyEl6hlM3lKrFIefiD4rvk,1059
17
+ reywechat-1.0.32.dist-info/RECORD,,
@@ -1,17 +0,0 @@
1
- reywechat/__init__.py,sha256=BL4PUpTguszJ612qsZf4-sOXxRIsiYRQ_m__FGMd1RQ,513
2
- reywechat/rall.py,sha256=zEW-mLL2uP8aT2_foCMFGmMi_3RCrGl8qutnSVkmY1E,397
3
- reywechat/rbase.py,sha256=0NunIUIXra2ML2N6odwMk5oENTE0r6VSBHWXUvgI-lc,1124
4
- reywechat/rcache.py,sha256=Hh_HE-t_KUMlrz4gEFPh1AjmhnrSgH520IFJPumWb7A,908
5
- reywechat/rclient.py,sha256=gtTYaoqhgh9kRFslETKjBJiAAdzJfeOxIJbdCkGAFhM,22577
6
- reywechat/rdb.py,sha256=Gcj3d-uIospaacjHY8B4HHdru5OwiS9PO6cceAWvXqY,40333
7
- reywechat/rlog.py,sha256=d3S0eHMUZ92OLE7fjP3zzikIYANtnbAxhnE_DIV_1OY,5251
8
- reywechat/rreceive.py,sha256=VgDMNc_Lrnnm-eYinK-aCt1qXK1bEuyGYePSGrZtObk,32892
9
- reywechat/rschedule.py,sha256=fn11rH0HqxbnJYxARCBBiSdzBpYfQFhcjNmkvihVMTc,1854
10
- reywechat/rsend.py,sha256=s2sR6l74reDShBAu_MwpavVunz0g42pIga0zX4ElIuI,13717
11
- reywechat/rtrigger.py,sha256=GHfkhNrS8rV4uXWC3N54UTjak7nKGfqJWX6pe57Hsgg,4953
12
- reywechat/rwechat.py,sha256=igeG0XhfBN1BRQ9RDmYrPZIKdnIK2tmS05wb-eMdlzs,4923
13
- reywechat/data/client_api.dll,sha256=H9uj-x9Ztg0jFZK0yY6NsnyH5_119dQRFfoVVMidxRs,592384
14
- reywechat-1.0.30.dist-info/METADATA,sha256=ajAREqSPl0WJjajG78Ogwz7dftRrwy1-BtQykfUMqLg,1551
15
- reywechat-1.0.30.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
16
- reywechat-1.0.30.dist-info/licenses/LICENSE,sha256=UYLPqp7BvPiH8yEZduJqmmyEl6hlM3lKrFIefiD4rvk,1059
17
- reywechat-1.0.30.dist-info/RECORD,,