add database connection and event_handler to the client

This commit is contained in:
2026-05-11 21:30:10 +02:00
parent 93c57f69df
commit 40c8203849
2 changed files with 32 additions and 7 deletions
+2 -2
View File
@@ -2,7 +2,7 @@ use poise::serenity_prelude as serenity;
use crate::{Data, Error}; use crate::{Data, Error};
async fn event_handler( pub async fn event_handler(
ctx: &serenity::Context, ctx: &serenity::Context,
event: &serenity::FullEvent, event: &serenity::FullEvent,
_framework: poise::FrameworkContext<'_, Data, Error>, _framework: poise::FrameworkContext<'_, Data, Error>,
@@ -10,7 +10,7 @@ async fn event_handler(
) -> Result<(), Error> { ) -> Result<(), Error> {
match event { match event {
serenity::FullEvent::Ready { data_about_bot, .. } => { 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);
} }
_ => {} _ => {}
} }
+30 -5
View File
@@ -2,16 +2,21 @@ mod commands;
mod database; mod database;
mod events; mod events;
use ::serenity::{gateway::ActivityData, model::id::UserId};
use dotenvy::dotenv; use dotenvy::dotenv;
use poise::serenity_prelude as serenity; 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 // Types used by all command functions
type Error = Box<dyn std::error::Error + Send + Sync>; type Error = Box<dyn std::error::Error + Send + Sync>;
type Context<'a> = poise::Context<'a, Data, Error>; type Context<'a> = poise::Context<'a, Data, Error>;
// Custom user data passed to all command functions // 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>) { async fn on_error(error: poise::FrameworkError<'_, Data, Error>) {
// This is our custom error handler // This is our custom error handler
@@ -35,10 +40,26 @@ async fn main() {
tracing_subscriber::fmt::init(); tracing_subscriber::fmt::init();
dotenv().ok(); dotenv().ok();
let database = database::DataBase::setup_database() let database = DataBase::setup_database()
.await .await
.expect("Failed setup the database"); .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<UserId> = 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 // FrameworkOptions contains all of poise's configuration option in one struct
// Every option can be omitted to use its default value // Every option can be omitted to use its default value
let options = poise::FrameworkOptions { let options = poise::FrameworkOptions {
@@ -46,15 +67,19 @@ async fn main() {
// The global error handler for all error cases that may occur // The global error handler for all error cases that may occur
on_error: |error| Box::pin(on_error(error)), 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() ..Default::default()
}; };
let framework = poise::Framework::builder() let framework = poise::Framework::builder()
.setup(move |ctx, ready, framework| { .setup(move |ctx, ready, framework| {
Box::pin(async move { Box::pin(async move {
println!("Logged in as {}", ready.user.name);
poise::builtins::register_globally(ctx, &framework.options().commands).await?; poise::builtins::register_globally(ctx, &framework.options().commands).await?;
Ok(Data {}) Ok(Data { database })
}) })
}) })
.options(options) .options(options)