Skip to main content

Official Rolespace bot SDK for Python

Project description

Rolespace Python SDK

Minimal client for the Rolespace bot API. Requires Python 3.8+ and requests.

Install

Drop rolespace.py into your project, or:

pip install rolespace

Quick start

from rolespace import Rolespace

# Reads ROLESPACE_BOT_TOKEN from your environment.
rs = Rolespace.from_env()

me = rs.me()
print(f"Logged in as {me['bot']['username']} (#{me['bot']['id']})")

# Send a message:
rs.send_message(server_id, channel_id, "Hello from my bot!")

# Listen for interactions (button clicks, modal submits, etc.):
for ix in rs.interactions():
    if ix["customId"] == "book":
        rs.respond(ix["id"], {"type": "message", "content": "Booked!", "ephemeral": True})

Webhook signature verification

from flask import Flask, request, abort
from rolespace import Rolespace
import os, json

app = Flask(__name__)
SECRET = os.environ["WEBHOOK_SECRET"]

@app.post("/webhook")
def webhook():
    raw = request.get_data()  # raw bytes — NOT request.json
    sig = request.headers.get("X-Rolespace-Signature", "")
    if not Rolespace.verify_webhook(raw, sig, SECRET):
        abort(401)
    event = json.loads(raw)
    # ...handle event...
    return ("", 204)

Important: use request.get_data()request.json re-serializes the body and the signature check will fail.

What this SDK does for you

  • Loads the token from ROLESPACE_BOT_TOKEN so you don't hardcode it
  • Retries 429s with exponential backoff (honors Retry-After)
  • Hides the bot token from repr(client)
  • Verifies webhook signatures with hmac.compare_digest (constant-time)
  • Generator over /interactions — no manual polling loop or cursor bookkeeping

API

Method What it does
rs.me() Bot account + owner + scopes
rs.servers() All servers the bot is in
rs.server(id) One server with its channels
rs.server_channels(id) / server_members(id) Lists
rs.send_message(server_id, channel_id, "text" or {...}) Post a message
rs.send_dm(recipient_id, "text" or {...}) Send a DM
for ix in rs.interactions(): Stream of interactions
rs.respond(id, reply) Reply to an interaction
rs.get/post/patch/put/delete(path, json=None) Raw HTTP for endpoints not covered above
Rolespace.verify_webhook(raw_body, sig_header, secret) Static; constant-time check

Project details


Download files

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

Source Distribution

rolespace-0.2.2.tar.gz (13.6 kB view details)

Uploaded Source

Built Distribution

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

rolespace-0.2.2-py3-none-any.whl (14.2 kB view details)

Uploaded Python 3

File details

Details for the file rolespace-0.2.2.tar.gz.

File metadata

  • Download URL: rolespace-0.2.2.tar.gz
  • Upload date:
  • Size: 13.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.5

File hashes

Hashes for rolespace-0.2.2.tar.gz
Algorithm Hash digest
SHA256 7aa659fcf1f248df4a40998472565c5e297c6021767e5ffc2290173fb10651b4
MD5 e742c1964c0651e673f22b2b10bd840c
BLAKE2b-256 0eb74a3488cc3da29b79df69cd74d8ba51143930336648ef26f4e537a2b7d945

See more details on using hashes here.

File details

Details for the file rolespace-0.2.2-py3-none-any.whl.

File metadata

  • Download URL: rolespace-0.2.2-py3-none-any.whl
  • Upload date:
  • Size: 14.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.5

File hashes

Hashes for rolespace-0.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 53bbc6aa014342375b1eb8d8d32123aef69132d77d35dc4c66cfb7c0b2b9ab91
MD5 b8e36818239282ee7ad8443879688ace
BLAKE2b-256 fb78a242b47c270c5e89adced56cbad0769a18ba8513fcef3e799639268f4833

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