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

vtubestudio

A library for interacting with the VTube Studio API

14 releases (8 breaking)

0.9.0 Jun 13, 2024
0.8.0 Oct 29, 2022
0.7.0 Sep 19, 2022
0.6.1 Jun 18, 2022
0.4.0 Nov 21, 2021

#70 in WebSocket

Download history 7/week @ 2024-09-18 44/week @ 2024-09-25 4/week @ 2024-10-02 10/week @ 2024-12-04 56/week @ 2024-12-11

66 downloads per month
Used in vtubestudio-cli

MIT license

220KB
4K SLoC

vtubestudio-rs

crates.io docs.rs MIT licensed

A library for interacting with the VTube Studio API.

Basic usage

The example below creates a Client using the provided builder, which:

  • connects to ws://localhost:8001 using tokio_tungstenite
  • authenticates with an existing token (if present and valid)
  • reconnects when disconnected, and retries the failed request on reconnection success
  • requests a new auth token on receiving an auth error, and retries the initial failed request on authentication success
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(())
}

For more details, please check the documentation on docs.rs.

Dependencies

~5–12MB
~134K SLoC