forked from Skynet/discord-bot
feat: improved the count command
This commit is contained in:
parent
421d425f5d
commit
b44518c467
1 changed files with 80 additions and 1 deletions
|
@ -83,9 +83,12 @@ pub mod committee {
|
||||||
|
|
||||||
pub mod servers {
|
pub mod servers {
|
||||||
// get the list of all the current clubs/socs
|
// get the list of all the current clubs/socs
|
||||||
|
use serde::{Deserialize, Serialize};
|
||||||
use serenity::all::{CommandInteraction, CommandOptionType, Context, CreateCommand, CreateCommandOption};
|
use serenity::all::{CommandInteraction, CommandOptionType, Context, CreateCommand, CreateCommandOption};
|
||||||
use skynet_discord_bot::common::database::{get_server_config_bulk, DataBase};
|
use skynet_discord_bot::common::database::{get_server_config_bulk, DataBase};
|
||||||
use skynet_discord_bot::common::set_roles::committee::get_committees;
|
use skynet_discord_bot::common::set_roles::committee::get_committees;
|
||||||
|
use skynet_discord_bot::get_now_iso;
|
||||||
|
use sqlx::{Pool, Sqlite};
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
|
|
||||||
pub async fn run(_command: &CommandInteraction, ctx: &Context) -> String {
|
pub async fn run(_command: &CommandInteraction, ctx: &Context) -> String {
|
||||||
|
@ -108,7 +111,15 @@ pub mod servers {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
cs.sort_by_key(|(count, _, _)| *count);
|
// get all members
|
||||||
|
let (wolves_current, wolves_past) = get_wolves_total(&db).await;
|
||||||
|
cs.push((wolves_current, wolves_past, String::from("Skynet Network")));
|
||||||
|
|
||||||
|
// treat teh committee server as its own thing
|
||||||
|
let committee_current = get_wolves_committee(&db).await;
|
||||||
|
cs.push((committee_current, 0, String::from("Committee")));
|
||||||
|
|
||||||
|
cs.sort_by_key(|(current, _, _)| *current);
|
||||||
cs.reverse();
|
cs.reverse();
|
||||||
|
|
||||||
// msg can be a max 2000 chars long
|
// msg can be a max 2000 chars long
|
||||||
|
@ -148,6 +159,74 @@ pub mod servers {
|
||||||
response.join("\n")
|
response.join("\n")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, Deserialize, Serialize, sqlx::FromRow)]
|
||||||
|
pub struct Count {
|
||||||
|
pub count: i64,
|
||||||
|
}
|
||||||
|
|
||||||
|
async fn get_wolves_total(db: &Pool<Sqlite>) -> (i64, i64) {
|
||||||
|
let total = match sqlx::query_as::<_, Count>(
|
||||||
|
r#"
|
||||||
|
SELECT COUNT(DISTINCT id_wolves) as count
|
||||||
|
FROM wolves
|
||||||
|
WHERE discord IS NOT NULL
|
||||||
|
"#,
|
||||||
|
)
|
||||||
|
.fetch_one(db)
|
||||||
|
.await
|
||||||
|
{
|
||||||
|
Ok(res) => res.count,
|
||||||
|
Err(e) => {
|
||||||
|
dbg!(e);
|
||||||
|
0
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
let current = match sqlx::query_as::<_, Count>(
|
||||||
|
r#"
|
||||||
|
SELECT COUNT(DISTINCT id_wolves) as count
|
||||||
|
FROM server_members
|
||||||
|
JOIN wolves USING (id_wolves)
|
||||||
|
WHERE (
|
||||||
|
wolves.discord IS NOT NULL
|
||||||
|
AND server_members.expiry > ?
|
||||||
|
)
|
||||||
|
"#,
|
||||||
|
)
|
||||||
|
.bind(get_now_iso(true))
|
||||||
|
.fetch_one(db)
|
||||||
|
.await
|
||||||
|
{
|
||||||
|
Ok(res) => res.count,
|
||||||
|
Err(e) => {
|
||||||
|
dbg!(e);
|
||||||
|
0
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
(current, total)
|
||||||
|
}
|
||||||
|
|
||||||
|
async fn get_wolves_committee(db: &Pool<Sqlite>) -> i64 {
|
||||||
|
// expiry
|
||||||
|
match sqlx::query_as::<_, Count>(
|
||||||
|
"
|
||||||
|
SELECT count
|
||||||
|
FROM committee_roles
|
||||||
|
WHERE id_wolves = '0'
|
||||||
|
",
|
||||||
|
)
|
||||||
|
.fetch_one(db)
|
||||||
|
.await
|
||||||
|
{
|
||||||
|
Ok(res) => res.count,
|
||||||
|
Err(e) => {
|
||||||
|
dbg!(e);
|
||||||
|
0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub fn register() -> CreateCommand {
|
pub fn register() -> CreateCommand {
|
||||||
CreateCommand::new("count")
|
CreateCommand::new("count")
|
||||||
.description("Count the servers")
|
.description("Count the servers")
|
||||||
|
|
Loading…
Add table
Reference in a new issue