reywechat 1.0.45__py3-none-any.whl → 1.0.47__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
@@ -23,7 +23,7 @@ from reykit.rnet import listen_socket
23
23
  from reykit.ros import File, os_exists
24
24
  from reykit.rre import search, search_batch, findall
25
25
  from reykit.rtask import ThreadPool
26
- from reykit.rtime import sleep, wait
26
+ from reykit.rtime import now, sleep, wait, to_time, time_to
27
27
  from reykit.rwrap import wrap_thread, wrap_exc
28
28
 
29
29
  from .rbase import BaseWeChat, WeChatTriggerError
@@ -79,9 +79,7 @@ class WeChatMessage(BaseWeChat):
79
79
  type_: int,
80
80
  display: str,
81
81
  data: str,
82
- user: str | None = None,
83
- room: str | None = None,
84
- file: MessageParameterFile | None = None
82
+ window: str
85
83
  ) -> None:
86
84
  """
87
85
  Build instance attributes.
@@ -95,19 +93,11 @@ class WeChatMessage(BaseWeChat):
95
93
  type : Message type.
96
94
  display : Message description text.
97
95
  data : Message source data.
98
- user : Message sender user ID.
99
- - `None`: System message.
100
- - `str`: User messages.
101
- room : Message chat room ID.
102
- - `None`: Private chat.
103
- - `str`: Chat room chat.
104
- file : Message file information.
105
- - `None`: Non file message.
106
- - `dict`: File message.
107
- `Key 'path'`: File path.
108
- `Key 'name'`: File name.
109
- `Key 'md5'`: File MD5.
110
- `Key 'size'`: File byte size.
96
+ window : Message sende window ID.
97
+
98
+ Attributes
99
+ ----------
100
+ is_test : Whether add test text to before reply text.
111
101
  """
112
102
 
113
103
  # Import.
@@ -121,10 +111,27 @@ class WeChatMessage(BaseWeChat):
121
111
  self.type = type_
122
112
  self.display = display
123
113
  self.data = data
124
- self.user = user
125
- self.room = room
126
- self.file = file
127
- self._window: str | None = None
114
+ self.window = window
115
+ self.file: MessageParameterFile | None = None
116
+ self.trigger_rule: TriggerRule | None = None
117
+ self.trigger_continue = self.receiver.trigger.continue_
118
+ self.trigger_break = self.receiver.trigger.break_
119
+ self.replied: bool = False
120
+ self.exc_reports: list[str] = []
121
+ self.is_test: bool = False
122
+
123
+ ## Room and user.
124
+ if self.window.endswith('chatroom'):
125
+ self.room = self.window
126
+ if ':\n' in self.data:
127
+ self.user, self.data = self.data.split(':\n', 1)
128
+ else:
129
+ self.user = None
130
+ else:
131
+ self.room = None
132
+ self.user = self.window
133
+
134
+ ## Cache.
128
135
  self._user_name: str | None = None
129
136
  self._room_name: str | None = None
130
137
  self._window_name: str | None = None
@@ -136,6 +143,8 @@ class WeChatMessage(BaseWeChat):
136
143
  self._is_at_self: bool | None = None
137
144
  self._is_call: bool | None = None
138
145
  self._call_text: str | None = None
146
+ self._is_call_next: bool | None = None
147
+ self._is_last_call: bool | None = None
139
148
  self._is_new_user: bool | None = None
140
149
  self._is_new_room: bool | None = None
141
150
  self._is_new_room_user: bool | None = None
@@ -150,11 +159,9 @@ class WeChatMessage(BaseWeChat):
150
159
  self._is_app: bool | None = None
151
160
  self._app_params: dict | None = None
152
161
  self._valid: bool | None = None
153
- self.trigger_rule: TriggerRule | None = None
154
- self.trigger_continue = self.receiver.trigger.continue_
155
- self.trigger_break = self.receiver.trigger.break_
156
- self.replied: bool = False
157
- self.exc_reports: list[str] = []
162
+
163
+ ## Update call.
164
+ self.is_call
158
165
 
159
166
 
160
167
  @property
@@ -198,29 +205,6 @@ class WeChatMessage(BaseWeChat):
198
205
  return params_str
199
206
 
200
207
 
201
- @property
202
- def window(self) -> str:
203
- """
204
- Message sender window ID.
205
-
206
- Returns
207
- -------
208
- Window ID.
209
- """
210
-
211
- # Cache.
212
- if self._window is not None:
213
- return self._window
214
-
215
- # Set.
216
- if self.room is None:
217
- self._window = self.user
218
- else:
219
- self._window = self.room
220
-
221
- return self._window
222
-
223
-
224
208
  @property
