1#![deny(clippy::all)]
8#![cfg_attr(coverage_nightly, feature(coverage_attribute))]
9
10mod cache;
11mod config;
12mod event;
13mod expand;
14mod utils;
15
16use crate::{
17 config::{BabyriteConfig, EnvConfig},
18 event::{BabyriteEventHandler, HttpClient},
19};
20use serenity::all::GatewayIntents;
21
22#[tokio::main]
23async fn main() -> anyhow::Result<()> {
24 dotenvy::dotenv().ok();
25
26 BabyriteConfig::init()?;
27 let envs = EnvConfig::get();
28
29 match BabyriteConfig::get().json_logging {
30 true => tracing_subscriber::fmt().json().init(),
31 false => tracing_subscriber::fmt().compact().init(),
32 }
33 tracing::debug!("Config: {:?}", BabyriteConfig::get());
34
35 let mut client = serenity::Client::builder(
36 &envs.discord_api_token,
37 GatewayIntents::MESSAGE_CONTENT | GatewayIntents::GUILD_MESSAGES,
38 )
39 .event_handler(BabyriteEventHandler)
40 .await
41 .expect("Failed to initialize client.");
42
43 {
45 let mut data = client.data.write().await;
46 data.insert::<HttpClient>(reqwest::Client::new());
47 }
48
49 if let Err(why) = client.start().await {
50 return Err(anyhow::anyhow!(why));
51 }
52
53 Ok(())
54}