2024.01.29 - Latest Compiles without issues

This commit is contained in:
ModulatingForce 2024-01-29 01:13:56 -05:00
parent b9ea781ed8
commit 25b73c41cc
5 changed files with 229 additions and 85 deletions

View file

@ -145,10 +145,13 @@ impl Chat {
pub struct BotInstance<F> // pub struct BotInstance<F>
where // where
// F: std::future::Future + ?Sized, // // F: std::future::Future + ?Sized,
F: std::future::Future // // F: std::future::Future,
// //F: std::future::Future + Send,
// F: Send + ?Sized,
pub struct BotInstance
{ {
prefix : char, prefix : char,
bot_channel : ChType, bot_channel : ChType,
@ -157,7 +160,9 @@ where
// pub ratelimiters : HashMap<ChType,RateLimiter>, // used to limit messages sent per channel // pub ratelimiters : HashMap<ChType,RateLimiter>, // used to limit messages sent per channel
pub chat : Chat, pub chat : Chat,
// botmodules : HashMap<ModType,Vec<EnType>>, // botmodules : HashMap<ModType,Vec<EnType>>,
pub botmodules : ModulesManager<F>, // pub botmodules : ModulesManager<F>,
pub botmodules : ModulesManager,
//pub botmodules : &'static mut ModulesManager,
twitch_oauth : String, twitch_oauth : String,
pub bot_channels : Vec<ChType>, pub bot_channels : Vec<ChType>,
/*bot_commands : Vec[BotCommand], /*bot_commands : Vec[BotCommand],
@ -169,16 +174,20 @@ where
impl<F> BotInstance<F> // impl<F> BotInstance<F>
where // where
F: std::future::Future + 'static, // // F: std::future::Future + 'static,
//F: 'static, // //F: 'static,
// //F: std::future::Future + Send + ?Sized 'static,
// F: Send + ?Sized + 'static,
impl BotInstance
{ {
pub fn init() -> BotInstance<F> // pub fn init() -> BotInstance<F>
where // where
F: std::future::Future + 'static, // F: std::future::Future + 'static,
pub fn init() -> BotInstance
{ {
dotenv().ok(); dotenv().ok();
@ -220,6 +229,8 @@ where
// let bm = &mut ModulesManager::init();
let b = BotInstance { let b = BotInstance {
@ -234,6 +245,7 @@ where
// ratelimiters : ratelimiters, // used to limit messages sent per channel // ratelimiters : ratelimiters, // used to limit messages sent per channel
// botmodules : HashMap::new(), // botmodules : HashMap::new(),
botmodules : ModulesManager::init(), botmodules : ModulesManager::init(),
//botmodules : bm,
twitch_oauth : oauth_token, twitch_oauth : oauth_token,
bot_channels : botchannels, bot_channels : botchannels,
/*bot_commands : Vec[BotCommand], /*bot_commands : Vec[BotCommand],

View file

@ -59,24 +59,37 @@ pub enum ModStatusType {
// pub use EnType::Enabled; // pub use EnType::Enabled;
//#[derive(Debug)] //#[derive(Debug)]
pub enum BotAction<F> // pub enum BotAction<F>
// where // where
// F: std::future::Future + ?Sized, // //F: std::future::Future + ?Sized,
// // F: std::future::Future,
// //F: std::future::Future + Send,
// // F: Send,
// F: Send + ?Sized,
pub enum BotAction
{ {
//C(BotCommand), //C(BotCommand),
L(Listener<F>), // L(Listener<F>),
L(Listener),
R(Routine), R(Routine),
} }
pub trait BotActionTrait<F> // pub trait BotActionTrait<F>
where // where
F: std::future::Future, // // F: std::future::Future,
// //F: std::future::Future + ?Sized,
// //: std::future::Future + Send,
// // F: Send,
// F : Send + ?Sized
pub trait BotActionTrait
{ {
// async fn execute(&self,m:&mut BotInstance,n:&PrivmsgMessage); // async fn execute(&self,m:&mut BotInstance,n:&PrivmsgMessage);
// fn add_to_bot(self, bot:BotInstance) -> Result<String,Box<dyn Error>>; // fn add_to_bot(self, bot:BotInstance) -> Result<String,Box<dyn Error>>;
fn add_to_bot(self, bot:BotInstance<F>); fn add_to_bot(self, bot:BotInstance);
fn add_to_modmgr(self, modmgr:ModulesManager<F>) -> ModulesManager<F>; //fn add_to_modmgr(self, modmgr:ModulesManager<F>) -> ModulesManager<F>;
//fn add_to_modmgr(self,modmgr:&mut ModulesManager<F>) -> ModulesManager<F>;
fn add_to_modmgr(self,modmgr:&mut ModulesManager);
} }
@ -185,12 +198,26 @@ pub mod bot_actions {
use crate::core::botinstance::Chat; use crate::core::botinstance::Chat;
use twitch_irc::message::PrivmsgMessage; use twitch_irc::message::PrivmsgMessage;
pub type ExecBody<F> = Box<dyn Fn(Chat,PrivmsgMessage) -> Pin<Box<dyn Future<Output = F>>>>; // pub type ExecBody<F> = Box<dyn Fn(Chat,PrivmsgMessage) -> Pin<Box<dyn Future<Output = F>>>>;
pub fn asyncbox<F, T>(f: fn(Chat,PrivmsgMessage) -> T) -> ExecBody<F> // pub type ExecBody<F> = Box<dyn Fn(Chat,PrivmsgMessage) -> Pin<Box<dyn Future<Output=F> + Send>> + Send + Sync>;
pub type ExecBody = Box<dyn Fn(Chat,PrivmsgMessage) -> Pin<Box<dyn Future<Output=()> + Send>> + Send + Sync>;
// pub fn asyncbox<F, T>(f: fn(Chat,PrivmsgMessage) -> T) -> ExecBody<F>
// where
// //T: Future<Output = F> + 'static,
// //T: Future<Output = F> ,
// T: Future<Output=F> + Send + 'static,
// {
// Box::new(move |a,b| Box::pin(f(a,b)))
// }
pub fn asyncbox<T>(f: fn(Chat,PrivmsgMessage) -> T) -> ExecBody
where where
T: Future<Output = F> + 'static, //T: Future<Output = F> + 'static,
//T: Future<Output = F> , //T: Future<Output = F> ,
// T: Future<Output=F> + Send + 'static,
T: Future<Output=()> + Send + 'static,
{ {
Box::new(move |a,b| Box::pin(f(a,b))) Box::new(move |a,b| Box::pin(f(a,b)))
} }
@ -210,9 +237,14 @@ pub mod bot_actions {
// } // }
// #[derive(Debug)] // #[derive(Debug)]
pub struct Listener<F> // pub struct Listener<F>
pub struct Listener
// where // where
// F: std::future::Future + ?Sized, // // F: std::future::Future + ?Sized,
// //F: std::future::Future,
// //F: std::future::Future + ?Sized + Send,
// //F: Send,
// F: Send + ?Sized,
{ {
pub module : ModType, pub module : ModType,
pub name : String, pub name : String,
@ -221,13 +253,17 @@ pub struct Listener<F>
//pub exec_body : fn(&mut botinstance::Chat,&PrivmsgMessage) -> F , //pub exec_body : fn(&mut botinstance::Chat,&PrivmsgMessage) -> F ,
// pub exec_body : fn(botinstance::Chat,PrivmsgMessage) -> F , // pub exec_body : fn(botinstance::Chat,PrivmsgMessage) -> F ,
//pub exec_body : fn(String,&PrivmsgMessage) -> F , //pub exec_body : fn(String,&PrivmsgMessage) -> F ,
pub exec_body : bot_actions::actions_util::ExecBody<F>, //pub exec_body : bot_actions::actions_util::ExecBody<F>,
pub exec_body : bot_actions::actions_util::ExecBody,
pub help : String pub help : String
} }
impl<F> Listener<F> // impl<F> Listener<F>
// where // where
// F: std::future::Future, // // F: std::future::Future,
// //F: std::future::Future + Sized,
// F: std::future::Future + Sized + Send,
impl Listener
{ {
// async fn execute(&self,m:&mut Box<BotInstance<F>>,n:&PrivmsgMessage){ // async fn execute(&self,m:&mut Box<BotInstance<F>>,n:&PrivmsgMessage){
@ -241,29 +277,37 @@ impl<F> Listener<F>
} }
} }
impl<F> BotActionTrait<F> for Listener<F> // impl<F> BotActionTrait<F> for Listener<F>
where // where
F: std::future::Future, // //F: std::future::Future,
// //F: std::future::Future + Sized,
// // F: std::future::Future + Send,
// // F : Send,
// F : Send + ?Sized,
impl BotActionTrait for Listener
{ {
// fn add_to_bot(&self) -> Result<String,Box<dyn Error>> { // fn add_to_bot(&self) -> Result<String,Box<dyn Error>> {
// println!("Calling Add to Bot"); // println!("Calling Add to Bot");
// Ok(String::from("Hello")) // Ok(String::from("Hello"))
// } // }
fn add_to_bot(self, bot:BotInstance<F>) { // fn add_to_bot(self, mut bot:BotInstance<F>) {
fn add_to_bot(self, mut bot:BotInstance) {
// let mut mgr = bot.botmodules; // let mut mgr = bot.botmodules;
// let nmod = self.module.clone(); // let nmod = self.module.clone();
// mgr.add_botaction(nmod, BotAction::C(self)); // mgr.add_botaction(nmod, BotAction::C(self));
let mgr = bot.botmodules; //let mgr = &mut bot.botmodules;
//let nmod = self.module.clone(); //let nmod = self.module.clone();
// mgr.add_botaction(self.module.clone(), BotAction::C(self)); // mgr.add_botaction(self.module.clone(), BotAction::C(self));
let mgr = &mut bot.botmodules;
self.add_to_modmgr(mgr); self.add_to_modmgr(mgr);
} }
// fn add_to_modmgr(self, modmgr:&mut ModulesManager<F>) { //fn add_to_modmgr(self, modmgr:&mut ModulesManager<F>) -> ModulesManager<F> {
//fn add_to_modmgr(self, mut modmgr:ModulesManager) { fn add_to_modmgr(self, modmgr:&mut ModulesManager) {
fn add_to_modmgr(self, mut modmgr:ModulesManager<F>) -> ModulesManager<F> { //fn add_to_modmgr(self, mut modmgr:ModulesManager<F>) -> ModulesManager<F> {
// // let mut mgr = bot.botmodules; // // let mut mgr = bot.botmodules;
// // let nmod = self.module.clone(); // // let nmod = self.module.clone();
// // mgr.add_botaction(nmod, BotAction::C(self)); // // mgr.add_botaction(nmod, BotAction::C(self));
@ -308,22 +352,33 @@ struct Routine {}
//#[derive(Debug)] //#[derive(Debug)]
pub struct ModulesManager<F> // pub struct ModulesManager<F>
// where // where
// F: std::future::Future + ?Sized, // //F: std::future::Future + ?Sized,
// // F: std::future::Future,
// //F: std::future::Future + Send,
// // F: Send,
// // F: Send + ?Sized,
pub struct ModulesManager
{ {
statusdb: HashMap<ModType,Vec<ModStatusType>>, statusdb: HashMap<ModType,Vec<ModStatusType>>,
botactions: HashMap<ModType,Vec<BotAction<F>>>, botactions: HashMap<ModType,Vec<BotAction>>,
} }
impl<F> ModulesManager<F> // impl<F> ModulesManager<F>
// where // where
// F: std::future::Future, // // F: std::future::Future,
// //F: std::future::Future + Send,
// // F : Send,
// F : Send + ?Sized,
impl ModulesManager
{ {
pub fn init() -> ModulesManager<F> // pub fn init() -> ModulesManager<F>
// where // where
// F: std::future::Future , // F: std::future::Future ,
// pub fn init() -> &'static mut ModulesManager
pub fn init() -> ModulesManager
{ {
// initializes the modulers manager // initializes the modulers manager
@ -358,7 +413,11 @@ impl<F> ModulesManager<F>
// modactions.push(BotAction::L(newlistener)); // modactions.push(BotAction::L(newlistener));
let mgr = ModulesManager { // let mgr = &mut ModulesManager {
// statusdb : m,
// botactions : act,
// };
let mut mgr = ModulesManager {
statusdb : m, statusdb : m,
botactions : act, botactions : act,
}; };
@ -416,13 +475,15 @@ impl<F> ModulesManager<F>
// crate::core::init(); // works // crate::core::init(); // works
//crate::submods:: //crate::submods::
//crate::arbfile; //crate::arbfile;
let mgr = crate::modules::init(mgr); crate::modules::init(&mut mgr);
println!(">> Modules Manager : End of Init"); println!(">> Modules Manager : End of Init");
//println!(">> Modules Manager : {:?}",mgr); //println!(">> Modules Manager : {:?}",mgr);
// let &mut mgr = mgr;
// &mgr
mgr mgr
} }
@ -450,8 +511,10 @@ impl<F> ModulesManager<F>
Ok("") Ok("")
} }
pub fn add_botaction(mut self, in_module:ModType, in_action:BotAction<F> ) -> ModulesManager<F> { //pub fn add_botaction(mut self, in_module:ModType, in_action:BotAction ) -> ModulesManager {
// pub fn add_botaction(mut self, in_module:ModType, in_action:BotAction<F> ) -> ModulesManager<F> {
//pub fn add_botaction(&mut self, in_module:ModType, in_action:BotAction ) -> () { //pub fn add_botaction(&mut self, in_module:ModType, in_action:BotAction ) -> () {
pub fn add_botaction(&mut self, in_module:ModType, in_action:BotAction ) {
/* /*
adds a BotAction to the Modules Manager - This will require a BotModule passed as well adds a BotAction to the Modules Manager - This will require a BotModule passed as well
This will including the logic of a valid add This will including the logic of a valid add
@ -479,9 +542,13 @@ impl<F> ModulesManager<F>
// - If BotAction to Add is a BotCommand , In Module Manager DB (botactions), // - If BotAction to Add is a BotCommand , In Module Manager DB (botactions),
// Check All Other BotAction Command Names & Aliases to ensure they don't conflict // Check All Other BotAction Command Names & Aliases to ensure they don't conflict
fn find_conflict_module<F>(mgr:& ModulesManager<F>, act:& BotAction<F>) -> Option<ModType> // fn find_conflict_module<F>(mgr:& ModulesManager<F>, act:& BotAction<F>) -> Option<ModType>
// where // where
// F: std::future::Future, // // F: std::future::Future,
// // F: std::future::Future + Send,
// // F : Send,
// F : Send + ?Sized,
fn find_conflict_module(mgr:& ModulesManager, act:& BotAction) -> Option<ModType>
{ {
// Some(BotModule(String::from("GambaCore"))) // Some(BotModule(String::from("GambaCore")))
@ -599,7 +666,7 @@ impl<F> ModulesManager<F>
//mgr //mgr
self //self
} }

View file

@ -26,6 +26,8 @@ pub async fn main() {
//let bot:BotInstance<dyn std::future::Future<Output = ()>> = BotInstance::init(); //let bot:BotInstance<dyn std::future::Future<Output = ()>> = BotInstance::init();
//let bot:BotInstance<dyn Send + std::future::Future<Output = ()>> = BotInstance::init();
//let bot:BotInstance<std::future::Future<Output = ()> + Sized> = BotInstance::init();
let bot = BotInstance::init(); let bot = BotInstance::init();
bot.runner().await; bot.runner().await;

View file

@ -19,9 +19,13 @@ mod experiments;
// [ ] init() function that accepts bot instance - this is passed to init() on submodules // [ ] init() function that accepts bot instance - this is passed to init() on submodules
pub fn init<F>(mgr:ModulesManager<F>) -> ModulesManager<F> // pub fn init<F>(mgr:ModulesManager<F>) -> ModulesManager<F>
// pub fn init<F>(mgr:ModulesManager<F>)
// where // where
// F: std::future::Future, // // F: std::future::Future + Send,
// // F : Send,
// F : Send + ?Sized,
pub fn init(mgr:&mut ModulesManager)
{ {
// Modules initializer loads modules into the bot // Modules initializer loads modules into the bot
// this is achieved by calling submodules that also have fn init() defined // this is achieved by calling submodules that also have fn init() defined

View file

@ -12,14 +12,21 @@
// mod crate::modules; // mod crate::modules;
//use crate::modules; //use crate::modules;
use std::future::Future;
use crate::core::botmodules::{ModulesManager,Listener,BotModule,BotActionTrait, self}; use crate::core::botmodules::{ModulesManager,Listener,BotModule,BotActionTrait, self};
use crate::core::botmodules::bot_actions::actions_util;
use crate::core::botinstance::{self}; use crate::core::botinstance::{self};
use twitch_irc::message::PrivmsgMessage; use twitch_irc::message::PrivmsgMessage;
pub fn init<F>(mgr:ModulesManager<F>) -> ModulesManager<F> // pub fn init<F>(mgr:ModulesManager<F>) -> ModulesManager<F>
// pub fn init<F>(mgr:ModulesManager<F>)
// where // where
// F: std::future::Future, // // F: std::future::Future + Send,
// // F : Send,
// F : Send + ?Sized,
pub fn init(mgr:&mut ModulesManager)
{ {
@ -33,15 +40,64 @@ pub fn init<F>(mgr:ModulesManager<F>) -> ModulesManager<F>
// }.add_to_modmgr(mgr); // }.add_to_modmgr(mgr);
let list1 = Listener { // let list1 = Listener::<dyn std::future::Future<Output = ()>> {
module : BotModule(String::from("experiments 004")), // //let list1 = Listener {
name : String::from("GoodGirl Listener"), // module : BotModule(String::from("experiments 004")),
// exec_body : good_girl::<dyn std::future::Future<Output = ()>> , // name : String::from("GoodGirl Listener"),
// exec_body : good_girl , // // exec_body : good_girl::<dyn std::future::Future<Output = ()>> ,
help : String::from("") // // exec_body : good_girl ,
// exec_body : actions_util::asyncbox(good_girl),
// //exec_body : actions_util::asyncbox(good_girl::<dyn std::future::Future<Output = ()>>) ,
// //exec_body : actions_util::asyncbox(good_girl::<dyn std::future::Future<Output = ()>>),
// help : String::from("")
// };
// let list1 = Listener::<dyn std::future::Future<Output = ()>> {
// //let list1 = Listener {
// module : BotModule(String::from("experiments 004")),
// name : String::from("GoodGirl Listener"),
// // exec_body : good_girl::<dyn std::future::Future<Output = ()>> ,
// // exec_body : good_girl ,
// exec_body : actions_util::asyncbox(good_girl),
// //exec_body : actions_util::asyncbox(good_girl::<dyn std::future::Future<Output = ()>>) ,
// //exec_body : actions_util::asyncbox(good_girl::<dyn std::future::Future<Output = ()>>),
// help : String::from("")
// };
//let list1 = Listener::<dyn Send + std::future::Future<Output = ()>> {
let list1 = Listener {
module : BotModule(String::from("experiments 004")),
name : String::from("GoodGirl Listener"),
// exec_body : good_girl::<dyn std::future::Future<Output = ()>> ,
//exec_body : good_girl ,
//exec_body : actions_util::asyncbox(good_girl),
exec_body : actions_util::asyncbox(good_girl) ,
//exec_body : actions_util::asyncbox(good_girl::<dyn std::future::Future<Output = ()>>),
//exec_body : actions_util::asyncbox(good_girl::<dyn std::future::Future<Output = dyn Future<Output = ()>>>),
help : String::from("")
}; };
let mgr = list1.add_to_modmgr(mgr);
// let list1 = Listener::<> {
// //let list1 = Listener {
// module : BotModule(String::from("experiments 004")),
// name : String::from("GoodGirl Listener"),
// // exec_body : good_girl::<dyn std::future::Future<Output = ()>> ,
// //exec_body : good_girl ,
// //exec_body : actions_util::asyncbox(good_girl),
// exec_body : actions_util::asyncbox(good_girl) ,
// //exec_body : actions_util::asyncbox(good_girl::<dyn std::future::Future<Output = ()>>),
// help : String::from("")
// };
list1.add_to_modmgr(mgr);
// let mgr = list1.add_to_modmgr(mgr);
// Listener { // Listener {
// module : BotModule(String::from("experiments 004")), // module : BotModule(String::from("experiments 004")),
@ -68,27 +124,27 @@ pub fn init<F>(mgr:ModulesManager<F>) -> ModulesManager<F>
// help : String::from("") // help : String::from("")
// }; // };
println!("At Experiments module"); // println!("At Experiments module");
//(); // //();
mgr // mgr
} }
pub struct Listener2<F> // pub struct Listener2<F>
// where // // where
// F: std::future::Future + ?Sized, // // F: std::future::Future + ?Sized,
{ // {
pub module : botmodules::ModType, // pub module : botmodules::ModType,
pub name : String, // pub name : String,
//pub exec_body : fn(&mut BotInstance,&PrivmsgMessage) , // //pub exec_body : fn(&mut BotInstance,&PrivmsgMessage) ,
// pub exec_body : fn(&mut Box<BotInstance<F>>,&PrivmsgMessage) -> F , // // pub exec_body : fn(&mut Box<BotInstance<F>>,&PrivmsgMessage) -> F ,
//pub exec_body : fn(&mut botinstance::Chat,&PrivmsgMessage) -> dyn std::future::Future<Output = ()> , // //pub exec_body : fn(&mut botinstance::Chat,&PrivmsgMessage) -> dyn std::future::Future<Output = ()> ,
pub exec_body : fn(&mut botinstance::Chat,&PrivmsgMessage) -> F , // pub exec_body : fn(&mut botinstance::Chat,&PrivmsgMessage) -> F ,
//pub exec_body : fn(String,&PrivmsgMessage) -> F , // //pub exec_body : fn(String,&PrivmsgMessage) -> F ,
pub help : String // pub help : String
} // }
// pub struct Listener3<F> // pub struct Listener3<F>
@ -107,12 +163,12 @@ pub struct Listener2<F>
// } // }
async fn testfn2(mut _chat:botinstance::Chat,_msg:PrivmsgMessage) // async fn testfn2(mut _chat:botinstance::Chat,_msg:PrivmsgMessage)
// where // // where
// F : std::future::Future + ?Sized, // // F : std::future::Future + ?Sized,
{ // {
println!("testfn2"); // println!("testfn2");
} // }
// async fn good_girl(bot:&mut BotInstance,msg:&PrivmsgMessage) { // async fn good_girl(bot:&mut BotInstance,msg:&PrivmsgMessage) {
// println!("In GoodGirl()"); // println!("In GoodGirl()");
@ -143,8 +199,11 @@ async fn testfn2(mut _chat:botinstance::Chat,_msg:PrivmsgMessage)
//async fn good_girl<F>(chat:&mut botinstance::Chat,msg:&PrivmsgMessage) //async fn good_girl<F>(chat:&mut botinstance::Chat,msg:&PrivmsgMessage)
// async fn good_girl(chat:&mut botinstance::Chat,msg:&PrivmsgMessage) // async fn good_girl(chat:&mut botinstance::Chat,msg:&PrivmsgMessage)
async fn good_girl(mut chat:botinstance::Chat,msg:PrivmsgMessage) async fn good_girl(mut chat:botinstance::Chat,msg:PrivmsgMessage)
// where //async fn good_girl<F>(mut chat:botinstance::Chat,msg:PrivmsgMessage)
// F: std::future::Future + ?Sized, // where
// //F: std::future::Future + ?Sized,
// //F: std::future::Future,
// F: std::future::Future + Sized + Send,
{ {
println!("In GoodGirl()"); println!("In GoodGirl()");
println!("(#{}) {}: {}", msg.channel_login, msg.sender.name, msg.message_text); println!("(#{}) {}: {}", msg.channel_login, msg.sender.name, msg.message_text);