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,
|
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) {
|
||||||
|
|
|
@ -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
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue