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.1.0.tar.gz (6.2 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.1.0-py3-none-any.whl (7.0 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for rolespace-0.1.0.tar.gz
Algorithm Hash digest
SHA256 386cf674799c6fe2e208d64a46f443fe32d1d723ae4963074e2bd58142872431
MD5 85c4fa6454f4c70850980d7e7a63e88b
BLAKE2b-256 68b204bbdcccaeea933aa3bea12bc7cc0a8ecfda3f404b8561f28464133e3b60

See more details on using hashes here.

File details

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

File metadata

  • Download URL: rolespace-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 7.0 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.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 331c2945ff692be1c8654a10568eac8820940842142512b3630e8174ca613cee
MD5 9bb09c1f08ce348a478158cc530a5188
BLAKE2b-256 fc2800abe75aa0ccd6fd17e6cfcad9750ee78a17810925b061c3ddcebb9355ad

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