From 40c8203849243647c879a8d4a6acfe9eb349888d Mon Sep 17 00:00:00 2001 From: Azur84 Date: Mon, 11 May 2026 21:30:10 +0200 Subject: [PATCH] add database connection and event_handler to the client --- src/events.rs | 4 ++-- src/main.rs | 35 ++++++++++++++++++++++++++++++----- 2 files changed, 32 insertions(+), 7 deletions(-) diff --git a/src/events.rs b/src/events.rs index 6031018..f67b4e7 100644 --- a/src/events.rs +++ b/src/events.rs @@ -2,7 +2,7 @@ use poise::serenity_prelude as serenity; use crate::{Data, Error}; -async fn event_handler( +pub async fn event_handler( ctx: &serenity::Context, event: &serenity::FullEvent, _framework: poise::FrameworkContext<'_, Data, Error>, @@ -10,7 +10,7 @@ async fn event_handler( ) -> Result<(), Error> { match event { serenity::FullEvent::Ready { data_about_bot, .. } => { - println!("Logged in as {}", data_about_bot.user.name); + println!("Logged in as {} :3", data_about_bot.user.name); } _ => {} } diff --git a/src/main.rs b/src/main.rs index 11657ce..e294726 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,16 +2,21 @@ mod commands; mod database; mod events; +use ::serenity::{gateway::ActivityData, model::id::UserId}; use dotenvy::dotenv; use poise::serenity_prelude as serenity; -use std::env::var; +use std::{collections::HashSet, env::var}; + +use crate::{database::DataBase, events::event_handler}; // Types used by all command functions type Error = Box; type Context<'a> = poise::Context<'a, Data, Error>; // Custom user data passed to all command functions -pub struct Data {} +pub struct Data { + database: DataBase, +} async fn on_error(error: poise::FrameworkError<'_, Data, Error>) { // This is our custom error handler @@ -35,10 +40,26 @@ async fn main() { tracing_subscriber::fmt::init(); dotenv().ok(); - let database = database::DataBase::setup_database() + let database = DataBase::setup_database() .await .expect("Failed setup the database"); + let owners = var("OWNERS"); + + if let Err(_) = owners { + println!("⚠️ Missing `OWNERS` env var, see README for more information."); + } + + let owners = owners.unwrap_or(String::from("")); + + let owners: HashSet = owners + .split(" ") + .filter_map(|s| { + let some_number = s.parse().ok(); + some_number.map(UserId::new) + }) + .collect(); + // FrameworkOptions contains all of poise's configuration option in one struct // Every option can be omitted to use its default value let options = poise::FrameworkOptions { @@ -46,15 +67,19 @@ async fn main() { // The global error handler for all error cases that may occur on_error: |error| Box::pin(on_error(error)), + event_handler: |ctx, event, framework, data| { + Box::pin(event_handler(ctx, event, framework, data)) + }, + owners: owners, + ..Default::default() }; let framework = poise::Framework::builder() .setup(move |ctx, ready, framework| { Box::pin(async move { - println!("Logged in as {}", ready.user.name); poise::builtins::register_globally(ctx, &framework.options().commands).await?; - Ok(Data {}) + Ok(Data { database }) }) }) .options(options)