Official Python SDK for KarboAI Bot API
Project description
karbo
Official Python SDK for the KarboAI Bot API.
Installation
pip install -U karbo
Quick Start
import asyncio
import karbo
BOT_TOKEN = "your-bot-token"
async def main():
bot = karbo.KarboBot(BOT_TOKEN)
ws = karbo.KarboBotWS(BOT_TOKEN)
me = await bot.get_me()
print(f"Bot: {me.name} ({me.bot_id})")
@ws.on_message
async def on_message(message: karbo.Message):
if message.user_id == me.bot_id:
return
await bot.send_message(message.chat_id, f"Echo: {message.content}")
await ws.run_forever()
asyncio.run(main())
API Reference
KarboBot(token, *, base_url="https://api.karboai.com")
Async HTTP client. Use as a context manager or call .close() when done.
| Method | Description |
|---|---|
get_me() |
Get bot info (BotInfo) |
send_message(chat_id, content, *, reply_to=None, images=None, buttons=None) |
Send a message with optional images and inline buttons (SentMessage) |
upload_image(file_path) |
Upload a local image, returns its URL (str) |
get_message(chat_id, message_id) |
Get a specific message (Message) |
get_chat_members(chat_id, *, limit=100, offset=0, community_id=None) |
List chat members (list[Member]) |
get_user(user_id) |
Get user profile (User) |
get_user_in_community(user_id, community_id) |
Get user profile in a community (User) |
leave_chat(chat_id) |
Leave a chat |
kick_user(chat_id, user_id) |
Kick a user (requires helper role) |
Sending images
url = await bot.upload_image("photo.jpg")
await bot.send_message(chat_id, "Check this out!", images=[url])
# Send multiple images (up to 10 per message)
urls = [await bot.upload_image(p) for p in ["a.png", "b.png"]]
await bot.send_message(chat_id, "", images=urls)
Inline buttons (new in 0.5.0)
Inline buttons are attached to a message as a List[List[Button]] —
the outer list is rows, the inner list is columns within a row. Server
limits: up to 10 rows, 5 buttons per row, 30 buttons total.
import karbo as k
await bot.send_message(
chat_id,
"Confirm payment?",
buttons=[
[
k.Button(
"pay", "Pay",
style=k.ButtonStyle(color="#22C55E", shape="capsule"),
animations=[k.Pulse(speed_ms=900)],
particles=k.SparkParticles(color="#FFD54F"),
),
k.Button(
"cancel", "Cancel",
style=k.ButtonStyle(color="#1F2937", shape="capsule"),
),
],
],
)
@ws.on_button_pressed
async def on_press(press: k.ButtonPress):
if press.button_id == "pay":
await bot.send_message(press.chat_id, "Paid!", reply_to=press.message_id)
Styles
ButtonStyle(color, text_color, gradient, shape, corner_radius) — base
appearance. shape is one of "rectangle" / "circle" / "capsule".
Add a Gradient(start, end, direction) for a two-stop fill.
direction is one of "horizontal", "vertical", "diagonal",
"radial".
Interactions
TapInteraction()(default) — single tap fires the press event.SwipeInteraction(text, fill_color)— drag left-to-right to confirm. The button fills withfill_colorand showstextmid-swipe.LongPress(label)— add a separate long-press action with its own label. Tap and long-press both callon_button_pressed; theinteractionfield tells you which one fired.
Animations
Up to 4 animations per button, no duplicates of the same kind:
Pulse(speed_ms)— soft scale up-down.Neon(color, blur)— coloured glow around the button.Laser(color, dot_size_px, speed_ms)— a glowing dot runs the perimeter.Glitch(intensity_px, frequency_ms)— periodic RGB-shift jitter.Outline(color, thickness_px, corner_radius)— static border.
Particles
Tap-burst effect. Pick one type per button:
SparkParticles, ConfettiParticles, HeartParticles,
PixelParticles, SmokeParticles — each takes color and
intensity (1..5).
KarboBotWS(token, *, ws_url="https://api.karboai.com")
WebSocket client for real-time events.
ws = karbo.KarboBotWS(BOT_TOKEN)
@ws.on_message
async def handler(message: karbo.Message):
...
@ws.on_button_pressed
async def pressed(press: karbo.ButtonPress):
...
@ws.on_connect
async def connected():
...
@ws.on_disconnect
async def disconnected():
...
await ws.run_forever()
Models
BotInfo—bot_id,name,statusMessage—message_id,chat_id,user_id,content,created_time,type,reply_message_id,author,imagesSentMessage—message_id,created_timeUser—user_id,nickname,avatar,short_info,role,app_role,panel_color,level,nickname_color,nickname_emoji,avatar_frame,bubble_idMember—user_id,nickname,avatar,role,app_role,panel_color,level,nickname_color,nickname_emoji,avatar_frame,member_status,is_api_botAuthor—user_id,nickname,avatar,role,app_role,panel_color,level,nickname_color,nickname_emoji,avatar_frameAvatarFrame—frame_id,fileMessageReaction—reaction,is_sticker,count,meButtonPress—chat_id,message_id,button_id,user_id,community_id,interaction
Exceptions
All inherit from karbo.KarboError:
AuthenticationError— invalid token (401)ForbiddenError— no permission (403)NotFoundError— resource not found (404)ValidationError— bad request (400, also returned for invalidinline_buttonspayloads)RateLimitError— too many requests (429), has.retry_afterAPIError— other HTTP errors, has.statusand.body
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
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 karbo-0.5.0.tar.gz.
File metadata
- Download URL: karbo-0.5.0.tar.gz
- Upload date:
- Size: 20.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ce4456222c47300bde127198f210d978a51f4bf963e98075811b10c50665d301
|
|
| MD5 |
9f8e005d4bc148a36b78523b65c86961
|
|
| BLAKE2b-256 |
94452c8d207d1a247455fd3cc0b945b7d8746554ad16835f49e1e1ca30092813
|
File details
Details for the file karbo-0.5.0-py3-none-any.whl.
File metadata
- Download URL: karbo-0.5.0-py3-none-any.whl
- Upload date:
- Size: 14.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
84a8d7942b20da75e27837a65e1b0960334b7d772c335aa653344b5ef926682e
|
|
| MD5 |
d85cdd9134a13db407dd2fbca7f7515e
|
|
| BLAKE2b-256 |
c560695c3e481c43428f05bdb482f8dc956c4464a23d9cf6f9ef0f0dfa722caa
|