Skip to content

Chat Actions Namespace (client.chat_actions)

client.chat_actions manages chat state transitions and message-level actions (edit, revoke, react, star, archive, mute).

Why this namespace matters

Many WhatsApp state changes are synchronization events. If your client writes chat state, subscribe to related events so your local view stays consistent.

Builder Helpers

build_message_key(id, remote_jid, from_me, participant=None)

Build a canonical MessageKey used by advanced sync actions.

build_message_range(last_message_timestamp, last_system_message_timestamp, messages)

Build SyncActionMessageRange for operations that need explicit message windows.

Method Groups

  • archive_chat(jid, message_range=None)
  • unarchive_chat(jid, message_range=None)
  • pin_chat(jid)
  • unpin_chat(jid)
  • mute_chat(jid)
  • mute_chat_until(jid, mute_end_timestamp_ms)
  • unmute_chat(jid)
  • mark_chat_as_read(jid, read, message_range=None)
  • delete_chat(jid, delete_media, message_range=None)
  • star_message(chat_jid, participant_jid, message_id, from_me)
  • unstar_message(chat_jid, participant_jid, message_id, from_me)
  • delete_message_for_me(chat_jid, participant_jid, message_id, from_me, delete_media, message_timestamp=None)
  • edit_message(chat_jid, original_id, new_message)
  • revoke_message(chat_jid, message_id, original_sender=None)
  • react_message(chat_jid, message_id, reaction, from_me=False, participant_jid=None)

Runnable Example: Moderation Utility

from tryx.events import EvMessage


@app.on(EvMessage)
async def moderation_actions(client, event):
    text = (event.data.get_text() or "").strip()
    chat = event.data.message_info.source.chat

    if text == "/pin":
        await client.chat_actions.pin_chat(chat)
        await client.send_text(chat, "Chat pinned")
    elif text == "/unpin":
        await client.chat_actions.unpin_chat(chat)
        await client.send_text(chat, "Chat unpinned")

Runnable Example: React + Revoke Flow

async def resolve_ticket(client, chat_jid, msg_id):
    await client.chat_actions.react_message(chat_jid, msg_id, "✅")
    # Optional follow-up: revoke a stale client message
    await client.chat_actions.revoke_message(chat_jid, msg_id)

Operational Guidance

Idempotent wrappers

Wrap mutation methods in idempotent helpers in case your handler retries after transient errors.

Message identity

For group messages, include participant identity when needed. Wrong (message_id, participant) combinations may lead to no-op operations.