//! Requires the 'framework' feature flag be enabled in your project's //! `Cargo.toml`. //! //! This can be enabled by specifying the feature in the dependency section: //! //! ```toml //! [dependencies.serenity] //! git = "https://github.com/serenity-rs/serenity.git" //! features = ["framework", "standard_framework"] //! ``` mod commands; use std::{ collections::HashSet, env, sync::Arc, }; use serenity::{ client::bridge::gateway::ShardManager, framework::{ StandardFramework, standard::macros::group, }, model::{event::ResumedEvent, gateway::Ready}, prelude::*, }; use log::{error, info}; use commands::{ math::*, meta::*, owner::*, }; struct ShardManagerContainer; impl TypeMapKey for ShardManagerContainer { type Value = Arc>; } struct Handler; impl EventHandler for Handler { fn ready(&self, _: Context, ready: Ready) { info!("Connected as {}", ready.user.name); } fn resume(&self, _: Context, _: ResumedEvent) { info!("Resumed"); } } #[group] #[commands(multiply, ping, quit)] struct General; fn main() { // This will load the environment variables located at `./.env`, relative to // the CWD. See `./.env.example` for an example on how to structure this. kankyo::load().expect("Failed to load .env file"); // Initialize the logger to use environment variables. // // In this case, a good default is setting the environment variable // `RUST_LOG` to debug`. env_logger::init(); let token = env::var("DISCORD_TOKEN") .expect("Expected a token in the environment"); let mut client = Client::new(&token, Handler).expect("Err creating client"); { let mut data = client.data.write(); data.insert::(Arc::clone(&client.shard_manager)); } let owners = match client.cache_and_http.http.get_current_application_info() { Ok(info) => { let mut set = HashSet::new(); set.insert(info.owner.id); set }, Err(why) => panic!("Couldn't get application info: {:?}", why), }; client.with_framework(StandardFramework::new() .configure(|c| c .owners(owners) .prefix("~")) .group(&GENERAL_GROUP)); if let Err(why) = client.start() { error!("Client error: {:?}", why); } }