reywechat 1.0.44__py3-none-any.whl → 1.0.46__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/rreceive.py CHANGED
@@ -18,6 +18,7 @@ from bs4 import BeautifulSoup as BSBeautifulSoup
18
18
  from bs4.element import Tag as BSTag
19
19
  from reykit.rbase import throw
20
20
  from reykit.rimage import decode_qrcode
21
+ from reykit.rlog import Mark
21
22
  from reykit.rnet import listen_socket
22
23
  from reykit.ros import File, os_exists
23
24
  from reykit.rre import search, search_batch, findall
@@ -78,9 +79,7 @@ class WeChatMessage(BaseWeChat):
78
79
  type_: int,
79
80
  display: str,
80
81
  data: str,
81
- user: str | None = None,
82
- room: str | None = None,
83
- file: MessageParameterFile | None = None
82
+ window: str
84
83
  ) -> None:
85
84
  """
86
85
  Build instance attributes.
@@ -94,19 +93,7 @@ class WeChatMessage(BaseWeChat):
94
93
  type : Message type.
95
94
  display : Message description text.
96
95
  data : Message source data.
97
- user : Message sender user ID.
98
- - `None`: System message.
99
- - `str`: User messages.
100
- room : Message chat room ID.
101
- - `None`: Private chat.
102
- - `str`: Chat room chat.
103
- file : Message file information.
104
- - `None`: Non file message.
105
- - `dict`: File message.
106
- `Key 'path'`: File path.
107
- `Key 'name'`: File name.
108
- `Key 'md5'`: File MD5.
109
- `Key 'size'`: File byte size.
96
+ window : Message sende window ID.
110
97
  """
111
98
 
112
99
  # Import.
@@ -120,9 +107,26 @@ class WeChatMessage(BaseWeChat):
120
107
  self.type = type_
121
108
  self.display = display
122
109
  self.data = data
123
- self.user = user
124
- self.room = room
125
- self.file = file
110
+ self.window = window
111
+ self.file: MessageParameterFile | None = None
112
+ self.trigger_rule: TriggerRule | None = None
113
+ self.trigger_continue = self.receiver.trigger.continue_
114
+ self.trigger_break = self.receiver.trigger.break_
115
+ self.replied: bool = False
116
+ self.exc_reports: list[str] = []
117
+
118
+ ## Room and user.
119
+ if self.window.endswith('chatroom'):
120
+ self.room = self.window
121
+ if ':\n' in self.data:
122
+ self.user, self.data = self.data.split(':\n', 1)
123
+ else:
124
+ self.user = None
125
+ else:
126
+ self.room = None
127
+ self.user = self.window
128
+
129
+ ## Cache.
126
130
  self._window: str | None = None
127
131
  self._user_name: str | None = None
128
132
  self._room_name: str | None = None
@@ -135,6 +139,8 @@ class WeChatMessage(BaseWeChat):
135
139
  self._is_at_self: bool | None = None
136
140
  self._is_call: bool | None = None
137
141
  self._call_text: str | None = None
142
+ self._is_call_next: bool | None = None
143
+ self._is_last_call: bool | None = None
138
144
  self._is_new_user: bool | None = None
139
145
  self._is_new_room: bool | None = None
140
146
  self._is_new_room_user: bool | None = None
@@ -149,11 +155,9 @@ class WeChatMessage(BaseWeChat):
149
155
  self._is_app: bool | None = None
150
156
  self._app_params: dict | None = None
151
157
  self._valid: bool | None = None
152
- self.trigger_rule: TriggerRule | None = None
153
- self.trigger_continue = self.receiver.trigger.continue_
154
- self.trigger_break = self.receiver.trigger.break_
155
- self.replied: bool = False
156
- self.exc_reports: list[str] = []
158
+
159
+ ## Update call.
160
+ self.is_call
157
161
 
158
162
 
159
163
  @property
@@ -197,29 +201,6 @@ class WeChatMessage(BaseWeChat):
197
201
  return params_str
198
202
 
199
203
 
