Skip to main content

babyrite/
main.rs

1//! Babyrite - A Discord bot for message link previews.
2//!
3//! This bot automatically generates previews for Discord message links
4//! shared within the same guild, and expands GitHub permalinks into
5//! code blocks.
6
7#![deny(clippy::all)]
8
9mod cache;
10mod config;
11mod event;
12mod expand;
13mod utils;
14
15use crate::{
16    config::{BabyriteConfig, EnvConfig},
17    event::{BabyriteEventHandler, HttpClient},
18};
19use serenity::all::GatewayIntents;
20
21#[tokio::main]
22async fn main() -> anyhow::Result<()> {
23    dotenvy::dotenv().ok();
24
25    BabyriteConfig::init()?;
26    let envs = EnvConfig::get();
27
28    match BabyriteConfig::get().json_logging {
29        true => tracing_subscriber::fmt().json().init(),
30        false => tracing_subscriber::fmt().compact().init(),
31    }
32    tracing::debug!("Config: {:?}", BabyriteConfig::get());
33
34    let mut client = serenity::Client::builder(
35        &envs.discord_api_token,
36        GatewayIntents::MESSAGE_CONTENT | GatewayIntents::GUILD_MESSAGES,
37    )
38    .event_handler(BabyriteEventHandler)
39    .await
40    .expect("Failed to initialize client.");
41
42    // Register the shared HTTP client for GitHub API requests
43    {
44        let mut data = client.data.write().await;
45        data.insert::<HttpClient>(reqwest::Client::new());
46    }
47
48    if let Err(why) = client.start().await {
49        return Err(anyhow::anyhow!(why));
50    }
51
52    Ok(())
53}