use color_eyre::eyre::{Error, Result}; use poise::serenity_prelude::{self as serenity, FullEvent}; use tracing::info; mod roll_dice; mod source; type Context<'a> = poise::Context<'a, (), Error>; fn event_handler(_ctx: serenity::Context, event: &FullEvent) { if let FullEvent::Ready { data_about_bot } = event { info!("Logged in as {}", data_about_bot.user.name); } } pub async fn make_bot() -> Result { let token = std::env::var("DISCORD_TOKEN").expect("DISCORD_TOKEN environment variable is missing"); let intents = serenity::GatewayIntents::non_privileged(); let framework = poise::Framework::<(), Error>::builder() .options(poise::FrameworkOptions { commands: vec![roll_dice::roll(), source::source()], event_handler: |ctx, event, _framework: poise::FrameworkContext<'_, (), _>, _data| { Box::pin(async move { event_handler(ctx.clone(), event); Ok(()) }) }, ..Default::default() }) .setup(|ctx, _ready, framework| { Box::pin(async move { poise::builtins::register_globally(ctx, &framework.options().commands).await?; Ok(()) }) }) .build(); Ok(serenity::ClientBuilder::new(token, intents) .framework(framework) .await?) }