auto-invite-matrix-bot

A small bot to redirect people.
git clone git://archive.git.mtrnord.blog/MTRNord/auto-invite-matrix-bot.git
Log | Files | Refs | README | LICENSE

commit 8896b9f9f73bb4d15926691d4390691d71f8c3fe
parent 6b8bf613d5e96b4bcb0175c51722797b2a21f593
Author: Marcel <mtrnord1@gmail.com>
Date:   Mon, 17 Feb 2020 22:03:54 +0100

Add more accurate logging

Took 35 minutes

Diffstat:
M.gitignore | 1+
MCargo.lock | 43+++++++++++++++++++++++++++++++++++++++++++
MCargo.toml | 4++++
Asrc/logger.rs | 21+++++++++++++++++++++
Msrc/main.rs | 47+++++++++++++++++++++++++++--------------------
5 files changed, 96 insertions(+), 20 deletions(-)

diff --git a/.gitignore b/.gitignore @@ -1,3 +1,4 @@ /target **/*.rs.bk config.yaml +output.log diff --git a/Cargo.lock b/Cargo.lock @@ -22,9 +22,12 @@ dependencies = [ name = "auto-invite-matrix-bot" version = "0.1.0" dependencies = [ + "chrono 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)", "clap 3.0.0-beta.1 (git+https://github.com/clap-rs/clap/)", + "fern 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)", "futures-core 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", "futures-util 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "ruma-client 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", "serde_yaml 0.8.11 (registry+https://github.com/rust-lang/crates.io-index)", @@ -66,6 +69,16 @@ version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] +name = "chrono" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "num-integer 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", + "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] name = "clap" version = "3.0.0-beta.1" source = "git+https://github.com/clap-rs/clap/#bbb14f8bd47ef201b315d367922343577ee60718" @@ -114,6 +127,15 @@ version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] +name = "fern" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "chrono 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)", + "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] name = "fnv" version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -434,6 +456,23 @@ dependencies = [ ] [[package]] +name = "num-integer" +version = "0.1.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "num-traits" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] name = "openssl" version = "0.10.28" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1040,11 +1079,13 @@ dependencies = [ "checksum c2-chacha 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "214238caa1bf3a496ec3392968969cab8549f96ff30652c9e56885329315f6bb" "checksum cc 1.0.50 (registry+https://github.com/rust-lang/crates.io-index)" = "95e28fa049fda1c330bcf9d723be7663a899c4679724b34c81e9f5a326aab8cd" "checksum cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" +"checksum chrono 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)" = "31850b4a4d6bae316f7a09e691c944c28299298837edc0a03f755618c23cbc01" "checksum clap 3.0.0-beta.1 (git+https://github.com/clap-rs/clap/)" = "<none>" "checksum clap_derive 3.0.0-beta.1 (git+https://github.com/clap-rs/clap/)" = "<none>" "checksum core-foundation 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)" = "25b9e03f145fd4f2bf705e07b900cd41fc636598fe5dc452fd0db1441c3f496d" "checksum core-foundation-sys 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e7ca8a5221364ef15ce201e8ed2f609fc312682a8f4e0e3d4aa5879764e0fa3b" "checksum dtoa 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "4358a9e11b9a09cf52383b451b49a169e8d797b68aa02301ff586d70d9661ea3" +"checksum fern 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)" = "e69ab0d5aca163e388c3a49d284fed6c3d0810700e77c5ae2756a50ec1a4daaa" "checksum fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3" "checksum foreign-types 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" "checksum foreign-types-shared 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" @@ -1081,6 +1122,8 @@ dependencies = [ "checksum miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919" "checksum native-tls 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "4b2df1a4c22fd44a62147fd8f13dd0f95c9d8ca7b2610299b2a2f9cf8964274e" "checksum net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "42550d9fb7b6684a6d404d9fa7250c2eb2646df731d1c06afc06dcee9e1bcf88" +"checksum num-integer 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "3f6ea62e9d81a77cd3ee9a2a5b9b609447857f3d358704331e4ef39eb247fcba" +"checksum num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "c62be47e61d1842b9170f0fdeec8eba98e60e90e5446449a0545e5152acd7096" "checksum openssl 0.10.28 (registry+https://github.com/rust-lang/crates.io-index)" = "973293749822d7dd6370d6da1e523b0d1db19f06c459134c658b2a4261378b52" "checksum openssl-probe 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "77af24da69f9d9341038eba93a073b1fdaaa1b788221b00a69bce9e762cb32de" "checksum openssl-sys 0.9.54 (registry+https://github.com/rust-lang/crates.io-index)" = "1024c0a59774200a555087a6da3f253a9095a5f344e353b212ac4c8b8e450986" diff --git a/Cargo.toml b/Cargo.toml @@ -15,6 +15,10 @@ url = "2.1.1" clap = { git = "https://github.com/clap-rs/clap/" } serde = { version = "1.0", features = ["derive"] } serde_yaml = "0.8" +log = "0.4.8" +fern = "0.5" +chrono = "0.4.10" + [patch.crates-io] ruma-identifiers = { git = 'https://github.com/ruma/ruma-identifiers.git' } diff --git a/src/logger.rs b/src/logger.rs @@ -0,0 +1,21 @@ +use log::LevelFilter; +pub fn setup_logger(crate_level: LevelFilter) -> Result<(), fern::InitError> { + fern::Dispatch::new() + .format(|out, message, record| { + out.finish(format_args!( + "{}[{}][{}] {}", + chrono::Local::now().format("[%Y-%m-%d][%H:%M:%S]"), + record.target(), + record.level(), + message + )) + }) + // output all messages + .level(log::LevelFilter::Warn) + .level_for("auto_invite_matrix_bot", crate_level) + .level_for("ruma_client", crate_level) + .chain(std::io::stdout()) + .chain(fern::log_file("output.log")?) + .apply()?; + Ok(()) +} diff --git a/src/main.rs b/src/main.rs @@ -3,27 +3,31 @@ use std::convert::TryFrom; use clap::Clap; use futures_util::future::join_all; use futures_util::stream::TryStreamExt as _; -use ruma_client::api::r0::membership::invite_user; -use ruma_client::api::r0::membership::join_room_by_id; -use ruma_client::api::r0::message::create_message_event; -use ruma_client::api::r0::sync::sync_events::IncomingResponse; -use ruma_client::identifiers::UserId; use ruma_client::{ self, events::{ - room::message::{MessageEventContent, NoticeMessageEventContent}, EventType, + room::message::{MessageEventContent, NoticeMessageEventContent}, }, HttpsClient, Session, }; +use ruma_client::api::r0::membership::invite_user; +use ruma_client::api::r0::membership::join_room_by_id; +use ruma_client::api::r0::message::create_message_event; +use ruma_client::api::r0::sync::sync_events::IncomingResponse; +use ruma_client::identifiers::UserId; use url::Url; -use crate::config::{load_config, Config, Homeserver}; +use log::{debug, error, info}; + +use crate::config::{Config, Homeserver, load_config}; +use crate::logger::setup_logger; mod config; +mod logger; async fn do_stuff(config: &Config, server: &Homeserver) -> Result<(), ruma_client::Error> { - println!("Starting session as {}", server.mxid); + info!("Starting session as {}", server.mxid); let session: Session; let mut client: HttpsClient = HttpsClient::https( @@ -59,7 +63,7 @@ async fn do_stuff(config: &Config, server: &Homeserver) -> Result<(), ruma_clien ) .await?; } else { - println!("Please provide either a password or an access_token!"); + error!("Please provide either a password or an access_token!"); } let mut sync_stream = Box::pin(client.sync(None, None, false)); @@ -69,21 +73,21 @@ async fn do_stuff(config: &Config, server: &Homeserver) -> Result<(), ruma_clien let res: IncomingResponse = response; for (room_id, _room) in res.rooms.invite { // Auto join rooms - println!("Invited to {:?}", room_id.clone()); + debug!("Invited to {:?}", room_id.clone()); client .request(join_room_by_id::Request { room_id: room_id.clone(), third_party_signed: None, }) .await?; - println!("Joined {:?}", room_id.clone()); + debug!("Joined {:?}", room_id.clone()); let response = client .request(invite_user::Request { room_id: room_id.clone(), user_id: UserId::try_from(target_user.clone().as_str()).unwrap(), }) .await?; - println!("Invited correct user {:?}", response); + debug!("Invited correct user {:?}", response); client .request(create_message_event::Request { room_id, @@ -96,7 +100,7 @@ async fn do_stuff(config: &Config, server: &Homeserver) -> Result<(), ruma_clien }) .await?; - println!("Sent a message about what happened"); + debug!("Sent a message about what happened"); } } @@ -117,13 +121,16 @@ struct Opts { async fn main() -> Result<(), ruma_client::Error> { let opts: Opts = Opts::parse(); - // TODO actually implement logger - match opts.verbose { - 0 => println!("No verbose info"), - 1 => println!("Some verbose info"), - 2 => println!("Tons of verbose info"), - 3 | _ => println!("Don't be crazy"), - } + + let log_level = match opts.verbose { + 0 => log::LevelFilter::Info, // default + 1 => log::LevelFilter::Error, // -v + 2 => log::LevelFilter::Warn, // -vv + 3 => log::LevelFilter::Debug, // -vvv + _ => log::LevelFilter::Trace, // -vvvv and above + }; + + setup_logger(log_level).expect("unable to setup logger"); let config = load_config(opts.config).expect("unable to read config"); let mut futures = vec![];