ModulesManager #37

Merged
modulatingforce merged 22 commits from modulesmanager into main 2024-03-22 21:34:08 -04:00
3 changed files with 25 additions and 478 deletions
Showing only changes of commit 72ebd5193c - Show all commits

View file

@ -246,7 +246,7 @@ impl BotInstance {
/*
BotCommand handling -
- [x] Checks if the input message is a prefix with command name or alias
- [ ] Validate User can run based on identityModule(From_Bot)::can_user_run(
- [x] Validate User can run based on identityModule(From_Bot)::can_user_run(
_usr:String,
_channelname:ChType,
_chat_badge:ChatBadge,
@ -431,40 +431,11 @@ impl BotInstance {
Some(msg),
);
// const OF_CMD_CHANNEL:ChType = Channel(String::new());
// let elevated_access = {
// let mut idlock = id.write().await;
// let (permissability, _) = idlock
// .can_user_run_prvmsg(msg,
// vec![
// identity::UserRole::BotAdmin,
// identity::UserRole::Mod(OF_CMD_CHANNEL),
// identity::UserRole::SupMod(OF_CMD_CHANNEL),
// identity::UserRole::Broadcaster,
// ])
// .await;
// permissability
// };
// if let Permissible::Allow = elevated_access {
// let botlock = bot.read().await;
// let outstr =
// format!("sadg Module is disabled : {:?}",a);
// botlock.botmgrs.chat.say_in_reply_to(msg, outstr).await;
// }
//return;
} else {
let a = Arc::clone(&bot);
l.execute(a, msg.clone()).await;
}
// let a = Arc::clone(&bot);
// l.execute(a, msg.clone()).await;
}
_ => (),

View file

@ -22,10 +22,8 @@ Example
use core::panic;
use std::collections::HashMap;
// use std::error::Error;
use std::sync::Arc;
// use futures::stream::iter;
use twitch_irc::message::PrivmsgMessage;
use casual_logger::Log;
@ -48,8 +46,6 @@ use std::hash::{Hash, Hasher};
use super::identity::ChatBadge;
// use super::identity::ChangeResult;
pub async fn init(mgr: Arc<ModulesManager>) {
@ -91,7 +87,6 @@ pub async fn init(mgr: Arc<ModulesManager>) {
/*
1. Parse out Message Arguments
exec_enable()
@ -415,12 +410,6 @@ pub async fn init(mgr: Arc<ModulesManager>) {
// #[derive(Debug, PartialEq, Eq, Hash, Clone)]
// #[derive(Debug, Hash, Clone)]
#[derive(Debug, Clone)]
pub enum ModType {
BotModule(String),
@ -578,9 +567,6 @@ pub struct Routine {}
type StatusdbEntry = (ModGroup, Vec<StatusType>);
pub struct ModulesManager {
// statusdb: Arc<RwLock<HashMap<ModType, Vec<ModStatusType>>>>,
// statusdb: Arc<RwLock<HashMap<(ModType,ModGroup), Vec<StatusType>>>>,
// statusdb: Arc<RwLock<HashMap<ModType, (ModGroup, Vec<StatusType>)>>>,
statusdb: Arc<RwLock<HashMap<ModType, StatusdbEntry>>>,
pub botactions: Arc<RwLock<HashMap<ModType, Vec<BotAction>>>>,
}
@ -668,19 +654,6 @@ impl ModulesManager {
StatusType::Enabled(StatusLvl::Instance) // This forces core to be validated as Enabled, even if undesired scenario of missing StatusLvl::Instance or empty vectors
},
ModGroup::Custom => {
// // remove all instance level pattern for the module
// while let Some(index) = statusvector
// .iter()
// .position(|x| (*x == StatusType::Enabled(StatusLvl::Instance)) || (*x == StatusType::Disabled(StatusLvl::Instance))) {
// statusvector.remove(index);
// }
// statusvector.push(StatusType::Disabled(StatusLvl::Instance));
// (
// StatusType::Disabled(StatusLvl::Instance),
// ChangeResult::Success("Set Disabled at Instance".to_string())
// )
/*
@ -737,29 +710,12 @@ impl ModulesManager {
//StatusType::Enabled(StatusLvl::Instance)
}
// pub fn togglestatus(&self, _: ModType, _: ChType) -> StatusType {
// // enables or disables based on current status
// StatusType::Enabled(StatusLvl::Instance)
// }
// pub fn setstatus(&self, _: ModType, _: StatusType) -> Result<&str, Box<dyn Error>> {
// // sets the status based given ModSatusType
// // e.g., b.setstatus(BodModule("GambaCore"), Enabled(Channel("modulatingforce"))).expect("ERROR")
// Ok("")
// }
/*
exec_enable(self,requestor,requestor_badge,trg_module,Channel) -> ChangeResult
*/
pub async fn exec_enable(
&self,
requestor: String,
requestor_badge: Option<ChatBadge>,
trg_module: ModType,
// channel: Option<ChType>,
trg_level: StatusLvl,
// bot: BotAR,
id: Arc<RwLock<IdentityManager>>,
) -> ChangeResult
{
@ -784,7 +740,7 @@ impl ModulesManager {
/*
[ ] 1. If CmdSender is BotAdmin but not (Mod,SupMod,Broadcaster)
[x] 1. If CmdSender is BotAdmin but not (Mod,SupMod,Broadcaster)
1. can_user_run for cmdreqRoles including BotAdmin & not can_user_run for cmdreqRoles (Mod,SupMod,Broadcaster)
1a. , and is -i (to instance) , return a Success
1b. , and is not -i (to instance) , return a Failure recommending BotAdmin promote themselves first
@ -795,19 +751,14 @@ impl ModulesManager {
// [x] Validate in trg_module first
// let botlock = bot.read().await;
// let modmgr = Arc::clone(&botlock.botmodules);
let modlist = self.moduleslist().await;
let rslt = modlist.get(&trg_module);
// if let None = rslt {
if rslt.is_none() {
return ChangeResult::Failed("Module doesn't exist".to_string());
}
// let botlock = bot.read().await;
// let id = botlock.get_identity();
let mut idlock = id.write().await;
// if trg_level = StatusLvl::Instance , the temp_chnl = the broadcaster's or the chatter's
@ -833,16 +784,6 @@ impl ModulesManager {
]).await;
// botlog::debug(
// &format!("FAILURE BEFORE Let statements involves :
// admin_level_access : {:?} ; chnl_elevated_access : {:?}",
// admin_level_access , chnl_elevated_access),
// Some("botmodules.rs > exec_enable()".to_string()),
// None,
// );
if let Permissible::Allow = admin_level_access {
if let Permissible::Block = chnl_elevated_access {
@ -868,7 +809,7 @@ impl ModulesManager {
/*
[ ] 2. If CmdSender not a BotAdmin but is (Mod,SupMod,Broadcaster)
[x] 2. If CmdSender not a BotAdmin but is (Mod,SupMod,Broadcaster)
2. not can_user_run for cmdreqRoles including BotAdmin & can_user_run for cmdreqRoles (Mod,SupMod,Broadcaster)
2a. , and is -i (to instance) , return a Failure they are not allowed
2b. , and is not -i (to instance) , return a Success
@ -892,7 +833,7 @@ impl ModulesManager {
/*
[ ] 3. If CmdSender is (Mod,SupMod,Broadcaster) and a BotAdmin
[x] 3. If CmdSender is (Mod,SupMod,Broadcaster) and a BotAdmin
3. can_user_run for cmdreqRoles (Mod,SupMod,Broadcaster) & can_user_run for cmdreqRoles including BotAdmin
3a. , and is not -i (to instance) , return a Success
3b. , and is -i (to instance) , return a Success
@ -937,64 +878,11 @@ impl ModulesManager {
// =======================
// =======================
// =======================
// /*
// 2. Get Special Roles of CmdSender
// 3. If CmdSender is BotAdmin but not (Mod,SupMod,Broadcaster)
// 3a. , and is not -i (to instance) , return a Failure recommending BotAdmin promote themselves first
// 3b. , and is -i (to instance) , return a Success
// 4. If CmdSender not a BotAdmin but is (Mod,SupMod,Broadcaster)
// 4a. , and is not -i (to instance) , return a Success
// 4b. , and is -i (to instance) , return a Failure they are not allowed
// 5. If CmdSender is (Mod,SupMod,Broadcaster) and a BotAdmin
// 5a. , and is not -i (to instance) , return a Success
// 5b. , and is -i (to instance) , return a Success
// */
// // [ ] 2. Get Special Roles of CmdSender
// let botlock = bot.read().await;
// let id = botlock.get_identity();
// let idlock = id.read().await;
// let trgchnl = {
// match trg_level {
// StatusLvl::Instance => None,
// StatusLvl::Ch(a) => Some(a),
// }
// };
// let requestor_roles = idlock
// .getspecialuserroles(
// requestor.to_lowercase(),
// trgchnl,
// )
// .await;
// /*
// [ ] 3. If CmdSender is BotAdmin but not (Mod,SupMod,Broadcaster)
// 3a. , and is not -i (to instance) , return a Failure recommending BotAdmin promote themselves first
// 3b. , and is -i (to instance) , return a Success
// */
// if requestor_roles.contains(&identity::UserRole::BotAdmin)
// && !requestor_roles.contains(&identity::UserRole::Broadcaster)
// && !requestor_roles.contains(&identity::UserRole::Mod(trgchnl))
// {
// }
botlog::debug(
&format!("FAILURE involves :
@ -1016,10 +904,8 @@ impl ModulesManager {
requestor: String,
requestor_badge: Option<ChatBadge>,
trg_module: ModType,
// channel: Option<ChType>,
trg_level: StatusLvl,
force: bool,
// bot: BotAR,
id: Arc<RwLock<IdentityManager>>,
) -> ChangeResult
{
@ -1047,8 +933,6 @@ impl ModulesManager {
// [x] Validate in trg_module first
// let botlock = bot.read().await;
// let modmgr = Arc::clone(&botlock.botmodules);
let modlist = self.moduleslist().await;
let rslt = modlist.get(&trg_module);
@ -1057,9 +941,6 @@ impl ModulesManager {
}
// let botlock = bot.read().await;
// let id = botlock.get_identity();
let mut idlock = id.write().await;
// if trg_level = StatusLvl::Instance , the temp_chnl = the broadcaster's or the chatter's
@ -1087,7 +968,7 @@ impl ModulesManager {
/*
[ ] 1. If CmdSender is BotAdmin but not (Mod,SupMod,Broadcaster)
[x] 1. If CmdSender is BotAdmin but not (Mod,SupMod,Broadcaster)
1. can_user_run for cmdreqRoles including BotAdmin & not can_user_run for cmdreqRoles (Mod,SupMod,Broadcaster)
1a. , and is -f (forced) , return a Success
1b. , and is -i (to instance) , return a Success
@ -1116,11 +997,11 @@ impl ModulesManager {
/*
[ ] 2. If CmdSender not a BotAdmin but is (Mod,SupMod,Broadcaster)
2. not can_user_run for cmdreqRoles including BotAdmin & can_user_run for cmdreqRoles (Mod,SupMod,Broadcaster)
2a. , and is -f (forced) , return a Failure they are not allowed
2b. , and is -i (to instance) , return a Failure they are not allowed
2c. , and has no special flags (-i / -f) , return a Success
[x] 2. If CmdSender not a BotAdmin but is (Mod,SupMod,Broadcaster)
2. not can_user_run for cmdreqRoles including BotAdmin & can_user_run for cmdreqRoles (Mod,SupMod,Broadcaster)
2a. , and is -f (forced) , return a Failure they are not allowed
2b. , and is -i (to instance) , return a Failure they are not allowed
2c. , and has no special flags (-i / -f) , return a Success
*/
@ -1144,11 +1025,11 @@ impl ModulesManager {
/*
[ ] 3. If CmdSender is (Mod,SupMod,Broadcaster) and a BotAdmin
3. can_user_run for cmdreqRoles (Mod,SupMod,Broadcaster) & can_user_run for cmdreqRoles including BotAdmin
3a. , and is -f (forced) , return a Success
3b. , and is -i (to instance) , return a Success
3c. , and has no special flags (-i / -f) , return a Success
[x] 3. If CmdSender is (Mod,SupMod,Broadcaster) and a BotAdmin
3. can_user_run for cmdreqRoles (Mod,SupMod,Broadcaster) & can_user_run for cmdreqRoles including BotAdmin
3a. , and is -f (forced) , return a Success
3b. , and is -i (to instance) , return a Success
3c. , and has no special flags (-i / -f) , return a Success
*/
@ -1203,11 +1084,8 @@ impl ModulesManager {
// at Instance level
// - If core module, do nothing
// self.satusdb.
let mut dbt = self.statusdb.write().await;
// let a = dbt.entry(in_module.clone()).;
let (mgrp,statusvector) = dbt.get_mut(&in_module).unwrap();
match mgrp {
@ -1244,7 +1122,6 @@ impl ModulesManager {
let mut dbt = self.statusdb.write().await;
// let a = dbt.entry(in_module.clone()).;
let (mgrp,statusvector) = dbt.get_mut(&in_module).unwrap();
match mgrp {
@ -1263,9 +1140,6 @@ impl ModulesManager {
if (*x == StatusType::Enabled(StatusLvl::Instance))
|| (*x == StatusType::Disabled(StatusLvl::Instance)) {
true
// } else if let StatusType::Enabled(StatusLvl::Ch(_)) = (*x).clone() {
// true
// } else {false}
} else {
matches!((*x).clone(), StatusType::Enabled(StatusLvl::Ch(_)))
}
@ -1291,7 +1165,6 @@ impl ModulesManager {
let mut dbt = self.statusdb.write().await;
// let a = dbt.entry(in_module.clone()).;
let (mgrp,statusvector) = dbt.get_mut(&in_module).unwrap();
match mgrp {
@ -1328,7 +1201,6 @@ impl ModulesManager {
let mut dbt = self.statusdb.write().await;
// let a = dbt.entry(in_module.clone()).;
let (mgrp,statusvector) = dbt.get_mut(&in_module).unwrap();
match mgrp {
@ -1366,7 +1238,6 @@ impl ModulesManager {
let mut dbt = self.statusdb.write().await;
// let a = dbt.entry(in_module.clone()).;
let (mgrp,statusvector) = dbt.get_mut(&in_module).unwrap();
match mgrp {
@ -1506,17 +1377,6 @@ impl ModulesManager {
)
}
// let mut dbt = self.statusdb.write().await;
// //
// let statusvector = dbt.entry(in_module.clone()).or_insert((in_modgroup.clone(),Vec::new()));
// match in_modgroup {
// ModGroup::Core => statusvector.1.push(StatusType::Enabled(StatusLvl::Instance)) , // Pushes the Module as Enabled at Instance Level
// ModGroup::Custom => statusvector.1.push(StatusType::Disabled(StatusLvl::Instance)),
// }
// statusvector.push(ModStatusType::Enabled(StatusLvl::Instance)); // Pushes the Module as Enabled at Instance Level
self.affirm_in_statusdb(in_module.clone(),in_modgroup).await;
let mut a = self.botactions.write().await;
@ -1571,8 +1431,6 @@ mod core_modulesmanager {
}
/*
Possible Tests
@ -1862,20 +1720,8 @@ mod core_modulesmanager {
// ModuleDoesNotExist, // preferring instead to handle in it's own smaller test
}
// let channel = ChType::Channel("somechannel".to_string());
// let mut idlock = idmgr.write().await;
let mut idlock = idmgr.clone();
// if trg_level = StatusLvl::Instance , the temp_chnl = the broadcaster's or the chatter's
// let arb_chnl = match trg_level.clone() {
// StatusLvl::Instance => ChType::Channel(requestor.to_lowercase()),
// StatusLvl::Ch(a) => a,
// };
let requestor_badge = None; // If they are a Mod on the Given Channel already, that can be evaluated without the current badge
const OF_CMD_CHANNEL:ChType = Channel(String::new());
@ -1917,19 +1763,8 @@ mod core_modulesmanager {
let in_module = BotModule("Experiments01".to_string());
let in_modgroup = ModGroup::Custom;
// match current_test_scenario {
// TestScenarios::BotadminUser => modsmgr.affirm_in_statusdb(in_module.clone(), in_modgroup.clone()).await,
// _ => self::panic!("Scenario not handled"),
// }
modsmgr.affirm_in_statusdb(in_module.clone(), in_modgroup.clone()).await;
// let in_module = match current_test_scenario {
// // TestScenarios::ModuleDoesNotExist => BotModule("NonExisting_Module".to_string()),
// _ => in_module,
// };
/*
[x] 3. affirm when BotAdmin attempts to exec_enable on the following
a. Channel Level , where they are not a Mod
@ -1956,8 +1791,6 @@ mod core_modulesmanager {
trg_level.clone(),
id.clone()).await;
// assert_eq!(rslt,ChangeResult::Failed("Promote yourself Temporarily First".to_string()));
match current_test_scenario {
TestScenarios::BotadminUser =>
assert_eq!(rslt,ChangeResult::Failed("Promote yourself Temporarily First".to_string())),
@ -1965,10 +1798,6 @@ mod core_modulesmanager {
assert_eq!(rslt,ChangeResult::Success("Enabled at Channel Level".to_string())),
TestScenarios::RegularChatter =>
assert_eq!(rslt,ChangeResult::Failed("You're not allowed".to_string())),
// TestScenarios::ModuleDoesNotExist =>
// assert_eq!(rslt,ChangeResult::Failed("You're not allowed".to_string())),
// _ =>
// self::panic!("Scenario not handled"),
}
@ -1978,7 +1807,7 @@ mod core_modulesmanager {
*/
// [x] requestor_badge: Option<ChatBadge>,
// let requestor_badge = ChatBadge::Mod; // setting badge to Mod
let requestor_badge = match current_test_scenario {
TestScenarios::BotadminUser =>
Some(ChatBadge::Mod), // setting badge to Mod -- for the Problem Scenario . They are both BotAdmin & Mod
@ -1986,10 +1815,6 @@ mod core_modulesmanager {
Some(ChatBadge::Mod), // setting badge to Mod
TestScenarios::RegularChatter =>
None, // setting badge to None
// TestScenarios::ModuleDoesNotExist =>
// None,
// _ =>
// self::panic!("Scenario not handled"),
} ;
@ -1999,8 +1824,6 @@ mod core_modulesmanager {
trg_level.clone(),
id.clone()).await;
// assert_eq!(rslt,ChangeResult::Success("Enabled at Channel Level".to_string()));
match current_test_scenario {
TestScenarios::BotadminUser =>
assert_eq!(rslt,ChangeResult::Success("Enabled at Channel Level".to_string())),
@ -2008,10 +1831,6 @@ mod core_modulesmanager {
assert_eq!(rslt,ChangeResult::Success("Enabled at Channel Level".to_string())),
TestScenarios::RegularChatter =>
assert_eq!(rslt,ChangeResult::Failed("You're not allowed".to_string())),
// TestScenarios::ModuleDoesNotExist =>
// assert_eq!(rslt,ChangeResult::Failed("You're not allowed".to_string())),
// _ =>
// self::panic!("Scenario not handled"),
}
/*
@ -2028,10 +1847,6 @@ mod core_modulesmanager {
Some(ChatBadge::Mod),
TestScenarios::RegularChatter =>
None, // setting badge to None
// TestScenarios::ModuleDoesNotExist =>
// None, // setting badge to None
// _ =>
// self::panic!("Scenario not handled"),
};
let rslt = modsmgr.exec_enable(requestor.clone(),
@ -2040,7 +1855,6 @@ mod core_modulesmanager {
trg_level.clone(),
id.clone()).await;
// assert_eq!(rslt,ChangeResult::Success("Enabled at Instance Level".to_string()));
match current_test_scenario {
TestScenarios::BotadminUser =>
@ -2049,10 +1863,6 @@ mod core_modulesmanager {
assert_eq!(rslt,ChangeResult::Failed("You're not allowed".to_string())),
TestScenarios::RegularChatter =>
assert_eq!(rslt,ChangeResult::Failed("You're not allowed".to_string())),
// TestScenarios::ModuleDoesNotExist =>
// assert_eq!(rslt,ChangeResult::Failed("You're not allowed".to_string())),
// _ =>
// self::panic!("Scenario not handled"),
}
/*
@ -2069,7 +1879,6 @@ mod core_modulesmanager {
false,
id.clone()).await;
// assert_eq!(rslt,ChangeResult::Success("Disabled at Channel Level".to_string()));
match current_test_scenario {
TestScenarios::BotadminUser =>
assert_eq!(rslt,ChangeResult::Success("Disabled at Channel Level".to_string())),
@ -2077,10 +1886,6 @@ mod core_modulesmanager {
assert_eq!(rslt,ChangeResult::Success("Disabled at Channel Level".to_string())),
TestScenarios::RegularChatter =>
assert_eq!(rslt,ChangeResult::Failed("You're not allowed".to_string())),
// TestScenarios::ModuleDoesNotExist =>
// assert_eq!(rslt,ChangeResult::Failed("You're not allowed".to_string())),
// _ =>
// self::panic!("Scenario not handled"),
}
@ -2091,7 +1896,7 @@ mod core_modulesmanager {
let trg_level = StatusLvl::Ch(channel.clone()); // setting to Channel Level
// let requestor_badge = ChatBadge::Mod; // setting badge to Mod
let requestor_badge = match current_test_scenario {
TestScenarios::BotadminUser =>
None,
@ -2099,10 +1904,6 @@ mod core_modulesmanager {
Some(ChatBadge::Mod),
TestScenarios::RegularChatter =>
None, // setting badge to None
// TestScenarios::ModuleDoesNotExist =>
// None,
// _ =>
// self::panic!("Scenario not handled"),
};
let rslt: ChangeResult = modsmgr.exec_disable(requestor.clone(),
@ -2112,7 +1913,7 @@ mod core_modulesmanager {
false,
id.clone()).await;
// assert_eq!(rslt,ChangeResult::Success("Disabled at Channel Level".to_string()));
match current_test_scenario {
TestScenarios::BotadminUser =>
assert_eq!(rslt,ChangeResult::Success("Disabled at Channel Level".to_string())),
@ -2120,10 +1921,6 @@ mod core_modulesmanager {
assert_eq!(rslt,ChangeResult::Success("Disabled at Channel Level".to_string())),
TestScenarios::RegularChatter =>
assert_eq!(rslt,ChangeResult::Failed("You're not allowed".to_string())),
// TestScenarios::ModuleDoesNotExist =>
// assert_eq!(rslt,ChangeResult::Failed("You're not allowed".to_string())),
// _ =>
// self::panic!("Scenario not handled"),
}
@ -2133,8 +1930,8 @@ mod core_modulesmanager {
*/
let trg_level = StatusLvl::Instance; // setting to Instance level
// let requestor_badge = ChatBadge::Mod; // setting badge to Mod
let rslt: ChangeResult = modsmgr.exec_disable(requestor.clone(),
None, // Does not have a ChatBadge like Mod
trg_module.clone(),
@ -2142,7 +1939,6 @@ mod core_modulesmanager {
false,
id.clone()).await;
// assert_eq!(rslt,ChangeResult::Success("Disabled at Instance Level".to_string()));
match current_test_scenario {
TestScenarios::BotadminUser =>
assert_eq!(rslt,ChangeResult::Success("Disabled at Instance Level".to_string())),
@ -2150,10 +1946,6 @@ mod core_modulesmanager {
assert_eq!(rslt,ChangeResult::Failed("You're not allowed".to_string())),
TestScenarios::RegularChatter =>
assert_eq!(rslt,ChangeResult::Failed("You're not allowed".to_string())),
// TestScenarios::ModuleDoesNotExist =>
// assert_eq!(rslt,ChangeResult::Failed("You're not allowed".to_string())),
// _ =>
// self::panic!("Scenario not handled"),
}
/*
@ -2162,7 +1954,6 @@ mod core_modulesmanager {
*/
let trg_level = StatusLvl::Instance; // setting to Instance level
// let requestor_badge = ChatBadge::Mod; // setting badge to Mod
let rslt: ChangeResult = modsmgr.exec_disable(requestor.clone(),
None, // Does not have a ChatBadge like Mod
@ -2171,7 +1962,6 @@ mod core_modulesmanager {
true, // force flag - true
id.clone()).await;
// assert_eq!(rslt,ChangeResult::Success("Forced Disable".to_string()));
match current_test_scenario {
TestScenarios::BotadminUser =>
assert_eq!(rslt,ChangeResult::Success("Forced Disable".to_string())),
@ -2179,10 +1969,6 @@ mod core_modulesmanager {
assert_eq!(rslt,ChangeResult::Failed("You're not allowed".to_string())),
TestScenarios::RegularChatter =>
assert_eq!(rslt,ChangeResult::Failed("You're not allowed".to_string())),
// TestScenarios::ModuleDoesNotExist =>
// assert_eq!(rslt,ChangeResult::Failed("You're not allowed".to_string())),
// _ =>
// self::panic!("Scenario not handled"),
}
@ -2214,14 +2000,6 @@ mod core_modulesmanager {
let idmgr = IdentityManager::init();
let modsmgr = ModulesManager::init().await;
// // [x] 2. modmgr.affirm_in_statusdb(Experiments01,Custom)
// let in_module = BotModule("Experiments01".to_string());
// let in_modgroup = ModGroup::Custom;
// modsmgr.affirm_in_statusdb(in_module.clone(), in_modgroup.clone()).await;
/*
[x] 3. affirm when BotAdmin attempts to exec_enable on the following
a. Channel Level , where they are not a Mod
@ -2230,7 +2008,6 @@ mod core_modulesmanager {
// [x] Create BotAdmin first
let requestor = "botadministrator".to_string();
// let botadmin_badge = &None;
idmgr.affirm_chatter_in_db(requestor.clone()).await;
idmgr
@ -2249,149 +2026,6 @@ mod core_modulesmanager {
inner_enable_disable_complex(requestor, channel, idmgr, modsmgr).await;
/*
pub async fn exec_enable(
&self,
requestor: String,
requestor_badge: Option<ChatBadge>,
trg_module: ModType,
trg_level: StatusLvl,
id: Arc<RwLock<IdentityManager>>,
) -> ChangeResult
*/
/*
[x] 3. affirm when BotAdmin attempts to exec_enable on the following
a. Channel Level , where they are not a Mod
*/
// [-] requestor_badge: Option<ChatBadge>,
// [x] trg_module: ModType,
// let trg_module = in_module;
// [x] trg_level: StatusLvl,
// let channel = ChType::Channel("somechannel".to_string());
// let trg_level = StatusLvl::Ch(channel.clone()); // setting to Channel Level
// // [x] id: Arc<RwLock<IdentityManager>>,
// let id = Arc::new(RwLock::new(idmgr));
// let rslt = modsmgr.exec_enable(requestor.clone(),
// None,
// trg_module.clone(),
// trg_level.clone(),
// id.clone()).await;
// assert_eq!(rslt,ChangeResult::Failed("Promote yourself Temporarily First".to_string()));
// /*
// [x] 3. affirm when BotAdmin attempts to exec_enable on the following
// b. Channel Level , when they are a Mod
// */
// // [x] requestor_badge: Option<ChatBadge>,
// let requestor_badge = ChatBadge::Mod; // setting badge to Mod
// let rslt = modsmgr.exec_enable(requestor.clone(),
// Some(requestor_badge),
// trg_module.clone(),
// trg_level.clone(),
// id.clone()).await;
// assert_eq!(rslt,ChangeResult::Success("Enabled at Channel Level".to_string()));
// /*
// [x] 3. affirm when BotAdmin attempts to exec_enable on the following
// c. Instance Level
// */
// let trg_level = StatusLvl::Instance; // setting to Instance level
// let rslt = modsmgr.exec_enable(requestor.clone(),
// None, // setting them back to Non-Mod
// trg_module.clone(),
// trg_level.clone(),
// id.clone()).await;
// assert_eq!(rslt,ChangeResult::Success("Enabled at Instance Level".to_string()));
// /*
// [x] 4. affirm when BotAdmin attempts to exec_disable on the following
// a. Channel Level , where they are not a Mod
// */
// let trg_level = StatusLvl::Ch(channel.clone()); // setting to Channel Level
// let rslt: ChangeResult = modsmgr.exec_disable(requestor.clone(),
// None, // Does not have a ChatBadge like Mod
// trg_module.clone(),
// trg_level.clone(),
// false,
// id.clone()).await;
// assert_eq!(rslt,ChangeResult::Success("Disabled at Channel Level".to_string()));
// /*
// [x] 4. affirm when BotAdmin attempts to exec_disable on the following
// b. Channel Level , when they are a Mod
// */
// let trg_level = StatusLvl::Ch(channel.clone()); // setting to Channel Level
// let requestor_badge = ChatBadge::Mod; // setting badge to Mod
// let rslt: ChangeResult = modsmgr.exec_disable(requestor.clone(),
// Some(requestor_badge),
// trg_module.clone(),
// trg_level.clone(),
// false,
// id.clone()).await;
// assert_eq!(rslt,ChangeResult::Success("Disabled at Channel Level".to_string()));
// /*
// [x] 4. affirm when BotAdmin attempts to exec_disable on the following
// c. Instance Level
// */
// let trg_level = StatusLvl::Instance; // setting to Instance level
// // let requestor_badge = ChatBadge::Mod; // setting badge to Mod
// let rslt: ChangeResult = modsmgr.exec_disable(requestor.clone(),
// None, // Does not have a ChatBadge like Mod
// trg_module.clone(),
// trg_level.clone(),
// false,
// id.clone()).await;
// assert_eq!(rslt,ChangeResult::Success("Disabled at Instance Level".to_string()));
// /*
// [ ] 4. affirm when BotAdmin attempts to exec_disable on the following
// d. force disable
// */
// let trg_level = StatusLvl::Instance; // setting to Instance level
// // let requestor_badge = ChatBadge::Mod; // setting badge to Mod
// let rslt: ChangeResult = modsmgr.exec_disable(requestor.clone(),
// None, // Does not have a ChatBadge like Mod
// trg_module.clone(),
// trg_level.clone(),
// true, // force flag - true
// id.clone()).await;
// assert_eq!(rslt,ChangeResult::Success("Forced Disable".to_string()));
}
@ -2475,15 +2109,11 @@ mod core_modulesmanager {
let requestor = "regular_user".to_string();
// let botadmin_badge = &None;
let channel = ChType::Channel("somechannel".to_string());
idmgr.affirm_chatter_in_db(requestor.clone()).await;
// idmgr
// .add_role(requestor.clone(), identity::UserRole::Mod(channel.clone()))
// .await;
let rslt = idmgr
.getspecialuserroles(
requestor.clone(),
@ -2511,14 +2141,12 @@ mod core_modulesmanager {
let requestor = "regular_user".to_string();
// let botadmin_badge = &None;
let channel = ChType::Channel("somechannel".to_string());
idmgr.affirm_chatter_in_db(requestor.clone()).await;
// idmgr
// .add_role(requestor.clone(), identity::UserRole::Mod(channel.clone()))
// .await;
let rslt = idmgr
.getspecialuserroles(
@ -2555,7 +2183,7 @@ mod core_modulesmanager {
assert_eq!(rslt,ChangeResult::Failed("Module doesn't exist".to_string()));
// [ ] Test with Non Existing module > disable
// [x] Test with Non Existing module > disable
let trg_module = BotModule("Non_Existent_Module".to_string());

View file

@ -696,59 +696,6 @@ impl IdentityManager {
}
}
// if &msg.badges.contains(Badge{}) {
// }
// if let Some(sender_badge) = sender_badge {
// match sender_badge {
// Some(sender_badge) => {
// return &self.can_user_run(msg.sender.name.to_owned(),
// ChType::Channel(msg.channel_login.to_owned()),
// sender_badge,
// cmdreqroles
// return self.can_user_run(msg.sender.name.to_owned(),
// let a = Arc::new(Mutex::new(self));
// let mut a = a.lock().await;
// let a = **a;
// let a = a.can_user_run(msg.sender.name.to_owned(),
// ChType::Channel(msg.channel_login.to_owned()),
// sender_badge,
// cmdreqroles
// ) ;
// let a = *self;
// let a = Arc::new(Mutex::new(a));
// let a = a.lock().await.can_user_run(msg.sender.name.to_owned(),
// ChType::Channel(msg.channel_login.to_owned()),
// sender_badge,
// cmdreqroles
// ) ;
// return a;
// return self.can_user_run(msg.sender.name.to_owned(),
// ChType::Channel(msg.channel_login.to_owned()),
// sender_badge,
// cmdreqroles
// ).await
// * NOTE : We're preferring to pass the ChangeResult up , where we have access to Chat via BotInstance
// that have more strained chatting rules
// let evalpermissible = self.can_user_run(msg.sender.name.to_owned(),
// ChType::Channel(msg.channel_login.to_owned()),
// sender_badge,
// cmdreqroles
// ).await ;
// evalpermissible
// // }
// None => {
// }
// here , sender_badge is likely None
// This could be a regular chatter, BotAdmin,SupserMod
// [ ] Call can_user_run()
// (self,Permissible::Block)
// (Permissible::Block,ChangeResult::NoChange("".to_string()))
self.can_user_run(
msg.sender.name.to_owned(),
ChType::Channel(msg.channel_login.to_owned()),
@ -756,6 +703,7 @@ impl IdentityManager {
cmdreqroles,
)
.await
}
pub async fn can_user_run(