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

Group commandes into packages

parent 767c285e
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
Fichier déplacé
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>---"),
}
}
}
use crate::cmd::{
acl::{action_permited, CmdAcl, CmdAdminRegister},
cmd::Cmd,
};
use log::{error, info, warn};
use matrix_sdk::{room::Room, ruma::UserId};
pub struct CmdPackage {
name: String,
acl: CmdAcl,
admin_register: CmdAdminRegister,
commands: Vec<Cmd>,
}
impl CmdPackage {
#[allow(dead_code)]
pub fn handle(&self, room: &Room, user_id: &UserId, user_cmd: Vec<String>) -> String {
match action_permited(&self.admin_register, &self.acl, room, user_id) {
Err(string) => "Action not permited: ".to_string() + &string,
Ok(()) => match user_cmd.split_first() {
None => "No command was passed".to_string(),
Some((name, args)) => match self
.commands
.iter()
.find(|x| x.matches(name, &args.to_vec()))
{
None => "Command not found".to_string(),
Some(command) => command.exec(args.to_vec()),
},
},
}
}
}
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