Python SDK for building Tavern bots
Project description
taverns.py
Python SDK for building Tavern bots on the Taverns platform.
Installation
pip install taverns.py
# or from source:
pip install -e .
Requires Python 3.10+.
Quick Start
import os
from taverns import Client, Intents
client = Client(intents=Intents.MESSAGES | Intents.MESSAGE_CONTENT)
@client.event
async def on_ready():
print(f"Logged in as {client.user.display_name}")
@client.event
async def on_message_create(message):
if message.sender_id == client.user.id:
return
if message.content == "!ping":
await client.send_message(message.tavern_id, message.channel_id, content="Pong!")
client.run(os.environ["BOT_TOKEN"])
Slash Commands
from taverns import Client, Intents, Interaction
from taverns.commands import command, option
from taverns.types import CommandOptionType
client = Client(intents=Intents.MESSAGES | Intents.INTERACTIONS)
@client.event
async def on_ready():
await client.register_commands([
command("ping", "Check latency"),
command("greet", "Greet someone", options=[
option("name", "Who to greet", CommandOptionType.STRING, required=True),
]),
])
@client.event
async def on_interaction_create(interaction: Interaction):
if interaction.command_name == "ping":
await interaction.reply("Pong!")
elif interaction.command_name == "greet":
name = interaction.get_option("name", "World")
await interaction.reply(f"Hello, {name}!")
client.run(os.environ["BOT_TOKEN"])
Deferred Responses
@client.event
async def on_interaction_create(interaction: Interaction):
if interaction.command_name == "slow":
await interaction.defer_reply() # Shows "thinking..." to the user
result = await do_slow_work()
await interaction.follow_up(f"Done: {result}")
Ephemeral Responses
await interaction.reply("Only you can see this", ephemeral=True)
Webhook Verification
from taverns import verify_webhook_signature
is_valid = verify_webhook_signature(
raw_body=request.data,
signature=request.headers["X-Tavern-Signature"],
secret=WEBHOOK_SECRET,
timestamp=request.headers.get("X-Tavern-Timestamp"),
)
Intents
Control which events your bot receives:
from taverns import Intents
# Specific intents
client = Client(intents=Intents.MESSAGES | Intents.INTERACTIONS)
# All non-privileged intents
client = Client(intents=Intents.DEFAULT)
# All intents (including privileged)
client = Client(intents=Intents.ALL)
Privileged intents (MESSAGE_CONTENT, MEMBERS) are self-serve for private bots.
REST Client
For direct API access:
# Available after login
channels = await client.rest.get_channels(tavern_id)
members = await client.rest.get_members(tavern_id)
messages = await client.rest.get_messages(tavern_id, channel_id, limit=50)
Links
- PyPI package
- API Documentation
- Developer Portal
- taverns.js (Node.js SDK)
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
taverns_py-0.2.0.tar.gz
(20.3 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
File details
Details for the file taverns_py-0.2.0.tar.gz.
File metadata
- Download URL: taverns_py-0.2.0.tar.gz
- Upload date:
- Size: 20.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
aec49852d099a7296d7bd72d4488839c554c9ea2ccd30a0d0ab1634773fe0c31
|
|
| MD5 |
5d6e66847dee9929c7e7210befd12c3d
|
|
| BLAKE2b-256 |
dee340dea1d719ac4b528e53156118f1d5b4820b2dcbcab4a9feb6a9f9fe7f49
|
File details
Details for the file taverns_py-0.2.0-py3-none-any.whl.
File metadata
- Download URL: taverns_py-0.2.0-py3-none-any.whl
- Upload date:
- Size: 23.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c448bf4dc00ef817af4e9db52246768fd7075195df4bf14f998dc60a7aef9e90
|
|
| MD5 |
eaa6432ded34f89bf7bae09b179fb4a1
|
|
| BLAKE2b-256 |
a72215a00179eeca13a37ea22bc0afc35e2aff269a68b4ab889ad1c2e187df67
|