Badges & Doc adj
This commit is contained in:
parent
92b6cd3f94
commit
33dcf4c4e7
7 changed files with 178 additions and 114 deletions
readme.md
src
86
readme.md
86
readme.md
|
@ -98,22 +98,19 @@ pub async fn main() {
|
|||
|
||||
```
|
||||
|
||||
## Module with Custom Command
|
||||
## Customize with Modules
|
||||
|
||||
A `Module` is a group of bot objects (eg `Command`) that elevated users can manage.
|
||||
A `Module` is a group of bot objects (eg `Command`) that elevated users can manage through built in `disable` and `enable` commands
|
||||
|
||||
Bot objects are recommended to be loaded through a `Module`
|
||||
Create a custom `Module` by :
|
||||
|
||||
1. Defining Functions that create the Custom Bot Objects (eg `Command`)
|
||||
|
||||
2. Define a function that creates a `Module` with the Custom Bot Objects loaded
|
||||
|
||||
|
||||
```rust
|
||||
use std::sync::Arc;
|
||||
|
||||
use forcebot_rs_v2::Bot;
|
||||
use forcebot_rs_v2::asyncfn_box;
|
||||
use forcebot_rs_v2::Command;
|
||||
use forcebot_rs_v2::Module;
|
||||
use twitch_irc::message::ServerMessage;
|
||||
|
||||
|
||||
#[tokio::main]
|
||||
pub async fn main() {
|
||||
|
@ -121,35 +118,56 @@ pub async fn main() {
|
|||
/* Create the bot using env */
|
||||
let mut bot = Bot::new();
|
||||
|
||||
/* 1. Create a new module */
|
||||
let mut custom_mod = Module::new("test".to_string(), "".to_string());
|
||||
|
||||
/* 2. Create a new cmd */
|
||||
let mut cmd = Command::new("test".to_string(),"".to_string());
|
||||
|
||||
async fn execbody(bot:Arc<Bot>,message:ServerMessage) -> Result<String,String> {
|
||||
if let ServerMessage::Privmsg(msg) = message {
|
||||
let _= bot.client.say_in_reply_to(
|
||||
&msg, "test return".to_string()).await;
|
||||
}
|
||||
Result::Err("Not Valid message type".to_string())
|
||||
}
|
||||
|
||||
cmd.set_exec_fn(asyncfn_box(execbody));
|
||||
cmd.set_admin_only(false);
|
||||
cmd.set_min_badge("moderator".to_string());
|
||||
|
||||
/* 3. Load the cmd into a new module */
|
||||
custom_mod.load_command(cmd);
|
||||
|
||||
/* 4. Load the module into the bot */
|
||||
bot.load_module(custom_mod);
|
||||
/* load the Module */
|
||||
bot.load_module(custom_mod::new());
|
||||
|
||||
/* Run the bot */
|
||||
bot.run().await;
|
||||
|
||||
}
|
||||
|
||||
|
||||
pub mod custom_mod {
|
||||
use std::sync::Arc;
|
||||
|
||||
use forcebot_rs_v2::{asyncfn_box, Badge, Bot, Command, Module};
|
||||
use twitch_irc::message::ServerMessage;
|
||||
|
||||
|
||||
/// Module with a loaded command
|
||||
pub fn new() -> Module {
|
||||
/* 1. Create a new module */
|
||||
let mut custom_mod = Module::new("test".to_string(), "".to_string());
|
||||
|
||||
/* 2. Load the cmd into a new module */
|
||||
custom_mod.load_command(cmd_test());
|
||||
|
||||
custom_mod
|
||||
|
||||
}
|
||||
|
||||
pub fn cmd_test() -> Command {
|
||||
/* 1. Create a new cmd */
|
||||
let mut cmd = Command::new("test".to_string(),"".to_string());
|
||||
|
||||
/* 2. Define exec callback */
|
||||
async fn execbody(bot:Arc<Bot>,message:ServerMessage) -> Result<String,String> {
|
||||
if let ServerMessage::Privmsg(msg) = message {
|
||||
let _= bot.client.say_in_reply_to(
|
||||
&msg, "test return".to_string()).await;
|
||||
}
|
||||
Result::Err("Not Valid message type".to_string())
|
||||
}
|
||||
|
||||
/* 3. Set Command flags */
|
||||
cmd.set_exec_fn(asyncfn_box(execbody));
|
||||
cmd.set_admin_only(false);
|
||||
cmd.set_min_badge(Badge::Moderator);
|
||||
|
||||
cmd
|
||||
}
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
## Simple Debug Listener
|
||||
|
@ -194,7 +212,7 @@ pub async fn main() {
|
|||
|
||||
```
|
||||
|
||||
## Moderator Reator
|
||||
## Moderator Reactor
|
||||
|
||||
Example listener listens for a moderator badge and reply in chat
|
||||
|
||||
|
|
|
@ -34,7 +34,7 @@ pub async fn main() {
|
|||
pub mod funbot_objs {
|
||||
use std::sync::Arc;
|
||||
|
||||
use forcebot_rs_v2::{asyncfn_box, Bot, Command, Module};
|
||||
use forcebot_rs_v2::{asyncfn_box, Badge, Bot, Command, Module};
|
||||
use twitch_irc::message::ServerMessage;
|
||||
|
||||
/// Create a Module with a loaded Command object
|
||||
|
@ -63,7 +63,7 @@ pub mod funbot_objs {
|
|||
cmd.set_exec_fn(asyncfn_box(execbody));
|
||||
|
||||
cmd.set_admin_only(false);
|
||||
cmd.set_min_badge("vip".to_string());
|
||||
cmd.set_min_badge(Badge::Vip);
|
||||
cmd
|
||||
|
||||
}
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
|
||||
use std::sync::Arc;
|
||||
|
||||
use forcebot_rs_v2::Badge;
|
||||
use forcebot_rs_v2::Bot;
|
||||
use forcebot_rs_v2::asyncfn_box;
|
||||
use forcebot_rs_v2::Command;
|
||||
|
@ -46,7 +47,7 @@ pub async fn main() {
|
|||
cmd.set_admin_only(false);
|
||||
|
||||
/* 5. optionally, set min badge*/
|
||||
cmd.set_min_badge("broadcaster".to_string());
|
||||
cmd.set_min_badge(Badge::Moderator);
|
||||
|
||||
/* 6. Load the cmd into the bot */
|
||||
bot.load_command(cmd);
|
||||
|
|
|
@ -17,14 +17,7 @@
|
|||
//! - Get a Bot Chat Token here - <https://twitchtokengenerator.com>
|
||||
//! - More Info - <https://dev.twitch.tv/docs/authentication>
|
||||
|
||||
use std::sync::Arc;
|
||||
|
||||
use forcebot_rs_v2::Bot;
|
||||
use forcebot_rs_v2::asyncfn_box;
|
||||
use forcebot_rs_v2::Command;
|
||||
use forcebot_rs_v2::Module;
|
||||
use twitch_irc::message::ServerMessage;
|
||||
|
||||
|
||||
#[tokio::main]
|
||||
pub async fn main() {
|
||||
|
@ -32,31 +25,52 @@ pub async fn main() {
|
|||
/* Create the bot using env */
|
||||
let mut bot = Bot::new();
|
||||
|
||||
/* 1. Create a new module */
|
||||
let mut custom_mod = Module::new("test".to_string(), "".to_string());
|
||||
|
||||
/* 2. Create a new cmd */
|
||||
let mut cmd = Command::new("test".to_string(),"".to_string());
|
||||
|
||||
async fn execbody(bot:Arc<Bot>,message:ServerMessage) -> Result<String,String> {
|
||||
if let ServerMessage::Privmsg(msg) = message {
|
||||
let _= bot.client.say_in_reply_to(
|
||||
&msg, "test return".to_string()).await;
|
||||
}
|
||||
Result::Err("Not Valid message type".to_string())
|
||||
}
|
||||
|
||||
cmd.set_exec_fn(asyncfn_box(execbody));
|
||||
cmd.set_admin_only(false);
|
||||
cmd.set_min_badge("moderator".to_string());
|
||||
|
||||
/* 3. Load the cmd into a new module */
|
||||
custom_mod.load_command(cmd);
|
||||
|
||||
/* 4. Load the module into the bot */
|
||||
bot.load_module(custom_mod);
|
||||
/* load the Module */
|
||||
bot.load_module(custom_mod::new());
|
||||
|
||||
/* Run the bot */
|
||||
bot.run().await;
|
||||
|
||||
}
|
||||
|
||||
|
||||
pub mod custom_mod {
|
||||
use std::sync::Arc;
|
||||
|
||||
use forcebot_rs_v2::{asyncfn_box, Badge, Bot, Command, Module};
|
||||
use twitch_irc::message::ServerMessage;
|
||||
|
||||
|
||||
/// Module with a loaded command
|
||||
pub fn new() -> Module {
|
||||
/* 1. Create a new module */
|
||||
let mut custom_mod = Module::new("test".to_string(), "".to_string());
|
||||
|
||||
/* 2. Load the cmd into a new module */
|
||||
custom_mod.load_command(cmd_test());
|
||||
|
||||
custom_mod
|
||||
|
||||
}
|
||||
|
||||
pub fn cmd_test() -> Command {
|
||||
/* 1. Create a new cmd */
|
||||
let mut cmd = Command::new("test".to_string(),"".to_string());
|
||||
|
||||
/* 2. Define exec callback */
|
||||
async fn execbody(bot:Arc<Bot>,message:ServerMessage) -> Result<String,String> {
|
||||
if let ServerMessage::Privmsg(msg) = message {
|
||||
let _= bot.client.say_in_reply_to(
|
||||
&msg, "test return".to_string()).await;
|
||||
}
|
||||
Result::Err("Not Valid message type".to_string())
|
||||
}
|
||||
|
||||
/* 3. Set Command flags */
|
||||
cmd.set_exec_fn(asyncfn_box(execbody));
|
||||
cmd.set_admin_only(false);
|
||||
cmd.set_min_badge(Badge::Moderator);
|
||||
|
||||
cmd
|
||||
}
|
||||
}
|
|
@ -11,6 +11,16 @@ use twitch_irc::message::ServerMessage;
|
|||
|
||||
use super::bot::Bot;
|
||||
|
||||
|
||||
/// chat badge
|
||||
#[derive(Clone)]
|
||||
pub enum Badge {
|
||||
Moderator,
|
||||
Broadcaster,
|
||||
Vip
|
||||
}
|
||||
|
||||
|
||||
pub type ExecBody = Box<
|
||||
dyn Fn(Arc<Bot>,ServerMessage) -> Pin<Box<dyn Future<Output = Result<String,String>> + Send>> + Send + Sync,
|
||||
>;
|
||||
|
@ -32,7 +42,7 @@ pub mod built_in_objects {
|
|||
|
||||
use twitch_irc::message::ServerMessage;
|
||||
|
||||
use crate::{asyncfn_box, Bot, Command};
|
||||
use crate::{asyncfn_box, Badge, Bot, Command};
|
||||
|
||||
|
||||
/// create a vector of command build in objects
|
||||
|
@ -71,7 +81,7 @@ pub mod built_in_objects {
|
|||
cmd.set_admin_only(false);
|
||||
|
||||
/* 5. optionally, set min badge*/
|
||||
cmd.set_min_badge("moderator".to_string());
|
||||
cmd.set_min_badge(Badge::Moderator);
|
||||
cmd
|
||||
|
||||
}
|
||||
|
@ -101,7 +111,7 @@ pub mod built_in_objects {
|
|||
cmd.set_admin_only(false);
|
||||
|
||||
/* 5. optionally, set min badge*/
|
||||
cmd.set_min_badge("moderator".to_string());
|
||||
cmd.set_min_badge(Badge::Moderator);
|
||||
cmd
|
||||
}
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@ use std::sync::Arc;
|
|||
|
||||
use twitch_irc::message::{PrivmsgMessage, ServerMessage};
|
||||
|
||||
use crate::{asyncfn_box, botcore::bot::Bot};
|
||||
use crate::{asyncfn_box, botcore::bot::Bot, Badge};
|
||||
|
||||
use super::ExecBody;
|
||||
|
||||
|
@ -22,7 +22,7 @@ pub struct Command
|
|||
{
|
||||
command : String,
|
||||
exec_fn : Arc<ExecBody>,
|
||||
min_badge : String,
|
||||
min_badge : Badge,
|
||||
admin_only : bool,
|
||||
prefix : String,
|
||||
custom_cond_fn : fn(Arc<Bot>,PrivmsgMessage) -> bool,
|
||||
|
@ -47,7 +47,7 @@ impl Command
|
|||
command ,
|
||||
prefix ,
|
||||
exec_fn : Arc::new(asyncfn_box(execbody)),
|
||||
min_badge : "vip".to_string(),
|
||||
min_badge : Badge::Vip,
|
||||
admin_only : true,
|
||||
custom_cond_fn : |_:Arc<Bot>,_:PrivmsgMessage| true,
|
||||
}
|
||||
|
@ -87,24 +87,23 @@ impl Command
|
|||
fn caller_badge_ok(cmd:&Command,_bot:Arc<Bot>,message:PrivmsgMessage) -> bool {
|
||||
for badge in message.badges {
|
||||
|
||||
match cmd.min_badge.as_str() {
|
||||
"broadcaster" => {
|
||||
if badge.name == cmd.min_badge { return true }
|
||||
match cmd.min_badge {
|
||||
Badge::Broadcaster => {
|
||||
if badge.name == "broadcaster" { return true }
|
||||
else { return false }
|
||||
},
|
||||
"moderator" => {
|
||||
Badge::Moderator => {
|
||||
match badge.name.as_str() {
|
||||
"moderator" | "broadcaster" => return true,
|
||||
_ => (),
|
||||
}
|
||||
},
|
||||
"vip" => {
|
||||
Badge::Vip => {
|
||||
match badge.name.as_str() {
|
||||
"vip" | "moderator" | "broadcaster" => return true,
|
||||
_ => (),
|
||||
}
|
||||
},
|
||||
_ => return false,
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -151,7 +150,8 @@ impl Command
|
|||
|
||||
|
||||
/// sets min_badge to run the cmd
|
||||
pub fn set_min_badge(&mut self,min_badge:String) {
|
||||
// pub fn set_min_badge(&mut self,min_badge:String) {
|
||||
pub fn set_min_badge(&mut self,min_badge:Badge) {
|
||||
self.min_badge = min_badge
|
||||
}
|
||||
|
||||
|
|
89
src/lib.rs
89
src/lib.rs
|
@ -22,22 +22,20 @@
|
|||
//!
|
||||
//! ```
|
||||
//!
|
||||
//! ## Module with Custom Command
|
||||
//!
|
||||
//! A `Module` is a group of bot objects (eg `Command`) that elevated users can manage.
|
||||
//! ## Customize with Modules
|
||||
//!
|
||||
//! Bot objects are recommended to be loaded through a `Module`
|
||||
//! A `Module` is a group of bot objects (eg `Command`) that elevated users can manage through built in `disable` and `enable` commands
|
||||
//!
|
||||
//! Create a custom `Module` by :
|
||||
//!
|
||||
//! 1. Defining Functions that create the Custom Bot Objects (eg `Command`)
|
||||
//!
|
||||
//! 2. Define a function that creates a `Module` with the Custom Bot Objects loaded
|
||||
//!
|
||||
//!
|
||||
//! ```rust
|
||||
//! use std::sync::Arc;
|
||||
//!
|
||||
//! use forcebot_rs_v2::Bot;
|
||||
//! use forcebot_rs_v2::asyncfn_box;
|
||||
//! use forcebot_rs_v2::Command;
|
||||
//! use forcebot_rs_v2::Module;
|
||||
//! use twitch_irc::message::ServerMessage;
|
||||
//!
|
||||
//!
|
||||
//! #[tokio::main]
|
||||
//! pub async fn main() {
|
||||
|
@ -45,35 +43,56 @@
|
|||
//! /* Create the bot using env */
|
||||
//! let mut bot = Bot::new();
|
||||
//!
|
||||
//! /* 1. Create a new module */
|
||||
//! let mut custom_mod = Module::new("test".to_string(), "".to_string());
|
||||
//!
|
||||
//! /* 2. Create a new cmd */
|
||||
//! let mut cmd = Command::new("test".to_string(),"".to_string());
|
||||
//!
|
||||
//! async fn execbody(bot:Arc<Bot>,message:ServerMessage) -> Result<String,String> {
|
||||
//! if let ServerMessage::Privmsg(msg) = message {
|
||||
//! let _= bot.client.say_in_reply_to(
|
||||
//! &msg, "test return".to_string()).await;
|
||||
//! }
|
||||
//! Result::Err("Not Valid message type".to_string())
|
||||
//! }
|
||||
//!
|
||||
//! cmd.set_exec_fn(asyncfn_box(execbody));
|
||||
//! cmd.set_admin_only(false);
|
||||
//! cmd.set_min_badge("moderator".to_string());
|
||||
//!
|
||||
//! /* 3. Load the cmd into a new module */
|
||||
//! custom_mod.load_command(cmd);
|
||||
//!
|
||||
//! /* 4. Load the module into the bot */
|
||||
//! bot.load_module(custom_mod);
|
||||
//! /* load the Module */
|
||||
//! bot.load_module(custom_mod::new());
|
||||
//!
|
||||
//! /* Run the bot */
|
||||
//! bot.run().await;
|
||||
//!
|
||||
//! }
|
||||
//!
|
||||
//!
|
||||
//! pub mod custom_mod {
|
||||
//! use std::sync::Arc;
|
||||
//!
|
||||
//! use forcebot_rs_v2::{asyncfn_box, Badge, Bot, Command, Module};
|
||||
//! use twitch_irc::message::ServerMessage;
|
||||
//!
|
||||
//!
|
||||
//! /// Module with a loaded command
|
||||
//! pub fn new() -> Module {
|
||||
//! /* 1. Create a new module */
|
||||
//! let mut custom_mod = Module::new("test".to_string(), "".to_string());
|
||||
//!
|
||||
//! /* 2. Load the cmd into a new module */
|
||||
//! custom_mod.load_command(cmd_test());
|
||||
//!
|
||||
//! custom_mod
|
||||
//!
|
||||
//! }
|
||||
//!
|
||||
//! pub fn cmd_test() -> Command {
|
||||
//! /* 1. Create a new cmd */
|
||||
//! let mut cmd = Command::new("test".to_string(),"".to_string());
|
||||
//!
|
||||
//! /* 2. Define exec callback */
|
||||
//! async fn execbody(bot:Arc<Bot>,message:ServerMessage) -> Result<String,String> {
|
||||
//! if let ServerMessage::Privmsg(msg) = message {
|
||||
//! let _= bot.client.say_in_reply_to(
|
||||
//! &msg, "test return".to_string()).await;
|
||||
//! }
|
||||
//! Result::Err("Not Valid message type".to_string())
|
||||
//! }
|
||||
//!
|
||||
//! /* 3. Set Command flags */
|
||||
//! cmd.set_exec_fn(asyncfn_box(execbody));
|
||||
//! cmd.set_admin_only(false);
|
||||
//! cmd.set_min_badge(Badge::Moderator);
|
||||
//!
|
||||
//! cmd
|
||||
//! }
|
||||
//! }
|
||||
//!
|
||||
//! ```
|
||||
//!
|
||||
//! ## Simple Debug Listener
|
||||
|
@ -182,4 +201,6 @@ pub use crate::botcore::bot::Bot;
|
|||
pub use crate::botcore::bot_objects::asyncfn_box;
|
||||
pub use crate::botcore::bot_objects::listener::Listener;
|
||||
pub use crate::botcore::bot_objects::command::Command;
|
||||
pub use crate::botcore::modules::Module;
|
||||
pub use crate::botcore::modules::Module;
|
||||
pub use crate::botcore::bot_objects::Badge;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue