You've already forked AstralRinth
forked from didirus/AstralRinth
Replace moderation project queue with moderation action log (#718)
This commit is contained in:
committed by
GitHub
parent
3767e9fae9
commit
51777c3f33
72
src/main.rs
72
src/main.rs
@@ -10,7 +10,6 @@ use crate::ratelimit::middleware::RateLimiter;
|
|||||||
use crate::util::cors::default_cors;
|
use crate::util::cors::default_cors;
|
||||||
use crate::util::env::{parse_strings_from_var, parse_var};
|
use crate::util::env::{parse_strings_from_var, parse_var};
|
||||||
use actix_web::{web, App, HttpServer};
|
use actix_web::{web, App, HttpServer};
|
||||||
use chrono::{DateTime, Utc};
|
|
||||||
use deadpool_redis::{Config, Runtime};
|
use deadpool_redis::{Config, Runtime};
|
||||||
use env_logger::Env;
|
use env_logger::Env;
|
||||||
use log::{error, info, warn};
|
use log::{error, info, warn};
|
||||||
@@ -181,77 +180,6 @@ async fn main() -> std::io::Result<()> {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// Reminding moderators to review projects which have been in the queue longer than 40hr
|
|
||||||
let pool_ref = pool.clone();
|
|
||||||
let redis_ref = redis_pool.clone();
|
|
||||||
let webhook_message_sent = Arc::new(Mutex::new(Vec::<(
|
|
||||||
database::models::ProjectId,
|
|
||||||
DateTime<Utc>,
|
|
||||||
)>::new()));
|
|
||||||
|
|
||||||
scheduler.run(std::time::Duration::from_secs(10 * 60), move || {
|
|
||||||
let pool_ref = pool_ref.clone();
|
|
||||||
let redis_ref = redis_ref.clone();
|
|
||||||
let webhook_message_sent_ref = webhook_message_sent.clone();
|
|
||||||
info!("Checking reviewed projects submitted more than 40hrs ago");
|
|
||||||
|
|
||||||
async move {
|
|
||||||
let do_steps = async {
|
|
||||||
use futures::TryStreamExt;
|
|
||||||
|
|
||||||
let project_ids = sqlx::query!(
|
|
||||||
"
|
|
||||||
SELECT id FROM mods
|
|
||||||
WHERE status = $1 AND queued < NOW() - INTERVAL '40 hours'
|
|
||||||
ORDER BY updated ASC
|
|
||||||
",
|
|
||||||
crate::models::projects::ProjectStatus::Processing.as_str(),
|
|
||||||
)
|
|
||||||
.fetch_many(&pool_ref)
|
|
||||||
.try_filter_map(|e| async {
|
|
||||||
Ok(e.right().map(|m| database::models::ProjectId(m.id)))
|
|
||||||
})
|
|
||||||
.try_collect::<Vec<database::models::ProjectId>>()
|
|
||||||
.await?;
|
|
||||||
|
|
||||||
let mut webhook_message_sent_ref = webhook_message_sent_ref.lock().await;
|
|
||||||
|
|
||||||
webhook_message_sent_ref.retain(|x| Utc::now() - x.1 < chrono::Duration::hours(12));
|
|
||||||
|
|
||||||
for project in project_ids {
|
|
||||||
if webhook_message_sent_ref.iter().any(|x| x.0 == project) { continue; }
|
|
||||||
|
|
||||||
if let Ok(webhook_url) =
|
|
||||||
dotenvy::var("MODERATION_DISCORD_WEBHOOK")
|
|
||||||
{
|
|
||||||
util::webhook::send_discord_webhook(
|
|
||||||
project.into(),
|
|
||||||
&pool_ref,
|
|
||||||
&redis_ref,
|
|
||||||
webhook_url,
|
|
||||||
Some("<@&783155186491195394> This project has been in the queue for over 40 hours!".to_string()),
|
|
||||||
)
|
|
||||||
.await
|
|
||||||
.ok();
|
|
||||||
|
|
||||||
webhook_message_sent_ref.push((project, Utc::now()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Ok::<(), routes::ApiError>(())
|
|
||||||
};
|
|
||||||
|
|
||||||
if let Err(e) = do_steps.await {
|
|
||||||
warn!(
|
|
||||||
"Checking reviewed projects submitted more than 40hrs ago failed: {:?}",
|
|
||||||
e
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
info!("Finished checking reviewed projects submitted more than 40hrs ago");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
scheduler::schedule_versions(&mut scheduler, pool.clone());
|
scheduler::schedule_versions(&mut scheduler, pool.clone());
|
||||||
|
|
||||||
let download_queue = web::Data::new(DownloadQueue::new());
|
let download_queue = web::Data::new(DownloadQueue::new());
|
||||||
|
|||||||
@@ -875,20 +875,6 @@ async fn project_create_inner(
|
|||||||
monetization_status: MonetizationStatus::Monetized,
|
monetization_status: MonetizationStatus::Monetized,
|
||||||
};
|
};
|
||||||
|
|
||||||
if status == ProjectStatus::Processing {
|
|
||||||
if let Ok(webhook_url) = dotenvy::var("MODERATION_DISCORD_WEBHOOK") {
|
|
||||||
crate::util::webhook::send_discord_webhook(
|
|
||||||
response.id,
|
|
||||||
pool,
|
|
||||||
redis,
|
|
||||||
webhook_url,
|
|
||||||
None,
|
|
||||||
)
|
|
||||||
.await
|
|
||||||
.ok();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Ok(HttpResponse::Ok().json(response))
|
Ok(HttpResponse::Ok().json(response))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -493,18 +493,6 @@ pub async fn project_edit(
|
|||||||
)
|
)
|
||||||
.execute(&mut *transaction)
|
.execute(&mut *transaction)
|
||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
if let Ok(webhook_url) = dotenvy::var("MODERATION_DISCORD_WEBHOOK") {
|
|
||||||
crate::util::webhook::send_discord_webhook(
|
|
||||||
project_item.inner.id.into(),
|
|
||||||
&pool,
|
|
||||||
&redis,
|
|
||||||
webhook_url,
|
|
||||||
None,
|
|
||||||
)
|
|
||||||
.await
|
|
||||||
.ok();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if status.is_approved() && !project_item.inner.status.is_approved() {
|
if status.is_approved() && !project_item.inner.status.is_approved() {
|
||||||
@@ -545,6 +533,26 @@ pub async fn project_edit(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if user.role.is_mod() {
|
||||||
|
if let Ok(webhook_url) = dotenvy::var("MODERATION_DISCORD_WEBHOOK") {
|
||||||
|
crate::util::webhook::send_discord_webhook(
|
||||||
|
project_item.inner.id.into(),
|
||||||
|
&pool,
|
||||||
|
&redis,
|
||||||
|
webhook_url,
|
||||||
|
Some(
|
||||||
|
format!(
|
||||||
|
"**[{}]({}/user/{})** changed project status from **{}** to **{}**",
|
||||||
|
user.username, dotenvy::var("SITE_URL")?, user.username, &project_item.inner.status, status
|
||||||
|
)
|
||||||
|
.to_string(),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
.await
|
||||||
|
.ok();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if team_member.map(|x| !x.accepted).unwrap_or(true) {
|
if team_member.map(|x| !x.accepted).unwrap_or(true) {
|
||||||
let notified_members = sqlx::query!(
|
let notified_members = sqlx::query!(
|
||||||
"
|
"
|
||||||
|
|||||||
Reference in New Issue
Block a user