225
209
  def user_name(self) -> str:
226
210
  """
@@ -507,8 +491,11 @@ class WeChatMessage(BaseWeChat):
507
491
  # Judge.
508
492
  if (
509
493
 
494
+ ## Last call.
495
+ self.is_last_call
496
+
510
497
  ## Private chat.
511
- self.room is None
498
+ or self.room is None
512
499
 
513
500
  ## At self.
514
501
  or is_at_self
@@ -522,31 +509,25 @@ class WeChatMessage(BaseWeChat):
522
509
  ):
523
510
  is_call = True
524
511
  call_text = text
525
-
526
- ## Call next.
527
- elif (
528
- self.room is not None
529
- and (value := f'{self.room}_{self.user}') in self.receiver.call_next_mark
530
- ):
531
- self.receiver.call_next_mark.remove(value)
532
- is_call = True
533
- call_text = text
534
-
535
512
  else:
536
513
  is_call = False
537
514
  call_text = None
538
515
 
539
- # Call next.
540
- if (
541
- is_call
516
+ ## Call next.
517
+ is_call_next = (
518
+ self.room is not None
519
+ and is_call
542
520
  and call_text is None
543
- and self.room is not None
544
- ):
545
- value = f'{self.room}_{self.user}'
546
- self.receiver.call_next_mark(value)
521
+ )
522
+
523
+ ### Mark.
524
+ if is_call_next:
525
+ call_next_mark_value = f'{self.user}_{self.room}'
526
+ self.receiver.call_next_mark(call_next_mark_value)
547
527
 
548
528
  self._is_call = is_call
549
529
  self._call_text = call_text
530
+ self._is_call_next = is_call_next
550
531
 
551
532
  return self._is_call
552
533
 
@@ -572,6 +553,52 @@ class WeChatMessage(BaseWeChat):
572
553
  return self._call_text
573
554
 
574
555
 
556
+ @property
557
+ def is_call_next(self) -> str:
558
+ """
559
+ Whether if is message of call next message.
560
+
561
+ Returns
562
+ -------
563
+ Judge result.
564
+ """
565
+
566
+ # Cache.
567
+ if self._is_call_next is not None:
568
+ return self._is_call_next
569
+
570
+ # Judge.
571
+ self.is_call
572
+
573
+ return self._is_call_next
574
+
575
+
576
+ @property
577
+ def is_last_call(self) -> str:
578
+ """
579
+ Whether if is message of last message call this time.
580
+
581
+ Returns
582
+ -------
583
+ Judge result.
584
+ """
585
+
586
+ # Cache.
587
+ if self._is_last_call is not None:
588
+ return self._is_last_call
589
+
590
+ # Judge.
591
+ call_next_mark_value = f'{self.user}_{self.room}'
592
+ self._is_last_call = call_next_mark_value in self.receiver.call_next_mark
593
+
594
+ # Mark.
595
+ if self._is_last_call:
596
+ call_next_mark_value = f'{self.user}_{self.room}'
597
+ self.receiver.call_next_mark.remove(call_next_mark_value)
598
+
599
+ return self.is_last_call
600
+
601
+
575
602
  @property
576
603
  def is_new_user(self) -> bool:
577
604
  """
@@ -1037,10 +1064,25 @@ class WeChatMessage(BaseWeChat):
1037
1064
  text = 'can only be used by reply trigger'
1038
1065
  throw(WeChatTriggerError, self.trigger_rule, text=text)
1039
1066
 
1067
+ # Test.
1068
+ if (
1069
+ self.is_test
1070
+ and send_type in (WeChatSendTypeEnum.TEXT, WeChatSendTypeEnum.TEXT_AT)
1071
+ ):
1072
+ message_time = time_to(to_time(self.time).time())
1073
+ receive_time = now('time_str')
1074
+ send_time = ':time:'
1075
+ test_text = f'{message_time} M\n{receive_time} R\n{send_time} S'
1076
+ if params['text'] == '':
1077
+ params['text'] = test_text
1078
+ else:
1079
+ params['text'] = f'{test_text}\n\n{params['text']}'
1080
+ params['is_test'] = True
1081
+
1040
1082
  # Status.
1041
1083
  self.replied = True
1042
1084
 
