botact header passes to child fn
This commit is contained in:
parent
34c3c8af7a
commit
35efdd0f7b
4 changed files with 147 additions and 33 deletions
|
@ -16,6 +16,7 @@ pub struct ExecBodyParams {
|
||||||
pub bot : BotAR,
|
pub bot : BotAR,
|
||||||
pub msg : PrivmsgMessage,
|
pub msg : PrivmsgMessage,
|
||||||
pub parent_act : ActAR ,
|
pub parent_act : ActAR ,
|
||||||
|
pub current_act : ActAR ,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -28,11 +29,11 @@ impl ExecBodyParams {
|
||||||
let act = &(*parent_act_lock);
|
let act = &(*parent_act_lock);
|
||||||
match act {
|
match act {
|
||||||
BotAction::C(c) => {
|
BotAction::C(c) => {
|
||||||
let temp = c.module.clone();
|
let temp = c.read().await.module.clone();
|
||||||
Some(temp)
|
Some(temp)
|
||||||
},
|
},
|
||||||
BotAction::L(l) => {
|
BotAction::L(l) => {
|
||||||
let temp = l.module.clone();
|
let temp = l.read().await.module.clone();
|
||||||
Some(temp)
|
Some(temp)
|
||||||
},
|
},
|
||||||
_ => None
|
_ => None
|
||||||
|
|
|
@ -335,12 +335,12 @@ impl BotInstance {
|
||||||
let mut confirmed_bot_command = false;
|
let mut confirmed_bot_command = false;
|
||||||
|
|
||||||
let instr = bot.read().await.get_prefix();
|
let instr = bot.read().await.get_prefix();
|
||||||
if inpt == String::from(instr) + c.command.as_str() {
|
if inpt == String::from(instr) + c.read().await.command.as_str() {
|
||||||
confirmed_bot_command = true;
|
confirmed_bot_command = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// [x] prefix + alias
|
// [x] prefix + alias
|
||||||
for alias in &c.alias {
|
for alias in &c.read().await.alias {
|
||||||
let instr = bot.read().await.get_prefix();
|
let instr = bot.read().await.get_prefix();
|
||||||
if inpt == String::from(instr) + alias.as_str() {
|
if inpt == String::from(instr) + alias.as_str() {
|
||||||
confirmed_bot_command = true;
|
confirmed_bot_command = true;
|
||||||
|
@ -362,7 +362,7 @@ impl BotInstance {
|
||||||
// [x] Check first if the Module for that Given Command is Enabled or Disabled on the given Channel
|
// [x] Check first if the Module for that Given Command is Enabled or Disabled on the given Channel
|
||||||
let modmgr = Arc::clone(&botlock.botmodules);
|
let modmgr = Arc::clone(&botlock.botmodules);
|
||||||
let modstatus = modmgr.modstatus(
|
let modstatus = modmgr.modstatus(
|
||||||
c.module.clone(),
|
c.read().await.module.clone(),
|
||||||
Channel(msg.channel_login.to_string())).await;
|
Channel(msg.channel_login.to_string())).await;
|
||||||
|
|
||||||
|
|
||||||
|
@ -405,6 +405,7 @@ impl BotInstance {
|
||||||
bot : Arc::clone(&bot),
|
bot : Arc::clone(&bot),
|
||||||
msg : (*msg).clone(),
|
msg : (*msg).clone(),
|
||||||
parent_act : Arc::clone(&act_clone),
|
parent_act : Arc::clone(&act_clone),
|
||||||
|
current_act : Arc::clone(&act_clone) ,
|
||||||
};
|
};
|
||||||
|
|
||||||
// When sending a BotMsgTypeNotif, send_botmsg does Roles related validation as required
|
// When sending a BotMsgTypeNotif, send_botmsg does Roles related validation as required
|
||||||
|
@ -428,7 +429,7 @@ impl BotInstance {
|
||||||
let eval = {
|
let eval = {
|
||||||
let mut idlock = id.write().await;
|
let mut idlock = id.write().await;
|
||||||
let (permissability, chngrslt) = idlock
|
let (permissability, chngrslt) = idlock
|
||||||
.can_user_run_prvmsg(msg, c.required_roles.clone())
|
.can_user_run_prvmsg(msg, c.read().await.required_roles.clone())
|
||||||
.await;
|
.await;
|
||||||
|
|
||||||
(permissability, chngrslt)
|
(permissability, chngrslt)
|
||||||
|
@ -462,7 +463,7 @@ impl BotInstance {
|
||||||
bot : Arc::clone(&bot),
|
bot : Arc::clone(&bot),
|
||||||
msg : (*msg).clone(),
|
msg : (*msg).clone(),
|
||||||
parent_act : Arc::clone(&act_clone),
|
parent_act : Arc::clone(&act_clone),
|
||||||
|
current_act : Arc::clone(&act_clone) ,
|
||||||
};
|
};
|
||||||
|
|
||||||
botlock.botmgrs.chat.send_botmsg(super::chat::BotMsgType::Notif(
|
botlock.botmgrs.chat.send_botmsg(super::chat::BotMsgType::Notif(
|
||||||
|
@ -492,7 +493,7 @@ impl BotInstance {
|
||||||
bot : Arc::clone(&bot),
|
bot : Arc::clone(&bot),
|
||||||
msg : (*msg).clone(),
|
msg : (*msg).clone(),
|
||||||
parent_act : Arc::clone(&act_clone),
|
parent_act : Arc::clone(&act_clone),
|
||||||
|
current_act : Arc::clone(&act_clone) ,
|
||||||
};
|
};
|
||||||
|
|
||||||
botlock.botmgrs.chat.send_botmsg(super::chat::BotMsgType::Notif(
|
botlock.botmgrs.chat.send_botmsg(super::chat::BotMsgType::Notif(
|
||||||
|
@ -513,10 +514,11 @@ impl BotInstance {
|
||||||
);
|
);
|
||||||
|
|
||||||
let a = Arc::clone(&bot);
|
let a = Arc::clone(&bot);
|
||||||
c.execute(ExecBodyParams {
|
c.read().await.execute(ExecBodyParams {
|
||||||
bot : a,
|
bot : a,
|
||||||
msg : msg.clone() ,
|
msg : msg.clone() ,
|
||||||
parent_act : Arc::clone(&act_clone),
|
parent_act : Arc::clone(&act_clone),
|
||||||
|
current_act : Arc::clone(&act_clone) ,
|
||||||
}).await;
|
}).await;
|
||||||
|
|
||||||
botlog::trace(
|
botlog::trace(
|
||||||
|
@ -544,7 +546,7 @@ impl BotInstance {
|
||||||
// [x] Check first if the Module for that Given Command is Enabled or Disabled on the given Channel
|
// [x] Check first if the Module for that Given Command is Enabled or Disabled on the given Channel
|
||||||
let modmgr = Arc::clone(&botlock.botmodules);
|
let modmgr = Arc::clone(&botlock.botmodules);
|
||||||
let modstatus = modmgr.modstatus(
|
let modstatus = modmgr.modstatus(
|
||||||
l.module.clone(),
|
l.read().await.module.clone(),
|
||||||
Channel(msg.channel_login.to_string())).await;
|
Channel(msg.channel_login.to_string())).await;
|
||||||
|
|
||||||
|
|
||||||
|
@ -561,10 +563,11 @@ impl BotInstance {
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
let a = Arc::clone(&bot);
|
let a = Arc::clone(&bot);
|
||||||
l.execute(ExecBodyParams {
|
l.read().await.execute(ExecBodyParams {
|
||||||
bot : a,
|
bot : a,
|
||||||
msg : msg.clone() ,
|
msg : msg.clone() ,
|
||||||
parent_act : Arc::clone(&act_clone),
|
parent_act : Arc::clone(&act_clone),
|
||||||
|
current_act : Arc::clone(&act_clone) ,
|
||||||
} ).await;
|
} ).await;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -25,6 +25,7 @@ const OF_CMD_CHANNEL:Channel = Channel(String::new());
|
||||||
|
|
||||||
use core::panic;
|
use core::panic;
|
||||||
|
|
||||||
|
use std::borrow::Borrow;
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
|
@ -459,19 +460,64 @@ pub enum StatusType {
|
||||||
Disabled(StatusLvl),
|
Disabled(StatusLvl),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Clone)]
|
||||||
pub enum BotAction {
|
pub enum BotAction {
|
||||||
C(BotCommand),
|
// C(BotCommand),
|
||||||
L(Listener),
|
C(Arc<RwLock<BotCommand>>),
|
||||||
R(Routine),
|
L(Arc<RwLock<Listener>>),
|
||||||
|
R(Arc<RwLock<Routine>>),
|
||||||
}
|
}
|
||||||
|
|
||||||
impl BotAction {
|
impl BotAction {
|
||||||
pub async fn execute(&self, params : ExecBodyParams) {
|
// pub async fn execute(&self, params : ExecBodyParams) {
|
||||||
match self {
|
pub async fn execute(self, params : ExecBodyParams) {
|
||||||
BotAction::L(a) => a.execute(params).await,
|
|
||||||
BotAction::C(a) => a.execute(params).await,
|
let act_ar = Arc::new(RwLock::new(self));
|
||||||
_ => (),
|
// let act_lock = act_ar.read().await;
|
||||||
|
let mut params_adjusted = params.clone();
|
||||||
|
params_adjusted.current_act = Arc::clone(&act_ar);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if let BotAction::L(a) = &*Arc::clone(&act_ar).read().await {
|
||||||
|
a.read().await.execute(params_adjusted.clone()).await;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if let BotAction::C(a) = &*Arc::clone(&act_ar).read().await {
|
||||||
|
|
||||||
|
let cmd_ar = Arc::clone(a);
|
||||||
|
cmd_ar.read().await.execute(params_adjusted).await;
|
||||||
|
// cmd_ar.read().await.execute(params.clone()).await;
|
||||||
|
// (&*Arc::clone(&cmd_ar).blocking_read()).execute(params.clone()).await;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if let BotAction::R(_a) = &*Arc::clone(&act_ar).read().await {
|
||||||
|
//a.read().await.execute(params.clone()).await;
|
||||||
|
}
|
||||||
|
|
||||||
|
// match &*act_lock {
|
||||||
|
// BotAction::L(a) => {
|
||||||
|
|
||||||
|
// // let inner = Arc::clone(a);
|
||||||
|
// // inner.read().await.execute(params).await
|
||||||
|
// },
|
||||||
|
// BotAction::C(b) => {
|
||||||
|
// // a.read().await.execute(params).await
|
||||||
|
// // a.read().await.command.clone();
|
||||||
|
// b.read().await.execute(params).await;
|
||||||
|
// },
|
||||||
|
// _ => (),
|
||||||
|
// }
|
||||||
|
|
||||||
|
// match self {
|
||||||
|
// BotAction::L(a) => a.execute(params).await,
|
||||||
|
// BotAction::C(a) => {
|
||||||
|
// a.read().await.execute(params).await
|
||||||
|
// },
|
||||||
|
// _ => (),
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -493,8 +539,71 @@ pub struct BotCommand {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl BotCommand {
|
impl BotCommand {
|
||||||
|
// pub async fn execute(&self, params : ExecBodyParams) {
|
||||||
|
// pub async fn execute(self, mut params : ExecBodyParams) {
|
||||||
|
|
||||||
|
// let self_ar = Arc::new(RwLock::new(self));
|
||||||
|
// let self_ar1 = Arc::clone(&self_ar);
|
||||||
|
// let self_lock = self_ar1.read().await;
|
||||||
|
|
||||||
|
// let current_act = BotAction::C(self_lock);
|
||||||
|
// params.current_act = Arc::new(RwLock::new(current_act));
|
||||||
|
|
||||||
|
// // (*self.exec_body)(params).await;
|
||||||
|
// // (*self.exec_body)(params).await;
|
||||||
|
// (*self_lock.exec_body)(params).await;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// async fn botaction(self) -> BotAction {
|
||||||
|
// let a =
|
||||||
|
// BotAction::C(self)
|
||||||
|
// }
|
||||||
|
|
||||||
|
// pub async fn execute(self, params : ExecBodyParams) {
|
||||||
|
|
||||||
|
// let a = Arc::new(RwLock::new(self));
|
||||||
|
// let current_act = BotAction::C(Arc::clone(&a));
|
||||||
|
|
||||||
|
// let mut params_clone = params.clone();
|
||||||
|
// params_clone.current_act = Arc::new(RwLock::new(current_act));
|
||||||
|
|
||||||
|
// let alock = a.read().await;
|
||||||
|
// (*alock.exec_body)(params).await;
|
||||||
|
|
||||||
|
// }
|
||||||
|
|
||||||
|
// pub async fn execute(&self, params : ExecBodyParams) {
|
||||||
|
|
||||||
|
// let a = Arc::new(RwLock::new(*self));
|
||||||
|
// let current_act = BotAction::C(Arc::clone(&a));
|
||||||
|
|
||||||
|
// let mut params_clone = params.clone();
|
||||||
|
// params_clone.current_act = Arc::new(RwLock::new(current_act));
|
||||||
|
|
||||||
|
// let alock = a.read().await;
|
||||||
|
// (*alock.exec_body)(params).await;
|
||||||
|
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
pub async fn execute(&self, params : ExecBodyParams) {
|
pub async fn execute(&self, params : ExecBodyParams) {
|
||||||
(*self.exec_body)(params).await;
|
|
||||||
|
// let current_act = BotAction::C(Arc::new(RwLock::new(self)));
|
||||||
|
|
||||||
|
// let mut params_clone = params.clone();
|
||||||
|
// params_clone.current_act = Arc::new(RwLock::new(current_act));
|
||||||
|
|
||||||
|
(self.exec_body)(params).await
|
||||||
|
|
||||||
|
// let a = Arc::new(RwLock::new(*self));
|
||||||
|
// let current_act = BotAction::C(Arc::clone(&a));
|
||||||
|
|
||||||
|
// let mut params_clone = params.clone();
|
||||||
|
// params_clone.current_act = Arc::new(RwLock::new(current_act));
|
||||||
|
|
||||||
|
// let alock = a.read().await;
|
||||||
|
// (*alock.exec_body)(params).await;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -506,7 +615,7 @@ impl BotActionTrait for BotCommand {
|
||||||
|
|
||||||
async fn add_to_modmgr(self, modmgr: Arc<ModulesManager>) {
|
async fn add_to_modmgr(self, modmgr: Arc<ModulesManager>) {
|
||||||
modmgr
|
modmgr
|
||||||
.add_botaction(self.module.clone(), BotAction::C(self))
|
.add_botaction(self.module.clone(), BotAction::C(Arc::new(RwLock::new(self))))
|
||||||
.await
|
.await
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -516,7 +625,7 @@ impl BotActionTrait for BotCommand {
|
||||||
|
|
||||||
async fn add_core_to_modmgr(self, modmgr: Arc<ModulesManager>) {
|
async fn add_core_to_modmgr(self, modmgr: Arc<ModulesManager>) {
|
||||||
modmgr
|
modmgr
|
||||||
.add_core_act(self.module.clone(), BotAction::C(self))
|
.add_core_act(self.module.clone(), BotAction::C(Arc::new(RwLock::new(self))))
|
||||||
.await
|
.await
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -553,7 +662,7 @@ impl BotActionTrait for Listener {
|
||||||
);
|
);
|
||||||
|
|
||||||
modmgr
|
modmgr
|
||||||
.add_botaction(self.module.clone(), BotAction::L(self))
|
.add_botaction(self.module.clone(), BotAction::L(Arc::new(RwLock::new(self))))
|
||||||
.await;
|
.await;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -563,7 +672,7 @@ impl BotActionTrait for Listener {
|
||||||
|
|
||||||
async fn add_core_to_modmgr(self, modmgr: Arc<ModulesManager>) {
|
async fn add_core_to_modmgr(self, modmgr: Arc<ModulesManager>) {
|
||||||
modmgr
|
modmgr
|
||||||
.add_core_act(self.module.clone(), BotAction::L(self))
|
.add_core_act(self.module.clone(), BotAction::L(Arc::new(RwLock::new(self))))
|
||||||
.await
|
.await
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1354,13 +1463,14 @@ impl ModulesManager {
|
||||||
|
|
||||||
// [x] check if given botcommand c.command:String conflicts with any in botactions
|
// [x] check if given botcommand c.command:String conflicts with any in botactions
|
||||||
|
|
||||||
if incmd.command.to_lowercase() == dbcmd.command.to_lowercase() {
|
// if incmd.command.to_lowercase() == dbcmd.command.to_lowercase() {
|
||||||
|
if incmd.read().await.command.to_lowercase() == dbcmd.read().await.command.to_lowercase() {
|
||||||
// Returning State - with the identified module
|
// Returning State - with the identified module
|
||||||
return Some(module.clone()); // works
|
return Some(module.clone()); // works
|
||||||
}
|
}
|
||||||
|
|
||||||
for a in &dbcmd.alias {
|
for a in &dbcmd.read().await.alias {
|
||||||
if incmd.command.to_lowercase() == a.to_lowercase() {
|
if incmd.read().await.command.to_lowercase() == a.to_lowercase() {
|
||||||
// Returning State - with the identified module
|
// Returning State - with the identified module
|
||||||
|
|
||||||
return Some(module.clone()); // works
|
return Some(module.clone()); // works
|
||||||
|
@ -1369,14 +1479,14 @@ impl ModulesManager {
|
||||||
|
|
||||||
// [x] Then do the same check except for each c.alias
|
// [x] Then do the same check except for each c.alias
|
||||||
|
|
||||||
for inalias in &incmd.alias {
|
for inalias in &incmd.read().await.alias {
|
||||||
if inalias.to_lowercase() == dbcmd.command.to_lowercase() {
|
if inalias.to_lowercase() == dbcmd.read().await.command.to_lowercase() {
|
||||||
// Returning State - with the identified module
|
// Returning State - with the identified module
|
||||||
|
|
||||||
return Some(module.clone()); // works
|
return Some(module.clone()); // works
|
||||||
}
|
}
|
||||||
|
|
||||||
for a in &dbcmd.alias {
|
for a in &dbcmd.read().await.alias {
|
||||||
if inalias.to_lowercase() == a.to_lowercase() {
|
if inalias.to_lowercase() == a.to_lowercase() {
|
||||||
// Returning State - with the identified module
|
// Returning State - with the identified module
|
||||||
|
|
||||||
|
|
|
@ -39,10 +39,10 @@ pub async fn main() {
|
||||||
|
|
||||||
let outstr = match &(*act) {
|
let outstr = match &(*act) {
|
||||||
botmodules::BotAction::C(b) => {
|
botmodules::BotAction::C(b) => {
|
||||||
format!("bot actions > Command : {}", b.command)
|
format!("bot actions > Command : {}", b.read().await.command)
|
||||||
}
|
}
|
||||||
botmodules::BotAction::L(l) => {
|
botmodules::BotAction::L(l) => {
|
||||||
format!("bot actions > Listener : {}", l.name)
|
format!("bot actions > Listener : {}", l.read().await.name)
|
||||||
}
|
}
|
||||||
_ => "Not a valid match??".to_string(),
|
_ => "Not a valid match??".to_string(),
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue