reywechat 1.0.40__py3-none-any.whl → 1.0.42__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/rdb.py CHANGED
@@ -19,7 +19,7 @@ from reykit.rwrap import wrap_thread
19
19
 
20
20
  from .rbase import BaseWeChat
21
21
  from .rreceive import WeChatMessage
22
- from .rsend import WeChatSendEnum, WeChatSendParameter
22
+ from .rsend import WeChatSendTypeEnum, WeChatSendParameter
23
23
  from .rwechat import WeChat
24
24
 
25
25
 
@@ -931,22 +931,26 @@ class WeChatDatabase(BaseWeChat):
931
931
 
932
932
 
933
933
  # Define.
934
- def sender_handler_update_send_status(sendparam: WeChatSendParameter) -> None:
934
+ def sender_handler_update_send_status(send_param: WeChatSendParameter) -> None:
935
935
  """
936
936
  Update field `status` of table `message_send`.
937
937
 
938
938
  Parameters
939
939
  ----------
940
- sendparam : `WeChatSendParameter` instance.
940
+ send_param : `WeChatSendParameter` instance.
941
941
  """
942
942
 
943
+ # Check.
944
+ if send_param.status == send_param.StatusEnum.SENT:
945
+ throw(TypeError, send_param.send_id)
946
+
943
947
  # Handle parameter.
944
- if sendparam.exc_reports == []:
948
+ if send_param.exc_reports == []:
945
949
  status = 2
946
950
  else:
947
951
  status = 3
948
952
  data = {
949
- 'send_id': sendparam.send_id,
953
+ 'send_id': send_param.send_id,
950
954
  'status': status,
951
955
  'limit': 1
952
956
  }
@@ -1050,7 +1054,7 @@ class WeChatDatabase(BaseWeChat):
1050
1054
  # Send.
1051
1055
  for row in table:
1052
1056
  send_id, type_, receive_id, parameter, file_id = row.values()
1053
- send_type = WeChatSendEnum(type_)
1057
+ send_type = WeChatSendTypeEnum[type_]
1054
1058
  parameter: dict = json_loads(parameter)
1055
1059
 
1056
1060
  ## File.
@@ -1059,14 +1063,15 @@ class WeChatDatabase(BaseWeChat):
1059
1063
  parameter['file_path'] = file_path
1060
1064
  parameter['file_name'] = file_name
1061
1065
 
