todus-sdk 1.6.0__tar.gz

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.
Files changed (64) hide show
  1. todus_sdk-1.6.0/CHANGELOG.md +279 -0
  2. todus_sdk-1.6.0/LICENSE +26 -0
  3. todus_sdk-1.6.0/MANIFEST.in +4 -0
  4. todus_sdk-1.6.0/PKG-INFO +237 -0
  5. todus_sdk-1.6.0/README.md +198 -0
  6. todus_sdk-1.6.0/pyproject.toml +64 -0
  7. todus_sdk-1.6.0/setup.cfg +4 -0
  8. todus_sdk-1.6.0/tests/test_auth.py +57 -0
  9. todus_sdk-1.6.0/tests/test_base.py +75 -0
  10. todus_sdk-1.6.0/tests/test_cache.py +124 -0
  11. todus_sdk-1.6.0/tests/test_client_events.py +72 -0
  12. todus_sdk-1.6.0/tests/test_events.py +93 -0
  13. todus_sdk-1.6.0/tests/test_filters.py +74 -0
  14. todus_sdk-1.6.0/tests/test_parser.py +166 -0
  15. todus_sdk-1.6.0/tests/test_ratelimit.py +63 -0
  16. todus_sdk-1.6.0/tests/test_stanza.py +15 -0
  17. todus_sdk-1.6.0/todus/__init__.py +64 -0
  18. todus_sdk-1.6.0/todus/cache/__init__.py +13 -0
  19. todus_sdk-1.6.0/todus/cache/mixin.py +103 -0
  20. todus_sdk-1.6.0/todus/cache/queue.py +200 -0
  21. todus_sdk-1.6.0/todus/cache/store.py +255 -0
  22. todus_sdk-1.6.0/todus/client/__init__.py +368 -0
  23. todus_sdk-1.6.0/todus/client/auth.py +105 -0
  24. todus_sdk-1.6.0/todus/client/base.py +199 -0
  25. todus_sdk-1.6.0/todus/client/block.py +29 -0
  26. todus_sdk-1.6.0/todus/client/call.py +36 -0
  27. todus_sdk-1.6.0/todus/client/channels.py +129 -0
  28. todus_sdk-1.6.0/todus/client/file.py +200 -0
  29. todus_sdk-1.6.0/todus/client/last.py +13 -0
  30. todus_sdk-1.6.0/todus/client/location.py +26 -0
  31. todus_sdk-1.6.0/todus/client/message.py +344 -0
  32. todus_sdk-1.6.0/todus/client/privacy.py +26 -0
  33. todus_sdk-1.6.0/todus/client/profile.py +123 -0
  34. todus_sdk-1.6.0/todus/client/status.py +118 -0
  35. todus_sdk-1.6.0/todus/client_with_queue.py +38 -0
  36. todus_sdk-1.6.0/todus/constants.py +10 -0
  37. todus_sdk-1.6.0/todus/errors.py +41 -0
  38. todus_sdk-1.6.0/todus/events/__init__.py +10 -0
  39. todus_sdk-1.6.0/todus/events/bus.py +128 -0
  40. todus_sdk-1.6.0/todus/events/filters.py +101 -0
  41. todus_sdk-1.6.0/todus/group.py +528 -0
  42. todus_sdk-1.6.0/todus/parser.py +435 -0
  43. todus_sdk-1.6.0/todus/ratelimit.py +87 -0
  44. todus_sdk-1.6.0/todus/stanza.py +54 -0
  45. todus_sdk-1.6.0/todus/stanzas/__init__.py +1 -0
  46. todus_sdk-1.6.0/todus/stanzas/block.py +26 -0
  47. todus_sdk-1.6.0/todus/stanzas/call.py +31 -0
  48. todus_sdk-1.6.0/todus/stanzas/channels.py +110 -0
  49. todus_sdk-1.6.0/todus/stanzas/group.py +308 -0
  50. todus_sdk-1.6.0/todus/stanzas/last.py +9 -0
  51. todus_sdk-1.6.0/todus/stanzas/location.py +25 -0
  52. todus_sdk-1.6.0/todus/stanzas/presence.py +37 -0
  53. todus_sdk-1.6.0/todus/stanzas/privacy.py +31 -0
  54. todus_sdk-1.6.0/todus/stanzas/private.py +257 -0
  55. todus_sdk-1.6.0/todus/stanzas/profile.py +11 -0
  56. todus_sdk-1.6.0/todus/stanzas/status.py +45 -0
  57. todus_sdk-1.6.0/todus/stanzas/utils.py +129 -0
  58. todus_sdk-1.6.0/todus/types.py +54 -0
  59. todus_sdk-1.6.0/todus/util.py +188 -0
  60. todus_sdk-1.6.0/todus_sdk.egg-info/PKG-INFO +237 -0
  61. todus_sdk-1.6.0/todus_sdk.egg-info/SOURCES.txt +62 -0
  62. todus_sdk-1.6.0/todus_sdk.egg-info/dependency_links.txt +1 -0
  63. todus_sdk-1.6.0/todus_sdk.egg-info/requires.txt +15 -0
  64. todus_sdk-1.6.0/todus_sdk.egg-info/top_level.txt +1 -0
