2024-10-28 21:34:21 +00:00
|
|
|
pub mod normal {
|
2024-10-28 21:53:04 +00:00
|
|
|
use crate::common::database::{DataBase, ServerMembersWolves, Servers, Wolves};
|
|
|
|
use crate::get_now_iso;
|
|
|
|
use serenity::client::Context;
|
|
|
|
use serenity::model::id::{GuildId, RoleId, UserId};
|
|
|
|
use sqlx::{Pool, Sqlite};
|
2024-10-28 21:34:21 +00:00
|
|
|
|
2024-10-28 21:53:04 +00:00
|
|
|
pub async fn update_server(ctx: &Context, server: &Servers, remove_roles: &[Option<RoleId>], members_changed: &[UserId]) {
|
2024-10-28 21:34:21 +00:00
|
|
|
let db_lock = {
|
|
|
|
let data_read = ctx.data.read().await;
|
|
|
|
data_read.get::<DataBase>().expect("Expected Database in TypeMap.").clone()
|
|
|
|
};
|
|
|
|
|
|
|
|
let db = db_lock.read().await;
|
|
|
|
|
|
|
|
let Servers {
|
|
|
|
server,
|
|
|
|
role_past,
|
|
|
|
role_current,
|
|
|
|
..
|
|
|
|
} = server;
|
|
|
|
|
|
|
|
let mut roles_set = [0, 0, 0];
|
|
|
|
let mut members = vec![];
|
|
|
|
|
|
|
|
for member in get_server_member_bulk(&db, server).await {
|
|
|
|
if let Some(x) = member.discord {
|
|
|
|
members.push(x);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
let mut members_all = members.len();
|
|
|
|
|
|
|
|
if let Ok(x) = server.members(ctx, None, None).await {
|
2025-02-19 00:17:02 +00:00
|
|
|
for member in x {
|
2024-10-28 21:34:21 +00:00
|
|
|
// members_changed acts as an override to only deal with teh users in it
|
|
|
|
if !members_changed.is_empty() && !members_changed.contains(&member.user.id) {
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
if members.contains(&member.user.id) {
|
|
|
|
let mut roles = vec![];
|
|
|
|
|
|
|
|
if let Some(role) = &role_past {
|
|
|
|
if !member.roles.contains(role) {
|
|
|
|
roles_set[0] += 1;
|
|
|
|
roles.push(role.to_owned());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if !member.roles.contains(role_current) {
|
|
|
|
roles_set[1] += 1;
|
|
|
|
roles.push(role_current.to_owned());
|
|
|
|
}
|
|
|
|
|
|
|
|
if let Err(e) = member.add_roles(ctx, &roles).await {
|
|
|
|
println!("{:?}", e);
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
// old and never
|
|
|
|
|
|
|
|
if let Some(role) = &role_past {
|
|
|
|
if member.roles.contains(role) {
|
|
|
|
members_all += 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if member.roles.contains(role_current) {
|
|
|
|
roles_set[2] += 1;
|
|
|
|
// if theya re not a current member and have the role then remove it
|
|
|
|
if let Err(e) = member.remove_role(ctx, role_current).await {
|
|
|
|
println!("{:?}", e);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
for role in remove_roles.iter().flatten() {
|
|
|
|
if let Err(e) = member.remove_role(ctx, role).await {
|
|
|
|
println!("{:?}", e);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
set_server_numbers(&db, server, members_all as i64, members.len() as i64).await;
|
|
|
|
|
|
|
|
// small bit of logging to note changes over time
|
2025-02-19 00:17:02 +00:00
|
|
|
println!("{:?} Changes: New: +{}, Current: +{}/-{}", server.get(), roles_set[0], roles_set[1], roles_set[2]);
|
2024-10-28 21:34:21 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
pub async fn get_server_member_bulk(db: &Pool<Sqlite>, server: &GuildId) -> Vec<ServerMembersWolves> {
|
|
|
|
sqlx::query_as::<_, ServerMembersWolves>(
|
|
|
|
r#"
|
|
|
|
SELECT *
|
|
|
|
FROM server_members
|
|
|
|
JOIN wolves USING (id_wolves)
|
|
|
|
WHERE (
|
|
|
|
server = ?
|
|
|
|
AND discord IS NOT NULL
|
|
|
|
AND expiry > ?
|
|
|
|
)
|
|
|
|
"#,
|
|
|
|
)
|
2025-02-19 00:17:02 +00:00
|
|
|
.bind(server.get() as i64)
|
2024-10-28 21:34:21 +00:00
|
|
|
.bind(get_now_iso(true))
|
|
|
|
.fetch_all(db)
|
|
|
|
.await
|
|
|
|
.unwrap_or_default()
|
|
|
|
}
|
|
|
|
|
|
|
|
async fn set_server_numbers(db: &Pool<Sqlite>, server: &GuildId, past: i64, current: i64) {
|
|
|
|
match sqlx::query_as::<_, Wolves>(
|
|
|
|
"
|
|
|
|
UPDATE servers
|
|
|
|
SET member_past = ?, member_current = ?
|
|
|
|
WHERE server = ?
|
|
|
|
",
|
|
|
|
)
|
|
|
|
.bind(past)
|
|
|
|
.bind(current)
|
2025-02-19 00:17:02 +00:00
|
|
|
.bind(server.get() as i64)
|
2024-10-28 21:34:21 +00:00
|
|
|
.fetch_optional(db)
|
|
|
|
.await
|
|
|
|
{
|
|
|
|
Ok(_) => {}
|
|
|
|
Err(e) => {
|
2025-02-19 00:17:02 +00:00
|
|
|
println!("Failure to insert into {}", server.get());
|
2024-10-28 21:34:21 +00:00
|
|
|
println!("{:?}", e);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// for updating committee members
|
|
|
|
pub mod committee {
|
2025-02-27 01:19:40 +00:00
|
|
|
use crate::common::database::{get_channel_from_row, get_role_from_row, DataBase, Wolves};
|
2024-10-28 21:53:04 +00:00
|
|
|
use crate::common::wolves::committees::Committees;
|
2024-11-09 14:55:26 +00:00
|
|
|
use crate::Config;
|
2025-02-27 01:19:40 +00:00
|
|
|
use serde::{Deserialize, Serialize};
|
2025-02-19 00:17:02 +00:00
|
|
|
use serenity::all::EditRole;
|
|
|
|
use serenity::builder::CreateChannel;
|
2024-10-28 21:34:21 +00:00
|
|
|
use serenity::client::Context;
|
2024-11-09 16:23:03 +00:00
|
|
|
use serenity::model::channel::ChannelType;
|
2024-10-28 21:34:21 +00:00
|
|
|
use serenity::model::guild::Member;
|
2025-02-18 21:14:05 +00:00
|
|
|
use serenity::model::id::ChannelId;
|
|
|
|
use serenity::model::prelude::RoleId;
|
2025-02-27 01:19:40 +00:00
|
|
|
use sqlx::sqlite::SqliteRow;
|
|
|
|
use sqlx::{Error, FromRow, Pool, Row, Sqlite};
|
2024-10-28 21:53:04 +00:00
|
|
|
use std::collections::HashMap;
|
|
|
|
use std::sync::Arc;
|
2024-10-28 21:34:21 +00:00
|
|
|
|
|
|
|
pub async fn check_committee(ctx: Arc<Context>) {
|
|
|
|
let db_lock = {
|
|
|
|
let data_read = ctx.data.read().await;
|
|
|
|
data_read.get::<DataBase>().expect("Expected Config in TypeMap.").clone()
|
|
|
|
};
|
|
|
|
|
|
|
|
let db = db_lock.read().await;
|
|
|
|
|
2024-11-09 14:55:26 +00:00
|
|
|
let config_lock = {
|
|
|
|
let data_read = ctx.data.read().await;
|
|
|
|
data_read.get::<Config>().expect("Expected Config in TypeMap.").clone()
|
|
|
|
};
|
|
|
|
let config_global = config_lock.read().await;
|
|
|
|
|
|
|
|
let server = config_global.committee_server;
|
|
|
|
|
|
|
|
// because to use it to update a single user we need to pre-get the members of teh server
|
2024-10-28 21:34:21 +00:00
|
|
|
let mut members = server.members(&ctx, None, None).await.unwrap_or_default();
|
|
|
|
|
2024-11-09 14:55:26 +00:00
|
|
|
update_committees(&db, &ctx, &config_global, &mut members).await;
|
2024-10-28 21:34:21 +00:00
|
|
|
}
|
|
|
|
|
2024-11-09 14:55:26 +00:00
|
|
|
/**
|
|
|
|
This function can take a vec of members (or just one) and gives tehm the appropiate roles on teh committee server
|
|
|
|
*/
|
|
|
|
pub async fn update_committees(db: &Pool<Sqlite>, ctx: &Context, config: &Config, members: &mut Vec<Member>) {
|
|
|
|
let server = config.committee_server;
|
2025-02-19 00:17:02 +00:00
|
|
|
let committee_member = RoleId::new(1226602779968274573);
|
2024-10-28 21:34:21 +00:00
|
|
|
let committees = get_committees(db).await;
|
2025-02-27 01:19:40 +00:00
|
|
|
let categories = [
|
2025-02-19 00:17:02 +00:00
|
|
|
ChannelId::new(1226606560973815839),
|
|
|
|
// C&S Chats 2
|
|
|
|
ChannelId::new(1341457244973305927),
|
|
|
|
// C&S Chats 3
|
|
|
|
ChannelId::new(1341457509717639279),
|
|
|
|
];
|
2024-10-28 21:34:21 +00:00
|
|
|
|
|
|
|
// information about the server
|
2025-02-27 01:19:40 +00:00
|
|
|
let mut roles_db = HashMap::new();
|
|
|
|
for role in db_roles_get(db).await {
|
|
|
|
roles_db.insert(
|
|
|
|
role.id_wolves,
|
|
|
|
CommitteeRoles {
|
|
|
|
id_wolves: role.id_wolves,
|
|
|
|
id_role: role.id_role,
|
|
|
|
id_channel: role.id_channel,
|
|
|
|
name_role: role.name_role,
|
|
|
|
name_channel: role.name_channel,
|
|
|
|
// always start at 0
|
|
|
|
count: 0,
|
|
|
|
},
|
|
|
|
);
|
2024-10-28 21:34:21 +00:00
|
|
|
}
|
|
|
|
|
2025-02-27 01:19:40 +00:00
|
|
|
let mut channels = server.channels(&ctx).await.unwrap_or_default();
|
2024-11-09 16:23:03 +00:00
|
|
|
|
2024-10-28 21:34:21 +00:00
|
|
|
// a map of users and the roles they are goign to be getting
|
|
|
|
let mut users_roles = HashMap::new();
|
|
|
|
|
2025-02-27 01:19:40 +00:00
|
|
|
let mut re_order = false;
|
|
|
|
// we need to create roles and channels if tehy dont already exist
|
2025-02-18 21:14:05 +00:00
|
|
|
let mut category_index = 0;
|
|
|
|
let mut i = 0;
|
|
|
|
loop {
|
|
|
|
if i >= committees.len() {
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
let committee = &committees[i];
|
|
|
|
|
2025-02-27 01:19:40 +00:00
|
|
|
// if a club/soc ever changes their name
|
|
|
|
if let Some(x) = roles_db.get_mut(&committee.id) {
|
2025-02-28 00:05:57 +00:00
|
|
|
committee.name_full.clone_into(&mut x.name_role);
|
|
|
|
committee.name_profile.clone_into(&mut x.name_channel);
|
2025-02-27 01:19:40 +00:00
|
|
|
}
|
2025-02-27 03:02:35 +00:00
|
|
|
|
2025-02-27 01:19:40 +00:00
|
|
|
// handle new clubs/socs
|
|
|
|
if let std::collections::hash_map::Entry::Vacant(e) = roles_db.entry(committee.id) {
|
|
|
|
// create channel
|
|
|
|
// channel is first as the categories can only contain 50 channels
|
|
|
|
let channel = match server
|
2025-02-19 00:17:02 +00:00
|
|
|
.create_channel(
|
|
|
|
&ctx,
|
|
|
|
CreateChannel::new(&committee.name_profile)
|
|
|
|
.kind(ChannelType::Text)
|
|
|
|
.category(categories[category_index]),
|
|
|
|
)
|
2024-11-09 16:23:03 +00:00
|
|
|
.await
|
|
|
|
{
|
|
|
|
Ok(x) => {
|
2025-02-18 13:36:08 +00:00
|
|
|
println!("Created channel: {}", &committee.name_profile);
|
2025-02-27 01:19:40 +00:00
|
|
|
|
|
|
|
x.id
|
2024-11-09 16:23:03 +00:00
|
|
|
}
|
|
|
|
Err(x) => {
|
2025-02-18 21:14:05 +00:00
|
|
|
let tmp = x.to_string();
|
2025-02-27 01:19:40 +00:00
|
|
|
dbg!("Unable to create channel: ", &tmp, &tmp.contains("Maximum number of channels in category reached (50)"));
|
2025-02-18 21:14:05 +00:00
|
|
|
if x.to_string().contains("Maximum number of channels in category reached (50)") {
|
|
|
|
category_index += 1;
|
|
|
|
|
|
|
|
continue;
|
|
|
|
}
|
2025-02-27 01:19:40 +00:00
|
|
|
ChannelId::new(1)
|
2024-11-09 16:23:03 +00:00
|
|
|
}
|
2025-02-27 01:19:40 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
// create role
|
|
|
|
let role = match server
|
|
|
|
.create_role(&ctx, EditRole::new().name(&committee.name_full).hoist(false).mentionable(true))
|
|
|
|
.await
|
|
|
|
{
|
|
|
|
Ok(x) => x.id,
|
|
|
|
Err(_) => RoleId::new(1),
|
|
|
|
};
|
|
|
|
|
|
|
|
let tmp = CommitteeRoles {
|
|
|
|
id_wolves: committee.id,
|
|
|
|
id_role: role,
|
|
|
|
id_channel: channel,
|
|
|
|
name_role: committee.name_full.to_owned(),
|
|
|
|
name_channel: committee.name_profile.to_owned(),
|
|
|
|
count: 0,
|
|
|
|
};
|
|
|
|
|
|
|
|
// save it to the db in case of crash or error
|
|
|
|
db_role_set(db, &tmp).await;
|
|
|
|
|
|
|
|
// insert it into teh local cache
|
|
|
|
e.insert(tmp);
|
|
|
|
|
|
|
|
re_order = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
i += 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
for committee in &committees {
|
|
|
|
let r = if let Some(x) = roles_db.get(&committee.id) {
|
|
|
|
x.id_role
|
|
|
|
} else {
|
|
|
|
continue;
|
2024-11-09 16:23:03 +00:00
|
|
|
};
|
|
|
|
|
2025-02-27 01:19:40 +00:00
|
|
|
for id_wolves in &committee.committee {
|
|
|
|
// ID in this is the wolves ID, so we need to get a matching discord ID (if one exists)
|
|
|
|
if let Some(x) = get_server_member_discord(db, id_wolves).await {
|
|
|
|
if let Some(member_tmp) = x.discord {
|
2025-02-27 03:02:35 +00:00
|
|
|
if server.member(ctx, &member_tmp).await.is_ok() {
|
|
|
|
let values = users_roles.entry(member_tmp).or_insert(vec![]);
|
|
|
|
values.push(r);
|
2024-10-28 21:34:21 +00:00
|
|
|
|
2025-02-27 03:02:35 +00:00
|
|
|
if let Some(x) = roles_db.get_mut(&committee.id) {
|
|
|
|
x.count += 1;
|
|
|
|
}
|
2024-10-28 21:34:21 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// now we have a map of all users that should get roles time to go through all the folks on teh server
|
|
|
|
for member in members {
|
2025-02-18 21:14:05 +00:00
|
|
|
let roles_current = member.roles(ctx).unwrap_or_default();
|
|
|
|
|
2024-10-28 21:34:21 +00:00
|
|
|
let roles_required = match users_roles.get(&member.user.id) {
|
|
|
|
None => {
|
|
|
|
vec![]
|
|
|
|
}
|
|
|
|
Some(x) => {
|
2025-02-18 21:14:05 +00:00
|
|
|
let mut tmp = x.to_owned();
|
|
|
|
if !tmp.is_empty() {
|
2025-02-19 00:17:02 +00:00
|
|
|
tmp.push(committee_member);
|
2025-02-18 21:14:05 +00:00
|
|
|
}
|
|
|
|
tmp
|
2024-10-28 21:34:21 +00:00
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
let mut roles_rem = vec![];
|
2025-02-18 21:14:05 +00:00
|
|
|
let mut roles_add = vec![];
|
|
|
|
// get a list of all the roles to remove from someone
|
|
|
|
|
|
|
|
let mut roles_current_id = vec![];
|
|
|
|
for role in &roles_current {
|
|
|
|
roles_current_id.push(role.id.to_owned());
|
|
|
|
if !roles_required.contains(&role.id) {
|
|
|
|
roles_rem.push(role.id.to_owned());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2025-02-19 00:51:40 +00:00
|
|
|
if !roles_required.is_empty() {
|
|
|
|
// if there are committee roles then give the general purporse role
|
|
|
|
roles_add.push(committee_member);
|
2025-02-27 01:19:40 +00:00
|
|
|
|
|
|
|
if let Some(x) = roles_db.get_mut(&0) {
|
|
|
|
x.count += 1;
|
|
|
|
}
|
2025-02-19 00:51:40 +00:00
|
|
|
}
|
|
|
|
|
2025-02-18 21:14:05 +00:00
|
|
|
for role in &roles_required {
|
|
|
|
if !roles_current_id.contains(role) {
|
|
|
|
roles_add.push(role.to_owned());
|
2024-10-28 21:34:21 +00:00
|
|
|
}
|
|
|
|
}
|
2025-02-18 21:14:05 +00:00
|
|
|
|
2024-10-28 21:34:21 +00:00
|
|
|
if !roles_rem.is_empty() {
|
|
|
|
member.remove_roles(&ctx, &roles_rem).await.unwrap_or_default();
|
|
|
|
}
|
|
|
|
|
2025-02-18 21:14:05 +00:00
|
|
|
if !roles_add.is_empty() {
|
2024-10-28 21:34:21 +00:00
|
|
|
// these roles are flavor roles, only there to make folks mentionable
|
2025-02-18 21:14:05 +00:00
|
|
|
member.add_roles(&ctx, &roles_add).await.unwrap_or_default();
|
|
|
|
} else {
|
2025-02-19 00:17:02 +00:00
|
|
|
member.remove_roles(&ctx, &[committee_member]).await.unwrap_or_default();
|
2024-10-28 21:34:21 +00:00
|
|
|
}
|
|
|
|
}
|
2024-11-09 16:47:48 +00:00
|
|
|
|
2025-02-27 01:19:40 +00:00
|
|
|
let mut channel_names = vec![];
|
2025-02-27 22:37:40 +00:00
|
|
|
let mut positions = vec![];
|
2025-02-27 01:19:40 +00:00
|
|
|
for role in roles_db.values() {
|
|
|
|
// save these to db
|
|
|
|
db_role_set(db, role).await;
|
|
|
|
|
|
|
|
if re_order {
|
2025-02-27 22:37:40 +00:00
|
|
|
let channel_id = role.id_channel.to_owned();
|
|
|
|
if let Some(channel) = channels.get_mut(&channel_id) {
|
|
|
|
// record the position of each of teh C&S channels
|
|
|
|
positions.push(channel.position);
|
|
|
|
|
|
|
|
// pull out teh channel names
|
|
|
|
channel_names.push((role.name_channel.to_owned(), channel_id));
|
|
|
|
}
|
2024-11-09 16:47:48 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2025-02-27 01:19:40 +00:00
|
|
|
if re_order {
|
2025-02-27 22:37:40 +00:00
|
|
|
// sort by the position and name
|
|
|
|
positions.sort();
|
2025-02-27 01:19:40 +00:00
|
|
|
channel_names.sort_by_key(|(name, _)| name.to_owned());
|
|
|
|
|
|
|
|
let mut new_positions = vec![];
|
|
|
|
for (i, (_, id)) in channel_names.iter().enumerate() {
|
2025-02-27 22:37:40 +00:00
|
|
|
new_positions.push((id.to_owned(), positions[i] as u64));
|
2025-02-27 01:19:40 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
if !new_positions.is_empty() {
|
|
|
|
match server.reorder_channels(&ctx, new_positions).await {
|
|
|
|
Ok(_) => {
|
|
|
|
println!("Successfully re-orderd the committee category");
|
|
|
|
}
|
|
|
|
Err(e) => {
|
|
|
|
dbg!("Failed to re-order ", e);
|
|
|
|
}
|
2024-11-09 16:47:48 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2024-10-28 21:34:21 +00:00
|
|
|
}
|
|
|
|
|
2025-02-27 01:19:40 +00:00
|
|
|
#[derive(Debug, Clone, Deserialize, Serialize)]
|
2025-02-27 03:02:35 +00:00
|
|
|
pub struct CommitteeRoles {
|
2025-02-27 01:19:40 +00:00
|
|
|
id_wolves: i64,
|
|
|
|
id_role: RoleId,
|
|
|
|
id_channel: ChannelId,
|
2025-02-27 03:02:35 +00:00
|
|
|
pub name_role: String,
|
2025-02-27 01:19:40 +00:00
|
|
|
name_channel: String,
|
2025-02-27 03:02:35 +00:00
|
|
|
pub count: i64,
|
2025-02-27 01:19:40 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
impl<'r> FromRow<'r, SqliteRow> for CommitteeRoles {
|
|
|
|
fn from_row(row: &'r SqliteRow) -> Result<Self, Error> {
|
|
|
|
Ok(Self {
|
|
|
|
id_wolves: row.try_get("id_wolves")?,
|
|
|
|
id_role: get_role_from_row(row, "id_role"),
|
|
|
|
id_channel: get_channel_from_row(row, "id_channel"),
|
|
|
|
name_role: row.try_get("name_role")?,
|
|
|
|
name_channel: row.try_get("name_channel")?,
|
|
|
|
count: row.try_get("count")?,
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
async fn db_role_set(db: &Pool<Sqlite>, role: &CommitteeRoles) {
|
|
|
|
// expiry
|
|
|
|
match sqlx::query_as::<_, CommitteeRoles>(
|
|
|
|
"
|
|
|
|
INSERT INTO committee_roles (id_wolves, id_role, id_channel, name_role, name_channel, count)
|
|
|
|
VALUES ($1, $2, $3, $4, $5, $6)
|
2025-02-27 01:24:13 +00:00
|
|
|
ON CONFLICT(id_wolves) DO UPDATE SET name_role = $4, name_channel = $5, count = $6
|
2025-02-27 01:19:40 +00:00
|
|
|
",
|
|
|
|
)
|
|
|
|
.bind(role.id_wolves)
|
|
|
|
.bind(role.id_role.get() as i64)
|
|
|
|
.bind(role.id_channel.get() as i64)
|
|
|
|
.bind(&role.name_role)
|
|
|
|
.bind(&role.name_channel)
|
|
|
|
.bind(role.count)
|
|
|
|
.fetch_optional(db)
|
|
|
|
.await
|
|
|
|
{
|
|
|
|
Ok(_) => {}
|
|
|
|
Err(e) => {
|
|
|
|
println!("Failure to insert into Wolves {:?}", role);
|
|
|
|
println!("{:?}", e);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2025-02-27 03:02:35 +00:00
|
|
|
pub async fn db_roles_get(db: &Pool<Sqlite>) -> Vec<CommitteeRoles> {
|
2025-02-27 01:19:40 +00:00
|
|
|
// expiry
|
|
|
|
sqlx::query_as::<_, CommitteeRoles>(
|
|
|
|
"
|
|
|
|
SELECT *
|
|
|
|
FROM committee_roles
|
|
|
|
",
|
|
|
|
)
|
|
|
|
.fetch_all(db)
|
|
|
|
.await
|
|
|
|
.unwrap_or_else(|e| {
|
|
|
|
println!("Failure to get Roles from committee_roles");
|
|
|
|
println!("{:?}", e);
|
|
|
|
vec![]
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
2025-02-27 23:56:48 +00:00
|
|
|
pub async fn get_committees(db: &Pool<Sqlite>) -> Vec<Committees> {
|
2025-02-18 22:46:58 +00:00
|
|
|
sqlx::query_as::<_, Committees>(
|
2024-10-28 21:34:21 +00:00
|
|
|
r#"
|
|
|
|
SELECT *
|
|
|
|
FROM committees
|
|
|
|
"#,
|
|
|
|
)
|
2025-02-19 00:17:02 +00:00
|
|
|
.fetch_all(db)
|
|
|
|
.await
|
|
|
|
.unwrap_or_else(|e| {
|
2025-02-18 22:46:58 +00:00
|
|
|
dbg!(e);
|
|
|
|
vec![]
|
|
|
|
})
|
2024-10-28 21:34:21 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
async fn get_server_member_discord(db: &Pool<Sqlite>, user: &i64) -> Option<Wolves> {
|
|
|
|
sqlx::query_as::<_, Wolves>(
|
|
|
|
r#"
|
|
|
|
SELECT *
|
|
|
|
FROM wolves
|
|
|
|
WHERE id_wolves = ?
|
|
|
|
"#,
|
|
|
|
)
|
2024-10-28 21:53:04 +00:00
|
|
|
.bind(user)
|
|
|
|
.fetch_one(db)
|
|
|
|
.await
|
|
|
|
.ok()
|
2024-10-28 21:34:21 +00:00
|
|
|
}
|
2024-10-28 21:53:04 +00:00
|
|
|
}
|