BotTerre/apps/bot/src/main.rs

65 lines
2.1 KiB
Rust

use config::parse_local_config;
use poise::serenity_prelude as serenity;
use tracing::{error, info};
pub mod config;
pub mod dotenv;
pub mod model;
struct Data {} // User data, which is stored and accessible in all command invocations
type Error = Box<dyn std::error::Error + Send + Sync>;
type Context<'a> = poise::Context<'a, Data, Error>;
/// Displays your or another user's account creation date
#[poise::command(slash_command, prefix_command)]
async fn age(
ctx: Context<'_>,
#[description = "Selected user"] user: Option<serenity::User>,
) -> Result<(), Error> {
let u = user.as_ref().unwrap_or_else(|| ctx.author());
let response = format!("{}'s account was created at {}", u.name, u.created_at());
ctx.say(response).await?;
Ok(())
}
#[tokio::main]
async fn main() {
let config = parse_local_config();
tool_tracing::init::init_tracing(config.tracing.clone(), config.bot_name.clone());
info!("Init Database");
let datalake_config = model::create_pool_manager(config.persistence.clone()).unwrap();
let _manager = match model::create_manager_and_init(datalake_config).await {
Ok(manager) => {
info!("Database manager created successfully");
manager
}
Err(e) => {
error!("Failed to create database manager: {}", e);
return;
}
};
info!("Database manager initialized successfully");
info!("Starting bot {}", config.bot_name);
let intents = serenity::GatewayIntents::non_privileged();
let framework = poise::Framework::builder()
.options(poise::FrameworkOptions {
commands: vec![age()],
..Default::default()
})
.setup(|ctx, _ready, framework| {
Box::pin(async move {
poise::builtins::register_globally(ctx, &framework.options().commands).await?;
Ok(Data {})
})
})
.build();
let client = serenity::ClientBuilder::new(config.token.clone(), intents)
.framework(framework)
.await;
client.unwrap().start().await.unwrap();
}