diff --git a/Cargo.lock b/Cargo.lock index a4c5001..661e6c6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -77,6 +77,12 @@ version = "3.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1" +[[package]] +name = "byteorder" +version = "1.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" + [[package]] name = "bytes" version = "1.4.0" @@ -85,9 +91,9 @@ checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" [[package]] name = "cc" -version = "1.0.81" +version = "1.0.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c6b2562119bf28c3439f7f02db99faf0aa1a8cdfe5772a2ee155d32227239f0" +checksum = "305fe645edc1442a0fa8b6726ba61d422798d37a52e12eaecf4b022ebbb88f01" dependencies = [ "libc", ] @@ -133,6 +139,28 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "discord-presence" +version = "0.5.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ea3a22248813947f5b5fb64fc667bff308b5fa840bfdbbf70fc9f53447805fd" +dependencies = [ + "byteorder", + "bytes", + "cfg-if", + "crossbeam-channel", + "named_pipe", + "num-derive", + "num-traits", + "parking_lot", + "serde", + "serde_json", + "strum", + "thiserror", + "tracing", + "uuid", +] + [[package]] name = "encoding_rs" version = "0.8.32" @@ -268,6 +296,17 @@ dependencies = [ "slab", ] +[[package]] +name = "getrandom" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + [[package]] name = "gimli" version = "0.27.3" @@ -299,6 +338,12 @@ version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + [[package]] name = "hermit-abi" version = "0.3.2" @@ -475,6 +520,16 @@ version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57bcfdad1b858c2db7c38303a6d2ad4dfaf5eb53dfeb0910128b2c26d6158503" +[[package]] +name = "lock_api" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16" +dependencies = [ + "autocfg", + "scopeguard", +] + [[package]] name = "log" version = "0.4.19" @@ -514,6 +569,15 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "named_pipe" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad9c443cce91fc3e12f017290db75dde490d685cdaaf508d7159d7cf41f0eb2b" +dependencies = [ + "winapi", +] + [[package]] name = "native-tls" version = "0.2.11" @@ -550,6 +614,26 @@ dependencies = [ "windows-sys 0.45.0", ] +[[package]] +name = "num-derive" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "num-traits" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2" +dependencies = [ + "autocfg", +] + [[package]] name = "num_cpus" version = "1.16.0" @@ -598,7 +682,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.28", ] [[package]] @@ -619,6 +703,29 @@ dependencies = [ "vcpkg", ] +[[package]] +name = "parking_lot" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-targets 0.48.1", +] + [[package]] name = "percent-encoding" version = "2.3.0" @@ -755,6 +862,12 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "rustversion" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" + [[package]] name = "ryu" version = "1.0.15" @@ -779,6 +892,12 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + [[package]] name = "security-framework" version = "2.9.2" @@ -804,22 +923,22 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.182" +version = "1.0.183" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdb30a74471f5b7a1fa299f40b4bf1be93af61116df95465b2b5fc419331e430" +checksum = "32ac8da02677876d532745a130fc9d8e6edfa81a269b107c5b00829b91d8eb3c" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.182" +version = "1.0.183" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f4c2c6ea4bc09b5c419012eafcdb0fcef1d9119d626c8f3a0708a5b92d38a70" +checksum = "aafe972d60b0b9bee71a91b92fee2d4fb3c9d7e8f6b179aa99f27203d99a4816" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.28", ] [[package]] @@ -854,6 +973,12 @@ dependencies = [ "autocfg", ] +[[package]] +name = "smallvec" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9" + [[package]] name = "socket2" version = "0.4.9" @@ -894,6 +1019,39 @@ dependencies = [ "sqlite3-src", ] +[[package]] +name = "strum" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f" +dependencies = [ + "strum_macros", +] + +[[package]] +name = "strum_macros" +version = "0.24.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "rustversion", + "syn 1.0.109", +] + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + [[package]] name = "syn" version = "2.0.28" @@ -907,9 +1065,9 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.7.0" +version = "3.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5486094ee78b2e5038a6382ed7645bc084dc2ec433426ca4c3cb61e2007b8998" +checksum = "dc02fddf48964c42031a0b3fe0428320ecf3a73c401040fc0096f97794310651" dependencies = [ "cfg-if", "fastrand", @@ -918,6 +1076,26 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "thiserror" +version = "1.0.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "611040a08a0439f8248d1990b111c95baa9c704c805fa1f62104b39655fd7f90" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "090198534930841fab3a5d1bb637cde49e339654e606195f8d9c76eeb081dc96" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.28", +] + [[package]] name = "tinyvec" version = "1.6.0" @@ -988,9 +1166,21 @@ checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" dependencies = [ "cfg-if", "pin-project-lite", + "tracing-attributes", "tracing-core", ] +[[package]] +name = "tracing-attributes" +version = "0.1.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.28", +] + [[package]] name = "tracing-core" version = "0.1.31" @@ -1038,6 +1228,15 @@ dependencies = [ "percent-encoding", ] +[[package]] +name = "uuid" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79daa5ed5740825c40b389c5e50312b9c86df53fccd33f281df655642b43869d" +dependencies = [ + "getrandom", +] + [[package]] name = "vcpkg" version = "0.2.15" @@ -1046,9 +1245,10 @@ checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" [[package]] name = "vrc-log" -version = "0.1.0" +version = "0.2.0" dependencies = [ "anyhow", + "discord-presence", "lazy_static", "notify", "regex", @@ -1104,7 +1304,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn", + "syn 2.0.28", "wasm-bindgen-shared", ] @@ -1138,7 +1338,7 @@ checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.28", "wasm-bindgen-backend", "wasm-bindgen-shared", ] diff --git a/Cargo.toml b/Cargo.toml index 7318655..c5024e5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "vrc-log" -version = "0.1.0" +version = "0.2.0" authors = ["Shayne Hartford "] edition = "2021" description = "VRChat Local Cache Avatar ID Logger" @@ -12,6 +12,7 @@ license = "MIT" [dependencies] anyhow = "1" +discord-presence = "0.5" lazy_static = "1" notify = { git = "https://github.com/notify-rs/notify.git", version = "6" } regex = "1" diff --git a/src/main.rs b/src/main.rs index 7bfc7ce..5a6fb65 100644 --- a/src/main.rs +++ b/src/main.rs @@ -24,18 +24,14 @@ fn main() -> anyhow::Result<()> { continue; }; - for avatar_id in avatar_ids { - if !cache.send_avatar_id(&avatar_id)? { - continue; - }; - - println!("vrcx://avatar/{avatar_id}"); - - for (name, provider) in &providers { - if provider.send_avatar_id(&avatar_id)? { - println!("^ Successfully Submitted to {name} ^"); - }; - } - } + avatar_ids + .iter() + .filter(|avatar_id| !cache.send_avatar_id(avatar_id).unwrap()) + .for_each(|avatar_id| { + println!("vrcx://avatar/{avatar_id}"); + let _ = providers + .iter() + .map(|(avatar_id, provider)| provider.send_avatar_id(avatar_id)); + }); } } diff --git a/src/provider/ravenwood.rs b/src/provider/ravenwood.rs index 12c9e00..b5c7f61 100644 --- a/src/provider/ravenwood.rs +++ b/src/provider/ravenwood.rs @@ -1,10 +1,19 @@ -use std::collections::HashMap; +use std::{ + collections::HashMap, + sync::{Arc, RwLock}, + time::Duration, +}; +use discord_presence::Client as DiscordRPC; use reqwest::blocking::Client; use serde::{Deserialize, Serialize}; +use serde_json::Value; use crate::provider::{Provider, USER_AGENT}; +const CLIENT_ID: u64 = 1137885877918502923; +const USER_ID: &str = "358558305997684739"; + #[derive(Deserialize, Serialize)] pub struct RavenwoodResponse { status: Status, @@ -16,9 +25,39 @@ pub struct Status { status: i64, } -#[derive(Default)] pub struct Ravenwood { client: Client, + discord_id: Arc>, +} + +impl Default for Ravenwood { + fn default() -> Self { + println!("[Ravenwood] Attempting to get your Discord ID using RPC"); + + let client = Client::new(); + let discord_id = Arc::new(RwLock::new(String::from(USER_ID))); + let discord_id_rpc = discord_id.clone(); + let mut discord_rpc = DiscordRPC::new(CLIENT_ID); + discord_rpc.on_error(|ctx| eprintln!("{ctx:#?}")); + discord_rpc.on_ready(move |ctx| { + if let Some(event) = ctx.event.as_object() { + if let Some(user) = event.get("user").and_then(Value::as_object) { + if let Some(id) = user.get("id").and_then(Value::as_str) { + *discord_id_rpc.write().unwrap() = id.to_owned(); + } + } + }; + }); + let _ = discord_rpc.start(); + std::thread::sleep(Duration::from_secs(15)); + + if *discord_id.read().unwrap() == USER_ID { + println!("[Ravenwood] Couldn't get your Discord ID, please make sure Discord is open"); + println!("[Ravenwood] Defaulting to the ID of the developer of this program, ShayBox"); + } + + Self { client, discord_id } + } } impl Provider for Ravenwood { @@ -29,7 +68,7 @@ impl Provider for Ravenwood { .header("User-Agent", USER_AGENT) .json(&HashMap::from([ ("id", avatar_id), - ("userid", "358558305997684739"), + ("userid", &self.discord_id.read().unwrap()), ])) .send()? .json::()?;