maxapi-python 1.1.20__py3-none-any.whl → 1.2.1__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.
pymax/mixins/handler.py CHANGED
@@ -1,26 +1,37 @@
1
1
  from collections.abc import Awaitable, Callable
2
2
  from typing import Any
3
3
 
4
- from pymax.filters import Filter
4
+ from pymax.filters import BaseFilter
5
5
  from pymax.interfaces import ClientProtocol
6
6
  from pymax.types import Chat, Message, ReactionInfo
7
7
 
8
8
 
9
9
  class HandlerMixin(ClientProtocol):
10
10
  def on_message(
11
- self, *, filter: Filter | None = None
11
+ self, filter: BaseFilter[Message] | None = None
12
12
  ) -> Callable[
13
13
  [Callable[[Any], Any | Awaitable[Any]]],
14
14
  Callable[[Any], Any | Awaitable[Any]],
15
15
  ]:
16
16
  """
17
- Декоратор для установки обработчика входящих сообщений.
17
+ Декоратор для регистрации обработчика входящих сообщений.
18
18
 
19
- Args:
20
- filter: Фильтр для обработки сообщений.
19
+ Позволяет установить функцию-обработчик для всех входящих сообщений
20
+ или только для сообщений, соответствующих заданному фильтру.
21
21
 
22
- Returns:
23
- Декоратор.
22
+ :param filter: Фильтр для обработки сообщений. По умолчанию None.
23
+ :type filter: BaseFilter[Message] | None
24
+ :return: Декоратор для функции-обработчика.
25
+ :rtype: Callable
26
+
27
+ Example::
28
+
29
+ @client.on_message(Filter.text("hello"))
30
+ async def handle_hello(message: Message):
31
+ await client.send_message(
32
+ chat_id=message.chat_id,
33
+ text="Hello!"
34
+ )
24
35
  """
25
36
 
