1#![deny(clippy::all)]
8#![cfg_attr(coverage_nightly, feature(coverage_attribute))]
9
10mod cache;
11mod command;
12mod config;
13mod event;
14mod expand;
15mod utils;
16
17use crate::{
18 command::ShardManagerContainer,
19 config::{BabyriteConfig, EnvConfig, LogFormat},
20 event::BabyriteEventHandler,
21 expand::github::HttpClient,
22};
23use serenity::all::GatewayIntents;
24use tracing_subscriber::EnvFilter;
25
26#[tokio::main]
27async fn main() -> anyhow::Result<()> {
28 dotenvy::dotenv().ok();
29
30 BabyriteConfig::init()?;
31 let envs = EnvConfig::get();
32 let config = BabyriteConfig::get();
33
34 let filter = EnvFilter::try_from_default_env()
37 .unwrap_or_else(|_| EnvFilter::new(config.log.level.clone()));
38 let builder = tracing_subscriber::fmt().with_env_filter(filter);
39 match config.resolved_log_format() {
40 LogFormat::Json => builder.json().init(),
41 LogFormat::Compact => builder.compact().init(),
42 }
43 tracing::debug!("Config: {:?}", config);
44
45 let mut client = serenity::Client::builder(
46 &envs.discord_api_token,
47 GatewayIntents::MESSAGE_CONTENT | GatewayIntents::GUILD_MESSAGES | GatewayIntents::GUILDS,
48 )
49 .event_handler(BabyriteEventHandler)
50 .await
51 .expect("Failed to initialize client.");
52
53 {
56 let mut data = client.data.write().await;
57 data.insert::<HttpClient>(reqwest::Client::new());
58 data.insert::<ShardManagerContainer>(client.shard_manager.clone());
59 }
60
61 client.start().await?;
62
63 Ok(())
64}