Skip to content
Extraits de code Groupes Projets
Vérifiée Valider 984af3d9 rédigé par Kubat's avatar Kubat
Parcourir les fichiers

Can now create the package before bot launch

parent abc0409f
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
use log::error;
use std::{process::abort, string::String};
#[allow(dead_code)]
pub enum CmdHandler {
Simple(fn(Vec<String>) -> bool),
Echo(fn(Vec<String>) -> String),
MultiEcho(fn(Vec<String>) -> Vec<String>),
}
#[allow(dead_code)]
pub struct Cmd {
name: String,
argc: u32,
handler: CmdHandler,
}
impl Cmd {
#[allow(dead_code)]
pub fn matches(&self, name: &String, args: &Vec<String>) -> bool {
(self.name == *name) && (self.argc as usize == args.len())
}
#[allow(dead_code)]
pub fn exec(&self, args: Vec<String>) -> String {
if args.len() != self.argc as usize {
error!("Arg count doesn't match");
abort();
}
match self.handler {
CmdHandler::Simple(f) => match f(args) {
true => "<b>Ok</b>".to_string(),
false => "<b>Failed!</b>".to_string(),
},
CmdHandler::Echo(f) => f(args),
CmdHandler::MultiEcho(f) => f(args).join("<br>---"),
}
}
#[allow(dead_code)]
pub fn get_name(&self) -> &str {
&self.name
}
}
pub mod acl; pub mod acl;
pub mod cmd;
pub mod package; pub mod package;
use log::error;
use std::{process::abort, string::String};
#[allow(dead_code)]
pub enum CmdHandler {
Simple(fn(Vec<String>) -> bool),
Echo(fn(Vec<String>) -> String),
MultiEcho(fn(Vec<String>) -> Vec<String>),
}
#[allow(dead_code)]
pub struct Cmd {
name: String,
argc: u32,
handler: CmdHandler,
}
impl Cmd {
#[allow(dead_code)]
pub fn matches(&self, name: &String, args: &Vec<String>) -> bool {
(self.name == *name) && (self.argc as usize == args.len())
}
#[allow(dead_code)]
pub fn exec(&self, args: Vec<String>) -> String {
if args.len() != self.argc as usize {
error!("Arg count doesn't match");
abort();
}
match self.handler {
CmdHandler::Simple(f) => match f(args) {
true => "<b>Ok</b>".to_string(),
false => "<b>Failed!</b>".to_string(),
},
CmdHandler::Echo(f) => f(args),
CmdHandler::MultiEcho(f) => f(args).join("<br>---"),
}
}
#[allow(dead_code)]
pub fn get_name(&self) -> &str {
&self.name
}
}
use crate::cmd::{ use crate::cmd::{
acl::{CmdAcl, CmdAdminRegister}, acl::{CmdAcl, CmdAdminRegister},
cmd::Cmd, Cmd,
}; };
use ini::Properties as IniSection; use ini::Properties as IniSection;
use matrix_sdk::{room::Room, ruma::UserId}; use matrix_sdk::{room::Room, ruma::UserId};
...@@ -34,7 +34,7 @@ impl CmdPackage { ...@@ -34,7 +34,7 @@ impl CmdPackage {
} }
#[allow(dead_code)] #[allow(dead_code)]
pub fn from_config(section: IniSection, commands: Vec<Cmd>) -> CmdPackage { pub fn from_config(section: &IniSection, commands: Vec<Cmd>) -> CmdPackage {
CmdPackage { CmdPackage {
name: section.get("name").unwrap().to_string(), name: section.get("name").unwrap().to_string(),
acl: CmdAcl::from_string(section.get("acl").unwrap().to_string()), acl: CmdAcl::from_string(section.get("acl").unwrap().to_string()),
......
#![allow(dead_code)] #![allow(dead_code)]
use ini::{Error::Io as IniErrIo, Error::Parse as IniErrParse, Ini}; use ini::{Error::Io as IniErrIo, Error::Parse as IniErrParse, Ini, Properties as IniSection};
use log::{error, info, warn, LevelFilter}; use log::{error, info, warn, LevelFilter};
use std::{env, path::Path, process::abort, str::FromStr}; use std::{env, path::Path, process::abort, str::FromStr};
use url::Url; use url::Url;
...@@ -13,6 +13,14 @@ pub struct Config { ...@@ -13,6 +13,14 @@ pub struct Config {
pub handle_state_member: bool, // Install handler for state memver changes pub handle_state_member: bool, // Install handler for state memver changes
pub handle_room_message: bool, // Install handler for room messages pub handle_room_message: bool, // Install handler for room messages
ini_handler: Ini,
}
impl Config {
pub fn section(&self, name: &str) -> Option<&IniSection> {
self.ini_handler.section(Some(name))
}
} }
pub fn setup_logging() { pub fn setup_logging() {
...@@ -62,6 +70,7 @@ pub fn from_file(file_name: &String) -> Result<Config, String> { ...@@ -62,6 +70,7 @@ pub fn from_file(file_name: &String) -> Result<Config, String> {
.unwrap_or(false), .unwrap_or(false),
handle_state_member: <bool as FromStr>::from_str(&handle_state_member_str) handle_state_member: <bool as FromStr>::from_str(&handle_state_member_str)
.unwrap_or(false), .unwrap_or(false),
ini_handler: conf,
}), }),
}; };
} }
......
use crate::config::Config; use crate::{config::Config, cmd::package::CmdPackage, cmd::{ Cmd, CmdHandler}};
use futures::future::join_all; use futures::future::join_all;
use log::{error, info, warn}; use log::{error, info, warn};
use matrix_sdk::{ use matrix_sdk::{
...@@ -16,7 +16,7 @@ use matrix_sdk::{ ...@@ -16,7 +16,7 @@ use matrix_sdk::{
}, },
Client, Result, SyncSettings, Client, Result, SyncSettings,
}; };
use std::convert::TryFrom; use std::{convert::TryFrom,process::abort};
use tokio::time::{sleep, Duration}; use tokio::time::{sleep, Duration};
async fn join_room(room: &Invited) { async fn join_room(room: &Invited) {
...@@ -128,6 +128,14 @@ async fn startup_and_log_rooms(client: &Client) { ...@@ -128,6 +128,14 @@ async fn startup_and_log_rooms(client: &Client) {
} }
pub async fn connect_and_handle(config: Config) -> Result<()> { pub async fn connect_and_handle(config: Config) -> Result<()> {
// TODO: Refactor
let _pkg = match config.section("basic") {
Some(section) => CmdPackage::from_config(&section, vec![]),
None => {
abort();
}
};
let alice = UserId::try_from(config.user_name)?; let alice = UserId::try_from(config.user_name)?;
let client = Client::new(config.homeserver_url)?; let client = Client::new(config.homeserver_url)?;
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter