master
Ondřej Hruška 3 years ago
commit 8c60120549
Signed by untrusted user: MightyPork
GPG Key ID: 2C5FD5035250423D
  1. 4
      .gitignore
  2. 2135
      Cargo.lock
  3. 27
      Cargo.toml
  4. 12
      build.rs
  5. 107
      src/main.rs

4
.gitignore vendored

@ -0,0 +1,4 @@
/target
**/*.rs.bk
group-actor-data.toml
.idea/

2135
Cargo.lock generated

File diff suppressed because it is too large Load Diff

@ -0,0 +1,27 @@
[package]
name = "group"
version = "0.1.0"
authors = ["Ondřej Hruška <ondra@ondrovo.com>"]
edition = "2018"
publish = false
build = "build.rs"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
#elefren = { version = "0.22.0", features = ["toml"] }
elefren = { path = "../elefren22-fork", features = ["toml"] }
simple-logging = "2.0.2"
#elefren = { path = "../elefren-fork" }
log = "0.4.14"
serde = "1"
serde_json = "1"
smart-default = "0.6.0"
anyhow = "1"
clap = "2.33.0"
native-tls = "0.2.8"
websocket = "0.26.2"
#tokio = { version = "0.2.22", features = ["full"] }

@ -0,0 +1,12 @@
use std::process::Command;
use std::str;
fn main() {
let desc_c = Command::new("git").args(&["describe", "--all", "--long"]).output().unwrap();
let desc = unsafe {
str::from_utf8_unchecked( &desc_c.stdout )
};
println!("cargo:rustc-env=GIT_REV={}", desc);
}

@ -0,0 +1,107 @@
#[macro_use]
extern crate log;
#[macro_use]
extern crate smart_default;
#[macro_use]
extern crate serde;
extern crate elefren;
use elefren::prelude::*;
use elefren::helpers::{cli, toml};
use elefren::entities::event::Event;
use log::LevelFilter;
use elefren::entities::notification::NotificationType;
use elefren::entities::account::Account;
use elefren::status_builder::Visibility;
fn main() -> anyhow::Result<()> {
simple_logging::log_to_stderr(LevelFilter::Debug);
let client = if let Ok(data) = toml::from_file("group-actor-data.toml") {
Mastodon::from(data)
} else {
register()?
};
let you = client.verify_credentials()?;
println!("{:#?}", you);
for event in client.streaming_user()? {
match event {
Event::Update(status) => {
debug!("Status: {:#?}", status);
},
Event::Notification(notification) => {
debug!("Notification: {:#?}", notification);
match notification.notification_type {
NotificationType::Mention => {
if let Some(status) = notification.status {
if status.content.contains("/gi") {
debug!("GRPIGNORE!");
} else if status.content.contains("/gb") {
debug!("GROUP BOOST PREV!");
if let Some(id) = status.in_reply_to_id {
let _ = client.reblog(&id);
}
}
// else if status.content.contains("/gping") {
// let post = StatusBuilder::new()
// .status(format!("@{} hello", &notification.account.acct))
// .content_type("text/markdown")
// //.in_reply_to(status.id)
// .visibility(Visibility::Unlisted)
// .build().expect("error build status");
//
// let _ = client.new_status(post);
// }
else {
info!("BOOSTING");
let _ = client.reblog(&status.id);
}
}
}
NotificationType::Follow => {
info!("New follower!");
let post = StatusBuilder::new()
.status(format!("@{} welcome to the group!", &notification.account.acct))
.content_type("text/markdown")
.visibility(Visibility::Unlisted)
.build().expect("error build status");
let _ = client.new_status(post);
}
_ => {}
}
},
Event::Delete(id) => {
debug!("Delete: {}", id);
},
Event::FiltersChanged => {
debug!("FiltersChanged");
// ???
},
}
}
Ok(())
}
fn register() -> anyhow::Result<Mastodon> {
let registration = Registration::new("https://piggo.space")
.client_name("group-actor")
.scopes(Scopes::all())
.build()?;
let client = cli::authenticate(registration)?;
toml::to_file(&*client, "group-actor-data.toml")?;
Ok(client)
}
fn make_mention(user : &Account) -> String {
format!(r#"<span class="h-card"><a class="u-url mention" data-user="{id}" href="{url}" rel="ugc">@<span>{handle}</span></a></span>"#,
id=user.id,
url=user.url, handle=user.acct
)
}
Loading…
Cancel
Save