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.3.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.3-py3-none-any.whl (14.2 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: rolespace-0.2.3.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.3.tar.gz
Algorithm Hash digest
SHA256 5e59591fcffff4c704570ca8517152462337a90f79073715ce509e8032787230
MD5 d140b26d0a242867b63b051288c496e9
BLAKE2b-256 6bfb8fe3362aeec66616b6d851055ec1424b9783e2bd41d28181373816ec3d70

See more details on using hashes here.

File details

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

File metadata

  • Download URL: rolespace-0.2.3-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.3-py3-none-any.whl
Algorithm Hash digest
SHA256 ba9b486e9bac38e54a0d55c5fda9d40b41133466faef3b737e2624aaa218f718
MD5 ac66de9afaf611b0540b015b4852f664
BLAKE2b-256 85b67ec246c3044650ab84c6079e906e637d0d2ebe54471d4fd298dc4a6e25ea

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