@@ -0,0 +1,279 @@
1
+ # Changelog
2
+
3
+ Todos los cambios notables en este proyecto se documentan en este archivo.
4
+
5
+ El formato está basado en [Keep a Changelog](https://keepachangelog.com/es-ES/1.1.0/),
6
+ y este proyecto sigue [Semantic Versioning](https://semver.org/lang/es/).
7
+
8
+ ## [1.6.0] - 2026-08-20
9
+
10
+ ### Changed
11
+ - Bloques de código en la documentación ahora usan fondo claro en modo claro, corrigiendo el problema donde se veían oscuros.
12
+ - Enlaces del README y documentación actualizados al repositorio nyxthor-dev/toDus-API.
13
+ - Créditos del README actualizados: nyxthor-dev como mantenedor actual.
14
+
15
+ ### Added
16
+ - **Rate Limiter**: Nuevo módulo `todus/ratelimit.py` con `RateLimiter` para control de tasa de peticiones.
17
+ - `RateLimiter` exportado en `todus/__init__`.
18
+
19
+ ---
20
+
21
+ ## [1.5.4] - 2026-06-26
22
+
23
+ ### Added
24
+ - **Event Bus y Sistema de Filtros Avanzados**: Nuevo módulo `todus/events/` con dispatcher centralizado de eventos. Incluye:
25
+ - `EventBus`: Gestor de eventos thread-safe con prioridades y propagation control.
26
+ - `Filter` + `build_filter`: Filtros declarativos por `from_phone`, `contains_keyword`, `msg_type`, `is_group`, `group_id`, `regex` y `custom`.
27
+ - Decorador `@client.events.on(event_type, **filters)` para registrar handlers limpiamente.
28
+ - Soporte para handlers wildcard (`'*'`) que capturan todos los eventos.
29
+ - Despacho automático de 7 tipos de eventos: `message`, `presence`, `receipt`, `iq`, `tdack`, `deleted`, `chat_state`.
30
+ - Método `handle_parsed_stanza(msg, *, sock, callback)` para manejar stanzas parseadas.
31
+ - **Documentación de Event Bus**: Nueva sección `docs/events/overview.md` con guía completa y ejemplos.
32
+
33
+ ### Changed
34
+ - **Integración de EventBus en cliente**: `ToDusClient` ahora inicializa `self.events = EventBus()` automáticamente.
35
+ - **Mejora en `_listen_loop`**: Refactorizada para usar `handle_parsed_stanza` y despachar eventos a `EventBus`.
36
+ - **Actualización de mkdocs.yml**: Agregada sección "🎯 Event Bus y Filtros" en navegación.
37
+ - **Ejemplos avanzados**: Nuevo ejemplo de "Bot Reactivo con EventBus" en `examples_advanced.md`.
38
+
39
+ ### Fixed
40
+ - **Thread-safety en dispatch**: EventBus usa `RLock` para operaciones thread-safe.
41
+ - **Manejo robusto de excepciones**: Si un filtro o handler falla, se registra pero no rompe la propagación.
42
+
43
+ ### Tests Added
44
+ - `tests/test_events.py`: 5 tests para filtros, prioridades, wildcard y unsubscribe.
45
+ - `tests/test_client_events.py`: Integración de eventos en cliente (7 tipos de eventos).
46
+
47
+ ---
48
+
49
+ ## [1.5.3] - 2026-06-21
50
+
51
+ ### Added
52
+ - **Message Queue System**: Nuevo módulo `todus/cache/` con almacenamiento persistente de mensajes en SQLite. Incluye:
53
+ - `MessageStore`: CRUD thread-safe para mensajes con índices optimizados (status, "to", created_at).
54
+ - `MessageQueue`: Sistema de cola con reintentos automáticos, callbacks de eventos y backoff exponencial con jitter.
55
+ - `MessageQueueMixin`: Mixin composable para integrar queue en cualquier cliente.
56
+ - `ToDusClientWithQueue`: Cliente completo con soporte de queue integrado.
57
+ - **Documentación HTML**: Nueva documentación visual en `documentacion.html` con diseño blanco/rojo, ejemplos terminales Linux/Mac, navegación interactiva y secciones detalladas (Introducción, Inicio Rápido, Instalación, Ejemplos, Características, Mensajería, Message Queue).
58
+ - **Estados de Mensaje**: Implementación completa del ciclo de vida del mensaje (pending → sent → delivered → read/failed).
59
+ - **Callbacks de Evento**: Registro de funciones callback para eventos de mensajes: `on_message_sent`, `on_message_delivered`, `on_message_read`, `on_message_failed`.
60
+ - **Estadísticas de Queue**: Método `get_queue_stats()` para monitoreo en tiempo real de mensajes por estado.
61
+
62
+ ### Changed
63
+ - **Optimización del cliente `ToDusClient2`**: Refactorización elimando ~200 líneas de código duplicado en métodos de envío.
64
+ - **Mejora en `listen_messages`**: Ahora soporta `max_retries` configurable (default 10) con exponential backoff mejorado y mejor logging de errores.
65
+ - **Esquema de persistencia**: Almacenamiento de metadata JSON para campos personalizados en el sistema de queue.
66
+ - **Exports actualizados**: Nuevo `__all__` en `todus/__init__.py` incluyendo `MessageStore`, `Message`, `MessageStatus`, `MessageQueue`, `ToDusClientWithQueue`.
67
+
68
+ ### Fixed
69
+ - **Bug en SQL reserved word**: Corrección del error "sqlite3.OperationalError: near 'to': syntax error" escapando la columna `"to"` en CREATE TABLE e INSERT statements con parámetros posicionales.
70
+ - **Thread-safety mejorada**: Implementación de RLock en todas las operaciones de base de datos del MessageStore para evitar condiciones de carrera.
71
+ - **Limpieza de recursos**: Método `__del__` en `ToDusClientWithQueue` para parar correctamente el worker thread de reintentos.
72
+ - **Eliminación de mensajes antiguos**: Implementación de `clear_old_messages()` para limpiar mensajes con más de 30 días automáticamente.
73
+
74
+ ## [1.5.2] - 2026-06-20
75
+
76
+ ### Added
77
+ - **Sistema de Mensajes Programados (Scheduler)**: Nueva funcionalidad para programar el envío de mensajes automáticos.
78
+ - `send_later(to, body, delay)`: Envía un mensaje después de un tiempo determinado (ej. 5 minutos).
79
+ - `schedule_daily(to, body, hour, minute)`: Envía un mensaje todos los días a una hora específica.
80
+ - `schedule_interval(to, body, interval)`: Envía un mensaje cada cierto intervalo de tiempo (ej. cada hora).
81
+ - `cancel_task(task_id)`: Cancela una tarea programada.
82
+ - `list_tasks()`: Lista todas las tareas programadas.
83
+ - `get_scheduler_stats()`: Obtiene estadísticas del scheduler (tareas pendientes, próxima ejecución, etc.).
84
+ - `stop_scheduler()`: Detiene el scheduler y libera el hilo.
85
+ - **Verificación SSL configurable**: Nuevo parámetro `verify_ssl` en `ToDusClientBase` y `ToDusClient2` para activar/desactivar la verificación de certificados SSL. Por defecto `False` para mantener compatibilidad con versiones anteriores.
86
+ - **Backoff exponencial con jitter**: Mejora en el método `listen_messages` para reconexiones inteligentes. Ahora los reintentos aumentan progresivamente (1s, 2s, 4s, 8s, 16s, 32s, máximo 60s) con un factor aleatorio del 0-30% para evitar el "efecto rebaño".
87
+
88
+ ### Changed
89
+ - **Refactorización de `ToDusClient2`**: Eliminada la duplicación de código en los métodos de envío (`send_message`, `send_file_message`, `send_image_message`, etc.) mediante el nuevo método interno `_send_to_target`. Centraliza la lógica de detección de grupos y autenticación.
90
+ - **Seguridad SSL mejorada**: Ahora se puede activar la verificación de certificados en conexiones HTTP y XMPP, eliminando la dependencia de la desactivación forzosa de seguridad.
91
+
92
+ ### Fixed
93
+ - **Reconexiones más eficientes**: Reemplazado el `time.sleep(15)` fijo por un sistema de backoff exponencial que reduce la carga del servidor en caídas prolongadas y acelera la reconexión en fallos leves.
94
+ - **Eliminación de duplicación de código**: Los métodos de envío ahora son más mantenibles y fáciles de extender.
95
+
96
+ ## [1.5.1] - 2024-06-20
97
+
98
+ ### Fixed
99
+ - Corrección de la rama de la documentación.
100
+
101
+ ## [1.5.0] - 2024-06-20
102
+
103
+ ### Added
104
+ - **Cobertura 100% de la API de ToDus:** Implementación de todas las funcionalidades internas restantes.
105
+ - **Privacidad (`ToDusPrivacyMixin`)**: Métodos para configurar y consultar quién ve tu perfil o te añade a grupos (`get_profile_privacy`, `set_profile_privacy`, `get_group_privacy`, `set_group_privacy`).
106
+ - **Bloqueos (`ToDusBlockMixin`)**: Gestión de lista negra de contactos (`block_user`, `unblock_user`, `get_block_list`, `get_block_list_paginated`).
107
+ - **Última Conexión (`ToDusLastMixin`)**: Consulta de actividad reciente de usuarios (`get_last_seen`).
108
+ - **Ubicación (`ToDusLocationMixin`)**: Geolocalización y Personas Cerca (`set_location`, `hide_location`, `get_people_near`, `get_near_status`).
109
+ - **Llamadas (`ToDusCallMixin`)**: Señalización XMPP para VoIP (`start_call`, `pickup_call`, `reject_call`, `end_call`, `get_turn_credentials`).
110
+
111
+ ## [1.4.7] - 2026-06-20
112
+
113
+ ### Added
114
+ - Implementación base de **Estados / Historias de ToDus** (`StatusManager`). Se añadió el mixin `ToDusStatusMixin` y soporte nativo XMPP (`td:status:*`):
115
+ - `publish_status`: Publica historias mediante carga Base64 automática de payloads.
116
+ - `delete_status`: Permite eliminar un estado publicado.
117
+ - `get_status`: Recupera un estado de otro usuario.
118
+ - `follow_user` y `unfollow_user`: Suscripción y cancelación de estados de otros usuarios.
119
+ - `get_followers`, `get_following` y `get_follower_info`: Interfaz completa para consultar la red de seguidores y seguir de manera paginada.
120
+
121
+ ## [1.4.6] - 2026-06-20
122
+
123
+ ### Added
124
+ - Implementación base completa de **Canales de ToDus**. Se incluyó el mixin `ToDusChannelMixin` con funciones nativas XMPP (`todus:ch:*`) para gestionar canales:
125
+ - `create_channel`: Permite crear nuevos canales.
126
+ - `get_my_channels`: Lista los canales del usuario.
127
+ - `get_channel_info`: Obtiene la información del canal por su enlace.
128
+ - `publish_to_channel`: Publica mensajes XML nativos en canales.
129
+ - `get_channel_publications`: Obtiene los últimos mensajes (paginación de historial).
130
+ - `subscribe_channel` y `leave_channel`: Gestión de membresía de canal.
131
+ - El parser interno `parse_iq` ahora intercepta nativamente los elementos `<query>` que devuelven información compleja (como historiales y propiedades de canales) para su fácil extracción.
132
+
133
+ ### Fixed
134
+ - Solucionado el problema en la actualización del perfil (nombre/alias se convertía en `~`). Ahora se aconseja empaquetar en una misma llamada a `update_profile` todos los atributos que se desean mantener. Se agregó el parámetro opcional `thumbnail_url` faltante en los ejemplos.
135
+
136
+ ## [1.4.5] - 2026-06-20
137
+
138
+ ### Fixed
139
+ - Corregido un test automatizado (`test_upload_avatar_uses_session`) que estaba fallando y bloqueando el despliegue a PyPI debido al cambio previo en la firma de `reserve_upload_url`.
140
+
141
+ ## [1.4.4] - 2026-06-20
142
+
143
+ ### Fixed
144
+ - Corregido un `TypeError` interno en la función `upload_avatar` provocado por la sobreescritura de parámetros en el manejo de firmas mixtas (`reserve_upload_url`).
145
+
146
+ ## [1.4.3] - 2026-06-20
147
+
148
+ ### Added
149
+ - Añadido el método `set_todus_id` al `ToDusProfileMixin` para permitir cambiar el `@username` del usuario mediante la API XMPP nativa de ToDus (utilizando el stanza `todus:users:updatetodusid`).
150
+
151
+ ## [1.4.2] - 2026-06-20
152
+
153
+ ### Changed
154
+ - Reescrito el método `update_profile` del `ToDusProfileMixin` para funcionar con la API REST actual. Ahora utiliza payloads construidos manualmente en Protobuf hacia el endpoint `v2/todus/users.me` en lugar de JSON, reparando finalmente la funcionalidad de actualizar perfil (nombre, biografía y foto).
155
+ - Se modificó la inyección del token JWT en el cliente de perfiles para ajustarse al estándar esperado por `auth.todus.cu` (sin el prefijo `Bearer`).
156
+
157
+ ## [1.4.1] - 2026-06-20
158
+
159
+ ### Added
160
+ - Integración nativa de namespaces `x11`, `x13`, `x14` para gestión avanzada de grupos.
161
+ - Implementado el método correcto de `leave()` mediante petición IQ `x13`.
162
+ - Nuevas funciones de miembros: `get_members`, `set_member_role`, `kick_member`.
163
+ - Nuevas funciones de enlaces: `get_invite_link`, `revoke_invite_link`.
164
+ - Funciones parseadoras auxiliares: `parse_members_response`, `parse_invite_link_response`.
165
+ - Ejemplo funcional `examples/send_grupo_admin.py`.
166
+
167
+ ## [1.4.0] - 2026-06-20
168
+
169
+ ### Added
170
+ - Implementadas funciones para la administración de grupos MUC Light.
171
+ - Nuevos métodos en `GroupClient` para actualizar la información de un grupo:
172
+ - `set_name`: Permite cambiar el nombre del grupo (`<g4>`).
173
+ - `set_subject`: Permite cambiar la descripción o asunto del grupo (`<subject>`).
174
+ - `set_avatar`: Permite actualizar el avatar (imagen) del grupo (`<g3>` y `<picture_thumbnail_url>`).
175
+
176
+ ## [1.3.9] - 2026-06-20
177
+
178
+ ### Fixed
179
+ - Corregida la generación de stanzas salientes (tanto en mensajes de grupo `group.py` como `private.py`), cambiando el atributo `o='{to}'` por el correcto `to='{to}'`. Esto resuelve problemas donde los mensajes no se enrutaban o no se mostraban correctamente al enviar contenidos a los grupos.
180
+ - Añadido el atributo faltante `xmlns='jc'` en `video_message` de los chats privados.
181
+
182
+ ## [1.3.8] - 2026-06-20
183
+
184
+ ### Fixed
185
+ - Corregido un bug en los stanzas de grupos (`group_file_message`, `group_image_message`, `group_video_message`) donde el parámetro `caption` era ignorado y no se incluía en el XML. Ahora los grupos soportan correctamente pies de foto y descripciones.
186
+
187
+ ### Changed
188
+ - Actualizados los parámetros de autenticación a `AUTH_VERSION_NAME = "2.1.2"` y `AUTH_VERSION_CODE = "30102"` para igualar la versión actual de la app oficial de ToDus.
189
+
190
+ ## [1.3.7] - 2026-06-20
191
+
192
+ ### Fixed
193
+ - Normalizado automáticamente el número de teléfono y eliminados espacios/saltos de línea accidentales del token/password en `ToDusClient2` y los métodos del mixin de autenticación.
194
+ - Corregida la serialización de payload protobuf en la autenticación para calcular dinámicamente el tamaño de los campos de texto en lugar de usar longitudes fijas de bytes, evitando fallos `400 Bad Request` ante caracteres extraños (como retornos de carro `\r` generados por archivos `.env` con formato CRLF en Docker).
195
+
196
+ ## [1.3.6] - 2026-06-20
197
+
198
+ ### Fixed
199
+ - Desactivada la verificación SSL en las peticiones HTTP y en el socket XMPP para evitar errores de validación de certificados de ToDus/Cuba en entornos de producción sin CAs locales (como contenedores Docker slim/alpine).
200
+ - Silenciadas las advertencias de `InsecureRequestWarning` producidas por la desactivación de verificación SSL en `requests`.
201
+
202
+ ## [1.3.5] - 2026-06-20
203
+
204
+ ### Fixed
205
+ - Corregidos y optimizados los badges del `README.md` para dar soporte a repositorios privados utilizando badges nativos de GitHub Actions y un badge estático para la licencia.
206
+
207
+ ### Changed
208
+ - Migrado el flujo de publicación de PyPI en GitHub Actions a Trusted Publishing (OIDC) para evitar fallos de autenticación con tokens y simplificar el proceso.
209
+
210
+ ## [1.3.4] - 2026-06-20
211
+
212
+ ### Fixed
213
+ - Asegurado que las operaciones de subida de archivos (`upload_file`) y avatares (`upload_avatar`) utilicen el proxy configurado al direccionarlas a través de la sesión del cliente.
214
+ - Agregados tests unitarios para verificar el comportamiento de proxies en la subida de archivos y avatares.
215
+
216
+ ## [1.3.3] - 2026-06-19
217
+
218
+ ### Changed
219
+ - Renombrado el paquete a `toDus-API`.
220
+
221
+ ## [1.3.2] - 2026-06-19
222
+
223
+ ### Fixed
224
+ - Corregido el flujo de publicación en GitHub Actions para usar `secrets.PYPI_API_TOKEN`.
225
+
226
+ ## [1.3.1] - 2026-06-19
227
+
228
+ ### Added
229
+ - Soporte inicial para proxy HTTP y SOCKS5 en peticiones HTTP y sockets XMPP.
230
+
231
+ ## [1.3.0] - 2026-06-19
232
+
233
+ ### Added
234
+ - Soporte completo para grupos MUC Light (`GroupClient`)
235
+ - Roles de grupo (`GroupRole`) y eventos de grupo (`GroupEvent`)
236
+ - Auto-detección de destino privado/grupo en `ToDusClient2`
237
+ - Envío de mensajes de ubicación (`send_location_message`)
238
+ - Envío de mensajes de eventos/calendario (`send_event_message`)
239
+ - Callbacks específicos por grupo (`on_group_message`)
240
+ - Firma de URLs con nombre legible de archivo (`sanitize_filename`)
241
+ - Soporte de progreso en subidas (`progress_callback`)
242
+ - Módulo `stanzas/` reorganizado en subdirectorio
243
+ - Módulo `client/` reorganizado en subdirectorio con mixins
244
+ - `pyproject.toml` moderno (PEP 621)
245
+ - Tests unitarios con pytest
246
+ - CI/CD con GitHub Actions
247
+
248
+ ### Changed
249
+ - Estructura interna reorganizada para claridad
250
+ - Migración de `setup.py` a `pyproject.toml`
251
+
252
+ ## [1.2.0] - 2026-06-01
253
+
254
+ ### Added
255
+ - Envío de stickers (`send_sticker_message`)
256
+ - Envío de contactos (`send_contact_message`)
257
+ - Envío de botones interactivos (`send_button_message`)
258
+ - Edición de mensajes (`edit_message`)
259
+ - Eliminación de mensajes (`delete_message`)
260
+ - Parser incremental de stanzas XMPP (`IncrementalParser`)
261
+
262
+ ## [1.1.0] - 2026-05-15
263
+
264
+ ### Added
265
+ - Envío de imágenes con dimensiones y thumbnail
266
+ - Envío de videos con metadata
267
+ - Subida y descarga de archivos con `FileType`
268
+ - Perfil de usuario (alias, bio, avatar)
269
+ - Utilidades: `format_size`, `get_image_dimensions`, `generate_blurhash`
270
+
271
+ ## [1.0.0] - 2026-05-01
272
+
273
+ ### Added
274
+ - Cliente básico XMPP para ToDus (`ToDusClient`)
275
+ - Cliente stateful con auto-login (`ToDusClient2`)
276
+ - Autenticación por SMS + JWT
277
+ - Envío y recepción de mensajes de texto
278
+ - Manejo de excepciones personalizadas
279
+ - Constantes del protocolo ToDus
@@ -0,0 +1,26 @@
1
+ Copyright (c) 2026 OrionWolf
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ of this software and associated documentation files (the "Software"), to deal
5
+ in the Software without restriction, including without limitation the rights
6
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ copies of the Software, and to permit persons to whom the Software is
8
+ furnished to do so, **subject to the following conditions**:
9
+
10
+ 1. The above copyright notice and this permission notice shall be included in
11
+ all copies or substantial portions of the Software.
12
+
13
+ 2. **Redistribution of the Software, in whole or in part, is prohibited without
14
+ the prior written consent of the copyright holder.**
15
+
16
+ 3. Any derivative works must clearly attribute the original work to
17
+ OrionWolf (https://github.com/vm1008079-web/toDus-API) in their
18
+ documentation and in any public-facing displays.
19
+
20
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
23
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
25
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
26
+ SOFTWARE.
@@ -0,0 +1,4 @@
1
+ include README.md
2
+ include LICENSE
3
+ include CHANGELOG.md
4
+ include pyproject.toml
@@ -0,0 +1,237 @@
1
+ Metadata-Version: 2.4
2
+ Name: todus-sdk
3
+ Version: 1.6.0
4
+ Summary: Cliente Python para ToDus (mensajería cubana) — chat, grupos, archivos, stickers y más
5
+ Author-email: nyxthor-dev <vm1008079@gmail.com>
6
+ License-Expression: MIT
7
+ Project-URL: Homepage, https://github.com/nyxthor-dev/toDus-API
8
+ Project-URL: Repository, https://github.com/nyxthor-dev/toDus-API
9
+ Project-URL: Issues, https://github.com/nyxthor-dev/toDus-API/issues
10
+ Project-URL: Changelog, https://github.com/nyxthor-dev/toDus-API/blob/main/CHANGELOG.md
11
+ Keywords: todus,cuba,xmpp,messaging,chat
12
+ Classifier: Development Status :: 4 - Beta
13
+ Classifier: Intended Audience :: Developers
14
+ Classifier: Operating System :: OS Independent
15
+ Classifier: Programming Language :: Python :: 3
16
+ Classifier: Programming Language :: Python :: 3.11
17
+ Classifier: Programming Language :: Python :: 3.12
18
+ Classifier: Programming Language :: Python :: 3.13
19
+ Classifier: Topic :: Communications :: Chat
20
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
21
+ Requires-Python: >=3.11
22
+ Description-Content-Type: text/markdown
23
+ License-File: LICENSE
24
+ Requires-Dist: requests
25
+ Requires-Dist: pysocks
26
+ Provides-Extra: dev
27
+ Requires-Dist: pytest>=7.0.0; extra == "dev"
28
+ Requires-Dist: build; extra == "dev"
29
+ Requires-Dist: twine; extra == "dev"
30
+ Requires-Dist: flake8>=6.0.0; extra == "dev"
31
+ Requires-Dist: mkdocs>=1.6.0; extra == "dev"
32
+ Requires-Dist: mkdocs-material>=9.5.0; extra == "dev"
33
+ Requires-Dist: mkdocstrings>=0.27.0; extra == "dev"
34
+ Requires-Dist: mkdocstrings-python>=1.10.0; extra == "dev"
35
+ Requires-Dist: mkdocs-autorefs>=1.2.0; extra == "dev"
36
+ Requires-Dist: mkdocs-macros-plugin>=1.3.0; extra == "dev"
37
+ Requires-Dist: mkdocs-minify-plugin>=0.8.0; extra == "dev"
38
+ Dynamic: license-file
39
+
40
+ <h1 align="center">📱 toDus-API</h1>
41
+
42
+ <p align="center">
43
+ <a href="https://pypi.org/project/todus-sdk/"><img src="https://img.shields.io/pypi/v/todus-sdk" alt="PyPI"></a>
44
+ <a href="https://pypi.org/project/todus-sdk/"><img src="https://img.shields.io/pypi/pyversions/todus-sdk" alt="Python"></a>
45
+ <a href="https://nyxthor-dev.github.io/toDus-API"><img src="https://img.shields.io/badge/docs-mkdocs-blue" alt="Docs"></a>
46
+ <a href="https://github.com/nyxthor-dev/toDus-API/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-MIT-brightgreen" alt="License"></a>
47
+ <a href="https://github.com/nyxthor-dev/toDus-API"><img src="https://img.shields.io/github/stars/nyxthor-dev/toDus-API?style=social" alt="Stars"></a>
48
+ </p>
49
+
50
+ <p align="center"><strong>Cliente Python 🐍 para ToDus</strong> — la plataforma de mensajería instantánea cubana.</p>
51
+
52
+ <p align="center">
53
+ <a href="https://nyxthor-dev.github.io/toDus-API"><strong>📖 LEER LA DOCUMENTACIÓN COMPLETA 📖</strong></a>
54
+ </p>
55
+
56
+ ---
57
+
58
+ ## ✨ ¿Qué es toDus-API?
59
+
60
+ Es una librería moderna y poderosa para interactuar con la red de ToDus desde Python. Te permite crear:
61
+
62
+ - 🤖 **Bots inteligentes** - Responden a comandos y preguntas
63
+ - 📢 **Notificadores** - Envíos masivos con reintentos automáticos
64
+ - 💬 **Chat bots** - Integración con IA y LLMs
65
+ - 📊 **Sistemas de reportes** - Automatización de reportes
66
+ - 🔗 **Integraciones** - Sincroniza ToDus con tus sistemas
67
+
68
+ **Cobertura del protocolo:** ✅ 100% de las funciones de la app oficial
69
+
70
+ ---
71
+
72
+ ## 🚀 Instalación
73
+
74
+ ```bash
75
+ pip install todus-sdk
76
+ ```
77
+
78
+ ---
79
+
80
+ ## 🧪 Primeros Pasos
81
+
82
+ ```python
83
+ from todus import ToDusClientWithQueue
84
+
85
+ # Crear cliente con cola persistente
86
+ client = ToDusClientWithQueue("5312345678", "tu_contraseña")
87
+ client.login()
88
+
89
+ # Enviar mensaje
90
+ msg_id = client.send_message_queued("5387654321", "¡Hola!")
91
+
92
+ # Escuchar mensajes
93
+ def on_message(msg):
94
+ print(f"{msg.get('from')}: {msg.get('body')}")
95
+
96
+ client.listen_messages(client.token, on_message)
97
+ ```
98
+
99
+ ---
100
+
101
+ ## 📚 Documentación Completa
102
+
103
+ | 📖 Tema | 📝 Descripción |
104
+ |--------|--------------|
105
+ | [🚀 Inicio Rápido](https://nyxthor-dev.github.io/toDus-API/quickstart/) | Tutorial paso a paso |
106
+ | [🔐 Autenticación](https://nyxthor-dev.github.io/toDus-API/authentication/) | SMS vs Contraseña |
107
+ | [💬 Mensajería](https://nyxthor-dev.github.io/toDus-API/client/overview/) | API de mensajes |
108
+ | [👥 Grupos MUC](https://nyxthor-dev.github.io/toDus-API/groups/) | Administración de grupos |
109
+ | [💾 Cola Persistente](https://nyxthor-dev.github.io/toDus-API/cache/overview/) | Entrega garantizada |
110
+ | [🔧 Solución de Problemas](https://nyxthor-dev.github.io/toDus-API/troubleshooting/) | Errores comunes |
111
+ | [💡 Ejemplos Avanzados](https://nyxthor-dev.github.io/toDus-API/examples_advanced/) | Patrones reales |
112
+
113
+ ---
114
+
115
+ ## ⚡ Características
116
+
117
+ ### 📱 Mensajería Completa
118
+ - Texto, imágenes, videos, stickers
119
+ - Ubicación, contactos, eventos
120
+ - Botones interactivos
121
+ - Ediciones y eliminaciones
122
+ - Confirmación de lectura
123
+
124
+ ### 👥 Soporte para Grupos
125
+ - Unirse/Salir de grupos MUC Light
126
+ - Administración de miembros
127
+ - Roles (Owner, Moderator, Participant)
128
+ - Eventos de grupo (join, leave, kick)
129
+ - Enlaces de invitación
130
+
131
+ ### 💾 Persistencia
132
+ - Cola de mensajes con SQLite
133
+ - Reintentos exponenciales automáticos
134
+ - Callbacks para eventos
135
+ - Estadísticas en tiempo real
136
+
137
+ ### 🌐 Avanzado
138
+ - Canales públicos/privados
139
+ - Estados/Historias
140
+ - Proxies (HTTP, SOCKS4/5)
141
+ - Autenticación SMS
142
+ - Reconexión automática
143
+
144
+ ---
145
+
146
+ ## 💻 Casos de Uso
147
+
148
+ ### 🤖 Bot con Comandos
149
+ ```python
150
+ def on_message(msg):
151
+ if msg.get('body', '').startswith('/'):
152
+ cmd = msg['body'][1:]
153
+ client.send_message_queued(
154
+ msg['from'].split('@')[0],
155
+ f"Ejecutaste: {cmd}"
156
+ )
157
+
158
+ client.listen_messages(client.token, on_message)
159
+ ```
160
+
161
+ ### 📢 Newsletter
162
+ ```python
163
+ phones = ["5351234567", "5387654321", "5362222222"]
164
+ for phone in phones:
165
+ client.send_message_queued(phone, "📰 Última noticia: ...")
166
+ ```
167
+
168
+ ### 👥 Administrador de Grupo
169
+ ```python
170
+ groups = client.groups
171
+ groups.join("id_grupo", nickname="AdminBot")
172
+ groups.send_message("id_grupo", "¡Hola grupo!")
173
+ members = groups.get_members("id_grupo")
174
+ ```
175
+
176
+ Ver más ejemplos en [Ejemplos Avanzados](https://nyxthor-dev.github.io/toDus-API/examples_advanced/)
177
+
178
+ ---
179
+
180
+ ## 🤝 Contribuir
181
+
182
+ Las contribuciones son bienvenidas! Ver [guía de contribución](CONTRIBUTING.md).
183
+
184
+ **Pasos rápidos:**
185
+ 1. Fork el repositorio
186
+ 2. Crea una rama: `git checkout -b feature/tu-feature`
187
+ 3. Commit cambios: `git commit -am 'Añade feature'`
188
+ 4. Push: `git push origin feature/tu-feature`
189
+ 5. Abre Pull Request
190
+
191
+ ---
192
+
193
+ ## 📋 Requisitos
194
+
195
+ - **Python** >= 3.11
196
+ - **pip** (incluido en Python)
197
+
198
+ ## ⚖️ Licencia
199
+
200
+ Este proyecto está bajo la licencia **MIT**. Ver [LICENSE](LICENSE) para más detalles.
201
+
202
+ ---
203
+
204
+ ## 👥 Contribuidores
205
+
206
+ Agradecemos a todos los que han contribuido:
207
+
208
+ - **nyxthor-dev** - Mantenedor actual
209
+ - **OrionWolf** - Creador original
210
+ - **Comunidad toDus** - Bug reports y sugerencias
211
+
212
+ ¿Quieres aparecer aquí? ¡Contribuye!
213
+
214
+ ---
215
+
216
+ ## 📞 Soporte
217
+
218
+ - 📖 [Documentación](https://nyxthor-dev.github.io/toDus-API/)
219
+ - 🐛 [Reportar bug](https://github.com/nyxthor-dev/toDus-API/issues)
220
+ - 💬 [Discusiones](https://github.com/nyxthor-dev/toDus-API/discussions)
221
+ - 📝 [CHANGELOG](CHANGELOG.md)
222
+
223
+ ---
224
+
225
+ ## 🔗 Enlaces
226
+
227
+ - 🌐 [Página de toDus](https://www.todus.cu)
228
+ - 📦 [PyPI Package](https://pypi.org/project/todus-sdk/)
229
+ - 📖 [Documentación](https://nyxthor-dev.github.io/toDus-API/)
230
+ - 💻 [Repositorio GitHub](https://github.com/nyxthor-dev/toDus-API)
231
+
232
+ ---
233
+
234
+ <p align="center">
235
+ Desarrollado con ❤️ por <strong>nyxthor-dev</strong><br>
236
+ <em>Basado en el trabajo original de OrionWolf</em>
237
+ </p>