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(),
})
}
}