diff --git a/src/bot.rs b/src/bot.rs index 08b3ddd..5e5d07a 100644 --- a/src/bot.rs +++ b/src/bot.rs @@ -8,11 +8,11 @@ pub mod bot { event_handler::Ctx, room::{Joined, Room, RoomMember}, ruma::{ - UserId, ServerName, RoomId, - events::room::message::{OriginalSyncRoomMessageEvent, - RoomMessageEventContent}, OwnedEventId, - }, + UserId, ServerName, RoomId, OwnedEventId, + events::room::message::{OriginalSyncRoomMessageEvent, RoomMessageEventContent}, + } }; + use sled; use crate::utils::utils::*; use crate::config_reader::config_reader::BotUserInfo; @@ -148,7 +148,7 @@ pub mod bot { } - } + } async fn delete_message_from_room(&self, event_id: &OwnedEventId, member: &RoomMember, reason: &str) { let result = self.joined_room.redact(event_id, Some(reason), None).await; @@ -164,10 +164,7 @@ pub mod bot { let member_id: &str = member.user_id().as_str(); let mut current_reputation = dbg!(self.database_handle.get(member_id).unwrap().unwrap().first().unwrap().to_owned()); if current_reputation == 0 { - if let Some(_) = self.joined_room.kick_user(member.user_id(), Some("Reputation lower than zero")).await.ok() { - dbg!(self.database_handle.remove(member_id).unwrap()); - self.send_message(&format!("Member {} has been kicked.", member_id)).await; - }; + self.kick_user(member, "Reputation too low!").await; return Ok(()) } else { @@ -177,6 +174,19 @@ pub mod bot { return Ok(()) } } + + async fn kick_user(&self, member: &RoomMember, reason: &str) { + let member_id: &str = member.user_id().as_str(); + if member.power_level() <= 50 { // Won't kick mods and admins + if let Some(_) = self.joined_room.kick_user(member.user_id(), Some(reason)).await.ok() { + dbg!(self.database_handle.remove(member_id).unwrap()); + self.send_message(&format!("Member {} has been kicked.", member_id)).await; + }; + } + else { + self.send_message("Cannot kick moderators and admins").await; + } + } async fn send_message(&self, message: &str) { debug!("Send message ({:?}): {}", &self.joined_room, message);