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#![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    // Register the shared HTTP client for GitHub API requests
44    {
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}