41 lines
1.4 KiB
Rust

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<serenity::Client> {
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?)
}