blob: d7f88c32490152c76ad2d256f80fcdc455353f9e (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
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::<SerenityShardManager>(Arc::clone(&client.shard_manager));
data.insert::<ApiClient>(Arc::new(api_client));
data.insert::<TC>(Arc::new(Mutex::new(tc)));
// data.insert::<VoiceManager>(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::<Owner>(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<UserId>) -> 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::<SerenityShardManager>(Arc::clone(&client.shard_manager));
data.insert::<ApiClient>(Arc::new(api_client));
data.insert::<TC>(Arc::new(Mutex::new(tc)));
// data.insert::<VoiceManager>(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() }
}
|