add card
This commit is contained in:
		 Submodule .config/ai/scpt updated: 9cbca76fc7...03a64c3652
									
								
							
							
								
								
									
										10
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								README.md
									
									
									
									
									
								
							@@ -107,3 +107,13 @@ ADMIN=syui.syu.is
 | 
			
		||||
$ docker compose build
 | 
			
		||||
$ docker compose up -d
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## pds
 | 
			
		||||
 | 
			
		||||
- https://atproto.com/ja/guides/lexicon
 | 
			
		||||
- https://at.syu.is/at/did:plc:uqzpqmrjnptsxezjx4xuh2mn/ai.syui.card/3lagpwihqxi2v
 | 
			
		||||
 | 
			
		||||
```sh
 | 
			
		||||
# oauth(button)
 | 
			
		||||
[yui]ai.syui.card.verify -> [user]ai.syui.card
 | 
			
		||||
```
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										120
									
								
								src/main.rs
									
									
									
									
									
								
							
							
						
						
									
										120
									
								
								src/main.rs
									
									
									
									
									
								
							@@ -30,6 +30,8 @@ pub mod notify_read;
 | 
			
		||||
pub mod openai;
 | 
			
		||||
pub mod post;
 | 
			
		||||
pub mod post_link;
 | 
			
		||||
pub mod post_card;
 | 
			
		||||
pub mod post_card_verify;
 | 
			
		||||
pub mod profile;
 | 
			
		||||
pub mod refresh;
 | 
			
		||||
pub mod reply;
 | 
			
		||||
@@ -154,6 +156,73 @@ fn main() {
 | 
			
		||||
                .alias("c"),
 | 
			
		||||
            )
 | 
			
		||||
        )
 | 
			
		||||
        .command(
 | 
			
		||||
            Command::new("card")
 | 
			
		||||
            .description("-v <at://verify> -i <int:id> -p <int:cp> -r <int:rank> -c <collection> -a <author> -img <link> -rare <normal>")
 | 
			
		||||
            .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("rare", FlagType::Int)
 | 
			
		||||
            )
 | 
			
		||||
            .flag(
 | 
			
		||||
                Flag::new("col", FlagType::String)
 | 
			
		||||
                .alias("c"),
 | 
			
		||||
            )
 | 
			
		||||
            .flag(
 | 
			
		||||
                Flag::new("author", FlagType::String)
 | 
			
		||||
                .alias("a"),
 | 
			
		||||
            )
 | 
			
		||||
            .flag(
 | 
			
		||||
                Flag::new("verify", FlagType::String)
 | 
			
		||||
                .alias("v"),
 | 
			
		||||
            )
 | 
			
		||||
            .flag(
 | 
			
		||||
                Flag::new("img", FlagType::String)
 | 
			
		||||
            )
 | 
			
		||||
        )
 | 
			
		||||
        .command(
 | 
			
		||||
            Command::new("card-verify")
 | 
			
		||||
            .description("<at://verify> -c <collection> -i <id> -p <cp> -r <rank> -rare <normal> -h <syui.ai> -d <did>")
 | 
			
		||||
            .action(card_verify)
 | 
			
		||||
            .flag(
 | 
			
		||||
                Flag::new("col", FlagType::String)
 | 
			
		||||
                .alias("c"),
 | 
			
		||||
            )
 | 
			
		||||
            .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("rare", FlagType::String)
 | 
			
		||||
            )
 | 
			
		||||
            .flag(
 | 
			
		||||
                Flag::new("handle", FlagType::String)
 | 
			
		||||
                .alias("handle"),
 | 
			
		||||
            )
 | 
			
		||||
            .flag(
 | 
			
		||||
                Flag::new("did", FlagType::String)
 | 
			
		||||
                .alias("did"),
 | 
			
		||||
            )
 | 
			
		||||
        )
 | 
			
		||||
        .command(
 | 
			
		||||
            Command::new("like")
 | 
			
		||||
            .description("like <cid> -u <uri>")
 | 
			
		||||
@@ -474,6 +543,57 @@ fn like(c: &Context) {
 | 
			
		||||
    return res;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
async fn c_card(c: &Context) -> Result<(), Box<dyn std::error::Error>> {
 | 
			
		||||
    //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/ai.syui.card.verify/3lagpvhppmd2q".to_string());
 | 
			
		||||
    let col = c.string_flag("col").unwrap_or_else(|_| "ai.syui.card".to_string());
 | 
			
		||||
    //let img = c.string_flag("img").unwrap_or_else(|_| "bafkreigvcjc46qtelpc4wsg7fwf6qktbi6a23ouqiupth2r37zhrn7wbza".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 rare = c.string_flag("rare").unwrap_or_else(|_| "normal".to_string());
 | 
			
		||||
    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);
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
async fn c_card_verify(c: &Context) -> Result<(), Box<dyn std::error::Error>> {
 | 
			
		||||
    let col = c.string_flag("col").unwrap_or_else(|_| "ai.syui.card.verify".to_string());
 | 
			
		||||
    let img = c.string_flag("img").unwrap_or_else(|_| "bafkreigvcjc46qtelpc4wsg7fwf6qktbi6a23ouqiupth2r37zhrn7wbza".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 rare = c.string_flag("rare").unwrap_or_else(|_| "normal".to_string());
 | 
			
		||||
    let user_handle = c.string_flag("handle").unwrap_or_else(|_| "syui.ai".to_string());
 | 
			
		||||
    let user_did = c.string_flag("did").unwrap_or_else(|_| "did:plc:uqzpqmrjnptsxezjx4xuh2mn".to_string());
 | 
			
		||||
    let str = post_card_verify::post_request(col, img, id, cp, rank, rare, user_handle, user_did);
 | 
			
		||||
    println!("{}", str.await);
 | 
			
		||||
    Ok(())
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
fn card_verify(c: &Context) {
 | 
			
		||||
    refresh(c);
 | 
			
		||||
    tokio::runtime::Runtime::new()
 | 
			
		||||
        .unwrap()
 | 
			
		||||
        .block_on(async {
 | 
			
		||||
            if let Err(e) = c_card_verify(c).await {
 | 
			
		||||
                eprintln!("Error: {}", e);
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
fn repost(c: &Context) {
 | 
			
		||||
    refresh(c);
 | 
			
		||||
    let m = c.args[0].to_string();
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										46
									
								
								src/post_card.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								src/post_card.rs
									
									
									
									
									
										Normal file
									
								
							@@ -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;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										58
									
								
								src/post_card_verify.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								src/post_card_verify.rs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,58 @@
 | 
			
		||||
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(col: String, img: String, id: i32, cp: i32, rank: i32, rare: String, user_handle: String, user_did: 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 link = "https://bsky.app/profile/yui.syui.ai".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(),
 | 
			
		||||
            "handle": user_handle.to_string(),
 | 
			
		||||
            "did": user_did.to_string(),
 | 
			
		||||
            "embed": {
 | 
			
		||||
                "$type": "app.bsky.embed.external",
 | 
			
		||||
                "external": {
 | 
			
		||||
                    "uri": link,
 | 
			
		||||
                    "thumb": {
 | 
			
		||||
                      "$type": "blob",
 | 
			
		||||
                      "ref": {
 | 
			
		||||
                        "$link": img.to_string()
 | 
			
		||||
                      },
 | 
			
		||||
                      "mimeType": "image/jpeg",
 | 
			
		||||
                      "size": 0
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            },
 | 
			
		||||
            "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;
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user