+36
-29
src/main.rs
+36
-29
src/main.rs
···
1
1
use clap::Parser;
2
-
use url::Url;
3
-
use jetstream::{
4
-
JetstreamCompression, JetstreamConfig, JetstreamConnector,
5
-
events::{CommitOp, Cursor, EventKind, JetstreamEvent},
6
-
exports::Nsid,
7
-
};
8
2
use jacquard::{
9
3
api::{
10
4
app_bsky::feed::post::Post,
11
-
app_bsky::richtext::facet::{Facet, ByteSlice},
5
+
app_bsky::richtext::facet::{ByteSlice, Facet},
6
+
com_atproto::repo::create_record::CreateRecord,
12
7
com_atproto::server::create_session::CreateSession,
13
-
com_atproto::repo::create_record::CreateRecord,
14
8
},
15
9
client::{BasicClient, Session},
16
10
types::{
17
-
datetime::Datetime,
18
-
ident::AtIdentifier,
19
-
language::Language,
20
-
collection::Collection,
21
-
value::Data,
22
-
string::AtUri,
11
+
collection::Collection, datetime::Datetime, ident::AtIdentifier, language::Language,
12
+
string::AtUri, value::Data,
23
13
},
24
14
};
15
+
use jetstream::{
16
+
JetstreamCompression, JetstreamConfig, JetstreamConnector,
17
+
events::{CommitOp, Cursor, EventKind, JetstreamEvent},
18
+
exports::Nsid,
19
+
};
20
+
use url::Url;
25
21
26
-
use std::time::Duration;
27
22
use serde::Deserialize;
23
+
use std::time::Duration;
28
24
29
25
type Result<T> = std::result::Result<T, Box<dyn std::error::Error>>;
30
26
···
64
60
title: &str,
65
61
repo_issues_url: &str,
66
62
) -> Result<()> {
67
-
let message = format!(r#"good-first-issue added for {repo_name}:
63
+
let message = format!(
64
+
r#"good-first-issue added for {repo_name}:
68
65
69
-
> {title}"#);
66
+
> {title}"#
67
+
);
70
68
71
69
let repo_feature = serde_json::json!({
72
70
"$type": "app.bsky.richtext.facet#link",
···
117
115
118
116
println!("\nposting...");
119
117
client
120
-
.send(CreateRecord::new()
121
-
.repo(identifier.clone())
122
-
.collection(Post::nsid())
123
-
.record(data)
124
-
.build())
118
+
.send(
119
+
CreateRecord::new()
120
+
.repo(identifier.clone())
121
+
.collection(Post::nsid())
122
+
.record(data)
123
+
.build(),
124
+
)
125
125
.await?
126
126
.into_output()?;
127
127
128
128
Ok(())
129
129
}
130
130
131
-
fn event_to_create_label<T: for <'a> Deserialize<'a>>(event: JetstreamEvent) -> Result<(T, Cursor)> {
131
+
fn event_to_create_label<T: for<'a> Deserialize<'a>>(event: JetstreamEvent) -> Result<(T, Cursor)> {
132
132
if event.kind != EventKind::Commit {
133
133
return Err("not a commit".into());
134
134
}
···
185
185
}
186
186
187
187
/// get some atproto record content (from slingshot)
188
-
async fn get_record<T: for<'a> Deserialize<'a>>(client: &reqwest::Client, at_uri: &str) -> Result<T> {
188
+
async fn get_record<T: for<'a> Deserialize<'a>>(
189
+
client: &reqwest::Client,
190
+
at_uri: &str,
191
+
) -> Result<T> {
189
192
let mut url: Url = "https://slingshot.microcosm.blue".parse()?;
190
193
url.set_path("/xrpc/com.bad-example.repo.getUriRecord");
191
194
url.query_pairs_mut().append_pair("at_uri", at_uri);
···
230
233
client
231
234
.send(
232
235
CreateSession::new()
233
-
.identifier(&bot_id.to_string())
236
+
.identifier(bot_id.to_string())
234
237
.password(args.app_password)
235
238
.build(),
236
239
)
···
260
263
261
264
println!("receiving jetstream messages...");
262
265
loop {
263
-
let Some(event) = receiver.recv().await else {
266
+
let Some(event) = receiver.recv().await else {
264
267
eprintln!("consumer: could not receive event, bailing");
265
268
break;
266
269
};
···
271
274
272
275
let mut added_good_first_issue = false;
273
276
for added in add {
274
-
if added.key == "at://did:plc:wshs7t2adsemcrrd4snkeqli/sh.tangled.label.definition/good-first-issue" {
277
+
if added.key
278
+
== "at://did:plc:wshs7t2adsemcrrd4snkeqli/sh.tangled.label.definition/good-first-issue"
279
+
{
275
280
println!("found a good first issue label!! {:?}", cursor);
276
281
added_good_first_issue = true;
277
282
break; // inner
···
312
317
}
313
318
Ok(None) => did.to_string(),
314
319
Ok(Some(h)) => format!("@{h}"),
315
-
}
320
+
},
316
321
};
317
322
318
323
let repo_full_name = format!("{nice_tangled_repo_id}/{repo_name}");
···
334
339
&repo_url,
335
340
&title,
336
341
&issues_url,
337
-
).await {
342
+
)
343
+
.await
344
+
{
338
345
eprintln!("failed to post for {subject}: {e}");
339
346
};
340
347