41 lines
1.4 KiB
Rust
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?)
|
|
}
|