mirror of
https://github.com/stoatchat/stoatchat.git
synced 2026-07-14 13:36:59 +00:00
feat: add `joined_at` property to members feat: add `timeout` property to members (non-functional)
60 lines
1.4 KiB
Rust
60 lines
1.4 KiB
Rust
use crate::{
|
|
events::client::EventV1,
|
|
models::{
|
|
server_member::{FieldsMember, PartialMember},
|
|
Member, Server,
|
|
},
|
|
Database, Result,
|
|
};
|
|
|
|
impl Member {
|
|
/// Update member data
|
|
pub async fn update<'a>(
|
|
&mut self,
|
|
db: &Database,
|
|
partial: PartialMember,
|
|
remove: Vec<FieldsMember>,
|
|
) -> Result<()> {
|
|
for field in &remove {
|
|
self.remove(field);
|
|
}
|
|
|
|
self.apply_options(partial.clone());
|
|
|
|
db.update_member(&self.id, &partial, remove.clone()).await?;
|
|
|
|
EventV1::ServerMemberUpdate {
|
|
id: self.id.clone(),
|
|
data: partial,
|
|
clear: remove,
|
|
}
|
|
.p(self.id.server.clone())
|
|
.await;
|
|
|
|
Ok(())
|
|
}
|
|
|
|
/// Get this user's current ranking
|
|
pub fn get_ranking(&self, server: &Server) -> i64 {
|
|
let mut value = i64::MAX;
|
|
for role in &self.roles {
|
|
if let Some(role) = server.roles.get(role) {
|
|
if role.rank < value {
|
|
value = role.rank;
|
|
}
|
|
}
|
|
}
|
|
|
|
value
|
|
}
|
|
|
|
pub fn remove(&mut self, field: &FieldsMember) {
|
|
match field {
|
|
FieldsMember::Avatar => self.avatar = None,
|
|
FieldsMember::Nickname => self.nickname = None,
|
|
FieldsMember::Roles => self.roles.clear(),
|
|
FieldsMember::Timeout => self.timeout = None,
|
|
}
|
|
}
|
|
}
|