Initial commit
This commit is contained in:
commit
32999e67d4
|
@ -0,0 +1,2 @@
|
||||||
|
/target
|
||||||
|
mastodon-data.toml
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,13 @@
|
||||||
|
[package]
|
||||||
|
name = "northbound-train"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
clap = { version = "4.0.18", features = [ "derive" ] }
|
||||||
|
eggbug = { version = "0.1.2", features = [ "tokio" ] }
|
||||||
|
elefren = { version = "0.22.0", features = [ "toml" ] }
|
||||||
|
tokio = { version = "1.21.2", features = [ "macros", "rt-multi-thread" ] }
|
||||||
|
|
|
@ -0,0 +1,62 @@
|
||||||
|
extern crate elefren;
|
||||||
|
|
||||||
|
use std::error::Error;
|
||||||
|
use clap::Parser;
|
||||||
|
|
||||||
|
use elefren::prelude::*;
|
||||||
|
use elefren::helpers::toml;
|
||||||
|
use elefren::helpers::cli;
|
||||||
|
use elefren::entities::event::Event;
|
||||||
|
use eggbug::{Client, Post};
|
||||||
|
|
||||||
|
#[derive(Parser, Debug)]
|
||||||
|
#[command(author, version, about, long_about = None)]
|
||||||
|
struct Args {
|
||||||
|
/// URL of the mastodon instance you're using
|
||||||
|
#[arg(short, long, required = true)]
|
||||||
|
instance: String,
|
||||||
|
/// Cohost e-mail
|
||||||
|
#[arg(short, long, required = true)]
|
||||||
|
email: String,
|
||||||
|
/// Cohost password
|
||||||
|
#[arg(short, long, required = true)]
|
||||||
|
password: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[tokio::main]
|
||||||
|
async fn main() -> Result<(), Box<dyn Error>> {
|
||||||
|
let args = Args::parse();
|
||||||
|
let mastodon = if let Ok(data) = toml::from_file("mastodon-data.toml") {
|
||||||
|
Mastodon::from(data)
|
||||||
|
} else {
|
||||||
|
register(&args.instance)?
|
||||||
|
};
|
||||||
|
|
||||||
|
// Good! We're now logged into mastodon, check that it worked
|
||||||
|
mastodon.verify_credentials()?;
|
||||||
|
|
||||||
|
// Now log into Cohost
|
||||||
|
let cohost = Client::new();
|
||||||
|
let cohost = cohost.login(&args.email, &args.password).await?;
|
||||||
|
|
||||||
|
// Now loop over events as they come
|
||||||
|
for event in mastodon.streaming_user()? {
|
||||||
|
match event {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn register(instance: &str) -> Result<Mastodon, Box<dyn Error>> {
|
||||||
|
let registration = Registration::new(instance)
|
||||||
|
.client_name("northbound-train")
|
||||||
|
.build()?;
|
||||||
|
let mastodon = cli::authenticate(registration)?;
|
||||||
|
|
||||||
|
// Save app data for using on the next run.
|
||||||
|
toml::to_file(&*mastodon, "mastodon-data.toml")?;
|
||||||
|
|
||||||
|
Ok(mastodon)
|
||||||
|
}
|
Loading…
Reference in New Issue