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 +110 -94
- reywechat/rsend.py +11 -1
- {reywechat-1.0.45.dist-info → reywechat-1.0.47.dist-info}/METADATA +1 -1
- {reywechat-1.0.45.dist-info → reywechat-1.0.47.dist-info}/RECORD +6 -6
- {reywechat-1.0.45.dist-info → reywechat-1.0.47.dist-info}/WHEEL +0 -0
- {reywechat-1.0.45.dist-info → reywechat-1.0.47.dist-info}/licenses/LICENSE +0 -0
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
|
-
|
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
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
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.
|
125
|
-
self.
|
126
|
-
self.
|
127
|
-
self.
|
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
|
-
|
154
|
-
|
155
|
-
self.
|
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
|
-
|
540
|
-
|
541
|
-
|
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
|
-
|
544
|
-
|
545
|
-
|
546
|
-
|
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
|
-
#
|
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
|
|
@@ -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=
|
8
|
+
reywechat/rreceive.py,sha256=dr_it4xJpohzoy0HJfcPheVBqgJcUZAksH-t6zaXT6U,36187
|
9
9
|
reywechat/rschedule.py,sha256=X9kreXdClTeItJHmNPJNqb_lct-BiLCyusMQxsj5hWU,1865
|
10
|
-
reywechat/rsend.py,sha256=
|
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.
|
15
|
-
reywechat-1.0.
|
16
|
-
reywechat-1.0.
|
17
|
-
reywechat-1.0.
|
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,,
|
File without changes
|
File without changes
|