add protections to not to send messages about the same PR more than once
This commit is contained in:
parent
1b668967d9
commit
e3d9cf5398
|
@ -36,10 +36,11 @@ pub struct Pull {
|
||||||
pub body: String,
|
pub body: String,
|
||||||
pub state: String,
|
pub state: String,
|
||||||
pub mergeable: bool,
|
pub mergeable: bool,
|
||||||
|
pub merge_base: String,
|
||||||
|
pub merged: bool,
|
||||||
pub base: Branch,
|
pub base: Branch,
|
||||||
pub head: Branch,
|
pub head: Branch,
|
||||||
pub merge_base: String,
|
pub user: User,
|
||||||
pub user: User
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Serialize, Deserialize, Clone)]
|
#[derive(Debug, Serialize, Deserialize, Clone)]
|
||||||
|
|
22
src/main.rs
22
src/main.rs
|
@ -4,6 +4,7 @@ use log;
|
||||||
use teloxide_core::{prelude::*, types::{Recipient, Chat}};
|
use teloxide_core::{prelude::*, types::{Recipient, Chat}};
|
||||||
use teloxide::Bot;
|
use teloxide::Bot;
|
||||||
use tide::{Server, Request, Response};
|
use tide::{Server, Request, Response};
|
||||||
|
use tokio::fs;
|
||||||
|
|
||||||
mod gitea;
|
mod gitea;
|
||||||
|
|
||||||
|
@ -98,10 +99,29 @@ async fn webhook(mut req: Request<SharedState>) -> tide::Result {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ! fs::try_exists(".pr-cache").await.unwrap() {
|
||||||
|
fs::write(".pr-cache", "[]").await.unwrap();
|
||||||
|
}
|
||||||
|
let cache = fs::read_to_string(".pr-cache").await.unwrap();
|
||||||
|
let cache = serde_json::from_str::<Vec<u64>>(&cache).unwrap();
|
||||||
|
|
||||||
|
if cache.iter().find(|x| **x == pr.pull_request.id as u64).is_some() {
|
||||||
|
return Ok(
|
||||||
|
Response::builder(200)
|
||||||
|
.body("{\"status\":\"ignoring known PR\"}")
|
||||||
|
.content_type("application/json")
|
||||||
|
.build()
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
let mut cache = cache;
|
||||||
|
cache.push(pr.pull_request.id as u64);
|
||||||
|
fs::write(".pr-cache", serde_json::to_string(&cache).unwrap()).await.unwrap();
|
||||||
|
}
|
||||||
|
|
||||||
let state = req.state().clone();
|
let state = req.state().clone();
|
||||||
|
|
||||||
state.bot.send_message(state.chat.id, format!("New PR\n{} ({}#{}) by {}\n{}", pr.pull_request.title, pr.pull_request.head.repo.name, pr.pull_request.number, pr.pull_request.user.login, pr.pull_request.url)).await.unwrap();
|
state.bot.send_message(state.chat.id, format!("New PR\n{} ({}#{}) by {}\n{}", pr.pull_request.title, pr.pull_request.head.repo.name, pr.pull_request.number, pr.pull_request.user.login, pr.pull_request.url)).await.unwrap();
|
||||||
state.bot.send_message(state.chat.id, "апрувните пж @bleki42 @balistiktw @x3paerz").await.unwrap();
|
// state.bot.send_message(state.chat.id, "апрувните пж @bleki42 @balistiktw @x3paerz").await.unwrap();
|
||||||
|
|
||||||
Ok(
|
Ok(
|
||||||
Response::builder(200)
|
Response::builder(200)
|
||||||
|
|
Loading…
Reference in New Issue