Added function to delete swears from room when detected
parent
7bdf1a8b2e
commit
32ca116cb8
36
src/bot.rs
36
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<String>
|
||||
}
|
||||
|
@ -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<Bot>) {
|
||||
async fn on_room_message(event: OriginalSyncRoomMessageEvent, room: Room, Ctx(bot): Ctx<Bot>) {
|
||||
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) {
|
||||
|
|
|
@ -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
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8,3 +8,6 @@ room = general
|
|||
|
||||
[swear_list]
|
||||
url = https://raw.githubusercontent.com/chucknorris-io/swear-words/master/en
|
||||
|
||||
[rules]
|
||||
allow_swear = false
|
||||
|
|
Loading…
Reference in New Issue