1043
- # Swend.
1085
+ # Send.
1044
1086
  self.receiver.wechat.sender.send(
1045
1087
  send_type,
1046
1088
  receive_id=self.window,
@@ -1171,7 +1213,6 @@ class WechatReceiver(BaseWeChat):
1171
1213
 
1172
1214
  # Set parameter.
1173
1215
  handlers = [
1174
- self.__receiver_handler_room,
1175
1216
  self.__receiver_handler_file,
1176
1217
  *self.handlers
1177
1218
  ]
@@ -1241,31 +1282,6 @@ class WechatReceiver(BaseWeChat):
1241
1282
  self.handlers.append(handler)
1242
1283
 
1243
1284
 
1244
- def __receiver_handler_room(
1245
- self,
1246
- message: WeChatMessage
1247
- ) -> None:
1248
- """
1249
- Handle room message.
1250
- """
1251
-
1252
- # Break.
1253
- if (
1254
- type(message.user) != str
1255
- or not message.user.endswith('chatroom')
1256
- ):
1257
- return
1258
-
1259
- # Set attribute.
1260
- message.room = message.user
1261
- if ':\n' in message.data:
1262
- user, data = message.data.split(':\n', 1)
1263
- message.user = user
1264
- message.data = data
1265
- else:
1266
- message.user = None
1267
-
1268
-
1269
1285
  def __receiver_handler_file(
1270
1286
  self,
1271
1287
  message: WeChatMessage
reywechat/rsend.py CHANGED
@@ -18,7 +18,7 @@ from queue import Queue
18
18
  from re import escape as re_escape
19
19
  from reykit.rbase import throw, catch_exc
20
20
  from reykit.rre import sub
21
- from reykit.rtime import sleep
21
+ from reykit.rtime import now, sleep
22
22
  from reykit.rwrap import wrap_thread, wrap_exc
23
23
 
24
24
  from .rbase import BaseWeChat, WeChatTriggerContinueExit, WeChatTriggerBreakExit
@@ -290,6 +290,16 @@ class WeChatSender(BaseWeChat):
290
290
  send_param : `WeChatSendParameter` instance.
291
291
  """
292
292
 
293
+ # Test.
294
+ if (
295
+ send_param.params.get('is_test')
296
+ and send_param.send_type in (WeChatSendTypeEnum.TEXT, WeChatSendTypeEnum.TEXT_AT)
297
+ ):
298
+ text: str = send_param.params['text']
299
+ now_time = now('time_str')
300
+ modify_text = text.replace(':time:', now_time, 1)
301
+ send_param.params['text'] = modify_text
302
+
293
303
  # Send.
294
304
  match send_param.send_type:
295
305
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: reywechat
3
- Version: 1.0.45
3
+ Version: 1.0.47
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=KviaL3yODlCxc7muCoosk5N0V5_aJYEGQQJNZeOvbYI,35627
8
+ reywechat/rreceive.py,sha256=dr_it4xJpohzoy0HJfcPheVBqgJcUZAksH-t6zaXT6U,36187
9
9
  reywechat/rschedule.py,sha256=X9kreXdClTeItJHmNPJNqb_lct-BiLCyusMQxsj5hWU,1865
10
- reywechat/rsend.py,sha256=GfCv5O1-81r-o-RLzMMW_MQE99KwO9gZ3-93HaJ97W8,17595
10
+ reywechat/rsend.py,sha256=U2YQx0bqmQwzWogbXxjaATh_2TvjnbLd4O3dkCQhaIg,17993
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.45.dist-info/METADATA,sha256=yLokP8GcJTizmArK9zQ7n30AZ_2f2L6gffRnxa0x2aY,1551
15
- reywechat-1.0.45.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
16
- reywechat-1.0.45.dist-info/licenses/LICENSE,sha256=UYLPqp7BvPiH8yEZduJqmmyEl6hlM3lKrFIefiD4rvk,1059
17
- reywechat-1.0.45.dist-info/RECORD,,
14
+ reywechat-1.0.47.dist-info/METADATA,sha256=nDuY1qNlRvga5LFUJEhWB0offK0UlWA5OP5KjeRDXWU,1551
15
+ reywechat-1.0.47.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
16
+ reywechat-1.0.47.dist-info/licenses/LICENSE,sha256=UYLPqp7BvPiH8yEZduJqmmyEl6hlM3lKrFIefiD4rvk,1059
17
+ reywechat-1.0.47.dist-info/RECORD,,