use clap::Parser;
use presenceforge::sync::DiscordIpcClient;
use presenceforge::{ActivityBuilder, Result};
use std::time::Duration;
#[derive(Parser, Debug)]
#[command(author, version, about, long_about = None)]
struct Args {
#[arg(short, long)]
client_id: Option<String>,
}
fn main() -> Result {
let _ = dotenvy::dotenv();
let args = Args::parse();
let client_id = args
.client_id
.or_else(|| std::env::var("DISCORD_CLIENT_ID").ok())
.unwrap_or_else(|| {
eprintln!("Error: DISCORD_CLIENT_ID is required!");
eprintln!("Provide it via:");
eprintln!(" - Command line: cargo run --example coding_status -- --client-id YOUR_ID");
eprintln!(
" - Environment: DISCORD_CLIENT_ID=YOUR_ID cargo run --example coding_status"
);
eprintln!(" - .env file: Create .env from .env.example and set DISCORD_CLIENT_ID");
std::process::exit(1);
});
let mut client = DiscordIpcClient::new(client_id)?;
println!(" Starting Discord Rich Presence for Codings");
client.connect()?;
let activity = ActivityBuilder::new()
.state("Writing Rust code")
.details("Building Discord RPC library")
.start_timestamp_now()?
.large_image("rust_logo") .large_text("Rust Programming")
.small_image("vscode") .small_text("VS Code")
.button(
"View on GitHub",
"https://github.com/your-username/presenceforge",
)
.button(" Rust Docs", "https://doc.rust-lang.org")
.build();
client.set_activity(&activity)?;
println!(" Coding status set! Others can see you're programming in Rust.");
println!(" Keeping status for 30 seconds...");
std::thread::sleep(Duration::from_secs(30));
let debugging_activity = ActivityBuilder::new()
.state("Debugging")
.details("Fixing async issues")
.start_timestamp_now()?
.large_image("rust_logo")
.large_text("Rust Programming")
.small_image("debug_icon")
.small_text("Debugging Mode")
.button(
" View on GitHub",
"https://github.com/your-username/presenceforge",
)
.build();
client.set_activity(&debugging_activity)?;
println!(" Updated to debugging status!");
std::thread::sleep(Duration::from_secs(15));
client.clear_activity()?;
println!(" Cleared coding status!");
Ok(())
}