@ -1,6 +1,7 @@
#[ macro_use ]
extern crate lazy_static ;
use commands ::* ;
use config ::CONFIG ;
use serenity ::model ::channel ::Message ;
use serenity ::model ::id ::ChannelId ;
use serenity ::prelude ::* ;
@ -15,18 +16,16 @@ pub fn main() {
. expect ( "Could not connect to discord" ) ;
}
const PREFIX : char = '>' ;
pub struct Handler ;
impl EventHandler for Handler {
fn message ( & self , ctx : Context , msg : Message ) {
if ! msg . content . starts_with ( PREFIX ) {
if ! msg . content . starts_with ( & CONFIG . prefix ) {
return ;
}
if let Some ( command ) = find_matching ( & msg . content ) {
if let Some ( command ) = find_matching ( & msg . content , & CONFIG ) {
let response = match command . execute ( & msg ) {
Err ( e ) = > e ,
Ok ( ( ) ) = > "Done" . to_owned ( ) ,
Ok ( ( ) ) = > String ::from ( "Done." ) ,
} ;
send ( msg . channel_id , & response , & ctx ) ;
}
@ -38,3 +37,29 @@ pub fn send(target: ChannelId, message: &str, ctx: &Context) {
println! ( "Could not send message: {}" , cause ) ;
}
}
#[ cfg(test) ]
mod tests {
use super ::commands ::* ;
use super ::config ::* ;
use super ::* ;
#[ test ]
fn find_matching_test ( ) {
let cmd = Command ::new ( "ls -l" , "show_files" , vec! [ 1234567890 ] ) ;
let cfg = Config {
prefix : String ::from ( ">" ) ,
secret : String ::from ( "1qay2wsx3edc45fv" ) ,
commands : vec ! [ cmd . clone ( ) ] ,
} ;
assert_eq! ( find_matching ( & ">show_files" , & cfg ) , Some ( & cmd ) ) ;
assert_eq! ( find_matching ( & ">show something else" , & cfg ) , None ) ;
let cfg = Config {
prefix : String ::from ( "!!" ) ,
.. cfg
} ;
assert_eq! ( find_matching ( & ">show_files" , & cfg ) , None ) ;
assert_eq! ( find_matching ( & "!!show_files" , & cfg ) , Some ( & cmd ) ) ;
}
}