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_TOKENso 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)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
rolespace-0.2.2-py3-none-any.whl
(14.2 kB
view details)
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7aa659fcf1f248df4a40998472565c5e297c6021767e5ffc2290173fb10651b4
|
|
| MD5 |
e742c1964c0651e673f22b2b10bd840c
|
|
| BLAKE2b-256 |
0eb74a3488cc3da29b79df69cd74d8ba51143930336648ef26f4e537a2b7d945
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
53bbc6aa014342375b1eb8d8d32123aef69132d77d35dc4c66cfb7c0b2b9ab91
|
|
| MD5 |
b8e36818239282ee7ad8443879688ace
|
|
| BLAKE2b-256 |
fb78a242b47c270c5e89adced56cbad0769a18ba8513fcef3e799639268f4833
|