200
- @property
201
- def window(self) -> str:
202
- """
203
- Message sender window ID.
204
-
205
- Returns
206
- -------
207
- Window ID.
208
- """
209
-
210
- # Cache.
211
- if self._window is not None:
212
- return self._window
213
-
214
- # Set.
215
- if self.room is None:
216
- self._window = self.user
217
- else:
218
- self._window = self.room
219
-
220
- return self._window
221
-
222
-
223
204
  @property
224
205
  def user_name(self) -> str:
225
206
  """
@@ -499,15 +480,18 @@ class WeChatMessage(BaseWeChat):
499
480
  result: str | None = search(pattern, text)
500
481
  if result is not None:
501
482
  is_call_name = True
502
- text = result
483
+ text = result or None
503
484
  else:
504
485
  is_call_name = False
505
486
 
506
487
  # Judge.
507
488
  if (
508
489
 
490
+ ## Last call.
491
+ self.is_last_call
492
+
509
493
  ## Private chat.
510
- self.room is None
494
+ or self.room is None
511
495
 
512
496
  ## At self.
513
497
  or is_at_self
@@ -525,8 +509,21 @@ class WeChatMessage(BaseWeChat):
525
509
  is_call = False
526
510
  call_text = None
527
511
 
512
+ ## Call next.
513
+ is_call_next = (
514
+ self.room is not None
515
+ and is_call
516
+ and call_text is None
517
+ )
518
+
519
+ ### Mark.
520
+ if is_call_next:
521
+ call_next_mark_value = f'{self.user}_{self.room}'
522
+ self.receiver.call_next_mark(call_next_mark_value)
523
+
528
524
  self._is_call = is_call
529
525
  self._call_text = call_text
526
+ self._is_call_next = is_call_next
530
527
 
531
528
  return self._is_call
532
529
 
@@ -552,6 +549,52 @@ class WeChatMessage(BaseWeChat):
552
549
  return self._call_text
553
550
 
554
551
 
552
+ @property
553
+ def is_call_next(self) -> str:
554
+ """
555
+ Whether if is message of call next message.
556
+
557
+ Returns
558
+ -------
559
+ Judge result.
560
+ """
561
+
562
+ # Cache.
563
+ if self._is_call_next is not None:
564
+ return self._is_call_next
565
+
566
+ # Judge.
567
+ self.is_call
568
+
569
+ return self._is_call_next
570
+
571
+
572
+ @property
573
+ def is_last_call(self) -> str:
574
+ """
575
+ Whether if is message of last message call this time.
576
+
577
+ Returns
578
+ -------
579
+ Judge result.
580
+ """
581
+
582
+ # Cache.
583
+ if self._is_last_call is not None:
584
+ return self._is_last_call
585
+
586
+ # Judge.
587
+ call_next_mark_value = f'{self.user}_{self.room}'
588
+ self._is_last_call = call_next_mark_value in self.receiver.call_next_mark
589
+
590
+ # Mark.
591
+ if self._is_last_call:
592
+ call_next_mark_value = f'{self.user}_{self.room}'
593
+ self.receiver.call_next_mark.remove(call_next_mark_value)
594
+
595
+ return self.is_last_call
596
+
597
+
555
598
  @property
556
599
  def is_new_user(self) -> bool:
557
600
  """
@@ -1064,6 +1107,7 @@ class WechatReceiver(BaseWeChat):
1064
1107
  self.queue: Queue[WeChatMessage] = Queue()
1065
1108
  self.handlers: list[Callable[[WeChatMessage], Any]] = []
1066
1109
  self.started: bool | None = False
1110
+ self.call_next_mark = Mark()
1067
1111
  self.trigger = WeChatTrigger(self)
1068
1112
 
1069
1113
  # Start.
@@ -1150,7 +1194,6 @@ class WechatReceiver(BaseWeChat):
1150
1194
 
1151
1195
  # Set parameter.
1152
1196
  handlers = [
1153
- self.__receiver_handler_room,
1154
1197
  self.__receiver_handler_file,
1155
1198
  *self.handlers
1156
1199
  ]
