| Crates.io | seria |
| lib.rs | seria |
| version | 0.0.2-dev.2 |
| created_at | 2025-06-16 15:22:31.79035+00 |
| updated_at | 2025-06-24 10:42:46.953369+00 |
| description | A lightweight Revolt client library built for the Rust ecosystem. |
| homepage | |
| repository | https://github.com/reinacchi/seria |
| max_upload_size | |
| id | 1714425 |
| size | 114,539 |

Seria is a Rust-based library for interacting with Revolt.
Seria supports a MSRV of Rust 1.76 or later.
# Add crate to your Cargo.toml
[dependencies]
seria = "*"
tokio = { version = "*", features = ["macros", "rt-multi-thread"] }
use seria::{
client::SeriaClientBuilder,
http::HttpClient,
models::{GatewayEvent, MessageSend},
SeriaResult,
StreamExt,
};
use std::{pin::pin, sync::Arc};
use tracing::{error, warn};
async fn handle_event(event: GatewayEvent, http: Arc<HttpClient>) {
match event {
GatewayEvent::Ready => {
if let Ok(user) = http.get_self().await {
println!("{}#{} is Ready!", user.username, user.discriminator);
}
}
GatewayEvent::Message(message) => {
let content = message.content.to_string();
if content == "!ping" {
let payload = MessageSend {
content: "Pong!".to_string(),
..Default::default()
};
if let Err(e) = http.send_message(&message.channel, payload).await {
error!("Failed to send message: {}", e);
}
}
}
_ => {}
}
}
#[tokio::main]
async fn main() -> SeriaResult<()> {
let token = "REVOLT_TOKEN".to_string();
let mut client = SeriaClientBuilder::new().token(&token).build()?;
let http = Arc::new(client.http.clone());
client.connect().await?;
let mut event_stream = pin!(client.gateway);
while let Some(item) = event_stream.next().await {
let Ok(event) = item else {
warn!(error = ?item.unwrap_err(), "Failed to receive event");
continue;
};
tokio::spawn(handle_event(event, Arc::clone(&http)));
}
Ok(())
}
Please refer to the LICENSE file.