Added function to delete swears from room when detected

main
David 2023-01-01 14:31:03 +01:00
parent 7bdf1a8b2e
commit 32ca116cb8
4 changed files with 38 additions and 12 deletions

View File

@ -6,12 +6,12 @@ pub mod bot {
Client, Client,
config::{SyncSettings, RequestConfig}, config::{SyncSettings, RequestConfig},
event_handler::Ctx, event_handler::Ctx,
room::{Joined, Room, RoomMember}, room::{Joined, Room},
ruma::{ ruma::{
UserId, ServerName, user_id, RoomId, UserId, ServerName, RoomId,
events::room::message::{OriginalSyncRoomMessageEvent, events::room::message::{OriginalSyncRoomMessageEvent,
RoomMessageEventContent}, RoomMessageEventContent}, OwnedEventId,
}, },
}; };
use crate::utils::utils::*; use crate::utils::utils::*;
use crate::config_reader::config_reader::BotUserInfo; use crate::config_reader::config_reader::BotUserInfo;
@ -20,6 +20,7 @@ pub mod bot {
#[derive(Clone)] #[derive(Clone)]
pub struct Bot { pub struct Bot {
client: Client, client: Client,
info: BotUserInfo,
joined_room: Joined, joined_room: Joined,
swear_list: Vec<String> swear_list: Vec<String>
} }
@ -85,6 +86,7 @@ pub mod bot {
let bot = Bot { let bot = Bot {
client, client,
info: creds,
joined_room, joined_room,
swear_list swear_list
}; };
@ -98,18 +100,34 @@ pub mod bot {
bot.client.sync(SyncSettings::new()).await.unwrap(); bot.client.sync(SyncSettings::new()).await.unwrap();
} }
pub async fn on_room_message(event: OriginalSyncRoomMessageEvent, async fn on_room_message(event: OriginalSyncRoomMessageEvent, room: Room, Ctx(bot): Ctx<Bot>) {
room: Room, Ctx(bot): Ctx<Bot>) {
if let Room::Joined(_joined) = &room { if let Room::Joined(_joined) = &room {
// Standard text message // Standard text message
if let Some(text) = get_message_event_text(&event) { 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; 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 // 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) { pub async fn send_message(&self, message: &str) {

View File

@ -3,14 +3,15 @@ pub mod config_reader {
use configparser::ini::Ini; use configparser::ini::Ini;
use std::error::Error; use std::error::Error;
#[derive(Debug)] #[derive(Debug, Clone)]
#[allow(dead_code)] #[allow(dead_code)]
pub struct BotUserInfo { pub struct BotUserInfo {
pub user_id: String, pub user_id: String,
pub password: String, pub password: String,
pub homeserver: String, pub homeserver: String,
pub room: String, pub room: String,
pub swear_list_url: String pub swear_list_url: String,
pub allow_swear: bool
} }
impl BotUserInfo { impl BotUserInfo {
@ -22,12 +23,14 @@ pub mod config_reader {
let homeserver = config.get("credentials", "homeserver").unwrap(); let homeserver = config.get("credentials", "homeserver").unwrap();
let room = config.get("room", "room").unwrap(); let room = config.get("room", "room").unwrap();
let swear_list_url = config.get("swear_list", "url").unwrap(); let swear_list_url = config.get("swear_list", "url").unwrap();
let allow_swear = config.getbool("rules", "allow_swear").unwrap().unwrap();
Ok(BotUserInfo { Ok(BotUserInfo {
user_id, user_id,
password, password,
homeserver, homeserver,
room, room,
swear_list_url swear_list_url,
allow_swear
}) })
} }
} }

View File

@ -9,6 +9,7 @@ mod tests {
let expected_homeserver = "http://example.com"; let expected_homeserver = "http://example.com";
let expected_room = "general"; let expected_room = "general";
let expected_swear_list_url = "https://raw.githubusercontent.com/chucknorris-io/swear-words/master/en"; 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 config_file = "tests/test_creds.ini";
let creds = config_reader::BotUserInfo::get_info(config_file).unwrap(); let creds = config_reader::BotUserInfo::get_info(config_file).unwrap();
assert_eq!(expected_user_id, creds.user_id); assert_eq!(expected_user_id, creds.user_id);
@ -16,5 +17,6 @@ mod tests {
assert_eq!(expected_homeserver, creds.homeserver); assert_eq!(expected_homeserver, creds.homeserver);
assert_eq!(expected_room, creds.room); assert_eq!(expected_room, creds.room);
assert_eq!(expected_swear_list_url, creds.swear_list_url); assert_eq!(expected_swear_list_url, creds.swear_list_url);
assert_eq!(expected_allow_swear, creds.allow_swear)
} }
} }

View File

@ -8,3 +8,6 @@ room = general
[swear_list] [swear_list]
url = https://raw.githubusercontent.com/chucknorris-io/swear-words/master/en url = https://raw.githubusercontent.com/chucknorris-io/swear-words/master/en
[rules]
allow_swear = false