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.
- todus_sdk-1.6.0/CHANGELOG.md +279 -0
- todus_sdk-1.6.0/LICENSE +26 -0
- todus_sdk-1.6.0/MANIFEST.in +4 -0
- todus_sdk-1.6.0/PKG-INFO +237 -0
- todus_sdk-1.6.0/README.md +198 -0
- todus_sdk-1.6.0/pyproject.toml +64 -0
- todus_sdk-1.6.0/setup.cfg +4 -0
- todus_sdk-1.6.0/tests/test_auth.py +57 -0
- todus_sdk-1.6.0/tests/test_base.py +75 -0
- todus_sdk-1.6.0/tests/test_cache.py +124 -0
- todus_sdk-1.6.0/tests/test_client_events.py +72 -0
- todus_sdk-1.6.0/tests/test_events.py +93 -0
- todus_sdk-1.6.0/tests/test_filters.py +74 -0
- todus_sdk-1.6.0/tests/test_parser.py +166 -0
- todus_sdk-1.6.0/tests/test_ratelimit.py +63 -0
- todus_sdk-1.6.0/tests/test_stanza.py +15 -0
- todus_sdk-1.6.0/todus/__init__.py +64 -0
- todus_sdk-1.6.0/todus/cache/__init__.py +13 -0
- todus_sdk-1.6.0/todus/cache/mixin.py +103 -0
- todus_sdk-1.6.0/todus/cache/queue.py +200 -0
- todus_sdk-1.6.0/todus/cache/store.py +255 -0
- todus_sdk-1.6.0/todus/client/__init__.py +368 -0
- todus_sdk-1.6.0/todus/client/auth.py +105 -0
- todus_sdk-1.6.0/todus/client/base.py +199 -0
- todus_sdk-1.6.0/todus/client/block.py +29 -0
- todus_sdk-1.6.0/todus/client/call.py +36 -0
- todus_sdk-1.6.0/todus/client/channels.py +129 -0
- todus_sdk-1.6.0/todus/client/file.py +200 -0
- todus_sdk-1.6.0/todus/client/last.py +13 -0
- todus_sdk-1.6.0/todus/client/location.py +26 -0
- todus_sdk-1.6.0/todus/client/message.py +344 -0
- todus_sdk-1.6.0/todus/client/privacy.py +26 -0
- todus_sdk-1.6.0/todus/client/profile.py +123 -0
- todus_sdk-1.6.0/todus/client/status.py +118 -0
- todus_sdk-1.6.0/todus/client_with_queue.py +38 -0
- todus_sdk-1.6.0/todus/constants.py +10 -0
- todus_sdk-1.6.0/todus/errors.py +41 -0
- todus_sdk-1.6.0/todus/events/__init__.py +10 -0
- todus_sdk-1.6.0/todus/events/bus.py +128 -0
- todus_sdk-1.6.0/todus/events/filters.py +101 -0
- todus_sdk-1.6.0/todus/group.py +528 -0
- todus_sdk-1.6.0/todus/parser.py +435 -0
- todus_sdk-1.6.0/todus/ratelimit.py +87 -0
- todus_sdk-1.6.0/todus/stanza.py +54 -0
- todus_sdk-1.6.0/todus/stanzas/__init__.py +1 -0
- todus_sdk-1.6.0/todus/stanzas/block.py +26 -0
- todus_sdk-1.6.0/todus/stanzas/call.py +31 -0
- todus_sdk-1.6.0/todus/stanzas/channels.py +110 -0
- todus_sdk-1.6.0/todus/stanzas/group.py +308 -0
- todus_sdk-1.6.0/todus/stanzas/last.py +9 -0
- todus_sdk-1.6.0/todus/stanzas/location.py +25 -0
- todus_sdk-1.6.0/todus/stanzas/presence.py +37 -0
- todus_sdk-1.6.0/todus/stanzas/privacy.py +31 -0
- todus_sdk-1.6.0/todus/stanzas/private.py +257 -0
- todus_sdk-1.6.0/todus/stanzas/profile.py +11 -0
- todus_sdk-1.6.0/todus/stanzas/status.py +45 -0
- todus_sdk-1.6.0/todus/stanzas/utils.py +129 -0
- todus_sdk-1.6.0/todus/types.py +54 -0
- todus_sdk-1.6.0/todus/util.py +188 -0
- todus_sdk-1.6.0/todus_sdk.egg-info/PKG-INFO +237 -0
- todus_sdk-1.6.0/todus_sdk.egg-info/SOURCES.txt +62 -0
- todus_sdk-1.6.0/todus_sdk.egg-info/dependency_links.txt +1 -0
- todus_sdk-1.6.0/todus_sdk.egg-info/requires.txt +15 -0
- 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
|
todus_sdk-1.6.0/LICENSE
ADDED
|
@@ -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.
|
todus_sdk-1.6.0/PKG-INFO
ADDED
|
@@ -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>
|