amsel 0.1.0

Framework for building Bluesky Bots
Documentation
use crate::{BskyRecordRef, Result};
use atrium_api::{app::bsky::feed::post::ReplyRefData, types::string::Datetime};
use bsky_sdk::BskyAgent;
use ipld_core::ipld::Ipld;

pub struct BskyBotUtils;

impl BskyBotUtils {
    pub async fn create_record_post(
        agent: &BskyAgent,
        text: String,
        reply_to: Option<&BskyRecordRef>,
    ) -> Result<BskyRecordRef> {
        let res = agent
            .create_record(atrium_api::app::bsky::feed::post::RecordData {
                created_at: Datetime::now(),
                embed: None,
                entities: None,
                facets: None,
                labels: None,
                langs: None,
                reply: if reply_to.is_none() {
                    None
                } else {
                    let inner = reply_to.unwrap();
                    let post_ref = atrium_api::types::Object {
                        data: atrium_api::com::atproto::repo::strong_ref::MainData {
                            cid: inner.cid.clone(),
                            uri: inner.uri.clone(),
                        },
                        extra_data: Ipld::Null,
                    };
                    Some(atrium_api::types::Object {
                        data: ReplyRefData {
                            parent: post_ref.clone(),
                            root: post_ref,
                        },
                        extra_data: Ipld::Null,
                    })
                },
                tags: None,
                text: text,
            })
            .await?;

        Ok(BskyRecordRef {
            cid: res.cid.clone(),
            uri: res.uri.clone(),
        })
    }
}