From f4948f319ef785d63b49bc047b96604bafd651f1 Mon Sep 17 00:00:00 2001 From: syui Date: Fri, 8 Nov 2024 19:44:17 +0900 Subject: [PATCH] add card --- src/main.rs | 72 ++++++++++++++++++++++++++++++++++++++++++++++++ src/post_card.rs | 46 +++++++++++++++++++++++++++++++ 2 files changed, 118 insertions(+) create mode 100644 src/post_card.rs diff --git a/src/main.rs b/src/main.rs index 7ccf663..f305f1d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -30,6 +30,7 @@ pub mod notify_read; pub mod openai; pub mod post; pub mod post_link; +pub mod post_card; pub mod profile; pub mod refresh; pub mod reply; @@ -154,6 +155,35 @@ fn main() { .alias("c"), ) ) + .command( + Command::new("card") + .description("-v -i -p -r -c -a ") + .action(card) + .flag( + Flag::new("id", FlagType::Int) + .alias("i"), + ) + .flag( + Flag::new("cp", FlagType::Int) + .alias("p"), + ) + .flag( + Flag::new("rank", FlagType::Int) + .alias("r"), + ) + .flag( + Flag::new("col", FlagType::String) + .alias("c"), + ) + .flag( + Flag::new("author", FlagType::String) + .alias("a"), + ) + .flag( + Flag::new("verify", FlagType::String) + .alias("v"), + ) + ) .command( Command::new("like") .description("like -u ") @@ -474,6 +504,48 @@ fn like(c: &Context) { return res; } +//fn card(c: &Context) { +// refresh(c); +// let m = c.args[0].to_string(); +// let h = async { +// let author = c.string_flag("author").unwrap_or_else(|_| "syui".to_string()); +// let verify = c.string_flag("verify").unwrap_or_else(|_| "at://did:plc:4hqjfn7m6n5hno3doamuhgef/app.bsky.feed.post/3lafcod6drd2c".to_string()); +// let col = c.string_flag("col").unwrap_or_else(|_| "ai.syui.card".to_string()); +// let id = c.int_flag("id")?.try_into()?; +// let cp = c.int_flag("cp")?.try_into()?; +// let rank = c.int_flag("rank")?.try_into()?; +// let str = post_card::post_request(m, id, cp, rank, col, author); +// println!("{}", str.await); +// }; +// let res = tokio::runtime::Runtime::new().unwrap().block_on(h); +// return res; +//} + +async fn c_card(c: &Context) -> Result<(), Box> { + //let m = c.args[0].to_string(); + let author = c.string_flag("author").unwrap_or_else(|_| "syui".to_string()); + let verify = c.string_flag("verify").unwrap_or_else(|_| "at://did:plc:4hqjfn7m6n5hno3doamuhgef/app.bsky.feed.post/3lafcod6drd2c".to_string()); + let col = c.string_flag("col").unwrap_or_else(|_| "ai.syui.card".to_string()); + let rare = c.string_flag("rare").unwrap_or_else(|_| "normal".to_string()); + let id = c.int_flag("id")?.try_into()?; + let cp = c.int_flag("cp")?.try_into()?; + let rank = c.int_flag("rank")?.try_into()?; + let str = post_card::post_request(verify, id, cp, rank, rare, col, author); + println!("{}", str.await); + Ok(()) +} + +fn card(c: &Context) { + refresh(c); + tokio::runtime::Runtime::new() + .unwrap() + .block_on(async { + if let Err(e) = c_card(c).await { + eprintln!("Error: {}", e); + } + }); +} + fn repost(c: &Context) { refresh(c); let m = c.args[0].to_string(); diff --git a/src/post_card.rs b/src/post_card.rs new file mode 100644 index 0000000..09c3efa --- /dev/null +++ b/src/post_card.rs @@ -0,0 +1,46 @@ +extern crate reqwest; +use crate::data_toml; +use crate::data_refresh; +use crate::url; +use iso8601_timestamp::Timestamp; +use serde_json::json; + +pub async fn post_request(verify: String, id: i32, cp: i32, rank: i32, rare: String, col: String, author: String) -> String { + let token = data_refresh(&"access"); + let did = data_toml(&"did"); + let handle = data_toml(&"handle"); + + let url = url(&"record_create"); + + let d = Timestamp::now_utc(); + let d = d.to_string(); + + let post = Some(json!({ + "repo": handle.to_string(), + "did": did.to_string(), + "collection": col.to_string(), + "record": { + "id": id, + "cp": cp, + "rank": rank, + "rare": rare.to_string(), + "author": author.to_string(), + "verify": verify.to_string(), + "createdAt": d.to_string(), + }, + })); + + let client = reqwest::Client::new(); + let res = client + .post(url) + .json(&post) + .header("Authorization", "Bearer ".to_owned() + &token) + .send() + .await + .unwrap() + .text() + .await + .unwrap(); + + return res; +}