1062
- sendparam = WeChatSendParameter(
1066
+ send_param = WeChatSendParameter(
1063
1067
  self.wechat.sender,
1064
1068
  send_type,
1065
1069
  receive_id,
1066
1070
  send_id,
1067
1071
  **parameter
1068
1072
  )
1069
- self.wechat.sender.queue.put(sendparam)
1073
+ send_param.status = send_param.StatusEnum.WAIT
1074
+ self.wechat.sender.queue.put(send_param)
1070
1075
 
1071
1076
  # Commit.
1072
1077
  conn.commit()
@@ -1141,96 +1146,21 @@ class WeChatDatabase(BaseWeChat):
1141
1146
  return judge
1142
1147
 
1143
1148
 
1144
- @overload
1145
- def send(
1146
- self,
1147
- send_type: Literal[WeChatSendEnum.SEND_TEXT],
1148
- receive_id: str,
1149
- *,
1150
- text: str
1151
- ) -> None: ...
1152
-
1153
- @overload
1154
- def send(
1155
- self,
1156
- send_type: Literal[WeChatSendEnum.SEND_TEXT_AT],
1157
- receive_id: str,
1158
- *,
1159
- user_id: str | list[str] | Literal['notify@all'],
1160
- text: str
1161
- ) -> None: ...
1162
-
1163
- @overload
1164
- def send(
1165
- self,
1166
- send_type: Literal[WeChatSendEnum.SEND_FILE, WeChatSendEnum.SEND_IMAGE, WeChatSendEnum.SEND_EMOTION],
1167
- receive_id: str,
1168
- *,
1169
- file_path: str,
1170
- file_name: str | None = None
1171
- ) -> None: ...
1172
-
1173
- @overload
1174
- def send(
1175
- self,
1176
- send_type: Literal[WeChatSendEnum.SEND_PAT],
1177
- receive_id: str,
1178
- *,
1179
- user_id: str
1180
- ) -> None: ...
1181
-
1182
- @overload
1183
- def send(
1184
- self,
1185
- send_type: Literal[WeChatSendEnum.SEND_PUBLIC],
1186
- receive_id: str,
1187
- *,
1188
- page_url: str,
1189
- title: str,
1190
- text: str | None = None,
1191
- image_url: str | None = None,
1192
- public_name: str | None = None,
1193
- public_id: str | None = None
1194
- ) -> None: ...
1195
-
1196
- @overload
1197
- def send(
1198
- self,
1199
- send_type: Literal[WeChatSendEnum.SEND_FORWARD],
1200
- receive_id: str,
1201
- *,
1202
- message_id: str
1203
- ) -> None: ...
1204
-
1205
- def send(
1206
- self,
1207
- send_type: WeChatSendEnum,
1208
- receive_id: str | None = None,
1209
- **params: Any
1210
- ) -> None:
1149
+ def _insert_send(self, send_param: WeChatSendParameter) -> None:
1211
1150
  """
1212
1151
  Insert into `wechat.message_send` table of database, wait send.
1213
1152
 
1214
1153
  Parameters
1215
1154
  ----------
1216
- send_type : Send type.
1217
- - `Literal[WeChatSendEnum.SEND_TEXT]`: Send text message, use `WeChatClient.send_text`: method.
1218
- - `Literal[WeChatSendEnum.SEND_TEXT_AT]`: Send text message with `@`, use `WeChatClient.send_text_at`: method.
1219
- - `Literal[WeChatSendEnum.SEND_FILE]`: Send file message, use `WeChatClient.send_file`: method.
1220
- - `Literal[WeChatSendEnum.SEND_IMAGE]`: Send image message, use `WeChatClient.send_image`: method.
1221
- - `Literal[WeChatSendEnum.SEND_EMOTION]`: Send emotion message, use `WeChatClient.send_emotion`: method.
1222
- - `Literal[WeChatSendEnum.SEND_PAT]`: Send pat message, use `WeChatClient.send_pat`: method.
1223
- - `Literal[WeChatSendEnum.SEND_PUBLIC]`: Send public account message, use `WeChatClient.send_public`: method.
1224
- - `Literal[WeChatSendEnum.SEND_FORWARD]`: Forward message, use `WeChatClient.send_forward`: method.
1225
- receive_id : User ID or chat room ID of receive message.
1226
- params : Send parameters.
1155
+ send_param : `WeChatSendParameter` instance.
1227
1156
  """
1228
1157
 
1229
1158
  # Handle parameter.
1159
+ params = send_param.params.copy()
1230
1160
  data = {
1231
1161
  'status': 0,
1232
- 'type': send_type,
1233
- 'receive_id': receive_id,
1162
+ 'type': send_param.send_type,
1163
+ 'receive_id': send_param.receive_id,
1234
1164
  'parameter': params
1235
1165
  }
1236
1166
 
reywechat/rlog.py CHANGED
@@ -185,27 +185,27 @@ class WeChatLog(BaseWeChat):
185
185
 
186
186
  def log_send(
187
187
  self,
188
- sendparam: WeChatSendParameter
188
+ send_param: WeChatSendParameter
189
189
  ) -> None:
190
190
  """
191
191
  Log send message.
192
192
 
193
193
  Parameters
194
194
  ----------
195
- sendparam : `WeChatSendParameter` instance.
195
+ send_param : `WeChatSendParameter` instance.
196
196
  """
197
197
 
198
198
  # Generate record.
199
- content_print = 'SEND | %-20s' % sendparam.receive_id
199
+ content_print = 'SEND | %-20s' % send_param.receive_id
200
200
  content_file = 'SEND | %s' % {
201
- 'receive_id': sendparam.receive_id,
202
- **sendparam.params
201
+ 'receive_id': send_param.receive_id,
202
+ **send_param.params
203
203
  }
204
- if sendparam.exc_reports == []:
204
+ if send_param.exc_reports == []:
205
205
  level = self.rrlog.INFO
206
206
  else:
207
207
  level = self.rrlog.ERROR
208
- exc_report = '\n'.join(sendparam.exc_reports)
208
+ exc_report = '\n'.join(send_param.exc_reports)
209
209
  content_print = '%s\n%s' % (content_print, exc_report)
210
210
  content_file = '%s\n%s' % (content_file, exc_report)
211
211
 
reywechat/rreceive.py CHANGED
@@ -26,7 +26,7 @@ from reykit.rtime import sleep, wait
26
26
  from reykit.rwrap import wrap_thread, wrap_exc
27
27
 
28
28
  from .rbase import BaseWeChat, WeChatTriggerError
29
- from .rsend import WeChatSendEnum
29
+ from .rsend import WeChatSendTypeEnum
30
30
  from .rwechat import WeChat
31
31
 
32
32
 
@@ -66,7 +66,7 @@ class WeChatMessage(BaseWeChat):
66
66
  WeChat message type.
67
67
  """
68
68
 
69
- SendEnum = WeChatSendEnum
69
+ TypeEnum = WeChatSendTypeEnum
70
70
 
71
71
 
72
72
  def __init__(
@@ -935,7 +935,7 @@ class WeChatMessage(BaseWeChat):
935
935
  @overload
936
936
  def reply(
937
937
  self,
938
- send_type: Literal[WeChatSendEnum.SEND_TEXT],
938
+ send_type: Literal[WeChatSendTypeEnum.TEXT],
939
939
  *,
940
940
  text: str
941
941
  ) -> None: ...
@@ -943,7 +943,7 @@ class WeChatMessage(BaseWeChat):
943
943
  @overload
944
944
  def reply(
945
945
  self,
946
- send_type: Literal[WeChatSendEnum.SEND_TEXT_AT],
946
+ send_type: Literal[WeChatSendTypeEnum.TEXT_AT],
947
947
  *,
948
948
  user_id: str | list[str] | Literal['notify@all'],
949
949
  text: str
@@ -952,7 +952,7 @@ class WeChatMessage(BaseWeChat):
952
952
  @overload
953
953
  def reply(
954
954
  self,
955
- send_type: Literal[WeChatSendEnum.SEND_FILE, WeChatSendEnum.SEND_IMAGE, WeChatSendEnum.SEND_EMOTION],
955
+ send_type: Literal[WeChatSendTypeEnum.FILE, WeChatSendTypeEnum.IMAGE, WeChatSendTypeEnum.EMOTION],
956
956
  *,
957
957
  path: str,
958
958
  file_name: str | None = None
@@ -961,7 +961,7 @@ class WeChatMessage(BaseWeChat):
961
961
  @overload
962
962
  def reply(
963
963
  self,
964
- send_type: Literal[WeChatSendEnum.SEND_PAT],
964
+ send_type: Literal[WeChatSendTypeEnum.PAT],
965
965
  *,
966
966
  user_id: str
967
967
  ) -> None: ...
@@ -969,7 +969,7 @@ class WeChatMessage(BaseWeChat):
969
969
  @overload
970
970
  def reply(
971
971
  self,
972
- send_type: Literal[WeChatSendEnum.SEND_PUBLIC],
972
+ send_type: Literal[WeChatSendTypeEnum.PUBLIC],
973
973
  *,
974
974
  page_url: str,
975
975
  title: str,
@@ -982,14 +982,14 @@ class WeChatMessage(BaseWeChat):
982
982
  @overload
983
983
  def reply(
984
984
  self,
985
- send_type: Literal[WeChatSendEnum.SEND_FORWARD],
985
+ send_type: Literal[WeChatSendTypeEnum.FORWARD],
986
986
  *,
987
987
  message_id: str
988
988
  ) -> None: ...
989
989
 
990
990
  def reply(
991
991
  self,
992
- send_type: WeChatSendEnum,
992
+ send_type: WeChatSendTypeEnum,
993
993
  **params: Any
994
994
  ) -> None:
995
995
  """
@@ -998,18 +998,15 @@ class WeChatMessage(BaseWeChat):
998
998
  Parameters
999
999
  ----------
1000
1000
  send_type : Send type.
1001
- - `Literal[WeChatSendEnum.SEND_TEXT]`: Send text message, use `WeChatClient.send_text`: method.
1002
- - `Literal[WeChatSendEnum.SEND_TEXT_AT]`: Send text message with `@`, use `WeChatClient.send_text_at`: method.
1003
- - `Literal[WeChatSendEnum.SEND_FILE]`: Send file message, use `WeChatClient.send_file`: method.
1004
- - `Literal[WeChatSendEnum.SEND_IMAGE]`: Send image message, use `WeChatClient.send_image`: method.
1005
- - `Literal[WeChatSendEnum.SEND_EMOTION]`: Send emotion message, use `WeChatClient.send_emotion`: method.
1006
- - `Literal[WeChatSendEnum.SEND_PAT]`: Send pat message, use `WeChatClient.send_pat`: method.
1007
- - `Literal[WeChatSendEnum.SEND_PUBLIC]`: Send public account message, use `WeChatClient.send_public`: method.
1008
- - `Literal[WeChatSendEnum.SEND_FORWARD]`: Forward message, use `WeChatClient.send_forward`: method.
1001
+ - `Literal[WeChatSendTypeEnum.TEXT]`: Send text message, use `WeChatClient.send_text`: method.
1002
+ - `Literal[WeChatSendTypeEnum.TEXT_AT]`: Send text message with `@`, use `WeChatClient.send_text_at`: method.
1003
+ - `Literal[WeChatSendTypeEnum.FILE]`: Send file message, use `WeChatClient.send_file`: method.
1004
+ - `Literal[WeChatSendTypeEnum.IMAGE]`: Send image message, use `WeChatClient.send_image`: method.
1005
+ - `Literal[WeChatSendTypeEnum.EMOTION]`: Send emotion message, use `WeChatClient.send_emotion`: method.
1006
+ - `Literal[WeChatSendTypeEnum.PAT]`: Send pat message, use `WeChatClient.send_pat`: method.
1007
+ - `Literal[WeChatSendTypeEnum.PUBLIC]`: Send public account message, use `WeChatClient.send_public`: method.
1008
+ - `Literal[WeChatSendTypeEnum.FORWARD]`: Forward message, use `WeChatClient.send_forward`: method.
1009
1009
  params : Send parameters.
1010
- - `Callable`: Use execute return value.
1011
- - `Any`: Use this value.
1012
- `Key 'file_name'`: Given file name.
1013
1010
  """
1014
1011
 
1015
1012
  # Check.
@@ -1036,7 +1033,7 @@ class WechatReceiver(BaseWeChat):
1036
1033
  WeChat receiver type.
1037
1034
  """
1038
1035
 
1039
- SendEnum = WeChatSendEnum
1036
+ TypeEnum = WeChatSendTypeEnum
1040
1037
 
1041
1038
 
1042
1039
  def __init__(
reywechat/rschedule.py CHANGED
@@ -15,7 +15,7 @@ from collections.abc import Callable
15
15
  from reykit.rschedule import Schedule
16
16
 
17
17
  from .rbase import BaseWeChat
18
- from .rsend import WeChatSendEnum
18
+ from .rsend import WeChatSendTypeEnum
19
19
  from .rwechat import WeChat
20
20
 
21
21
 
@@ -24,7 +24,7 @@ class WeChatSchedule(BaseWeChat):
24
24
  WeChat schedule type.
25
25
  """
26
26
 
27
- SendEnum = WeChatSendEnum
27
+ TypeEnum = WeChatSendTypeEnum
28
28
 
29
29
 
30
30
  def __init__(
reywechat/rsend.py CHANGED
@@ -17,6 +17,7 @@ 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
20
21
  from reykit.rre import sub
21
22
  from reykit.rtime import sleep
22
23
  from reykit.rwrap import wrap_thread, wrap_exc
@@ -26,36 +27,52 @@ from .rwechat import WeChat
26
27
 
27
28
 
28
29
  __all__ = (
29
- 'WeChatSendEnum',
30
+ 'WeChatSendTypeEnum',
30
31
  'WeChatSendParameter',
31
32
  'WeChatSender'
32
33
  )
33
34
 
34
35
 
35
- class WeChatSendEnum(BaseWeChat, IntEnum):
36
+ class WeChatSendTypeEnum(BaseWeChat, IntEnum):
36
37
  """
37
- WeChat send enumeration type.
38
+ WeChat send type enumeration type.
38
39
 
39
40
  Attributes
40
41
  ----------
41
- SEND_TEXT : Send text message.
42
- SEND_TEXT_AT : Send text message with @.
43
- SEND_FILE : Send file message.
44
- SEND_IMAGE : Send image message.
45
- SEND_EMOTION : Send emotion message.
46
- SEND_PAT : Send pat message.
47
- SEND_PUBLIC : Send public account message.
48
- SEND_FORWARD : Forward message.
42
+ TEXT : Send text message.
43
+ TEXT_AT : Send text message with @.
44
+ FILE : Send file message.
45
+ IMAGE : Send image message.
46
+ EMOTION : Send emotion message.
47
+ PAT : Send pat message.
48
+ PUBLIC : Send public account message.
49
+ FORWARD : Forward message.
49
50
  """
50
51
 
51
- SEND_TEXT = 0
52
- SEND_TEXT_AT = 1
53
- SEND_FILE = 2
54
- SEND_IMAGE = 3
55
- SEND_EMOTION = 4
56
- SEND_PAT = 5
57
- SEND_PUBLIC = 6
58
- SEND_FORWARD = 7
52
+ TEXT = 0
53
+ TEXT_AT = 1
54
+ FILE = 2
55
+ IMAGE = 3
56
+ EMOTION = 4
57
+ PAT = 5
58
+ PUBLIC = 6
59
+ FORWARD = 7
60
+
61
+
62
+ class WeChatSendStatusEnum(BaseWeChat, IntEnum):
63
+ """
64
+ WeChat send status enumeration type.
65
+
66
+ Attributes
67
+ ----------
68
+ INIT : After initialization, before inserting into database queue.
69
+ WAIT : After get from database queue, before sending.
70
+ SENT : After sending.
71
+ """
72
+
73
+ INIT = 0
74
+ WAIT = 1
75
+ SENT = 2
59
76
 
60
77
 
61
78
  class WeChatSendParameter(BaseWeChat):
@@ -63,16 +80,17 @@ class WeChatSendParameter(BaseWeChat):
63
80
  WeChat send parameters type.
64
81
  """
65
82
 
66
- SendEnum = WeChatSendEnum
83
+ TypeEnum = WeChatSendTypeEnum
84
+ StatusEnum = WeChatSendStatusEnum
67
85
 
68
86
 
69
87
  @overload
70
88
  def __init__(
71
89
  self,
72
90
  sender: WeChatSender,
73
- send_type: Literal[WeChatSendEnum.SEND_TEXT],
91
+ send_type: Literal[WeChatSendTypeEnum.TEXT],
74
92
  receive_id: str,
75
- send_id: int,
93
+ send_id: int | None = None,
76
94
  *,
77
95
  text: str
78
96
  ) -> None: ...
@@ -81,9 +99,9 @@ class WeChatSendParameter(BaseWeChat):
81
99
  def __init__(
82
100
  self,
83
101
  sender: WeChatSender,
84
- send_type: Literal[WeChatSendEnum.SEND_TEXT_AT],
102
+ send_type: Literal[WeChatSendTypeEnum.TEXT_AT],
85
103
  receive_id: str,
86
- send_id: int,
104
+ send_id: int | None = None,
87
105
  *,
88
106
  user_id: str | list[str] | Literal['notify@all'],
89
107
  text: str
@@ -93,9 +111,9 @@ class WeChatSendParameter(BaseWeChat):
93
111
  def __init__(
94
112
  self,
95
113
  sender: WeChatSender,
96
- send_type: Literal[WeChatSendEnum.SEND_FILE, WeChatSendEnum.SEND_IMAGE, WeChatSendEnum.SEND_EMOTION],
114
+ send_type: Literal[WeChatSendTypeEnum.FILE, WeChatSendTypeEnum.IMAGE, WeChatSendTypeEnum.EMOTION],
97
115
  receive_id: str,
98
- send_id: int,
116
+ send_id: int | None = None,
99
117
  *,
100
118
  file_path: str,
101
119
  file_name: str
@@ -105,9 +123,9 @@ class WeChatSendParameter(BaseWeChat):
105
123
  def __init__(
106
124
  self,
107
125
  sender: WeChatSender,
108
- send_type: Literal[WeChatSendEnum.SEND_PAT],
126
+ send_type: Literal[WeChatSendTypeEnum.PAT],
109
127
  receive_id: str,
110
- send_id: int,
128
+ send_id: int | None = None,
111
129
  *,
112
130
  user_id: str
113
131
  ) -> None: ...
@@ -116,9 +134,9 @@ class WeChatSendParameter(BaseWeChat):
116
134
  def __init__(
117
135
  self,
118
136
  sender: WeChatSender,
119
- send_type: Literal[WeChatSendEnum.SEND_PUBLIC],
137
+ send_type: Literal[WeChatSendTypeEnum.PUBLIC],
120
138
  receive_id: str,
121
- send_id: int,
139
+ send_id: int | None = None,
122
140
  *,
123
141
  page_url: str,
124
142
  title: str,
@@ -132,9 +150,9 @@ class WeChatSendParameter(BaseWeChat):
132
150
  def __init__(
133
151
  self,
134
152
  sender: WeChatSender,
135
- send_type: Literal[WeChatSendEnum.SEND_FORWARD],
153
+ send_type: Literal[WeChatSendTypeEnum.FORWARD],
136
154
  receive_id: str,
137
- send_id: int,
155
+ send_id: int | None = None,
138
156
  *,
139
157
  message_id: str
140
158
  ) -> None: ...
@@ -142,9 +160,9 @@ class WeChatSendParameter(BaseWeChat):
142
160
  def __init__(
143
161
  self,
144
162
  sender: WeChatSender,
145
- send_type: WeChatSendEnum,
163
+ send_type: WeChatSendTypeEnum,
146
164
  receive_id: str,
147
- send_id: int,
165
+ send_id: int | None = None,
148
166
  **params: Any
149
167
  ) -> None:
150
168
  """
@@ -154,16 +172,17 @@ class WeChatSendParameter(BaseWeChat):
154
172
  ----------
155
173
  sender : `WeChatSender` instance.
156
174
  send_type : Send type.
157
- - `Literal[WeChatSendEnum.SEND_TEXT]`: Send text message, use `WeChatClient.send_text`: method.
158
- - `Literal[WeChatSendEnum.SEND_TEXT_AT]`: Send text message with `@`, use `WeChatClient.send_text_at`: method.
159
- - `Literal[WeChatSendEnum.SEND_FILE]`: Send file message, use `WeChatClient.send_file`: method.
160
- - `Literal[WeChatSendEnum.SEND_IMAGE]`: Send image message, use `WeChatClient.send_image`: method.
161
- - `Literal[WeChatSendEnum.SEND_EMOTION]`: Send emotion message, use `WeChatClient.send_emotion`: method.
162
- - `Literal[WeChatSendEnum.SEND_PAT]`: Send pat message, use `WeChatClient.send_pat`: method.
163
- - `Literal[WeChatSendEnum.SEND_PUBLIC]`: Send public account message, use `WeChatClient.send_public`: method.
164
- - `Literal[WeChatSendEnum.SEND_FORWARD]`: Forward message, use `WeChatClient.send_forward`: method.
175
+ - `Literal[WeChatSendTypeEnum.TEXT]`: Send text message, use `WeChatClient.send_text`: method.
176
+ - `Literal[WeChatSendTypeEnum.TEXT_AT]`: Send text message with `@`, use `WeChatClient.send_text_at`: method.
177
+ - `Literal[WeChatSendTypeEnum.FILE]`: Send file message, use `WeChatClient.send_file`: method.
178
+ - `Literal[WeChatSendTypeEnum.IMAGE]`: Send image message, use `WeChatClient.send_image`: method.
179
+ - `Literal[WeChatSendTypeEnum.EMOTION]`: Send emotion message, use `WeChatClient.send_emotion`: method.
180
+ - `Literal[WeChatSendTypeEnum.PAT]`: Send pat message, use `WeChatClient.send_pat`: method.
181
+ - `Literal[WeChatSendTypeEnum.PUBLIC]`: Send public account message, use `WeChatClient.send_public`: method.
182
+ - `Literal[WeChatSendTypeEnum.FORWARD]`: Forward message, use `WeChatClient.send_forward`: method.
165
183
  receive_id : User ID or chat room ID of receive message.
166
184
  send_id : Send ID of database.
185
+ - `None`: Not inserted into database.
167
186
  params : Send parameters.
168
187
  """
169
188
 
@@ -174,7 +193,7 @@ class WeChatSendParameter(BaseWeChat):
174
193
  self.send_id = send_id
175
194
  self.params = params
176
195
  self.exc_reports: list[str] = []
177
- self.sent: bool = False
196
+ self.status: WeChatSendStatusEnum
178
197
 
179
198
 
180
199
  class WeChatSender(BaseWeChat):
@@ -183,10 +202,10 @@ class WeChatSender(BaseWeChat):
183
202
 
184
203
  Attribute
185
204
  ---------
186
- WeChatSendEnum : Send type enumeration.
205
+ WeChatSendTypeEnum : Send type enumeration.
187
206
  """
188
207
 
189
- SendEnum = WeChatSendEnum
208
+ TypeEnum = WeChatSendTypeEnum
190
209
 
191
210
 
192
211
  def __init__(self, wechat: WeChat) -> None:
@@ -215,20 +234,6 @@ class WeChatSender(BaseWeChat):
215
234
  """
216
235
 
217
236
 
218
- # Define.
219
- def handle_handler_exception(exc_report, *_) -> None:
220
- """
221
- Handle Handler exception.
222
-
223
- Parameters
224
- ----------
225
- exc_report : Exception report text.
226
- """
227
-
228
- # Save.
229
- sendparam.exc_reports.append(exc_report)
230
-
231
-
232
237
  # Loop.
233
238
  while True:
234
239
  match self.started:
@@ -242,16 +247,17 @@ class WeChatSender(BaseWeChat):
242
247
  case None:
243
248
  break
244
249
 
245
- sendparam = self.queue.get()
250
+ send_param = self.queue.get()
251
+ handle_handler_exception = lambda exc_report, *_: send_param.exc_reports.append(exc_report)
246
252
 
247
253
  ## Handler.
248
254
  for handler in self.handlers:
249
255
  handler = wrap_exc(handler, handler=handle_handler_exception)
250
- handler(sendparam)
256
+ handler(send_param)
251
257
 
252
258
  ## Send.
253
259
  try:
254
- self.__send(sendparam)
260
+ self.__send(send_param)
255
261
 
256
262
  ## Exception.
257
263
  except:
@@ -260,94 +266,94 @@ class WeChatSender(BaseWeChat):
260
266
  exc_report, *_ = catch_exc()
261
267
 
262
268
  # Save.
263
- sendparam.exc_reports.append(exc_report)
269
+ send_param.exc_reports.append(exc_report)
264
270
 
265
- sendparam.sent = True
271
+ send_param.status = send_param.StatusEnum.SENT
266
272
 
267
273
  ## Handler.
268
274
  for handler in self.handlers:
269
275
  handler = wrap_exc(handler, handler=handle_handler_exception)
270
- handler(sendparam)
276
+ handler(send_param)
271
277
 
272
278
  ## Log.
273
- self.wechat.log.log_send(sendparam)
279
+ self.wechat.log.log_send(send_param)
274
280
 
275
281
 
276
282
  def __send(
277
283
  self,
278
- sendparam: WeChatSendParameter
284
+ send_param: WeChatSendParameter
279
285
  ) -> None:
280
286
  """
281
287
  Send message.
282
288
 
283
289
  Parameters
284
290
  ----------
285
- sendparam : `WeChatSendParameter` instance.
291
+ send_param : `WeChatSendParameter` instance.
286
292
  """
287
293
 
288
294
  # Send.
289
- match sendparam.send_type:
295
+ match send_param.send_type:
290
296
 
291
297
  ## Text.
292
- case WeChatSendEnum.SEND_TEXT:
298
+ case WeChatSendTypeEnum.TEXT:
293
299
  self.wechat.client.send_text(
294
- sendparam.receive_id,
295
- sendparam.params['text']
300
+ send_param.receive_id,
301
+ send_param.params['text']
296
302
  )
297
303
 
298
304
  ## Text with '@'.
299
- case WeChatSendEnum.SEND_TEXT_AT:
305
+ case WeChatSendTypeEnum.TEXT_AT:
300
306
  self.wechat.client.send_text_at(
301
- sendparam.receive_id,
302
- sendparam.params['user_id'],
303
- sendparam.params['text']
307
+ send_param.receive_id,
308
+ send_param.params['user_id'],
309
+ send_param.params['text']
304
310
  )
305
311
 
306
312
  ## File.
307
- case WeChatSendEnum.SEND_FILE:
313
+ case WeChatSendTypeEnum.FILE:
308
314
  self.wechat.client.send_file(
309
- sendparam.receive_id,
310
- sendparam.params['file_path']
315
+ send_param.receive_id,
316
+ send_param.params['file_path']
311
317
  )
312
318
 
313
319
  ## Image.
314
- case WeChatSendEnum.SEND_IMAGE:
320
+ case WeChatSendTypeEnum.IMAGE:
315
321
  self.wechat.client.send_image(
316
- sendparam.receive_id,
317
- sendparam.params['file_path']
322
+ send_param.receive_id,
323
+ send_param.params['file_path']
318
324
  )
319
325
 
320
326
  ## Emotion.
321
- case WeChatSendEnum.SEND_EMOTION:
327
+ case WeChatSendTypeEnum.EMOTION:
322
328
  self.wechat.client.send_emotion(
323
- sendparam.receive_id,
324
- sendparam.params['file_path']
329
+ send_param.receive_id,
330
+ send_param.params['file_path']
325
331
  )
326
332
 
327
333
  ## Pat.
328
- case WeChatSendEnum.SEND_PAT:
334
+ case WeChatSendTypeEnum.PAT:
329
335
  self.wechat.client.send_pat(
330
- sendparam.receive_id,
331
- sendparam.params['user_id']
336
+ send_param.receive_id,
337
+ send_param.params['user_id']
332
338
  )
333
339
 
334
340
  ## Public account.
335
- case WeChatSendEnum.SEND_PUBLIC:
341
+ case WeChatSendTypeEnum.PUBLIC:
336
342
  self.wechat.client.send_public(
337
- sendparam.receive_id,
338
- sendparam.params['page_url'],
339
- sendparam.params['title'],
340
- sendparam.params['text'],
341
- sendparam.params['image_url'],
342
- sendparam.params['public_name'],
343
- sendparam.params['public_id']
343
+ send_param.receive_id,
344
+ send_param.params['page_url'],
345
+ send_param.params['title'],
346
+ send_param.params['text'],
347
+ send_param.params['image_url'],
348
+ send_param.params['public_name'],
349
+ send_param.params['public_id']
344
350
  )
345
351
 
346
352
  ## Forward.
347
- case WeChatSendEnum.SEND_FORWARD:
353
+ case WeChatSendTypeEnum.FORWARD:
348
354
  self.wechat.client.send_forward(
349
- sendparam.receive_id,
350
- sendparam.params['message_id']
355
+ send_param.receive_id,
356
+ send_param.params['message_id']
351
357
  )
352
358
 
353
359
  ## Throw exception.
@@ -355,12 +361,120 @@ class WeChatSender(BaseWeChat):
355
361
  throw(ValueError, send_type)
356
362
 
357
363
 
364
+ @overload
365
+ def send(
366
+ self,
367
+ send_type: Literal[WeChatSendTypeEnum.TEXT],
368
+ receive_id: str,
369
+ *,
370
+ text: str
371
+ ) -> None: ...
372
+
373
+ @overload
374
+ def send(
375
+ self,
376
+ send_type: Literal[WeChatSendTypeEnum.TEXT_AT],
377
+ receive_id: str,
378
+ *,
379
+ user_id: str | list[str] | Literal['notify@all'],
380
+ text: str
381
+ ) -> None: ...
382
+
383
+ @overload
384
+ def send(
385
+ self,
386
+ send_type: Literal[WeChatSendTypeEnum.FILE, WeChatSendTypeEnum.IMAGE, WeChatSendTypeEnum.EMOTION],
387
+ receive_id: str,
388
+ *,
389
+ file_path: str,
390
+ file_name: str | None = None
391
+ ) -> None: ...
392
+
393
+ @overload
394
+ def send(
395
+ self,
396
+ send_type: Literal[WeChatSendTypeEnum.PAT],
397
+ receive_id: str,
398
+ *,
399
+ user_id: str
400
+ ) -> None: ...
401
+
402
+ @overload
403
+ def send(
404
+ self,
405
+ send_type: Literal[WeChatSendTypeEnum.PUBLIC],
406
+ receive_id: str,
407
+ *,
408
+ page_url: str,
409
+ title: str,
410
+ text: str | None = None,
411
+ image_url: str | None = None,
412
+ public_name: str | None = None,
413
+ public_id: str | None = None
414
+ ) -> None: ...
415
+
416
+ @overload
417
+ def send(
418
+ self,
419
+ send_type: Literal[WeChatSendTypeEnum.FORWARD],
420
+ receive_id: str,
421
+ *,
422
+ message_id: str
423
+ ) -> None: ...
424
+
425
+ def send(
426
+ self,
427
+ send_type: WeChatSendTypeEnum,
428
+ receive_id: str | None = None,
429
+ **params: Any
430
+ ) -> None:
431
+ """
432
+ Insert into `wechat.message_send` table of database, wait send.
433
+
434
+ Parameters
435
+ ----------
436
+ send_type : Send type.
437
+ - `Literal[WeChatSendTypeEnum.TEXT]`: Send text message, use `WeChatClient.send_text`: method.
438
+ - `Literal[WeChatSendTypeEnum.TEXT_AT]`: Send text message with `@`, use `WeChatClient.send_text_at`: method.
439
+ - `Literal[WeChatSendTypeEnum.FILE]`: Send file message, use `WeChatClient.send_file`: method.
440
+ - `Literal[WeChatSendTypeEnum.IMAGE]`: Send image message, use `WeChatClient.send_image`: method.
441
+ - `Literal[WeChatSendTypeEnum.EMOTION]`: Send emotion message, use `WeChatClient.send_emotion`: method.
442
+ - `Literal[WeChatSendTypeEnum.PAT]`: Send pat message, use `WeChatClient.send_pat`: method.
443
+ - `Literal[WeChatSendTypeEnum.PUBLIC]`: Send public account message, use `WeChatClient.send_public`: method.
444
+ - `Literal[WeChatSendTypeEnum.FORWARD]`: Forward message, use `WeChatClient.send_forward`: method.
445
+ receive_id : User ID or chat room ID of receive message.
446
+ params : Send parameters.
447
+ """
448
+
449
+ # Handle parameter.
450
+ send_param = WeChatSendParameter(
451
+ self,
452
+ WeChatSendTypeEnum[send_type],
453
+ receive_id,
454
+ **params
455
+ )
456
+ send_param.status = send_param.StatusEnum.INIT
457
+ handle_handler_exception = lambda exc_report, *_: send_param.exc_reports.append(exc_report)
458
+
459
+ # Handler.
460
+ for handler in self.handlers:
461
+ handler = wrap_exc(handler, handler=handle_handler_exception)
462
+ handler(send_param)
463
+
464
+ # Insert.
465
+ self.wechat.database._insert_send(send_param)
466
+
467
+
358
468
  def add_handler(
359
469
  self,
360
470
  handler: Callable[[WeChatSendParameter], Any]
361
471
  ) -> None:
362
472
  """
363
473
  Add send handler function.
474
+ Call at the after initialization, before inserting into database queue.
475
+ Call at the after get from database queue, before sending.
476
+ Call at the after sending.
477
+ Can be use `WeChatSendParameter.status` judge status.
364
478
 
365
479
  Parameters
366
480
  ----------
@@ -475,7 +589,7 @@ class WeChatSender(BaseWeChat):
475
589
  )
476
590
  for receive_id in receive_ids:
477
591
  self.send(
478
- WeChatSendEnum.SEND_TEXT,
592
+ WeChatSendTypeEnum.TEXT,
479
593
  receive_id,
480
594
  text=text
481
595
  )
reywechat/rwechat.py CHANGED
@@ -103,13 +103,12 @@ class WeChat(BaseWeChat):
103
103
 
104
104
  ## Send.
105
105
  self.send_add_handler = self.sender.add_handler
106
- self.send = self.database.send
106
+ self.send = self.sender.send
107
107
  self.send_start = self.sender.start
108
108
  self.send_stop = self.sender.stop
109
109
  self.wrap_try_send = self.sender.wrap_try_send
110
110
 
111
111
  ## Database.
112
- self.send = self.sender.send = self.database.send
113
112
  self.database_build = self.database.build
114
113
 
115
114
  ## Schedule.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: reywechat
3
- Version: 1.0.40
3
+ Version: 1.0.42
4
4
  Summary: WeChat method set.
5
5
  Project-URL: homepage, https://github.com/reyxbo/reywechat/
6
6
  Author-email: Rey <reyxbo@163.com>
@@ -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=MEvQB3pHb5ORukKbKntalRtFcKIOP9BGtDsMt5ihQfM,22524
6
+ reywechat/rdb.py,sha256=x7wTvE7G4-FJQkZbPHiV4jSchki7RlJFnQPtGzqi4CI,39703
7
+ reywechat/rlog.py,sha256=IJL2WquiOYfB9iEai9xjojkuxPxiRHkdzZ5vCeaSA98,5261
8
+ reywechat/rreceive.py,sha256=40l3n_d1BcT2EhxIYOlOnzrSQkJ8WDI_qPvJcU7CSQU,35018
9
+ reywechat/rschedule.py,sha256=X9kreXdClTeItJHmNPJNqb_lct-BiLCyusMQxsj5hWU,1865
10
+ reywechat/rsend.py,sha256=0rAxVj895QrSxkziT3rqiQBKnOiDv8VFcIaCwoTPxb4,17644
11
+ reywechat/rtrigger.py,sha256=n8kUNovh62r7crlXrp33uaKvbILT-wcfvUqeyGt7YhM,4956
12
+ reywechat/rwechat.py,sha256=OcElINAi9jM-eDb_OTtseBW3kyG_3jD4V4QmltR6MeE,4874
13
+ reywechat/data/client_api.dll,sha256=H9uj-x9Ztg0jFZK0yY6NsnyH5_119dQRFfoVVMidxRs,592384
14
+ reywechat-1.0.42.dist-info/METADATA,sha256=w-XwNxmNdI9E-iJb0WAG7UHeDkZWaK_GNmGPDZRxtGo,1551
15
+ reywechat-1.0.42.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
16
+ reywechat-1.0.42.dist-info/licenses/LICENSE,sha256=UYLPqp7BvPiH8yEZduJqmmyEl6hlM3lKrFIefiD4rvk,1059
17
+ reywechat-1.0.42.dist-info/RECORD,,
@@ -1,17 +0,0 @@
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=MEvQB3pHb5ORukKbKntalRtFcKIOP9BGtDsMt5ihQfM,22524
6
- reywechat/rdb.py,sha256=ETy7EZFDBK6nUmtJFNV6kSfSKMnMiLBO771RA89jVqY,41912
7
- reywechat/rlog.py,sha256=x4WFLNoeKqGjPVoI81ZZNEd9ctdYToSg5hEFuESmCQY,5254
8
- reywechat/rreceive.py,sha256=RkUwPsWz6k_Ua3ovrbXRMVajeNOJQqvpPXz_CvJyUPQ,35162
9
- reywechat/rschedule.py,sha256=bZEEZV3K4zrJvupe1Eq6kGR7kunbVq5dfGnqFKYF3JI,1857
10
- reywechat/rsend.py,sha256=UmdKCOb1cPKEmBPHt9htjxB8fPyi5jW5pGwpRQIZdKA,13720
11
- reywechat/rtrigger.py,sha256=n8kUNovh62r7crlXrp33uaKvbILT-wcfvUqeyGt7YhM,4956
12
- reywechat/rwechat.py,sha256=xkHQUUXDEqq4Q_DHF6vc3Dd33A8oOCkKyJN7v7p2leM,4935
13
- reywechat/data/client_api.dll,sha256=H9uj-x9Ztg0jFZK0yY6NsnyH5_119dQRFfoVVMidxRs,592384
14
- reywechat-1.0.40.dist-info/METADATA,sha256=5MJCWQ_8cNLimLjDz3zhGJvWaredMvtBtAFiJWF50ok,1551
15
- reywechat-1.0.40.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
16
- reywechat-1.0.40.dist-info/licenses/LICENSE,sha256=UYLPqp7BvPiH8yEZduJqmmyEl6hlM3lKrFIefiD4rvk,1059
17
- reywechat-1.0.40.dist-info/RECORD,,