diff options
Diffstat (limited to 'src/main.rs')
| -rw-r--r-- | src/main.rs | 70 |
1 files changed, 45 insertions, 25 deletions
diff --git a/src/main.rs b/src/main.rs index 58e059e..007aae9 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,3 +1,5 @@ +#![feature(rustc_private)] + #[macro_use] extern crate serenity; #[macro_use] extern crate log; #[macro_use] extern crate error_chain; @@ -7,44 +9,50 @@ extern crate dotenv; extern crate simple_logger; extern crate typemap; extern crate url; +extern crate parking_lot; mod commands; mod util; +use std::env; +use std::thread; +use std::time::{Duration, Instant}; + +use serenity::prelude::*; +use serenity::framework::StandardFramework; +use serenity::framework::standard::help_commands; +use serenity::model::gateway::Ready; +use serenity::model::id::{UserId, GuildId}; + +use dotenv::dotenv; + +use commands::register_commands; + mod errors { error_chain! { foreign_links { Serenity(::serenity::Error); - OS(::std::env::VarError); + MissingVar(::std::env::VarError); } } } use errors::*; - pub use util::*; -use std::env; -use std::collections::HashSet; -use std::thread; -use std::time::{Duration, Instant}; - -use serenity::prelude::*; -use serenity::framework::StandardFramework; -use serenity::framework::standard::help_commands; -use serenity::model::gateway::Ready; - -use dotenv::dotenv; +lazy_static! { + static ref TARGET_GUILD: u64 = must_env_lookup::<u64>("TARGET_GUILD"); + static ref TARGET_GUILD_ID: GuildId = GuildId(*TARGET_GUILD); +} struct Handler; impl EventHandler for Handler { - fn ready(&self, _c: Context, r: Ready) { - let guild = r.guilds.iter().find(|g| { - g.id().0 == 0 - }); + fn ready(&self, _: Context, r: Ready) { + let guild = r.guilds.iter() + .find(|g| g.id().0 == *TARGET_GUILD); if guild.is_none() { - info!("bot isn't in configured guild. let it join here: {:?}", OAUTH_URL.as_str()); + info!("bot isn't in configured guild. join here: {:?}", OAUTH_URL.as_str()); } } } @@ -52,25 +60,30 @@ impl EventHandler for Handler { fn run() -> Result<()> { let token = &env::var("THULANI_TOKEN")?; let mut client = Client::new(token, Handler)?; - let framework = StandardFramework::new() + + commands::VoiceManager::register(&mut client); + commands::PlayQueue::register(&mut client); + + let owner_id = must_env_lookup::<u64>("OWNER_ID"); + let mut framework = StandardFramework::new() .configure(|c| c .allow_dm(false) .allow_whitespace(true) .prefixes(vec!["!thulani ", "!thulan ", "!thulando madando ", "!thulando "]) .ignore_bots(true) .on_mention(false) - .owners(HashSet::new()) + .owners(vec![UserId(owner_id)].into_iter().collect()) .case_insensitivity(true) ) .before(|_ctx, message, cmd| { debug!("got command {} from user '{}' ({})", cmd, message.author.name, message.author.id); - - true + + message.guild_id().map_or(false, |x| x.0 == *TARGET_GUILD) }) - .after(|_ctx, _msg, cmd, err| { + .after(|_ctx, _msg, _cmd, err| { match err { Ok(()) => {}, - Err(e) => { + Err(_e) => { } @@ -81,6 +94,8 @@ fn run() -> Result<()> { c }); + framework = register_commands(framework); + client.with_framework(framework); client.start()?; @@ -107,9 +122,14 @@ fn main() { Err(e) => { error!("error encountered running client: {}", e); e.iter().skip(1).for_each(|e| { - + error!("caused by: {}", e); }); + if let Some(bt) = e.backtrace() { + error!("backtrace: {:?}", bt); + } + + ::std::process::exit(1); }, _ => { warn!("somehow `run` completed without an error. should probably take a look at this."); |
