changed permision scopes and rebritten some functions to add modulatiry
This commit is contained in:
parent
6e38c18e7f
commit
7fa0eeddf1
|
@ -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
|
74
src/main.rs
74
src/main.rs
|
@ -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?;
|
||||||
|
|
Loading…
Reference in New Issue