1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
//! # blivemsg - Bilibili Live Message Library
//!
//! 一个轻量高效的异步B站直播消息客户端,支持 52+ B站直播消息类型。
//!
//! ## 快速开始
//!
//! ### Stream 模式(推荐)
//!
//! ```no_run
//! use blivemsg::{BliveClient, types::Message};
//! 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.action ,g.gift_name, g.num),
//! _ => {}
//! }
//! }
//! Ok(())
//! }
//! ```
//!
//! ### 回调模式
//!
//! ```no_run
//! use blivemsg::BliveClient;
//!
//! #[tokio::main]
//! async fn main() -> Result<(), blivemsg::Error> {
//! let mut client = BliveClient::from_cookie_string(7734200, "SESSDATA=xxx;buvid3=yyy".to_string())?;
//!
//! client.on_danmu(|danmu| {
//! println!("[{}] {}: {}", danmu.medal_level, danmu.username, danmu.content);
//! }).await?;
//!
//! Ok(())
//! }
//! ```
//!
//! ## 架构说明
//!
//! - **[BliveClient]**: 核心客户端,负责建立和管理WebSocket连接
//! - **[types::Message]**: 消息枚举,包含所有52+种消息类型
//! - **[Error]**: 统一错误类型
//!
//! ## 更多资源
//!
//! - **[GitHub](https://github.com/urlynn/blivemsg)** - 源码仓库、Issue 反馈
//! - **[完整消息列表](https://github.com/urlynn/blivemsg/blob/main/MESSAGES.md)** - 52+种消息详细说明
// ============================================================================
// 公共 API 导出
// ============================================================================
/// 核心客户端
pub use BliveClient;
// 消息类型定义
/// 错误类型
pub use Error;