Added HOWTO Add Modules and BotActions
This commit is contained in:
parent
e587a6f24a
commit
992a63467b
1 changed files with 97 additions and 0 deletions
97
src/help/HOWTO/Add_Modules_BotActions.md
Normal file
97
src/help/HOWTO/Add_Modules_BotActions.md
Normal file
|
@ -0,0 +1,97 @@
|
||||||
|
|
||||||
|
# How to : Add Modules & BotActions
|
||||||
|
|
||||||
|
`BotModule` s are containers of `BotAction` s grouped together to provide certain Bot Features or Functionality
|
||||||
|
|
||||||
|
## To Add a New Module & BotAction
|
||||||
|
|
||||||
|
The developer must have the following done first to setup the Bot Module Code before coding their Custom Module Code
|
||||||
|
|
||||||
|
1. In `src/modules.rs` :
|
||||||
|
|
||||||
|
a. add in the module : e.g., `mod experiments;`
|
||||||
|
|
||||||
|
b. In the `pub fn init(mgr:&mut ModulesManager)` defintion, call an *init()* from the module, passing a `ModulesManager` : e.g., `experiments::init(mgr);`
|
||||||
|
|
||||||
|
Example `src/modules.rs`
|
||||||
|
```rust
|
||||||
|
/*
|
||||||
|
`modules` will :
|
||||||
|
- be a starting refrence point for the bot instance to pull module definitions for
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
pub use crate::core::botmodules::ModulesManager;
|
||||||
|
|
||||||
|
pub use crate::core::botinstance::BotInstance;
|
||||||
|
|
||||||
|
|
||||||
|
// [ ] Load submodules
|
||||||
|
|
||||||
|
mod experiments;
|
||||||
|
|
||||||
|
|
||||||
|
// [ ] init() function that accepts bot instance - this is passed to init() on submodules
|
||||||
|
|
||||||
|
pub fn init(mgr:&mut ModulesManager) -> () {
|
||||||
|
// Modules initializer loads modules into the bot
|
||||||
|
// this is achieved by calling submodules that also have fn init() defined
|
||||||
|
|
||||||
|
experiments::init(mgr);
|
||||||
|
|
||||||
|
|
||||||
|
();
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
2. In the directory modules, define a New file based on the module name : e.g., `modules/experiments.rs`
|
||||||
|
|
||||||
|
4. Within the New Modules File (e.g, `modules/experiments.rs`) , define the following template
|
||||||
|
|
||||||
|
```rust
|
||||||
|
/*
|
||||||
|
|
||||||
|
#todo - [ ] Need to add perhaps a consant for the modules name for ease - and add that to the guide
|
||||||
|
|
||||||
|
Submodules -
|
||||||
|
|
||||||
|
- should have definitions of BotAction that will be added to a bit
|
||||||
|
- therefore, will be defined in modules.rs file
|
||||||
|
- will define one init(&BotInstance) take within the module that will contain :
|
||||||
|
- BotAction definitions that each call &BotInstance module manager to add itself
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
// mod crate::modules;
|
||||||
|
//use crate::modules;
|
||||||
|
|
||||||
|
use crate::core::botmodules::{ModulesManager,BotCommand,BotModule};
|
||||||
|
|
||||||
|
pub fn init(mgr:&mut ModulesManager) -> () {
|
||||||
|
|
||||||
|
// // Example Working BotCommand Add
|
||||||
|
// BotCommand {
|
||||||
|
// module : BotModule(String::from("experiments 004")),
|
||||||
|
// command : String::from("DUPCMD4"), // command call name
|
||||||
|
// alias : vec![String::from("DUPALIAS4A"),String::from("DUPALIAS4B")], // String of alternative names
|
||||||
|
// // bot_prefix : char, // although should be global?
|
||||||
|
// // exec_body : fn,
|
||||||
|
// help : String::from("DUPCMD4 tester"),
|
||||||
|
// }.add_to_modmgr(mgr);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
println!("At Experiments module");
|
||||||
|
|
||||||
|
|
||||||
|
();
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
5. Within the `init()` function definition,
|
||||||
|
|
||||||
|
a. Define `BotCommand` , `Listener` , `Routine` (or other `BotAction`) ,
|
||||||
|
|
||||||
|
b. Each definition calls `.add_to_modmgr(mgr)` where `mgr` is `ModulesManager`
|
||||||
|
|
||||||
|
4. **(FUTURE RELEASE)** the developer can define execution bodies within the module that would be called for that BotAction . For example, listeners are ran in response to a PRVTMSG .
|
Loading…
Reference in a new issue