Grupos MUC Light
El SDK soporta completamente los grupos MUC Light de ToDus a través de la propiedad groups de ToDusClient2 y ToDusClientWithQueue.
Acceso al Cliente de Grupos
client = ToDusClient2("5312345678", "password")
client.login()
# Obtener instancia del GroupClient
groups = client.groups Unirse y Salir de Grupos
Unirse
# group_id es el identificador del grupo (ej: "mi_grupo")
groups.join(group_id, nickname="MiApodo") Salir
groups.leave(group_id) Envío de Mensajes
Texto
groups.send_message(group_id, "Hola a todos", reply_to_id="") Imagen
groups.send_image(
group_id,
url="https://...",
file_name="foto.jpg",
file_size=12345,
width=800,
height=600,
thumbnail="...",
caption="Mi foto",
reply_to_id=""
) Video
groups.send_video(
group_id,
url="https://...",
video_id="vid123",
file_name="video.mp4",
file_size=12345,
duration=60,
width=1280,
height=720,
thumbnail="...",
caption="Mi video"
) Sticker
groups.send_sticker(
group_id,
sticker_id="stk1",
sticker_name="feliz",
sticker_pack="pack1",
sticker_hash="abc123"
) Contacto
groups.send_contact(
group_id,
contact_id="c1",
contact_name="Juan Pérez",
contact_phone="5351234567"
) Ubicación
groups.send_location(
group_id,
lat=23.1136,
lon=-82.3666,
zoom=11.0,
text="Mi ubicación"
) Evento
import time
start = int(time.time())
end = start + 3600
groups.send_event(
group_id,
title="Reunión",
start=start,
end=end,
all_day=False,
ics_data="BEGIN:VCALENDAR...",
event_id="ev1"
) Administración del Grupo
Cambiar Nombre
groups.set_name(group_id, "Nuevo Nombre") Cambiar Asunto/Descripción
groups.set_subject(group_id, "Descripción del grupo") Cambiar Avatar
groups.set_avatar(group_id, "https://.../avatar.jpg", "https://.../thumb.jpg") Obtener Enlace de Invitación
msg_id = groups.get_invite_link(group_id)
# La respuesta llega por el callback de listen_messages
# Usar groups.parse_invite_link_response(msg["raw"]) para extraer el enlace Revocar Enlace
groups.revoke_invite_link(group_id) Obtener Miembros
msg_id = groups.get_members(group_id)
# Para parsear la respuesta:
# members = groups.parse_members_response(msg["raw"])
# members: {"5350000000": "participant", "5351111111": "moderator", ...} Cambiar Rol de Miembro
from todus import GroupRole
# Roles: "participant", "moderator", "owner", "none"
groups.set_member_role(group_id, "5351111111", GroupRole.MODERATOR) Expulsar Miembro
groups.kick_member(group_id, "5351111111") Edición y Eliminación de Mensajes
Editar
groups.edit_message(
group_id,
new_body="Nuevo texto",
original_msg_id="id_del_mensaje_original"
) Eliminar
groups.delete_message(
group_id,
message_id="id_a_eliminar",
body="Texto del mensaje (opcional)",
media_xml=" (opcional)"
) Callbacks por Grupo
def on_group_msg(msg):
print(f"Grupo {msg['group_id']}: {msg.get('body')}")
groups.on_group_message("mi_grupo", on_group_msg) Eventos de Grupo
El SDK detecta automáticamente eventos como entrada/salida de miembros.
def on_message(msg):
if msg.get("is_group_event"):
event = msg.get("event")
if event == "joined":
print("Alguien se unió")
elif event == "left":
print("Alguien se fue")
elif event == "kicked":
print("Alguien fue expulsado")
client.listen_messages(client.token, on_message) Eventos disponibles (GroupEvent):
MEMBER_JOINEDMEMBER_LEFTMEMBER_KICKEDMEMBER_BANNEDSUBJECT_CHANGEDROOM_CREATEDROOM_DESTROYED