@@ -1220,31 +1263,6 @@ class WechatReceiver(BaseWeChat):
1220
1263
  self.handlers.append(handler)
1221
1264
 
1222
1265
 
1223
- def __receiver_handler_room(
1224
- self,
1225
- message: WeChatMessage
1226
- ) -> None:
1227
- """
1228
- Handle room message.
1229
- """
1230
-
1231
- # Break.
1232
- if (
1233
- type(message.user) != str
1234
- or not message.user.endswith('chatroom')
1235
- ):
1236
- return
1237
-
1238
- # Set attribute.
1239
- message.room = message.user
1240
- if ':\n' in message.data:
1241
- user, data = message.data.split(':\n', 1)
1242
- message.user = user
1243
- message.data = data
1244
- else:
1245
- message.user = None
1246
-
1247
-
1248
1266
  def __receiver_handler_file(
1249
1267
  self,
1250
1268
  message: WeChatMessage
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: reywechat
3
- Version: 1.0.44
3
+ Version: 1.0.46
4
4
  Summary: WeChat method set.
5
5
  Project-URL: homepage, https://github.com/reyxbo/reywechat/
6
6
  Author-email: Rey <reyxbo@163.com>
@@ -5,13 +5,13 @@ reywechat/rcache.py,sha256=Hh_HE-t_KUMlrz4gEFPh1AjmhnrSgH520IFJPumWb7A,908
5
5
  reywechat/rclient.py,sha256=MEvQB3pHb5ORukKbKntalRtFcKIOP9BGtDsMt5ihQfM,22524
6
6
  reywechat/rdb.py,sha256=akIQsx4CZIt-H6kXWn2vpUYjo5MgD8MluzBMnSdmLaM,40051
7
7
  reywechat/rlog.py,sha256=IJL2WquiOYfB9iEai9xjojkuxPxiRHkdzZ5vCeaSA98,5261
8
- reywechat/rreceive.py,sha256=40l3n_d1BcT2EhxIYOlOnzrSQkJ8WDI_qPvJcU7CSQU,35018
8
+ reywechat/rreceive.py,sha256=zANspJOxn2sQLW0CdA-vFsIeqG1OuVwDyytGM5LxQvQ,35483
9
9
  reywechat/rschedule.py,sha256=X9kreXdClTeItJHmNPJNqb_lct-BiLCyusMQxsj5hWU,1865
10
10
  reywechat/rsend.py,sha256=GfCv5O1-81r-o-RLzMMW_MQE99KwO9gZ3-93HaJ97W8,17595
11
11
  reywechat/rtrigger.py,sha256=n8kUNovh62r7crlXrp33uaKvbILT-wcfvUqeyGt7YhM,4956
12
12
  reywechat/rwechat.py,sha256=OcElINAi9jM-eDb_OTtseBW3kyG_3jD4V4QmltR6MeE,4874
13
13
  reywechat/data/client_api.dll,sha256=H9uj-x9Ztg0jFZK0yY6NsnyH5_119dQRFfoVVMidxRs,592384
14
- reywechat-1.0.44.dist-info/METADATA,sha256=K_Wf9JSHTxKigRfjFyCGWI0UnYZ1ZG_Ie7GRL54ZZHM,1551
15
- reywechat-1.0.44.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
16
- reywechat-1.0.44.dist-info/licenses/LICENSE,sha256=UYLPqp7BvPiH8yEZduJqmmyEl6hlM3lKrFIefiD4rvk,1059
17
- reywechat-1.0.44.dist-info/RECORD,,
14
+ reywechat-1.0.46.dist-info/METADATA,sha256=R7vaJAjsObdA7VXgbOaB-Sj4k8kasY9i5EJhSg564JQ,1551
15
+ reywechat-1.0.46.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
16
+ reywechat-1.0.46.dist-info/licenses/LICENSE,sha256=UYLPqp7BvPiH8yEZduJqmmyEl6hlM3lKrFIefiD4rvk,1059
17
+ reywechat-1.0.46.dist-info/RECORD,,