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_JOINED
  • MEMBER_LEFT
  • MEMBER_KICKED
  • MEMBER_BANNED
  • SUBJECT_CHANGED
  • ROOM_CREATED
  • ROOM_DESTROYED