26
37
  def decorator(
@@ -33,7 +44,7 @@ class HandlerMixin(ClientProtocol):
33
44
  return decorator
34
45
 
35
46
  def on_message_edit(
36
- self, *, filter: Filter | None = None
47
+ self, filter: BaseFilter[Message] | None = None
37
48
  ) -> Callable[
38
49
  [Callable[[Any], Any | Awaitable[Any]]],
39
50
  Callable[[Any], Any | Awaitable[Any]],
@@ -41,11 +52,10 @@ class HandlerMixin(ClientProtocol):
41
52
  """
42
53
  Декоратор для установки обработчика отредактированных сообщений.
43
54
 
44
- Args:
45
- filter: Фильтр для обработки сообщений.
46
-
47
- Returns:
48
- Декоратор.
55
+ :param filter: Фильтр для обработки сообщений. По умолчанию None.
56
+ :type filter: BaseFilter[Message] | None
57
+ :return: Декоратор для функции-обработчика.
58
+ :rtype: Callable
49
59
  """
50
60
 
51
61
  def decorator(
@@ -60,7 +70,7 @@ class HandlerMixin(ClientProtocol):
60
70
  return decorator
61
71
 
62
72
  def on_message_delete(
63
- self, *, filter: Filter | None = None
73
+ self, filter: BaseFilter[Message] | None = None
64
74
  ) -> Callable[
65
75
  [Callable[[Any], Any | Awaitable[Any]]],
66
76
  Callable[[Any], Any | Awaitable[Any]],
@@ -68,11 +78,10 @@ class HandlerMixin(ClientProtocol):
68
78
  """
69
79
  Декоратор для установки обработчика удаленных сообщений.
70
80
 
71
- Args:
72
- filter: Фильтр для обработки сообщений.
73
-
74
- Returns:
75
- Декоратор.
81
+ :param filter: Фильтр для обработки сообщений. По умолчанию None.
82
+ :type filter: BaseFilter[Message] | None
83
+ :return: Декоратор для функции-обработчика.
84
+ :rtype: Callable
76
85
  """
77
86
 
78
87
  def decorator(
@@ -93,13 +102,12 @@ class HandlerMixin(ClientProtocol):
93
102
  """
94
103
  Устанавливает обработчик изменения реакций на сообщения.
95
104
 
96
- Args:
97
- handler: Функция или coroutine с аргументами (message_id: str, chat_id: int, reaction_info: ReactionInfo).
98
-
99
- Returns:
100
- Установленный обработчик.
105
+ :param handler: Функция или coroutine с аргументами (message_id: str, chat_id: int, reaction_info: ReactionInfo).
106
+ :type handler: Callable[[str, int, ReactionInfo], Any | Awaitable[Any]]
107
+ :return: Установленный обработчик.
108
+ :rtype: Callable[[str, int, ReactionInfo], Any | Awaitable[Any]]
101
109
  """
102
- self._on_reaction_change_handlers.append((handler,))
110
+ self._on_reaction_change_handlers.append(handler)
103
111
  self.logger.debug("on_reaction_change handler set: %r", handler)
104
112
  return handler
105
113
 
@@ -109,37 +117,93 @@ class HandlerMixin(ClientProtocol):
109
117
  """
110
118
  Устанавливает обработчик обновления информации о чате.
111
119
 
112
- Args:
113
- handler: Функция или coroutine с аргументом (chat: Chat).
114
-
115
- Returns:
116
- Установленный обработчик.
120
+ :param handler: Функция или coroutine с аргументом (chat: Chat).
121
+ :type handler: Callable[[Chat], Any | Awaitable[Any]]
122
+ :return: Установленный обработчик.
123
+ :rtype: Callable[[Chat], Any | Awaitable[Any]]
117
124
  """
118
- self._on_chat_update_handlers.append((handler,))
125
+ self._on_chat_update_handlers.append(handler)
119
126
  self.logger.debug("on_chat_update handler set: %r", handler)
120
127
  return handler
121
128
 
129
+ def on_raw_receive(
130
+ self, handler: Callable[[dict[str, Any]], Any | Awaitable[Any]]
131
+ ) -> Callable[[dict[str, Any]], Any | Awaitable[Any]]:
132
+ """
133
+ Устанавливает обработчик для получения необработанных данных от сервера.
134
+
135
+ :param handler: Функция или coroutine с аргументом (data: dict).
136
+ :type handler: Callable[[dict[str, Any]], Any | Awaitable[Any]]
137
+ :return: Установленный обработчик.
138
+ :rtype: Callable[[dict[str, Any]], Any | Awaitable[Any]]
139
+ """
140
+ self._on_raw_receive_handlers.append(handler)
141
+ self.logger.debug("on_raw_receive handler set: %r", handler)
142
+ return handler
143
+
122
144
  def on_start(
123
145
  self, handler: Callable[[], Any | Awaitable[Any]]
124
146
  ) -> Callable[[], Any | Awaitable[Any]]:
125
147
  """
126
148
  Устанавливает обработчик, вызываемый при старте клиента.
127
149
 
128
- Args:
129
- handler: Функция или coroutine без аргументов.
130
-
131
- Returns:
132
- Установленный обработчик.
150
+ :param handler: Функция или coroutine без аргументов.
151
+ :type handler: Callable[[], Any | Awaitable[Any]]
152
+ :return: Установленный обработчик.
153
+ :rtype: Callable[[], Any | Awaitable[Any]]
133
154
  """
134
155
  self._on_start_handler = handler
135
156
  self.logger.debug("on_start handler set: %r", handler)
136
157
  return handler
137
158
 
159
+ def task(self, seconds: float, minutes: float = 0, hours: float = 0):
160
+ """
161
+ Декоратор для планирования периодической задачи.
162
+
163
+ :param seconds: Интервал выполнения в секундах.
164
+ :type seconds: float
165
+ :param minutes: Интервал выполнения в минутах. По умолчанию 0.
166
+ :type minutes: float
167
+ :param hours: Интервал выполнения в часах. По умолчанию 0.
168
+ :type hours: float
169
+ :return: Декоратор для функции-обработчика.
170
+ :rtype: Callable[[], Any | Awaitable[Any]]
171
+
172
+ Example::
173
+
174
+ @client.task(seconds=10)
175
+ async def task():
176
+ await client.send_message(chat_id=123, text="Hello!")
177
+ """
178
+
179
+ def decorator(
180
+ handler: Callable[[], Any | Awaitable[Any]],
181
+ ) -> Callable[[], Any | Awaitable[Any]]:
182
+ self._scheduled_tasks.append(
183
+ (handler, seconds + minutes * 60 + hours * 3600)
184
+ )
185
+ self.logger.debug(
186
+ f"task scheduled: {handler}, interval: {seconds + minutes * 60 + hours * 3600}s"
187
+ )
188
+ return handler
189
+
190
+ return decorator
191
+
138
192
  def add_message_handler(
139
193
  self,
140
194
  handler: Callable[[Message], Any | Awaitable[Any]],
141
- filter: Filter | None,
195
+ filter: BaseFilter[Message] | None = None,
142
196
  ) -> Callable[[Message], Any | Awaitable[Any]]:
197
+ """
198
+ Добавляет обработчик входящих сообщений.
199
+
200
+ :param handler: Обработчик.
201
+ :type handler: Callable[[Message], Any | Awaitable[Any]]
202
+ :param filter: Фильтр. По умолчанию None.
203
+ :type filter: BaseFilter[Message] | None
204
+ :return: Обработчик.
205
+ :rtype: Callable[[Message], Any | Awaitable[Any]]
206
+ """
143
207
  self.logger.debug("add_message_handler (alias) used")
144
208
  self._on_message_handlers.append((handler, filter))
145
209
  return handler
@@ -147,6 +211,14 @@ class HandlerMixin(ClientProtocol):
147
211
  def add_on_start_handler(
148
212
  self, handler: Callable[[], Any | Awaitable[Any]]
149
213
  ) -> Callable[[], Any | Awaitable[Any]]:
214
+ """
215
+ Добавляет обработчик, вызываемый при старте клиента.
216
+
217
+ :param handler: Функция или coroutine без аргументов.
218
+ :type handler: Callable[[], Any | Awaitable[Any]]
219
+ :return: Установленный обработчик.
220
+ :rtype: Callable[[], Any | Awaitable[Any]]
221
+ """
150
222
  self.logger.debug("add_on_start_handler (alias) used")
151
223
  self._on_start_handler = handler
152
224
  return handler
@@ -155,13 +227,65 @@ class HandlerMixin(ClientProtocol):
155
227
  self,
156
228
  handler: Callable[[str, int, ReactionInfo], Any | Awaitable[Any]],
157
229
  ) -> Callable[[str, int, ReactionInfo], Any | Awaitable[Any]]:
230
+ """
231
+ Добавляет обработчик изменения реакций на сообщения.
232
+
233
+ :param handler: Функция или coroutine с аргументами (message_id: str, chat_id: int, reaction_info: ReactionInfo).
234
+ :type handler: Callable[[str, int, ReactionInfo], Any | Awaitable[Any]]
235
+ :return: Установленный обработчик.
236
+ :rtype: Callable[[str, int, ReactionInfo], Any | Awaitable[Any]]
237
+ """
158
238
  self.logger.debug("add_reaction_change_handler (alias) used")
159
- self._on_reaction_change_handlers.append((handler,))
239
+ self._on_reaction_change_handlers.append(
240
+ handler,
241
+ )
160
242
  return handler
161
243
 
162
244
  def add_chat_update_handler(
163
245
  self, handler: Callable[[Chat], Any | Awaitable[Any]]
164
246
  ) -> Callable[[Chat], Any | Awaitable[Any]]:
247
+ """
248
+ Добавляет обработчик обновления информации о чате.
249
+
250
+ :param handler: Функция или coroutine с аргументом (chat: Chat).
251
+ :type handler: Callable[[Chat], Any | Awaitable[Any]]
252
+ :return: Установленный обработчик.
253
+ :rtype: Callable[[Chat], Any | Awaitable[Any]]
254
+ """
165
255
  self.logger.debug("add_chat_update_handler (alias) used")
166
- self._on_chat_update_handlers.append((handler,))
256
+ self._on_chat_update_handlers.append(handler)
257
+ return handler
258
+
259
+ def add_raw_receive_handler(
260
+ self, handler: Callable[[dict[str, Any]], Any | Awaitable[Any]]
261
+ ) -> Callable[[dict[str, Any]], Any | Awaitable[Any]]:
262
+ """
263
+ Добавляет обработчик для получения необработанных данных от сервера.
264
+
265
+ :param handler: Функция или coroutine с аргументом (data: dict).
266
+ :type handler: Callable[[dict[str, Any]], Any | Awaitable[Any]]
267
+ :return: Установленный обработчик.
268
+ :rtype: Callable[[dict[str, Any]], Any | Awaitable[Any]]
269
+ """
270
+ self.logger.debug("add_raw_receive_handler (alias) used")
271
+ self._on_raw_receive_handlers.append(handler)
272
+ return handler
273
+
274
+ def add_scheduled_task(
275
+ self,
276
+ handler: Callable[[], Any | Awaitable[Any]],
277
+ interval: float,
278
+ ) -> Callable[[], Any | Awaitable[Any]]:
279
+ """
280
+ Добавляет периодическую задачу.
281
+
282
+ :param handler: Функция или coroutine без аргументов.
283
+ :type handler: Callable[[], Any | Awaitable[Any]]
284
+ :param interval: Интервал выполнения в секундах.
285
+ :type interval: float
286
+ :return: Установленный обработчик.
287
+ :rtype: Callable[[], Any | Awaitable[Any]]
288
+ """
289
+ self.logger.debug("add_scheduled_task (alias) used")
290
+ self._scheduled_tasks.append((handler, interval))
167
291
  return handler