use crate::core::{ api, handler::Handler, model::*, framework::WispFramework, timers }; // use crate::webserver::rocket::*; use serenity::Error as SerenityError; use serenity::http; use serenity::model::id::UserId; use serenity::prelude::{Client, Mutex}; // use serenity::voice; use std::collections::HashSet; use std::env; use std::sync::Arc; // use std::thread; pub struct WispClient(Client); impl WispClient { // #[tokio::main] pub fn new() -> Self { let token = env::var("DISCORD_TOKEN").expect("Expected Discord bot token in environment."); let mut client = Client::new(&token, Handler).expect("Unable to initialize Wisp client."); { let mut data = client.data.lock(); let api_client = api::ApiClient::new(); let tc = timers::TimerClient::new(); data.insert::(Arc::clone(&client.shard_manager)); data.insert::(Arc::new(api_client)); data.insert::(Arc::new(Mutex::new(tc))); // data.insert::(Arc::clone(&client.voice_manager)); } let owners = match http::get_current_application_info() { Ok(info) => { let mut set = HashSet::new(); let mut data = client.data.lock(); data.insert::(info.owner.id); set.insert(info.owner.id); set }, Err(why) => panic!("Couldn't get the application info: {:?}", why), }; // let bot = WispData { // data: Arc::new(Mutex::new(TypeMap::new())) // }; // let bot_clone = bot.clone(); // unsafe { // tokio::spawn(async move { // let _ = start_rocket(bot_clone); // }); // } // thread::spawn(move || { // let _ = start_rocket(); // }); client.with_framework(WispFramework::new(owners)); WispClient(client) } pub fn new_with_owners(owners: HashSet) -> Self { let token = env::var("DISCORD_TOKEN").expect("Expected Discord bot token in enviroment."); let mut client = Client::new(&token, Handler).expect("Unable to initialize Wisp client."); { let mut data = client.data.lock(); let api_client = api::ApiClient::new(); let tc = timers::TimerClient::new(); data.insert::(Arc::clone(&client.shard_manager)); data.insert::(Arc::new(api_client)); data.insert::(Arc::new(Mutex::new(tc))); // data.insert::(Arc::clone(&client.voice_manager)); } client.with_framework(WispFramework::new(owners)); WispClient(client) } pub fn start(&mut self) -> Result<(), SerenityError> { self.start_autosharded() } pub fn start_autosharded(&mut self) -> Result<(), SerenityError> { self.0.start_autosharded() } }