diff --git a/src/bot.rs b/src/bot.rs index a3bd5eb..671d09c 100644 --- a/src/bot.rs +++ b/src/bot.rs @@ -6,12 +6,12 @@ pub mod bot { Client, config::{SyncSettings, RequestConfig}, event_handler::Ctx, - room::{Joined, Room, RoomMember}, + room::{Joined, Room}, ruma::{ - UserId, ServerName, user_id, RoomId, + UserId, ServerName, RoomId, events::room::message::{OriginalSyncRoomMessageEvent, - RoomMessageEventContent}, - }, + RoomMessageEventContent}, OwnedEventId, + }, }; use crate::utils::utils::*; use crate::config_reader::config_reader::BotUserInfo; @@ -20,6 +20,7 @@ pub mod bot { #[derive(Clone)] pub struct Bot { client: Client, + info: BotUserInfo, joined_room: Joined, swear_list: Vec } @@ -85,6 +86,7 @@ pub mod bot { let bot = Bot { client, + info: creds, joined_room, swear_list }; @@ -98,18 +100,34 @@ pub mod bot { bot.client.sync(SyncSettings::new()).await.unwrap(); } - pub async fn on_room_message(event: OriginalSyncRoomMessageEvent, - room: Room, Ctx(bot): Ctx) { + async fn on_room_message(event: OriginalSyncRoomMessageEvent, room: Room, Ctx(bot): Ctx) { if let Room::Joined(_joined) = &room { // Standard text message if let Some(text) = get_message_event_text(&event) { - let member = room.get_member(&event.sender).await.unwrap().unwrap(); + let _member = room.get_member(&event.sender).await.unwrap().unwrap(); let id = &event.event_id; + if bot.info.allow_swear && detect_swear_from_message(&bot.swear_list, &text) { + bot.delete_swear_from_room(id).await; + }; + } } + // Message edit - if let Some((edited_msg_event_id, text)) = get_edited_message_event_text(&event) {} - } + if let Some((edited_msg_event_id, text)) = get_edited_message_event_text(&event){ + if bot.info.allow_swear && detect_swear_from_message(&bot.swear_list, &text) { + bot.delete_swear_from_room(&edited_msg_event_id).await; + }; + + + } + } + + pub async fn delete_swear_from_room(&self, event_id: &OwnedEventId) { + let result = self.joined_room.redact(event_id, Some("Swearing"), None).await; + if result.is_err() { + self.send_message("Error deleting message").await; + }; } pub async fn send_message(&self, message: &str) { diff --git a/src/config_reader.rs b/src/config_reader.rs index 83e6d46..8f673b7 100644 --- a/src/config_reader.rs +++ b/src/config_reader.rs @@ -3,14 +3,15 @@ pub mod config_reader { use configparser::ini::Ini; use std::error::Error; - #[derive(Debug)] + #[derive(Debug, Clone)] #[allow(dead_code)] pub struct BotUserInfo { pub user_id: String, pub password: String, pub homeserver: String, pub room: String, - pub swear_list_url: String + pub swear_list_url: String, + pub allow_swear: bool } impl BotUserInfo { @@ -22,12 +23,14 @@ pub mod config_reader { let homeserver = config.get("credentials", "homeserver").unwrap(); let room = config.get("room", "room").unwrap(); let swear_list_url = config.get("swear_list", "url").unwrap(); + let allow_swear = config.getbool("rules", "allow_swear").unwrap().unwrap(); Ok(BotUserInfo { user_id, password, homeserver, room, - swear_list_url + swear_list_url, + allow_swear }) } } diff --git a/tests/test_config_reading.rs b/tests/test_config_reading.rs index 851f562..5035fc3 100644 --- a/tests/test_config_reading.rs +++ b/tests/test_config_reading.rs @@ -9,6 +9,7 @@ mod tests { let expected_homeserver = "http://example.com"; let expected_room = "general"; let expected_swear_list_url = "https://raw.githubusercontent.com/chucknorris-io/swear-words/master/en"; + let expected_allow_swear = false; let config_file = "tests/test_creds.ini"; let creds = config_reader::BotUserInfo::get_info(config_file).unwrap(); assert_eq!(expected_user_id, creds.user_id); @@ -16,5 +17,6 @@ mod tests { assert_eq!(expected_homeserver, creds.homeserver); assert_eq!(expected_room, creds.room); assert_eq!(expected_swear_list_url, creds.swear_list_url); + assert_eq!(expected_allow_swear, creds.allow_swear) } } diff --git a/tests/test_creds.ini b/tests/test_creds.ini index a481e81..2082d0b 100644 --- a/tests/test_creds.ini +++ b/tests/test_creds.ini @@ -8,3 +8,6 @@ room = general [swear_list] url = https://raw.githubusercontent.com/chucknorris-io/swear-words/master/en + +[rules] +allow_swear = false