Skip to main content

Async Python client for the Chaturbate Events API.

Project description

CB Events

Async Python client for the Chaturbate Events API.

PyPI Tag Python OpenSSF Best Practices Builds License

Installation

pip install cb-events

With uv (recommended):

uv add cb-events

Quick Start

import asyncio
from cb_events import EventClient, Router, EventType, Event

router = Router()

username = "your_username"
token = "your_api_token"

@router.on(EventType.TIP)
async def handle_tip(event: Event) -> None:
    if event.user and event.tip:
        print(f"{event.user.username} tipped {event.tip.tokens} tokens")

async def main():
    async with EventClient(username, token) as client:
        async for event in client:
            await router.dispatch(event)

asyncio.run(main())
mountaingod2 tipped 100 tokens

For usage examples, see the examples folder.

[!NOTE] Generate an API token at https://chaturbate.com/statsapi/authtoken/ with Events API scope.

Event Types

TIP · FANCLUB_JOIN · MEDIA_PURCHASE · CHAT_MESSAGE · PRIVATE_MESSAGE · USER_ENTER · USER_LEAVE · FOLLOW · UNFOLLOW · BROADCAST_START · BROADCAST_STOP · ROOM_SUBJECT_CHANGE

Configuration

from cb_events import ClientConfig

config = ClientConfig(
    timeout=10,                   # Server long-poll timeout (seconds)
    use_testbed=False,            # Use testbed endpoint with test tokens
    strict_validation=False,      # False skips & logs invalid events; True raises.
    retry_attempts=8,             # Total attempts (initial + retries)
    retry_backoff=1.0,            # Initial backoff (seconds)
    retry_factor=2.0,             # Backoff multiplier
    retry_max_delay=30.0,         # Max retry delay (seconds)
    next_url_allowed_hosts=None,  # None = API host only; tuple adds extra hosts
)

client = EventClient(username, token, config=config)

Rate Limiting

Default: 2000 requests/60s per client.

Shared limiter:

from aiolimiter import AsyncLimiter

limiter = AsyncLimiter(max_rate=2000, time_period=60)
client1 = EventClient(username1, token1, rate_limiter=limiter)
client2 = EventClient(username2, token2, rate_limiter=limiter)

Event Properties

event.user          # User object (most events)
event.tip           # Tip object (TIP only)
event.message       # Message object (CHAT_MESSAGE, PRIVATE_MESSAGE)
event.room_subject  # RoomSubject object (ROOM_SUBJECT_CHANGE)
event.broadcaster   # Broadcaster username string

Error Handling

AuthError is a subclass of EventsErrorexcept EventsError catches both. Put AuthError first if you need to distinguish them.

from cb_events import AuthError, EventsError

try:
    async with EventClient(username, token) as client:
        async for event in client:
            await router.dispatch(event)
except AuthError:
    # Authentication failed (401/403) — never retried
    pass
except EventsError as e:
    # All other API/network errors — check e.status_code, e.response_text
    pass

Retries: 429, 5xx, Cloudflare 521-524. Not retriable: 401/403.

Handlers: Sequential execution. Errors logged but don't stop processing.

Logging

Set the logger to DEBUG for verbose polling data:

import logging
logging.getLogger("cb_events").setLevel(logging.DEBUG)

Example output:

DEBUG:cb_events.client:Polling https://eventsapi.chaturbate.com/events/user/************************/?timeout=10
DEBUG:cb_events.client:Received 1 events for user
DEBUG:cb_events.router:Dispatching chatMessage event 1775683684418-0 to 2 handlers

Requirements

Python 3.10+

License

MIT


Not affiliated with Chaturbate.

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cb_events-7.1.0.tar.gz (262.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

cb_events-7.1.0-py3-none-any.whl (22.1 kB view details)

Uploaded Python 3

File details

Details for the file cb_events-7.1.0.tar.gz.

File metadata

  • Download URL: cb_events-7.1.0.tar.gz
  • Upload date:
  • Size: 262.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for cb_events-7.1.0.tar.gz
Algorithm Hash digest
SHA256 e4e0a4577ff976491a3037b13c15ba9bc487f3e25103cd4e8203601f63c4442e
MD5 3545605e54fc9bb9a83e03bfcda5daff
BLAKE2b-256 d07b57bf07999d20f519193e008e5f7a30c6e561bfcda99c7f0f216dd042a432

See more details on using hashes here.

Provenance

The following attestation bundles were made for cb_events-7.1.0.tar.gz:

Publisher: ci-cd.yml on MountainGod2/cb-events

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file cb_events-7.1.0-py3-none-any.whl.

File metadata

  • Download URL: cb_events-7.1.0-py3-none-any.whl
  • Upload date:
  • Size: 22.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for cb_events-7.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 0e9820c611315c6d23ce7d27b19566022480d40b1081b3aa1a6125a5dbe02aa7
MD5 c6d6139cb27a962c3a6f3f7c2db7c43a
BLAKE2b-256 5aed878a0e7360768b9326d0c6505fef4ed9f4582e62653893825f091434bd1e

See more details on using hashes here.

Provenance

The following attestation bundles were made for cb_events-7.1.0-py3-none-any.whl:

Publisher: ci-cd.yml on MountainGod2/cb-events

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page