Readme in different languages: EN ยท RU
maxoxide
๐ฆ An async Rust library for building bots on the Max messenger platform, inspired by teloxide.
Features
- โ Full coverage of the Max Bot REST API
- โ Long polling (dev & test) and Webhook via axum (production)
- โ
Strongly-typed events (
Update,Message,Callback, โฆ) - โ
Dispatcherwith fluent handler registration and filters - โ
Inline keyboards (all button types:
callback,link,message,request_contact,request_geo_location) - โ File uploads โ multipart, correct token flow for video/audio
- โ Markdown / HTML message formatting
- โ
Webhook secret verification (
X-Max-Bot-Api-Secret) - โ Tokio async throughout
Quick start
[]
= "0.1"
= { = "1", = ["full"] }
# For webhook support (production):
# maxoxide = { version = "0.1", features = ["webhook"] }
use ;
use Update;
async
MAX_BOT_TOKEN=your_token
API methods
| Method | Description |
|---|---|
bot.get_me() |
Bot info |
bot.send_text(chat_id, text) |
Send plain text |
bot.send_markdown(chat_id, text) |
Send Markdown |
bot.send_message(chat_id, body) |
Send message with attachments / keyboard |
bot.edit_message(mid, body) |
Edit a message |
bot.delete_message(mid) |
Delete a message |
bot.answer_callback(body) |
Answer an inline button press |
bot.get_chat(chat_id) |
Chat info |
bot.get_chats(โฆ) |
List all group chats |
bot.edit_chat(chat_id, body) |
Edit chat title / description |
bot.leave_chat(chat_id) |
Leave a chat |
bot.get_members(โฆ) |
List members |
bot.add_members(โฆ) |
Add members |
bot.remove_member(โฆ) |
Remove a member |
bot.get_admins(chat_id) |
List admins |
bot.pin_message(โฆ) |
Pin a message |
bot.unpin_message(โฆ) |
Unpin |
bot.send_action(chat_id, "typing") |
Typing indicator |
bot.subscribe(body) |
Register a webhook |
bot.get_upload_url(type) |
Get upload URL |
bot.upload_file(type, path, name, mime) |
Full two-step file upload |
bot.upload_bytes(type, bytes, name, mime) |
Same, from bytes |
bot.set_my_commands(commands) |
Set bot commands |
Dispatcher filters
dp.on_command; // specific command
dp.on_message; // any new message
dp.on_edited_message; // edited message
dp.on_callback; // any callback button
dp.on_callback_payload; // specific payload
dp.on_bot_started; // user starts bot
dp.on_filter; // custom predicate
dp.on; // every update
First matching handler wins. Register more specific filters before general ones.
Inline keyboard
use ;
let keyboard = KeyboardPayload ;
let body = text.with_keyboard;
bot.send_message.await?;
File upload
Max uses a two-step upload flow. upload_file / upload_bytes handle it automatically:
use ;
let token = bot
.upload_file
.await?;
let body = NewMessageBody ;
bot.send_message.await?;
Note:
type=photowas removed from the Max API. Always useUploadType::Image.
Webhook server (features = ["webhook"])
use WebhookServer;
use SubscribeBody;
bot.subscribe.await?;
new
.secret
.path
.serve
.await;
Max requires HTTPS on port 443 and does not support self-signed certificates.
Project layout
maxoxide/
โโโ Cargo.toml
โโโ src/
โ โโโ lib.rs โ public API & re-exports
โ โโโ bot.rs โ Bot + all HTTP methods
โ โโโ uploader.rs โ two-step file upload helpers
โ โโโ dispatcher.rs โ Dispatcher, Filter, Context
โ โโโ errors.rs โ MaxError
โ โโโ webhook.rs โ axum webhook server (feature = "webhook")
โ โโโ tests.rs โ unit tests
โ โโโ types/
โ โโโ mod.rs โ all types (User, Chat, Message, Update, โฆ)
โโโ examples/
โโโ echo_bot.rs
โโโ keyboard_bot.rs
โโโ webhook_bot.rs (feature = "webhook")
Running tests