From cc286d6066de03118f2eca934ea3f03dd36b19cb Mon Sep 17 00:00:00 2001 From: Kubat <mael.martin31@gmail.com> Date: Mon, 13 Dec 2021 11:10:09 +0100 Subject: [PATCH] Add config to set if the bot should handle events --- mgb.yml | 6 +++++- src/config.rs | 18 +++++++++++++++++- src/matrix.rs | 18 ++++++++++++++---- 3 files changed, 36 insertions(+), 6 deletions(-) diff --git a/mgb.yml b/mgb.yml index 49a475c..05480b9 100644 --- a/mgb.yml +++ b/mgb.yml @@ -1,4 +1,8 @@ [user] -id=@some_id:matrix.org +id=@some_id\:matrix.org password=no-password display_name=MGB-Hitagi + +[handler] +state_member=true +room_message=true diff --git a/src/config.rs b/src/config.rs index 520e633..fcdef0e 100644 --- a/src/config.rs +++ b/src/config.rs @@ -2,7 +2,7 @@ use ini::{Error::Io as IniErrIo, Error::Parse as IniErrParse, Ini}; use log::{error, info, warn, LevelFilter}; -use std::{env, path::Path, process::abort}; +use std::{env, path::Path, process::abort, str::FromStr}; use url::Url; pub struct Config { @@ -10,6 +10,9 @@ pub struct Config { pub homeserver_url: Url, // The url of the home server, like https://matrix.iiens.net pub user_name: String, // The true user name pub user_password: String, // The true user name + + pub handle_state_member: bool, // Install handler for state memver changes + pub handle_room_message: bool, // Install handler for room messages } pub fn setup_logging() { @@ -36,6 +39,12 @@ pub fn from_file(file_name: &String) -> Result<Config, String> { Err(IniErrParse(e)) => Err(e.to_string()), Ok(conf) => { let hs_url_str = conf.get_from_or(Some("user"), "homeserver", "https://matrix.org"); + let handle_room_message_str = conf + .get_from_or(Some("handler"), "room_message", "true") + .to_string(); + let handle_state_member_str = conf + .get_from_or(Some("handler"), "state_member", "true") + .to_string(); return match Url::parse(hs_url_str) { Err(e) => Err(e.to_string()), Ok(hs_url) => Ok(Config { @@ -49,6 +58,10 @@ pub fn from_file(file_name: &String) -> Result<Config, String> { .get_from_or(Some("user"), "display_name", "MGB-Hitagi") .to_string(), homeserver_url: hs_url, + handle_room_message: <bool as FromStr>::from_str(&handle_room_message_str) + .unwrap_or(false), + handle_state_member: <bool as FromStr>::from_str(&handle_state_member_str) + .unwrap_or(false), }), }; } @@ -61,6 +74,9 @@ pub fn write_default(file_name: &String) -> Result<(), String> { .set("id", "@some_id:matrix.org") .set("password", "no-password") .set("display_name", "MGB-Hitagi"); + conf.with_section(Some("handler")) + .set("state_member", "true") + .set("room_message", "true"); match conf.write_to_file_policy(file_name, ini::EscapePolicy::Everything) { Ok(()) => { info!("Default config file written to {}", file_name); diff --git a/src/matrix.rs b/src/matrix.rs index f0b31ce..bd364e7 100644 --- a/src/matrix.rs +++ b/src/matrix.rs @@ -1,5 +1,5 @@ use crate::config::Config; -use futures::{join, future::join_all}; +use futures::future::join_all; use log::{error, info, warn}; use matrix_sdk::{ deserialized_responses::EncryptionInfo, @@ -144,9 +144,19 @@ pub async fn connect_and_handle(config: Config) -> Result<()> { client.sync_once(SyncSettings::default()).await?; startup_and_log_rooms(&client).await; - let register_handle_state = client.register_event_handler(on_state_member); - let register_handle_message = client.register_event_handler(on_room_message); - join!(register_handle_message, register_handle_state); + if config.handle_state_member { + info!("Handle state member events"); + client.register_event_handler(on_state_member).await; + } else { + warn!("Ignore state member events"); + } + + if config.handle_room_message { + info!("Handle room message events"); + client.register_event_handler(on_room_message).await; + } else { + error!("Ignore room message events! The bot won't answer to any message"); + } info!("Entering sync loop"); let token = client.sync_token().await.unwrap(); -- GitLab