#studio #api #auth-token #request #events #v-tube

vtubestudio

与VTube Studio API交互的库

14个版本 (8个破坏性更新)

0.9.0 2024年6月13日
0.8.0 2022年10月29日
0.7.0 2022年9月19日
0.6.1 2022年6月18日
0.4.0 2021年11月21日

#169 in 认证


用于 vtubestudio-cli

MIT 协议

220KB
4K SLoC

vtubestudio-rs

crates.io docs.rs MIT licensed

VTube Studio API交互的库。

基本用法

以下示例使用提供的构建器创建一个Client,它使用tokio_tungstenite

  • 连接到ws://localhost:8001
  • 使用现有令牌进行认证(如果存在且有效)
  • 断开连接时重新连接,并在重新连接成功时重试失败的请求
  • 收到认证错误时请求新的认证令牌,并在认证成功时重试初始失败的请求
use vtubestudio::data::StatisticsRequest;
use vtubestudio::{Client, ClientEvent, Error};

#[tokio::main]
async fn main() -> Result<(), Error> {
    // An auth token from a previous successful authentication request
    let stored_token = Some("...".to_string());

    let (mut client, mut events) = Client::builder()
        .auth_token(stored_token)
        .authentication("Plugin name", "Developer name", None)
        .build_tungstenite();

    tokio::spawn(async move {
        while let Some(event) = events.next().await {
            match event {
                ClientEvent::NewAuthToken(new_token) => {
                    // This returns whenever the authentication middleware receives a new auth
                    // token. We can handle it by saving it somewhere, etc.
                    println!("Got new auth token: {new_token}");
                }
                _ => {
                    // Other events, such as connections/disconnections, API events, etc
                    println!("Got event: {:?}", event);
                }
            }
        }
    });

    // Use the client to send a `StatisticsRequest`, handling authentication if necessary.
    // The return type is inferred from the input type to be `StatisticsResponse`.
    let resp = client.send(&StatisticsRequest {}).await?;
    println!("VTube Studio has been running for {}ms", resp.uptime);

    Ok(())
}

有关更多详细信息,请参阅docs.rs上的文档

依赖关系

~5.5–8MB
~136K SLoC