reywechat 1.0.23__py3-none-any.whl → 1.0.25__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.23.dist-info → reywechat-1.0.25.dist-info}/METADATA +1 -1
- reywechat-1.0.25.dist-info/RECORD +16 -0
- reywechat-1.0.23.dist-info/RECORD +0 -16
- {reywechat-1.0.23.dist-info → reywechat-1.0.25.dist-info}/WHEEL +0 -0
- {reywechat-1.0.23.dist-info → reywechat-1.0.25.dist-info}/licenses/LICENSE +0 -0
reywechat/rschedule.py
CHANGED
@@ -24,73 +24,29 @@ class WeChatSchedule(BaseWeChat):
|
|
24
24
|
WeChat schedule type.
|
25
25
|
"""
|
26
26
|
|
27
|
+
SendEnum = WeChatSendEnum
|
28
|
+
|
27
29
|
|
28
30
|
def __init__(
|
29
31
|
self,
|
30
|
-
|
32
|
+
wechat: WeChat
|
31
33
|
) -> None:
|
32
34
|
"""
|
33
35
|
Build instance attributes.
|
34
36
|
|
35
37
|
Parameters
|
36
38
|
----------
|
37
|
-
|
39
|
+
wechat : `WeChatClient` instance.
|
38
40
|
"""
|
39
41
|
|
40
42
|
# Set attribute.
|
41
|
-
self.
|
43
|
+
self.wechat = wechat
|
42
44
|
self.rrschedule = Schedule()
|
43
45
|
|
44
46
|
# Start.
|
45
47
|
self.rrschedule.start()
|
46
48
|
|
47
49
|
|
48
|
-
def send(
|
49
|
-
self,
|
50
|
-
trigger: Literal['date', 'interval', 'cron'],
|
51
|
-
trigger_kwargs: dict,
|
52
|
-
send_type: WeChatSendEnum,
|
53
|
-
receive_id: str,
|
54
|
-
**params: Callable[[], Any] | Any
|
55
|
-
) -> None:
|
56
|
-
"""
|
57
|
-
Schedule send message.
|
58
|
-
|
59
|
-
Parameters
|
60
|
-
----------
|
61
|
-
trigger : Trigger type.
|
62
|
-
trigger_kwargs : Trigger keyword arguments.
|
63
|
-
send_type : Send type.
|
64
|
-
- `Literal[WeChatSendEnum.SEND_TEXT]`: Send text message, use `WeChatClient.send_text`: method.
|
65
|
-
- `Literal[WeChatSendEnum.SEND_TEXT_AT]`: Send text message with `@`, use `WeChatClient.send_text_at`: method.
|
66
|
-
- `Literal[WeChatSendEnum.SEND_FILE]`: Send file message, use `WeChatClient.send_file`: method.
|
67
|
-
- `Literal[WeChatSendEnum.SEND_IMAGE]`: Send image message, use `WeChatClient.send_image`: method.
|
68
|
-
- `Literal[WeChatSendEnum.SEND_EMOTION]`: Send emotion message, use `WeChatClient.send_emotion`: method.
|
69
|
-
- `Literal[WeChatSendEnum.SEND_PAT]`: Send pat message, use `WeChatClient.send_pat`: method.
|
70
|
-
- `Literal[WeChatSendEnum.SEND_PUBLIC]`: Send public account message, use `WeChatClient.send_public`: method.
|
71
|
-
- `Literal[WeChatSendEnum.SEND_FORWARD]`: Forward message, use `WeChatClient.send_forward`: method.
|
72
|
-
receive_id : User ID or chat room ID of receive message.
|
73
|
-
params : Send parameters.
|
74
|
-
- `Callable`: Use execute return value.
|
75
|
-
- `Any`: Use this value.
|
76
|
-
"""
|
77
|
-
|
78
|
-
# Get parameter.
|
79
|
-
kwargs = {
|
80
|
-
'send_type': send_type,
|
81
|
-
'receive_id': receive_id,
|
82
|
-
**params
|
83
|
-
}
|
84
|
-
|
85
|
-
# Add.
|
86
|
-
self.rrschedule.add_task(
|
87
|
-
self.rwechat.sender.send,
|
88
|
-
trigger,
|
89
|
-
kwargs=kwargs,
|
90
|
-
**trigger_kwargs
|
91
|
-
)
|
92
|
-
|
93
|
-
|
94
50
|
def add_task(
|
95
51
|
self,
|
96
52
|
trigger: Literal['date', 'interval', 'cron'],
|
reywechat/rsend.py
CHANGED
@@ -14,13 +14,10 @@ from typing import Any, Literal, overload
|
|
14
14
|
from collections.abc import Callable
|
15
15
|
from enum import IntEnum
|
16
16
|
from functools import wraps as functools_wraps
|
17
|
-
from os.path import join as os_join
|
18
17
|
from queue import Queue
|
19
18
|
from re import escape as re_escape
|
20
19
|
from reykit.rbase import throw, catch_exc
|
21
|
-
from reykit.rnet import compute_stream_time
|
22
20
|
from reykit.ros import File
|
23
|
-
from reykit.rrand import randn
|
24
21
|
from reykit.rre import sub
|
25
22
|
from reykit.rtime import sleep
|
26
23
|
from reykit.rwrap import wrap_thread, wrap_exc
|
@@ -70,13 +67,86 @@ class WeChatSendParameter(BaseWeChat):
|
|
70
67
|
SendEnum = WeChatSendEnum
|
71
68
|
|
72
69
|
|
70
|
+
@overload
|
71
|
+
def __init__(
|
72
|
+
self,
|
73
|
+
sender: WeChatSender,
|
74
|
+
send_type: Literal[WeChatSendEnum.SEND_TEXT],
|
75
|
+
receive_id: str,
|
76
|
+
send_id: int | None = None,
|
77
|
+
*,
|
78
|
+
text: str
|
79
|
+
) -> None: ...
|
80
|
+
|
81
|
+
@overload
|
82
|
+
def __init__(
|
83
|
+
self,
|
84
|
+
sender: WeChatSender,
|
85
|
+
send_type: Literal[WeChatSendEnum.SEND_TEXT_AT],
|
86
|
+
receive_id: str,
|
87
|
+
send_id: int | None = None,
|
88
|
+
*,
|
89
|
+
user_id: str | list[str] | Literal['notify@all'],
|
90
|
+
text: str
|
91
|
+
) -> None: ...
|
92
|
+
|
93
|
+
@overload
|
94
|
+
def __init__(
|
95
|
+
self,
|
96
|
+
sender: WeChatSender,
|
97
|
+
send_type: Literal[WeChatSendEnum.SEND_FILE, WeChatSendEnum.SEND_IMAGE, WeChatSendEnum.SEND_EMOTION],
|
98
|
+
receive_id: str,
|
99
|
+
send_id: int | None = None,
|
100
|
+
*,
|
101
|
+
file_path: str,
|
102
|
+
file_name: str
|
103
|
+
) -> None: ...
|
104
|
+
|
105
|
+
@overload
|
106
|
+
def __init__(
|
107
|
+
self,
|
108
|
+
sender: WeChatSender,
|
109
|
+
send_type: Literal[WeChatSendEnum.SEND_PAT],
|
110
|
+
receive_id: str,
|
111
|
+
send_id: int | None = None,
|
112
|
+
*,
|
113
|
+
user_id: str
|
114
|
+
) -> None: ...
|
115
|
+
|
116
|
+
@overload
|
117
|
+
def __init__(
|
118
|
+
self,
|
119
|
+
sender: WeChatSender,
|
120
|
+
send_type: Literal[WeChatSendEnum.SEND_PUBLIC],
|
121
|
+
receive_id: str,
|
122
|
+
send_id: int | None = None,
|
123
|
+
*,
|
124
|
+
page_url: str,
|
125
|
+
title: str,
|
126
|
+
text: str | None = None,
|
127
|
+
image_url: str | None = None,
|
128
|
+
public_name: str | None = None,
|
129
|
+
public_id: str | None = None
|
130
|
+
) -> None: ...
|
131
|
+
|
132
|
+
@overload
|
133
|
+
def __init__(
|
134
|
+
self,
|
135
|
+
sender: WeChatSender,
|
136
|
+
send_type: Literal[WeChatSendEnum.SEND_FORWARD],
|
137
|
+
receive_id: str,
|
138
|
+
send_id: int | None = None,
|
139
|
+
*,
|
140
|
+
message_id: str
|
141
|
+
) -> None: ...
|
142
|
+
|
73
143
|
def __init__(
|
74
144
|
self,
|
75
145
|
sender: WeChatSender,
|
76
146
|
send_type: WeChatSendEnum,
|
77
147
|
receive_id: str,
|
78
|
-
|
79
|
-
|
148
|
+
send_id: int | None = None,
|
149
|
+
**params: Any
|
80
150
|
) -> None:
|
81
151
|
"""
|
82
152
|
Build instance attributes.
|
@@ -94,17 +164,16 @@ class WeChatSendParameter(BaseWeChat):
|
|
94
164
|
- `Literal[WeChatSendEnum.SEND_PUBLIC]`: Send public account message, use `WeChatClient.send_public`: method.
|
95
165
|
- `Literal[WeChatSendEnum.SEND_FORWARD]`: Forward message, use `WeChatClient.send_forward`: method.
|
96
166
|
receive_id : User ID or chat room ID of receive message.
|
97
|
-
params : Send parameters.
|
98
167
|
send_id : Send ID of database.
|
168
|
+
params : Send parameters.
|
99
169
|
"""
|
100
170
|
|
101
171
|
# Set attribute.
|
102
172
|
self.sender = sender
|
103
173
|
self.send_type = send_type
|
104
174
|
self.receive_id = receive_id
|
105
|
-
self.params = params
|
106
175
|
self.send_id = send_id
|
107
|
-
self.
|
176
|
+
self.params = params
|
108
177
|
self.exc_reports: list[str] = []
|
109
178
|
|
110
179
|
|
@@ -120,29 +189,23 @@ class WeChatSender(BaseWeChat):
|
|
120
189
|
SendEnum = WeChatSendEnum
|
121
190
|
|
122
191
|
|
123
|
-
def __init__(
|
124
|
-
self,
|
125
|
-
rwechat: WeChat,
|
126
|
-
bandwidth_upstream: float
|
127
|
-
) -> None:
|
192
|
+
def __init__(self, wechat: WeChat) -> None:
|
128
193
|
"""
|
129
194
|
Build instance attributes.
|
130
195
|
|
131
196
|
Parameters
|
132
197
|
----------
|
133
|
-
|
134
|
-
bandwidth_upstream : Upload bandwidth, impact send interval, unit Mpbs.
|
198
|
+
wechat : `WeChatClient` instance.
|
135
199
|
"""
|
136
200
|
|
137
201
|
# Set attribute.
|
138
|
-
self.
|
139
|
-
self.
|
202
|
+
self.wechat = wechat
|
203
|
+
self.send = self.__call__ = self.wechat.database.send
|
140
204
|
self.queue: Queue[WeChatSendParameter] = Queue()
|
141
205
|
self.handlers: list[Callable[[WeChatSendParameter], Any]] = []
|
142
206
|
self.started: bool | None = False
|
143
207
|
|
144
208
|
# Start.
|
145
|
-
self.__delete_cache_file()
|
146
209
|
self.__start_sender()
|
147
210
|
|
148
211
|
|
@@ -201,36 +264,7 @@ class WeChatSender(BaseWeChat):
|
|
201
264
|
handler(sendparam)
|
202
265
|
|
203
266
|
## Log.
|
204
|
-
self.
|
205
|
-
|
206
|
-
|
207
|
-
def __delete_cache_file(self) -> None:
|
208
|
-
"""
|
209
|
-
Add handler, Delete cache file.
|
210
|
-
"""
|
211
|
-
|
212
|
-
|
213
|
-
# Define.
|
214
|
-
def handler_delete_cache_file(sendparam: WeChatSendParameter) -> None:
|
215
|
-
"""
|
216
|
-
Delete cache file.
|
217
|
-
|
218
|
-
Parameters
|
219
|
-
----------
|
220
|
-
sendparam : `WeChatSendParameter` instance.
|
221
|
-
"""
|
222
|
-
|
223
|
-
# Break.
|
224
|
-
if sendparam.cache_path is None:
|
225
|
-
return
|
226
|
-
|
227
|
-
# Delete.
|
228
|
-
rfile = File(sendparam.cache_path)
|
229
|
-
rfile.remove()
|
230
|
-
|
231
|
-
|
232
|
-
# Add handler.
|
233
|
-
self.add_handler(handler_delete_cache_file)
|
267
|
+
self.wechat.log.log_send(sendparam)
|
234
268
|
|
235
269
|
|
236
270
|
def __send(
|
@@ -245,43 +279,28 @@ class WeChatSender(BaseWeChat):
|
|
245
279
|
sendparam : `WeChatSendParameter` instance.
|
246
280
|
"""
|
247
281
|
|
248
|
-
#
|
249
|
-
for key, value in sendparam.params.items():
|
250
|
-
|
251
|
-
## Callable.
|
252
|
-
if callable(value):
|
253
|
-
sendparam.params[key] = value()
|
254
|
-
|
255
|
-
# File.
|
256
|
-
|
257
|
-
## From file ID.
|
258
|
-
if (file_id := sendparam.params.get('file_id')) is not None:
|
259
|
-
sendparam.params['path'], sendparam.params['file_name'] = self.rwechat.database.__download_file(file_id)
|
260
|
-
|
261
|
-
## Set file name.
|
282
|
+
# File rename to new.
|
262
283
|
if (
|
263
|
-
(
|
284
|
+
(file_path := sendparam.params.get('file_path')) is not None
|
264
285
|
and (file_name := sendparam.params.get('file_name')) is not None
|
265
286
|
):
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
sendparam.cache_path = copy_path
|
270
|
-
path = copy_path
|
287
|
+
file = File(file_path)
|
288
|
+
file_old_name = file.name
|
289
|
+
file_path_rename = file.rename(file_name)
|
271
290
|
|
272
291
|
# Send.
|
273
292
|
match sendparam.send_type:
|
274
293
|
|
275
294
|
## Text.
|
276
295
|
case WeChatSendEnum.SEND_TEXT:
|
277
|
-
self.
|
296
|
+
self.wechat.client.send_text(
|
278
297
|
sendparam.receive_id,
|
279
298
|
sendparam.params['text']
|
280
299
|
)
|
281
300
|
|
282
301
|
## Text with '@'.
|
283
302
|
case WeChatSendEnum.SEND_TEXT_AT:
|
284
|
-
self.
|
303
|
+
self.wechat.client.send_text_at(
|
285
304
|
sendparam.receive_id,
|
286
305
|
sendparam.params['user_id'],
|
287
306
|
sendparam.params['text']
|
@@ -289,35 +308,35 @@ class WeChatSender(BaseWeChat):
|
|
289
308
|
|
290
309
|
## File.
|
291
310
|
case WeChatSendEnum.SEND_FILE:
|
292
|
-
self.
|
311
|
+
self.wechat.client.send_file(
|
293
312
|
sendparam.receive_id,
|
294
|
-
|
313
|
+
file_path_rename
|
295
314
|
)
|
296
315
|
|
297
316
|
## Image.
|
298
317
|
case WeChatSendEnum.SEND_IMAGE:
|
299
|
-
self.
|
318
|
+
self.wechat.client.send_image(
|
300
319
|
sendparam.receive_id,
|
301
|
-
|
320
|
+
file_path_rename
|
302
321
|
)
|
303
322
|
|
304
323
|
## Emotion.
|
305
324
|
case WeChatSendEnum.SEND_EMOTION:
|
306
|
-
self.
|
325
|
+
self.wechat.client.send_emotion(
|
307
326
|
sendparam.receive_id,
|
308
|
-
|
327
|
+
file_path_rename
|
309
328
|
)
|
310
329
|
|
311
330
|
## Pat.
|
312
331
|
case WeChatSendEnum.SEND_PAT:
|
313
|
-
self.
|
332
|
+
self.wechat.client.send_pat(
|
314
333
|
sendparam.receive_id,
|
315
334
|
sendparam.params['user_id']
|
316
335
|
)
|
317
336
|
|
318
337
|
## Public account.
|
319
338
|
case WeChatSendEnum.SEND_PUBLIC:
|
320
|
-
self.
|
339
|
+
self.wechat.client.send_public(
|
321
340
|
sendparam.receive_id,
|
322
341
|
sendparam.params['page_url'],
|
323
342
|
sendparam.params['title'],
|
@@ -329,158 +348,22 @@ class WeChatSender(BaseWeChat):
|
|
329
348
|
|
330
349
|
## Forward.
|
331
350
|
case WeChatSendEnum.SEND_FORWARD:
|
332
|
-
self.
|
351
|
+
self.wechat.client.send_forward(
|
333
352
|
sendparam.receive_id,
|
334
353
|
sendparam.params['message_id']
|
335
354
|
)
|
336
355
|
|
337
356
|
## Throw exception.
|
338
|
-
case
|
339
|
-
throw(ValueError,
|
340
|
-
|
341
|
-
# Wait.
|
342
|
-
self.__wait(sendparam)
|
343
|
-
|
357
|
+
case send_type:
|
358
|
+
throw(ValueError, send_type)
|
344
359
|
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
"""
|
350
|
-
Waiting after sending.
|
351
|
-
|
352
|
-
Parameters
|
353
|
-
----------
|
354
|
-
sendparam : `WeChatSendParameter` instance.
|
355
|
-
"""
|
356
|
-
|
357
|
-
# Get parameter.
|
358
|
-
seconds = randn(0.8, 1.2, precision=2)
|
359
|
-
|
360
|
-
## File.
|
361
|
-
if sendparam.send_type in (
|
362
|
-
WeChatSendEnum.SEND_FILE,
|
363
|
-
WeChatSendEnum.SEND_IMAGE,
|
364
|
-
WeChatSendEnum.SEND_EMOTION
|
360
|
+
# File rename to old.
|
361
|
+
if (
|
362
|
+
file_path is not None
|
363
|
+
and file_name is not None
|
365
364
|
):
|
366
|
-
|
367
|
-
|
368
|
-
seconds = stream_time
|
369
|
-
|
370
|
-
# Wait.
|
371
|
-
sleep(seconds)
|
372
|
-
|
373
|
-
|
374
|
-
@overload
|
375
|
-
def send(
|
376
|
-
self,
|
377
|
-
send_type: Literal[WeChatSendEnum.SEND_TEXT],
|
378
|
-
receive_id: str,
|
379
|
-
send_id: int | None = None,
|
380
|
-
*,
|
381
|
-
text: str
|
382
|
-
) -> None: ...
|
383
|
-
|
384
|
-
@overload
|
385
|
-
def send(
|
386
|
-
self,
|
387
|
-
send_type: Literal[WeChatSendEnum.SEND_TEXT_AT],
|
388
|
-
receive_id: str,
|
389
|
-
send_id: int | None = None,
|
390
|
-
*,
|
391
|
-
user_id: str | list[str] | Literal['notify@all'],
|
392
|
-
text: str
|
393
|
-
) -> None: ...
|
394
|
-
|
395
|
-
@overload
|
396
|
-
def send(
|
397
|
-
self,
|
398
|
-
send_type: Literal[WeChatSendEnum.SEND_FILE, WeChatSendEnum.SEND_IMAGE, WeChatSendEnum.SEND_EMOTION],
|
399
|
-
receive_id: str,
|
400
|
-
send_id: int | None = None,
|
401
|
-
*,
|
402
|
-
path: str,
|
403
|
-
file_name: str | None = None
|
404
|
-
) -> None: ...
|
405
|
-
|
406
|
-
@overload
|
407
|
-
def send(
|
408
|
-
self,
|
409
|
-
send_type: Literal[WeChatSendEnum.SEND_PAT],
|
410
|
-
receive_id: str,
|
411
|
-
send_id: int | None = None,
|
412
|
-
*,
|
413
|
-
user_id: str
|
414
|
-
) -> None: ...
|
415
|
-
|
416
|
-
@overload
|
417
|
-
def send(
|
418
|
-
self,
|
419
|
-
send_type: Literal[WeChatSendEnum.SEND_PUBLIC],
|
420
|
-
receive_id: str,
|
421
|
-
send_id: int | None = None,
|
422
|
-
*,
|
423
|
-
page_url: str,
|
424
|
-
title: str,
|
425
|
-
text: str | None = None,
|
426
|
-
image_url: str | None = None,
|
427
|
-
public_name: str | None = None,
|
428
|
-
public_id: str | None = None
|
429
|
-
) -> None: ...
|
430
|
-
|
431
|
-
@overload
|
432
|
-
def send(
|
433
|
-
self,
|
434
|
-
send_type: Literal[WeChatSendEnum.SEND_FORWARD],
|
435
|
-
receive_id: str,
|
436
|
-
send_id: int | None = None,
|
437
|
-
*,
|
438
|
-
message_id: str
|
439
|
-
) -> None: ...
|
440
|
-
|
441
|
-
def send(
|
442
|
-
self,
|
443
|
-
send_type: WeChatSendEnum,
|
444
|
-
receive_id: str | None = None,
|
445
|
-
send_id: int | None = None,
|
446
|
-
**params: Any
|
447
|
-
) -> None:
|
448
|
-
"""
|
449
|
-
Put parameters into the send queue.
|
450
|
-
|
451
|
-
Parameters
|
452
|
-
----------
|
453
|
-
send_type : Send type.
|
454
|
-
- `Literal[WeChatSendEnum.SEND_TEXT]`: Send text message, use `WeChatClient.send_text`: method.
|
455
|
-
- `Literal[WeChatSendEnum.SEND_TEXT_AT]`: Send text message with `@`, use `WeChatClient.send_text_at`: method.
|
456
|
-
- `Literal[WeChatSendEnum.SEND_FILE]`: Send file message, use `WeChatClient.send_file`: method.
|
457
|
-
- `Literal[WeChatSendEnum.SEND_IMAGE]`: Send image message, use `WeChatClient.send_image`: method.
|
458
|
-
- `Literal[WeChatSendEnum.SEND_EMOTION]`: Send emotion message, use `WeChatClient.send_emotion`: method.
|
459
|
-
- `Literal[WeChatSendEnum.SEND_PAT]`: Send pat message, use `WeChatClient.send_pat`: method.
|
460
|
-
- `Literal[WeChatSendEnum.SEND_PUBLIC]`: Send public account message, use `WeChatClient.send_public`: method.
|
461
|
-
- `Literal[WeChatSendEnum.SEND_FORWARD]`: Forward message, use `WeChatClient.send_forward`: method.
|
462
|
-
receive_id : User ID or chat room ID of receive message.
|
463
|
-
send_id : Send ID of database.
|
464
|
-
params : Send parameters.
|
465
|
-
- `Callable`: Use execute return value.
|
466
|
-
- `Any`: Use this value.
|
467
|
-
`Key 'file_name'`: Given file name.
|
468
|
-
"""
|
469
|
-
|
470
|
-
# Check.
|
471
|
-
if send_type not in WeChatSendEnum:
|
472
|
-
throw(ValueError, send_type)
|
473
|
-
|
474
|
-
sendparam = WeChatSendParameter(
|
475
|
-
self,
|
476
|
-
send_type,
|
477
|
-
receive_id,
|
478
|
-
params,
|
479
|
-
send_id
|
480
|
-
)
|
481
|
-
|
482
|
-
# Put.
|
483
|
-
self.queue.put(sendparam)
|
365
|
+
file = File(file_path_rename)
|
366
|
+
file.rename(file_old_name)
|
484
367
|
|
485
368
|
|
486
369
|
def add_handler(
|
@@ -518,8 +401,8 @@ class WeChatSender(BaseWeChat):
|
|
518
401
|
"""
|
519
402
|
|
520
403
|
# Get parameter.
|
521
|
-
member_dict = self.
|
522
|
-
login_id = self.
|
404
|
+
member_dict = self.wechat.client.get_room_member_dict(room_id)
|
405
|
+
login_id = self.wechat.client.login_info['id']
|
523
406
|
if login_id in member_dict:
|
524
407
|
del member_dict[login_id]
|
525
408
|
|
@@ -653,7 +536,4 @@ class WeChatSender(BaseWeChat):
|
|
653
536
|
print('End sender.')
|
654
537
|
|
655
538
|
|
656
|
-
__call__ = send
|
657
|
-
|
658
|
-
|
659
539
|
__del__ = end
|
reywechat/rtrigger.py
CHANGED
@@ -48,13 +48,13 @@ class WeChatTrigger(BaseWeChat):
|
|
48
48
|
self.rules: list[TriggerRule] = []
|
49
49
|
|
50
50
|
# Add handler.
|
51
|
-
self.handler = self.
|
51
|
+
self.handler = self.__add_handler_trigger_by_rule()
|
52
52
|
|
53
53
|
# Add trigger.
|
54
54
|
self.__add_trigger_valid()
|
55
55
|
|
56
56
|
|
57
|
-
def
|
57
|
+
def __add_handler_trigger_by_rule(self) -> Callable[[WeChatMessage], None]:
|
58
58
|
"""
|
59
59
|
Add handler, trigger message by rules.
|
60
60
|
|
@@ -119,7 +119,8 @@ class WeChatTrigger(BaseWeChat):
|
|
119
119
|
def add_rule(
|
120
120
|
self,
|
121
121
|
execute: Callable[[WeChatMessage], Any],
|
122
|
-
level: float
|
122
|
+
level: float,
|
123
|
+
is_reply: bool,
|
123
124
|
) -> None:
|
124
125
|
"""
|
125
126
|
Add trigger rule.
|
@@ -131,13 +132,14 @@ class WeChatTrigger(BaseWeChat):
|
|
131
132
|
When throw `WeChatTriggerContinueExit` type exception, then continue next execution.
|
132
133
|
When throw `WeChatTriggerBreakExit` type exception, then stop executes.
|
133
134
|
level : Priority level, sort from large to small.
|
135
|
+
is_reply : Whehter is reply function, allow call `WeChatMessage.reply`, can only reply once function.
|
134
136
|
"""
|
135
137
|
|
136
138
|
# Get parameter.
|
137
139
|
rule: TriggerRule = {
|
138
140
|
'level': level,
|
139
141
|
'execute': execute,
|
140
|
-
'is_reply':
|
142
|
+
'is_reply': is_reply
|
141
143
|
}
|
142
144
|
|
143
145
|
# Add.
|
reywechat/rwechat.py
CHANGED
@@ -14,7 +14,7 @@ from os import getcwd as os_getcwd
|
|
14
14
|
from os.path import join as os_join
|
15
15
|
from reydb.rdb import Database
|
16
16
|
from reykit.rbase import block
|
17
|
-
from reykit.ros import
|
17
|
+
from reykit.ros import make_dir as reykit_make_dir
|
18
18
|
|
19
19
|
from .rbase import BaseWeChat
|
20
20
|
|
@@ -44,8 +44,6 @@ class WeChat(BaseWeChat):
|
|
44
44
|
self,
|
45
45
|
rrdatabase: Database | dict[Literal['wechat', 'file'], Database] | None,
|
46
46
|
max_receiver: int = 2,
|
47
|
-
bandwidth_downstream: float = 5,
|
48
|
-
bandwidth_upstream: float = 5,
|
49
47
|
project_dir: str | None = None
|
50
48
|
) -> None:
|
51
49
|
"""
|
@@ -59,8 +57,6 @@ class WeChat(BaseWeChat):
|
|
59
57
|
`Key 'wechat'`: `WeChatDatabase` instance used in WeChat methods.
|
60
58
|
`Key 'file'`: `WeChatDatabase` instance used in file methods.
|
61
59
|
max_receiver : Maximum number of receivers.
|
62
|
-
bandwidth_downstream : Download bandwidth, impact receive timeout, unit Mpbs.
|
63
|
-
bandwidth_upstream : Upload bandwidth, impact send interval, unit Mpbs.
|
64
60
|
project_dir: Project directory, will create sub folders.
|
65
61
|
- `None`: Use working directory.
|
66
62
|
- `str`: Use this directory.
|
@@ -74,18 +70,18 @@ class WeChat(BaseWeChat):
|
|
74
70
|
from .rschedule import WeChatSchedule
|
75
71
|
from .rsend import WeChatSender
|
76
72
|
|
77
|
-
#
|
73
|
+
# Make directory.
|
78
74
|
project_dir = project_dir or os_getcwd()
|
79
|
-
self.
|
75
|
+
self.dir_cache, self.dir_log = self.__make_subdir(project_dir)
|
80
76
|
|
81
77
|
# Set attribute.
|
82
78
|
|
83
79
|
## Instance.
|
84
80
|
self.client = WeChatClient(self)
|
85
81
|
self.log = WeChatLog(self)
|
86
|
-
self.receiver = WechatReceiver(self, max_receiver
|
82
|
+
self.receiver = WechatReceiver(self, max_receiver)
|
87
83
|
self.trigger = self.receiver.trigger
|
88
|
-
self.sender = WeChatSender(self
|
84
|
+
self.sender = WeChatSender(self)
|
89
85
|
self.database = WeChatDatabase(self, rrdatabase)
|
90
86
|
self.schedule = WeChatSchedule(self)
|
91
87
|
|
@@ -118,35 +114,37 @@ class WeChat(BaseWeChat):
|
|
118
114
|
self.schedule_resume = self.schedule.resume
|
119
115
|
|
120
116
|
|
121
|
-
def
|
117
|
+
def __make_subdir(
|
122
118
|
self,
|
123
119
|
project_dir: str
|
124
|
-
) ->
|
120
|
+
) -> tuple[str, str]:
|
125
121
|
"""
|
126
|
-
|
122
|
+
Make project subdirectory, 'project_dir/cache' and 'project_dir/cache'.
|
127
123
|
|
128
124
|
Parameters
|
129
125
|
----------
|
130
|
-
project_dir: Project directory
|
126
|
+
project_dir: Project directory.
|
127
|
+
|
128
|
+
Returns
|
129
|
+
-------
|
130
|
+
Subdirectorys path.
|
131
131
|
"""
|
132
132
|
|
133
133
|
# Set parameter.
|
134
|
-
|
135
|
-
'
|
136
|
-
'
|
134
|
+
dir_names = (
|
135
|
+
'cache',
|
136
|
+
'log'
|
137
137
|
)
|
138
|
-
|
139
|
-
|
140
|
-
for
|
138
|
+
dir_dict = {
|
139
|
+
dir_name: os_join(project_dir, dir_name)
|
140
|
+
for dir_name in dir_names
|
141
141
|
}
|
142
142
|
|
143
143
|
# Create.
|
144
|
-
paths =
|
145
|
-
|
144
|
+
paths = dir_dict.values()
|
145
|
+
reykit_make_dir(*paths)
|
146
146
|
|
147
|
-
|
148
|
-
self.dir_log = folder_dict['Log']
|
149
|
-
self.dir_file = folder_dict['File']
|
147
|
+
return dir_dict['cache'], dir_dict['log']
|
150
148
|
|
151
149
|
|
152
150
|
def start(self) -> None:
|