reywechat 1.0.27__py3-none-any.whl → 1.0.29__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/__init__.py +1 -0
- reywechat/rall.py +1 -0
- reywechat/rcache.py +47 -0
- reywechat/rdb.py +18 -21
- reywechat/rlog.py +28 -2
- reywechat/rreceive.py +45 -73
- reywechat/rsend.py +3 -22
- reywechat/rwechat.py +4 -40
- {reywechat-1.0.27.dist-info → reywechat-1.0.29.dist-info}/METADATA +1 -1
- reywechat-1.0.29.dist-info/RECORD +17 -0
- reywechat-1.0.27.dist-info/RECORD +0 -16
- {reywechat-1.0.27.dist-info → reywechat-1.0.29.dist-info}/WHEEL +0 -0
- {reywechat-1.0.27.dist-info → reywechat-1.0.29.dist-info}/licenses/LICENSE +0 -0
reywechat/__init__.py
CHANGED
reywechat/rall.py
CHANGED
reywechat/rcache.py
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
# !/usr/bin/env python
|
2
|
+
# -*- coding: utf-8 -*-
|
3
|
+
|
4
|
+
"""
|
5
|
+
@Time : 2025-08-13 22:58:31
|
6
|
+
@Author : Rey
|
7
|
+
@Contact : reyxbo@163.com
|
8
|
+
@Explain : Cache methods.
|
9
|
+
"""
|
10
|
+
|
11
|
+
|
12
|
+
from reykit.ros import FileCache, join_path
|
13
|
+
|
14
|
+
from .rbase import BaseWeChat
|
15
|
+
from .rwechat import WeChat
|
16
|
+
|
17
|
+
|
18
|
+
__all__ = (
|
19
|
+
'WeChatCache',
|
20
|
+
)
|
21
|
+
|
22
|
+
|
23
|
+
class WeChatCache(BaseWeChat, FileCache):
|
24
|
+
"""
|
25
|
+
WeChat file cache type.
|
26
|
+
"""
|
27
|
+
|
28
|
+
|
29
|
+
def __init__(
|
30
|
+
self,
|
31
|
+
wechat: WeChat
|
32
|
+
) -> None:
|
33
|
+
"""
|
34
|
+
Build instance attributes.
|
35
|
+
|
36
|
+
Parameters
|
37
|
+
----------
|
38
|
+
wechat : `WeChatClient` instance.
|
39
|
+
"""
|
40
|
+
|
41
|
+
# Set attribute.
|
42
|
+
self.wechat = wechat
|
43
|
+
path = join_path(self.wechat.project_dir, 'cache')
|
44
|
+
self.cache = FileCache(path)
|
45
|
+
self.folder = self.cache.folder
|
46
|
+
self.index = self.cache.index
|
47
|
+
self.store = self.cache.store
|
reywechat/rdb.py
CHANGED
@@ -13,7 +13,7 @@ from typing import Any, Literal, overload
|
|
13
13
|
from json import loads as json_loads
|
14
14
|
from reydb.rdb import Database
|
15
15
|
from reykit.rbase import throw
|
16
|
-
from reykit.ros import
|
16
|
+
from reykit.ros import File
|
17
17
|
from reykit.rtime import to_time, time_to, sleep
|
18
18
|
from reykit.rwrap import wrap_thread
|
19
19
|
|
@@ -58,8 +58,8 @@ class WeChatDatabase(BaseWeChat):
|
|
58
58
|
case Database():
|
59
59
|
self.rdatabase_wechat = self.rdatabase_file = rdatabase
|
60
60
|
case dict():
|
61
|
-
self.rdatabase_wechat = rdatabase.get('wechat')
|
62
|
-
self.rdatabase_file = rdatabase.get('file')
|
61
|
+
self.rdatabase_wechat: Database = rdatabase.get('wechat')
|
62
|
+
self.rdatabase_file: Database = rdatabase.get('file')
|
63
63
|
if (
|
64
64
|
self.rdatabase_wechat
|
65
65
|
or self.rdatabase_file
|
@@ -972,26 +972,18 @@ class WeChatDatabase(BaseWeChat):
|
|
972
972
|
File save path and file name.
|
973
973
|
"""
|
974
974
|
|
975
|
-
#
|
975
|
+
# Information.
|
976
976
|
file_info = self.rdatabase_file.file.query(file_id)
|
977
|
-
file_name = file_info['name']
|
978
977
|
file_md5 = file_info['md5']
|
978
|
+
file_name = file_info['name']
|
979
979
|
|
980
|
-
#
|
981
|
-
|
982
|
-
pattern = f'^{file_md5}$'
|
983
|
-
cache_path = rfolder.search(pattern)
|
980
|
+
# Cache.
|
981
|
+
cache_path = self.wechat.cache.index(file_md5, file_name, True)
|
984
982
|
|
985
|
-
|
983
|
+
## Download.
|
986
984
|
if cache_path is None:
|
987
|
-
|
988
|
-
|
989
|
-
file_md5
|
990
|
-
)
|
991
|
-
self.rdatabase_file.file.download(
|
992
|
-
file_id,
|
993
|
-
cache_path
|
994
|
-
)
|
985
|
+
file_bytes = self.rdatabase_file.file.download(file_id)
|
986
|
+
cache_path = self.wechat.cache.store(file_bytes, file_name)
|
995
987
|
|
996
988
|
return cache_path, file_name
|
997
989
|
|
@@ -1055,7 +1047,7 @@ class WeChatDatabase(BaseWeChat):
|
|
1055
1047
|
send_type = WeChatSendEnum(type_)
|
1056
1048
|
parameter: dict = json_loads(parameter)
|
1057
1049
|
|
1058
|
-
##
|
1050
|
+
## File.
|
1059
1051
|
if file_id is not None:
|
1060
1052
|
file_path, file_name = self.__download_file(file_id)
|
1061
1053
|
parameter['file_path'] = file_path
|
@@ -1242,9 +1234,14 @@ class WeChatDatabase(BaseWeChat):
|
|
1242
1234
|
if 'file_name' in params:
|
1243
1235
|
file_name: str = params.pop('file_name')
|
1244
1236
|
else:
|
1245
|
-
|
1237
|
+
file = File(file_path)
|
1238
|
+
file_name = file.name_suffix
|
1239
|
+
|
1240
|
+
## Cache.
|
1241
|
+
cache_path = self.wechat.cache.store(file_path, file_name)
|
1242
|
+
|
1246
1243
|
file_id = self.rdatabase_file.file.upload(
|
1247
|
-
|
1244
|
+
cache_path,
|
1248
1245
|
file_name,
|
1249
1246
|
'WeChat'
|
1250
1247
|
)
|
reywechat/rlog.py
CHANGED
@@ -9,8 +9,8 @@
|
|
9
9
|
"""
|
10
10
|
|
11
11
|
|
12
|
-
from os.path import join as os_join
|
13
12
|
from reykit.rlog import Log
|
13
|
+
from reykit.ros import Folder, join_path
|
14
14
|
|
15
15
|
from .rbase import BaseWeChat
|
16
16
|
from .rreceive import WeChatMessage
|
@@ -44,6 +44,9 @@ class WeChatLog(BaseWeChat):
|
|
44
44
|
# Set attribute.
|
45
45
|
self.wechat = wechat
|
46
46
|
|
47
|
+
# Make directory.
|
48
|
+
self.folder = self.__make_dir()
|
49
|
+
|
47
50
|
# Logger.
|
48
51
|
self.rrlog = Log('WeChat')
|
49
52
|
self.rrlog_print = Log('WeChat.WeChatPrint')
|
@@ -53,6 +56,29 @@ class WeChatLog(BaseWeChat):
|
|
53
56
|
self.__add_handler()
|
54
57
|
|
55
58
|
|
59
|
+
def __make_dir(self) -> Folder:
|
60
|
+
"""
|
61
|
+
Make directory 'project_dir/log'.
|
62
|
+
|
63
|
+
Parameters
|
64
|
+
----------
|
65
|
+
project_dir: Project directory.
|
66
|
+
|
67
|
+
Returns
|
68
|
+
-------
|
69
|
+
Folder instance.
|
70
|
+
"""
|
71
|
+
|
72
|
+
# Set parameter.
|
73
|
+
dir_path = join_path(self.wechat.project_dir, 'log')
|
74
|
+
|
75
|
+
# Make.
|
76
|
+
folder = Folder(dir_path)
|
77
|
+
folder.make()
|
78
|
+
|
79
|
+
return folder
|
80
|
+
|
81
|
+
|
56
82
|
def __add_handler(self) -> None:
|
57
83
|
"""
|
58
84
|
Add log handler.
|
@@ -74,7 +100,7 @@ class WeChatLog(BaseWeChat):
|
|
74
100
|
self.rrlog_print.add_print(format_=format_)
|
75
101
|
|
76
102
|
## Add handler file.
|
77
|
-
file_path =
|
103
|
+
file_path = self.folder + 'wechat'
|
78
104
|
self.rrlog_file.add_file(
|
79
105
|
file_path,
|
80
106
|
time='m',
|
reywechat/rreceive.py
CHANGED
@@ -12,15 +12,14 @@
|
|
12
12
|
from __future__ import annotations
|
13
13
|
from typing import Any, TypedDict, Literal, overload
|
14
14
|
from collections.abc import Callable
|
15
|
-
from os.path import join as os_join
|
16
15
|
from queue import Queue
|
17
16
|
from json import loads as json_loads
|
18
17
|
from bs4 import BeautifulSoup as BSBeautifulSoup
|
19
18
|
from bs4.element import Tag as BSTag
|
20
|
-
from reykit.rbase import throw
|
19
|
+
from reykit.rbase import throw
|
21
20
|
from reykit.rimage import decode_qrcode
|
22
21
|
from reykit.rnet import listen_socket
|
23
|
-
from reykit.ros import File,
|
22
|
+
from reykit.ros import File, os_exists
|
24
23
|
from reykit.rre import search, findall
|
25
24
|
from reykit.rtask import ThreadPool
|
26
25
|
from reykit.rtime import sleep, wait
|
@@ -417,6 +416,8 @@ class WeChatMessage(BaseWeChat):
|
|
417
416
|
pattern = r'@\w+\u2005'
|
418
417
|
self._at_names = findall(pattern, text)
|
419
418
|
|
419
|
+
return self._at_names
|
420
|
+
|
420
421
|
|
421
422
|
@property
|
422
423
|
def is_at(self) -> bool:
|
@@ -1116,68 +1117,47 @@ class WechatReceiver(BaseWeChat):
|
|
1116
1117
|
"""
|
1117
1118
|
|
1118
1119
|
# Download.
|
1119
|
-
folder = Folder(self.wechat.dir_cache)
|
1120
|
-
generate_path = None
|
1121
1120
|
match message.type:
|
1122
1121
|
|
1123
1122
|
## Image.
|
1124
1123
|
case 3:
|
1125
|
-
|
1126
|
-
|
1127
|
-
|
1128
|
-
|
1129
|
-
|
1130
|
-
|
1131
|
-
|
1132
|
-
### Exist.
|
1133
|
-
pattern = f'^{file_md5}$'
|
1134
|
-
cache_path = folder.search(pattern)
|
1135
|
-
|
1136
|
-
### Generate.
|
1124
|
+
pattern = r' md5="([\da-f]{32})"'
|
1125
|
+
file_md5: str = search(pattern, message.data)
|
1126
|
+
file_name = f'{file_md5}.jpg'
|
1127
|
+
cache_path = self.wechat.cache.index(file_md5, file_name, copy=True)
|
1128
|
+
|
1129
|
+
### Download.
|
1137
1130
|
if cache_path is None:
|
1138
1131
|
self.wechat.client.download_file(message.id)
|
1139
|
-
|
1132
|
+
download_path = '%swxhelper/image/%s.dat' % (
|
1140
1133
|
self.wechat.client.login_info['account_data_path'],
|
1141
1134
|
message.id
|
1142
1135
|
)
|
1143
1136
|
|
1144
1137
|
## Voice.
|
1145
1138
|
case 34:
|
1139
|
+
file_name = None
|
1140
|
+
file_name_suffix = 'amr'
|
1141
|
+
cache_path = None
|
1146
1142
|
|
1147
|
-
###
|
1148
|
-
file_name = f'{message.id}.amr'
|
1149
|
-
pattern = r'length="(\d+)"'
|
1150
|
-
file_size = int(search(pattern, message.data))
|
1151
|
-
file_md5 = None
|
1152
|
-
|
1153
|
-
### Generate.
|
1143
|
+
### Download.
|
1154
1144
|
self.wechat.client.download_voice(
|
1155
1145
|
message.id,
|
1156
|
-
self.wechat.
|
1157
|
-
)
|
1158
|
-
generate_path = '%s/%s.amr' % (
|
1159
|
-
self.wechat.dir_cache,
|
1160
|
-
message.id
|
1146
|
+
self.wechat.cache.folder.path
|
1161
1147
|
)
|
1148
|
+
download_path = self.wechat.cache.folder + f'{message.id}.amr'
|
1162
1149
|
|
1163
1150
|
## Video.
|
1164
1151
|
case 43:
|
1152
|
+
pattern = r' md5="([\da-f]{32})"'
|
1153
|
+
file_md5: str = search(pattern, message.data)
|
1154
|
+
file_name = f'{file_md5}.mp4'
|
1155
|
+
cache_path = self.wechat.cache.index(file_md5, file_name, copy=True)
|
1165
1156
|
|
1166
|
-
###
|
1167
|
-
file_name = f'{message.id}.mp4'
|
1168
|
-
pattern = r'length="(\d+)"'
|
1169
|
-
file_size = int(search(pattern, message.data))
|
1170
|
-
pattern = r'md5="([\da-f]{32})"'
|
1171
|
-
file_md5 = search(pattern, message.data)
|
1172
|
-
|
1173
|
-
### Exist.
|
1174
|
-
pattern = f'^{file_md5}$'
|
1175
|
-
cache_path = folder.search(pattern)
|
1176
|
-
|
1177
|
-
### Generate.
|
1157
|
+
### Download.
|
1178
1158
|
if cache_path is None:
|
1179
1159
|
self.wechat.client.download_file(message.id)
|
1180
|
-
|
1160
|
+
download_path = '%swxhelper/video/%s.mp4' % (
|
1181
1161
|
self.wechat.client.login_info['account_data_path'],
|
1182
1162
|
message.id
|
1183
1163
|
)
|
@@ -1187,26 +1167,21 @@ class WechatReceiver(BaseWeChat):
|
|
1187
1167
|
|
1188
1168
|
### Check.
|
1189
1169
|
pattern = r'^.+? : \[文件\](.+)$'
|
1190
|
-
file_name = search(pattern, message.display)
|
1191
|
-
if
|
1192
|
-
|
1193
|
-
|
1170
|
+
file_name: str | None = search(pattern, message.display)
|
1171
|
+
if (
|
1172
|
+
file_name is None
|
1173
|
+
or '<type>6</type>' not in message.data
|
1174
|
+
):
|
1194
1175
|
return
|
1195
1176
|
|
1196
|
-
### Get attribute.
|
1197
|
-
pattern = r'<totallen>(\d+)</totallen>'
|
1198
|
-
file_size = int(search(pattern, message.data))
|
1199
1177
|
pattern = r'<md5>([\da-f]{32})</md5>'
|
1200
|
-
file_md5 = search(pattern, message.data)
|
1201
|
-
|
1202
|
-
### Exist.
|
1203
|
-
pattern = f'^{file_md5}$'
|
1204
|
-
cache_path = folder.search(pattern)
|
1178
|
+
file_md5: str = search(pattern, message.data)
|
1179
|
+
cache_path = self.wechat.cache.index(file_md5, file_name, copy=True)
|
1205
1180
|
|
1206
|
-
###
|
1181
|
+
### Download.
|
1207
1182
|
if cache_path is None:
|
1208
1183
|
self.wechat.client.download_file(message.id)
|
1209
|
-
|
1184
|
+
download_path = '%swxhelper/file/%s_%s' % (
|
1210
1185
|
self.wechat.client.login_info['account_data_path'],
|
1211
1186
|
message.id,
|
1212
1187
|
file_name
|
@@ -1216,35 +1191,32 @@ class WechatReceiver(BaseWeChat):
|
|
1216
1191
|
case _:
|
1217
1192
|
return
|
1218
1193
|
|
1219
|
-
if
|
1194
|
+
if cache_path is None:
|
1220
1195
|
|
1221
1196
|
## Wait.
|
1222
1197
|
wait(
|
1223
1198
|
os_exists,
|
1224
|
-
|
1199
|
+
download_path,
|
1225
1200
|
_interval = 0.05,
|
1226
1201
|
_timeout=3600
|
1227
1202
|
)
|
1228
1203
|
sleep(0.2)
|
1229
1204
|
|
1230
|
-
##
|
1231
|
-
|
1232
|
-
if
|
1233
|
-
|
1234
|
-
|
1235
|
-
cache_path = folder.search(pattern)
|
1236
|
-
if cache_path is None:
|
1237
|
-
cache_path = os_join(self.wechat.dir_cache, file_md5)
|
1238
|
-
rfile.move(cache_path)
|
1205
|
+
## Cache.
|
1206
|
+
download_file = File(download_path)
|
1207
|
+
if file_name is None:
|
1208
|
+
file_name = f'{download_file.md5}.{file_name_suffix}'
|
1209
|
+
cache_path = self.wechat.cache.store(download_path, file_name, delete=True)
|
1239
1210
|
|
1240
1211
|
# Set parameter.
|
1241
|
-
|
1212
|
+
cache_file = File(cache_path)
|
1213
|
+
message_file: MessageParameterFile = {
|
1242
1214
|
'path': cache_path,
|
1243
|
-
'name':
|
1244
|
-
'md5':
|
1245
|
-
'size':
|
1215
|
+
'name': cache_file.name_suffix,
|
1216
|
+
'md5': cache_file.md5,
|
1217
|
+
'size': cache_file.size
|
1246
1218
|
}
|
1247
|
-
message.file =
|
1219
|
+
message.file = message_file
|
1248
1220
|
|
1249
1221
|
|
1250
1222
|
def start(self) -> None:
|
reywechat/rsend.py
CHANGED
@@ -17,7 +17,6 @@ from functools import wraps as functools_wraps
|
|
17
17
|
from queue import Queue
|
18
18
|
from re import escape as re_escape
|
19
19
|
from reykit.rbase import throw, catch_exc
|
20
|
-
from reykit.ros import File
|
21
20
|
from reykit.rre import sub
|
22
21
|
from reykit.rtime import sleep
|
23
22
|
from reykit.rwrap import wrap_thread, wrap_exc
|
@@ -286,15 +285,6 @@ class WeChatSender(BaseWeChat):
|
|
286
285
|
sendparam : `WeChatSendParameter` instance.
|
287
286
|
"""
|
288
287
|
|
289
|
-
# File rename to new.
|
290
|
-
if (
|
291
|
-
(file_path := sendparam.params.get('file_path')) is not None
|
292
|
-
and (file_name := sendparam.params.get('file_name')) is not None
|
293
|
-
):
|
294
|
-
file = File(file_path)
|
295
|
-
file_old_name = file.name
|
296
|
-
file_path_rename = file.rename(file_name)
|
297
|
-
|
298
288
|
# Send.
|
299
289
|
match sendparam.send_type:
|
300
290
|
|
@@ -317,21 +307,21 @@ class WeChatSender(BaseWeChat):
|
|
317
307
|
case WeChatSendEnum.SEND_FILE:
|
318
308
|
self.wechat.client.send_file(
|
319
309
|
sendparam.receive_id,
|
320
|
-
|
310
|
+
sendparam.params['file_path']
|
321
311
|
)
|
322
312
|
|
323
313
|
## Image.
|
324
314
|
case WeChatSendEnum.SEND_IMAGE:
|
325
315
|
self.wechat.client.send_image(
|
326
316
|
sendparam.receive_id,
|
327
|
-
|
317
|
+
sendparam.params['file_path']
|
328
318
|
)
|
329
319
|
|
330
320
|
## Emotion.
|
331
321
|
case WeChatSendEnum.SEND_EMOTION:
|
332
322
|
self.wechat.client.send_emotion(
|
333
323
|
sendparam.receive_id,
|
334
|
-
|
324
|
+
sendparam.params['file_path']
|
335
325
|
)
|
336
326
|
|
337
327
|
## Pat.
|
@@ -364,15 +354,6 @@ class WeChatSender(BaseWeChat):
|
|
364
354
|
case send_type:
|
365
355
|
throw(ValueError, send_type)
|
366
356
|
|
367
|
-
# File rename to old.
|
368
|
-
if (
|
369
|
-
file_path is not None
|
370
|
-
and file_name is not None
|
371
|
-
):
|
372
|
-
sleep(1)
|
373
|
-
file = File(file_path_rename)
|
374
|
-
file.rename(file_old_name)
|
375
|
-
|
376
357
|
|
377
358
|
def add_handler(
|
378
359
|
self,
|
reywechat/rwechat.py
CHANGED
@@ -11,10 +11,8 @@
|
|
11
11
|
|
12
12
|
from typing import Literal
|
13
13
|
from os import getcwd as os_getcwd
|
14
|
-
from os.path import join as os_join
|
15
14
|
from reydb.rdb import Database
|
16
15
|
from reykit.rbase import block
|
17
|
-
from reykit.ros import make_dir as reykit_make_dir
|
18
16
|
|
19
17
|
from .rbase import BaseWeChat
|
20
18
|
|
@@ -63,6 +61,7 @@ class WeChat(BaseWeChat):
|
|
63
61
|
"""
|
64
62
|
|
65
63
|
# Import.
|
64
|
+
from .rcache import WeChatCache
|
66
65
|
from .rclient import WeChatClient
|
67
66
|
from .rdb import WeChatDatabase
|
68
67
|
from .rlog import WeChatLog
|
@@ -70,14 +69,12 @@ class WeChat(BaseWeChat):
|
|
70
69
|
from .rschedule import WeChatSchedule
|
71
70
|
from .rsend import WeChatSender
|
72
71
|
|
73
|
-
# Make directory.
|
74
|
-
project_dir = project_dir or os_getcwd()
|
75
|
-
self.dir_cache, self.dir_log = self.__make_subdir(project_dir)
|
76
|
-
|
77
72
|
# Set attribute.
|
73
|
+
self.project_dir = project_dir or os_getcwd()
|
78
74
|
|
79
75
|
## Instance.
|
80
76
|
self.client = WeChatClient(self)
|
77
|
+
self.cache = WeChatCache(self)
|
81
78
|
self.log = WeChatLog(self)
|
82
79
|
self.receiver = WechatReceiver(self, max_receiver)
|
83
80
|
self.trigger = self.receiver.trigger
|
@@ -109,7 +106,7 @@ class WeChat(BaseWeChat):
|
|
109
106
|
self.wrap_try_send = self.sender.wrap_try_send
|
110
107
|
|
111
108
|
## Database.
|
112
|
-
self.send = self.database.send
|
109
|
+
self.send = self.sender.send = self.database.send
|
113
110
|
|
114
111
|
## Schedule.
|
115
112
|
self.schedule_add_task = self.schedule.add_task
|
@@ -117,39 +114,6 @@ class WeChat(BaseWeChat):
|
|
117
114
|
self.schedule_resume = self.schedule.resume
|
118
115
|
|
119
116
|
|
120
|
-
def __make_subdir(
|
121
|
-
self,
|
122
|
-
project_dir: str
|
123
|
-
) -> tuple[str, str]:
|
124
|
-
"""
|
125
|
-
Make project subdirectory, 'project_dir/cache' and 'project_dir/cache'.
|
126
|
-
|
127
|
-
Parameters
|
128
|
-
----------
|
129
|
-
project_dir: Project directory.
|
130
|
-
|
131
|
-
Returns
|
132
|
-
-------
|
133
|
-
Subdirectorys path.
|
134
|
-
"""
|
135
|
-
|
136
|
-
# Set parameter.
|
137
|
-
dir_names = (
|
138
|
-
'cache',
|
139
|
-
'log'
|
140
|
-
)
|
141
|
-
dir_dict = {
|
142
|
-
dir_name: os_join(project_dir, dir_name)
|
143
|
-
for dir_name in dir_names
|
144
|
-
}
|
145
|
-
|
146
|
-
# Create.
|
147
|
-
paths = dir_dict.values()
|
148
|
-
reykit_make_dir(*paths)
|
149
|
-
|
150
|
-
return dir_dict['cache'], dir_dict['log']
|
151
|
-
|
152
|
-
|
153
117
|
def start(self) -> None:
|
154
118
|
"""
|
155
119
|
Start all methods.
|
@@ -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=gtTYaoqhgh9kRFslETKjBJiAAdzJfeOxIJbdCkGAFhM,22577
|
6
|
+
reywechat/rdb.py,sha256=Gcj3d-uIospaacjHY8B4HHdru5OwiS9PO6cceAWvXqY,40333
|
7
|
+
reywechat/rlog.py,sha256=d3S0eHMUZ92OLE7fjP3zzikIYANtnbAxhnE_DIV_1OY,5251
|
8
|
+
reywechat/rreceive.py,sha256=5emlgnIChYL60yx6PoQc1h5aGHFXNuFJ71a585gamEg,31550
|
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=K9fwje_Sos3Pvke8tFexDNZsRD7FsLtH3Jktg9xREpk,4788
|
13
|
+
reywechat/data/client_api.dll,sha256=H9uj-x9Ztg0jFZK0yY6NsnyH5_119dQRFfoVVMidxRs,592384
|
14
|
+
reywechat-1.0.29.dist-info/METADATA,sha256=GQNNn2iqWueYDLoZuKQGnmmQqMgEJlBPAtqQeFY3U3s,1551
|
15
|
+
reywechat-1.0.29.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
16
|
+
reywechat-1.0.29.dist-info/licenses/LICENSE,sha256=UYLPqp7BvPiH8yEZduJqmmyEl6hlM3lKrFIefiD4rvk,1059
|
17
|
+
reywechat-1.0.29.dist-info/RECORD,,
|
@@ -1,16 +0,0 @@
|
|
1
|
-
reywechat/__init__.py,sha256=CBcaezJsuYnBzunuzRoRwz-q_HDQq7XsGKtNxCWAQoY,488
|
2
|
-
reywechat/rall.py,sha256=KAHdmzvrmDel_ttvZKR0tkfg21Amm3sKMvGJDkNA14U,374
|
3
|
-
reywechat/rbase.py,sha256=0NunIUIXra2ML2N6odwMk5oENTE0r6VSBHWXUvgI-lc,1124
|
4
|
-
reywechat/rclient.py,sha256=gtTYaoqhgh9kRFslETKjBJiAAdzJfeOxIJbdCkGAFhM,22577
|
5
|
-
reywechat/rdb.py,sha256=JBrJw-Xev9BNogOg2G31-da80y7edpSjtAzFHZkDs3g,40313
|
6
|
-
reywechat/rlog.py,sha256=rIl3fy1SFuAAiUnxVnOFJv-gK51AunDljJgsFUx6I50,4745
|
7
|
-
reywechat/rreceive.py,sha256=pgo--mHTSpCtb_ScIreoiiWAtIVsqe2Tut88W7MrBc8,32403
|
8
|
-
reywechat/rschedule.py,sha256=fn11rH0HqxbnJYxARCBBiSdzBpYfQFhcjNmkvihVMTc,1854
|
9
|
-
reywechat/rsend.py,sha256=q1stNggg40WPqI5h8_coAXsbFRM6M6dxsDxq2-L3CJs,14286
|
10
|
-
reywechat/rtrigger.py,sha256=GHfkhNrS8rV4uXWC3N54UTjak7nKGfqJWX6pe57Hsgg,4953
|
11
|
-
reywechat/rwechat.py,sha256=Niu2TTyElpzXtb6fn-xzwa1QjkwrvLwFyP3U-2ALrl4,5595
|
12
|
-
reywechat/data/client_api.dll,sha256=H9uj-x9Ztg0jFZK0yY6NsnyH5_119dQRFfoVVMidxRs,592384
|
13
|
-
reywechat-1.0.27.dist-info/METADATA,sha256=Y9h0Dr56SY6w5krZ163ufW6FdT3-kgdUkOD5jw6O7JM,1551
|
14
|
-
reywechat-1.0.27.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
15
|
-
reywechat-1.0.27.dist-info/licenses/LICENSE,sha256=UYLPqp7BvPiH8yEZduJqmmyEl6hlM3lKrFIefiD4rvk,1059
|
16
|
-
reywechat-1.0.27.dist-info/RECORD,,
|
File without changes
|
File without changes
|