blivemsg

Bilibili Live Message Library - 轻量高效的B站直播消息 Rust 库
🚀 快速开始
基础示例
Stream 模式(推荐)
use blivemsg::BliveClient;
use futures_util::StreamExt;
#[tokio::main]
async fn main() -> Result<(), blivemsg::Error> {
let mut client = BliveClient::new(7734200, "cookies.json")?;
let mut stream = client.stream().await?;
while let Some(message) = stream.next().await {
match message {
Message::Danmu(d) => println!("[{}] {}: {}", d.medal_level, d.username, d.content),
Message::Gift(g) => println!("{} 送了 {} x{}", g.username, g.gift_name, g.num),
Message::SuperChat(sc) => println!("[SC] ¥{:.2}", sc.price),
_ => {}
}
}
Ok(())
}
✨ 核心特性
- 52+ 消息类型 - 完整支持弹幕、礼物、SC、舰长等所有消息
- 模块化设计 - 通过 Cargo features 按需启用功能,保持最小依赖
- HTTP 后端可选 - 支持 reqwest(轻量)和 wreq(浏览器指纹模拟)两种后端切换
- 零拷贝解析 - 高效的 JSON 解析,最小化内存分配
📖 文档
🔧 高级用法
使用回调模式
use blivemsg::BliveClient;
#[tokio::main]
async fn main() -> Result<(), blivemsg::Error> {
let mut client = BliveClient::new(7734200, "cookies.json")?;
client.on_danmu(|danmu| {
println!("[{}] {}: {}", danmu.medal_level, danmu.username, danmu.content);
}).await?;
Ok(())
}
便捷方法
use blivemsg::BliveClient;
#[tokio::main]
async fn main() -> Result<(), blivemsg::Error> {
let mut client = BliveClient::new(7734200, "cookies.json")?;
client.on_gift(|gift| {
println!("{} 送了 {} x{}", gift.username, gift.gift_name, gift.num);
}).await?;
Ok(())
}
📦 Cookie 配置
Cookie 必须包含以下两个字段:
支持三种输入格式:
- JSON 对象:
{"SESSDATA":"xxx","buvid3":"yyy"}
- 内联字符串:
"SESSDATA=xxx;buvid3=yyy"
- JSON 文件路径
🛠️ Features
- default: 最小依赖,仅库功能(使用 http-reqwest)
- cli: 启用 CLI 工具(需要 clap、toml)
- protobuf-support: 启用 Protobuf 消息支持
- http-reqwest: 使用 reqwest HTTP 后端(默认,纯 Rust)
- http-wreq: 使用 wreq HTTP 后端(浏览器指纹模拟)
注意: http-wreq 和 http-reqwest 只能选择一个。
📄 许可证
MIT
🔗 相关链接