changed permision scopes and rebritten some functions to add modulatiry

This commit is contained in:
Alie 2024-01-21 17:23:03 +01:00
parent 6e38c18e7f
commit 7fa0eeddf1
2 changed files with 52 additions and 27 deletions

View File

@ -6,8 +6,9 @@ bio = "Bot who posts images of sleeping girls every 6 hours."
[files] [files]
urls = "./urls.csv" urls = "./urls.csv"
posted = "./posted.csv" posted = "./posted.csv"
tempfile = ".tmp" tempfile = "/tmp/botimage.png"
[errors] [errors]
out_of_images = "@Sugui@awoo.fai.st @MeDueleLaTeta@awoo.fai.st me quedé sin chicas" maintainers = "@Sugui@awoo.fai.st @MeDueleLaTeta@awoo.fai.st"
out_of_images = "me quedé sin chicas"
retry = 10 retry = 10

View File

@ -43,6 +43,7 @@ struct Files {
#[derive(Deserialize)] #[derive(Deserialize)]
struct Errors { struct Errors {
maintainers: String,
out_of_images: String, out_of_images: String,
retry: u8, retry: u8,
} }
@ -55,25 +56,9 @@ async fn main() -> DynResult<()> {
.verbosity(4) // Debug .verbosity(4) // Debug
.timestamp(stderrlog::Timestamp::Second) .timestamp(stderrlog::Timestamp::Second)
.init()?; .init()?;
let config: Config = match parse_config(CONFIG_FILENAME) {
Ok(config) => config,
Err(err) => {
log::error!("Config file parsing unsuccesful: {}", err);
exit(1);
}
};
let mastodon = if let Ok(data) = masto_toml::from_file("mastodon-data.toml") { let config: Config = get_config();
Mastodon::from(data) let mastodon = get_account(&config).await;
} else {
match register(&config).await {
Ok(account) => account,
Err(err) => {
log::error!("Api registation unsuccesful: {}", err);
exit(1);
}
}
};
match get_next_url(&config) { match get_next_url(&config) {
Ok(url) => match url { Ok(url) => match url {
@ -106,7 +91,16 @@ async fn main() -> DynResult<()> {
} }
None => { None => {
let mut retry: u8 = 0; let mut retry: u8 = 0;
while let Err(err) = post(&mastodon, &config.errors.out_of_images).await { while let Err(err) = post(
&mastodon,
&format!(
"{}{}",
&config.errors.maintainers, &config.errors.out_of_images
),
Visibility::Direct,
)
.await
{
log::warn!("Cannot post, retry: {}, {}", retry, err); log::warn!("Cannot post, retry: {}, {}", retry, err);
async_std::task::sleep(Duration::new(1, 0)).await; async_std::task::sleep(Duration::new(1, 0)).await;
retry += 1; retry += 1;
@ -119,7 +113,13 @@ async fn main() -> DynResult<()> {
}, },
Err(err) => { Err(err) => {
log::error!("Cannot get next image: {}", err); log::error!("Cannot get next image: {}", err);
match post(&mastodon, &err.to_string()).await { match post(
&mastodon,
&format!("{}{}", &config.errors.maintainers, &err.to_string()),
Visibility::Direct,
)
.await
{
Ok(_) => {} Ok(_) => {}
Err(err) => { Err(err) => {
log::error!("Cannot post error message: {}", err); log::error!("Cannot post error message: {}", err);
@ -131,6 +131,30 @@ async fn main() -> DynResult<()> {
Ok(()) Ok(())
} }
fn get_config() -> Config {
match parse_config(CONFIG_FILENAME) {
Ok(config) => config,
Err(err) => {
log::error!("Config file parsing unsuccesful: {}", err);
exit(1);
}
}
}
async fn get_account(config: &Config) -> Mastodon {
if let Ok(data) = masto_toml::from_file("mastodon-data.toml") {
Mastodon::from(data)
} else {
match register(config).await {
Ok(account) => account,
Err(err) => {
log::error!("Api registation unsuccesful: {}", err);
exit(1);
}
}
}
}
/// Parses the given filename to a config struct /// Parses the given filename to a config struct
fn parse_config(filename: &str) -> DynResult<Config> { fn parse_config(filename: &str) -> DynResult<Config> {
let toml_file = std::fs::read_to_string(filename)?; //.expect("No config file, consider getting the original one and modifing it"); let toml_file = std::fs::read_to_string(filename)?; //.expect("No config file, consider getting the original one and modifing it");
@ -208,14 +232,14 @@ async fn update_bio(account: &Mastodon, config: &Config) -> DynResult<()> {
Ok(()) Ok(())
} }
async fn post(account: &Mastodon, msg: &str) -> DynResult<()> { async fn post(account: &Mastodon, msg: &str, visibility: Visibility) -> DynResult<Status> {
let status = StatusBuilder::new() let status = StatusBuilder::new()
.visibility(Visibility::Direct) .visibility(visibility)
.status(msg) .status(msg)
.build()?; //.expect("Error building error status"); .build()?; //.expect("Error building error status");
account.new_status(status).await?; //.expect("Error posting error status"); let post = account.new_status(status).await?; //.expect("Error posting error status");
log::info!("Text status posted: {}", msg); log::info!("Text status posted: {}", msg);
Ok(()) Ok(post)
} }
async fn fetch_url(url: &String, file_name: &String) -> DynResult<()> { async fn fetch_url(url: &String, file_name: &String) -> DynResult<()> {
@ -229,7 +253,7 @@ async fn fetch_url(url: &String, file_name: &String) -> DynResult<()> {
async fn register(config: &Config) -> DynResult<Mastodon> { async fn register(config: &Config) -> DynResult<Mastodon> {
let registration = Registration::new(&config.bot.instance) let registration = Registration::new(&config.bot.instance)
.client_name(&config.bot.name) .client_name(&config.bot.name)
.scopes(Scopes::write_all()) .scopes(Scopes::all())
.build() .build()
.await?; .await?;
let mastodon = cli::authenticate(registration).await?; let mastodon = cli::authenticate(registration).await?;