steam-user 0.1.0

Steam User web client for Rust - HTTP-based Steam Community interactions
Documentation
//! Mobile confirmations example for steam-user crate.
//!
//! This example demonstrates:
//! - Fetching pending confirmations
//! - Accepting/denying confirmations
//! - Accepting confirmation for a specific trade offer
//!
//! Run with: cargo run --example confirmations

use steam_user::{SteamUser, SteamUserError};
use tracing::info;

#[tokio::main]
async fn main() -> Result<(), SteamUserError> {
    tracing_subscriber::fmt::init();

    // Create a new SteamUser client with cookies from session login
    let community = SteamUser::new(&["steamLoginSecure=76561198012345678||YOUR_ACCESS_TOKEN", "sessionid=YOUR_SESSION_ID"])?;

    // Your identity secret from your mobile authenticator
    // This is a base64-encoded string from your maFile or equivalent
    let identity_secret = "YOUR_IDENTITY_SECRET_BASE64";

    // Fetch all pending confirmations
    info!("Fetching confirmations...");
    let confirmations = community.get_confirmations(identity_secret, None).await?;

    info!("Found {} confirmations:", confirmations.len());
    for conf in &confirmations {
        info!("\n=== Confirmation ===");
        info!("  ID: {}", conf.id);
        info!("  Key: {}", conf.key);
        info!("  Type: {:?}", conf.conf_type);
        info!("  Creator: {}", conf.creator);
        info!("  Title: {}", conf.title);
        info!("  Sending: {}", conf.sending);
        info!("  Receiving: {}", conf.receiving);

        if let Some(offer_id) = conf.offer_id() {
            info!("  Trade Offer ID: {}", offer_id);
        }
    }

    // Example: Accept all trade confirmations
    let trade_confirmations: Vec<_> = confirmations.iter().filter(|c| c.conf_type == steam_user::types::ConfirmationType::Trade).cloned().collect();

    if !trade_confirmations.is_empty() {
        info!("\nAccepting {} trade confirmations...", trade_confirmations.len());
        community.respond_to_confirmations(&trade_confirmations, identity_secret, true).await?;
        info!("Trade confirmations accepted!");
    }

    // Example: Accept a specific confirmation
    if let Some(first_conf) = confirmations.first() {
        info!("\nAccepting first confirmation...");
        community.respond_to_confirmation(first_conf, identity_secret, true).await?;
        info!("Confirmation accepted!");
    }

    // Example: Accept confirmation for a specific trade offer ID
    let trade_offer_id: u64 = 123456789; // Your trade offer ID
    info!("\nLooking for confirmation for trade offer {}...", trade_offer_id);
    match community.accept_confirmation_for_object(identity_secret, trade_offer_id).await {
        Ok(()) => info!("Trade offer confirmation accepted!"),
        Err(SteamUserError::ConfirmationNotFound(id)) => {
            info!("No confirmation found for object ID: {}", id);
        }
        Err(e) => return Err(e),
    }

    Ok(())
}