From 6c761d75767ee70e43e40083382274d41bab878e Mon Sep 17 00:00:00 2001 From: AB Date: Wed, 20 Jan 2021 20:15:46 +0300 Subject: [PATCH] @here command now call only active users (at least 1 message in last 60 days) --- src/commands.rs | 2 +- src/db.rs | 18 ++++++++++++++---- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/commands.rs b/src/commands.rs index e181c34..ce159e8 100644 --- a/src/commands.rs +++ b/src/commands.rs @@ -192,7 +192,7 @@ impl Execute for Sql { #[async_trait] impl Execute for Here { async fn exec(&self, api: &Api, message: &Message) -> Result<(), Error> { - let members: Vec = db::get_members(message.chat.id()).unwrap(); + let members: Vec = db::get_members(message.chat.id(), 60).unwrap(); for u in &members { debug!("Found user {:?} in chat {}", u, message.chat.id()); } diff --git a/src/db.rs b/src/db.rs index dcb5fa0..c369fa8 100644 --- a/src/db.rs +++ b/src/db.rs @@ -180,17 +180,27 @@ pub(crate) async fn get_messages_user_all( Ok(messages) } -pub(crate) fn get_members(id: telegram_bot::ChatId) -> Result> { +pub(crate) fn get_members(id: telegram_bot::ChatId, limit: u32) -> Result> { + let where_statement = if limit > 0 { + format!("and days_seen <= {}", limit) + } else { + "".into() + }; + debug!("{}", where_statement); let conn = open()?; let mut stmt = conn.prepare_cached( - " - SELECT DISTINCT(u.username), u.id, u.first_name, u.last_name, u.date + &format!(" + SELECT DISTINCT(u.username), u.id, u.first_name, u.last_name, u.date, + (strftime('%s','now')-r.date)/60/60/24 as days_seen FROM relations r JOIN user u ON u.id = r.user_id LEFT JOIN conf c ON r.conf_id = c.id - WHERE c.id = :id", + WHERE c.id = :id + {} + GROUP BY u.id + ORDER BY r.date DESC", where_statement), )?; let mut rows = stmt.query_named(&[(":id", &id.to_string())])?; let mut users = Vec::new();