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

Requirements

Python 3.10+

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.

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

Working with Events

Event Types

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

Event Object

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

See full docs for additional details.

Configuration

from cb_events import ClientConfig

config = ClientConfig(
    timeout=10,                   # Server long-poll timeout (seconds)
    use_testbed=False,            # Use testbed endpoint (https://www.testbed.cb.dev)
    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)
)

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

Testbed: Register at https://www.testbed.cb.dev. New accounts include preloaded tokens for testing. Generate an API token the same way as a live account, then pass use_testbed=True with those credentials.

Rate Limiting

Default: 2000 req/60s per client. Multiple clients each get an independent budget unless a shared limiter is passed:

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)

Error Handling

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

import logging
import sys

from cb_events import AuthError, EventsError

logger = logging.getLogger(__name__)

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
    logger.error("Invalid credentials — check username and token")
    sys.exit(1)
except EventsError as e:
    # All other API/network errors — check e.status_code, e.response_text
    logger.error("API error %s: %s", e.status_code, e.response_text)
    raise

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

Star History

Star History Chart

License

MIT


Not affiliated with Chaturbate.

Project details


Release history Release notifications | RSS feed

This version

8.0.8

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-8.0.8.tar.gz (223.2 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-8.0.8-py3-none-any.whl (23.3 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: cb_events-8.0.8.tar.gz
  • Upload date:
  • Size: 223.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.12

File hashes

Hashes for cb_events-8.0.8.tar.gz
Algorithm Hash digest
SHA256 116a41d9f5f5e152a3ca9196887e91659248bb6d77ffa6cb478953c1763d17cb
MD5 a8f22008a4c7ae029e7e53019f486822
BLAKE2b-256 4e6161894c0af9346617e100a73970fc7a2b58b342f7038731b4bdbdc9d15bb3

See more details on using hashes here.

File details

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

File metadata

  • Download URL: cb_events-8.0.8-py3-none-any.whl
  • Upload date:
  • Size: 23.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.12

File hashes

Hashes for cb_events-8.0.8-py3-none-any.whl
Algorithm Hash digest
SHA256 c3784d3caf425cf606b0cbe332ca72eddbdffc824c3d8f3897e74eecf7b6b179
MD5 aee01617991c8b0ca1fb904ff8296cb8
BLAKE2b-256 97ae13e7a5716079858b1458859596815586907083021512044f5b53720c6667

See more details on using hashes here.

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