Skip to content

Newsletter Namespace (client.newsletter)

client.newsletter manages newsletter/channel discovery, join/leave, messaging, reactions, and message history.

Method Matrix

Method Purpose
list_subscribed() List subscriptions
get_metadata(jid) Metadata by newsletter JID
get_metadata_by_invite(invite_code) Metadata via invite code
create(name, description=None) Create a newsletter
join(jid) / leave(jid) Membership lifecycle
update(jid, name=None, description=None) Edit metadata
subscribe_live_updates(jid) Enable live updates stream
send_message(jid, message) Publish message
send_reaction(jid, server_id, reaction) React to a message
get_messages(jid, count, before=None) Fetch history window

Runnable Example: Subscribe and Post

from tryx.helpers import NewsletterHelpers


async def post_update(client, invite_code: str, text: str):
    metadata = await client.newsletter.get_metadata_by_invite(invite_code)
    await client.newsletter.join(metadata.jid)

    message = NewsletterHelpers.build_text_message(text)
    server_message_id = await client.newsletter.send_message(metadata.jid, message)
    return metadata.name, server_message_id

Runnable Example: History Query Window

async def pull_recent(client, newsletter_jid, count=20):
    rows = await client.newsletter.get_messages(newsletter_jid, count)
    return [
        {
            "server_id": row.server_id,
            "type": row.message_type,
            "timestamp": row.timestamp,
        }
        for row in rows
    ]

Technical Guidance

  • Build protobuf messages using Helpers API when possible.
  • Keep content idempotent if handlers might retry.
  • Use before cursor for backfill pagination.
  • Treat message type variants as dynamic; not every row is plain text.

Live updates

Pair subscribe_live_updates with event handlers so your process can react to new newsletter activity without polling loops.