Compare commits

..

4 Commits

Author SHA1 Message Date
Azur 12f3400164 change help command description 2026-05-11 21:48:52 +02:00
Azur 3fe5b47856 Add status and activity to the bot 2026-05-11 21:32:15 +02:00
Azur 40c8203849 add database connection and event_handler to the client 2026-05-11 21:30:10 +02:00
Azur 93c57f69df add foreign ref to database 2026-05-11 21:26:24 +02:00
4 changed files with 43 additions and 10 deletions
+7 -3
View File
@@ -9,7 +9,8 @@ create TABLE `User` (
create TABLE `Channel` ( create TABLE `Channel` (
`id` INT UNSIGNED NOT NULL PRIMARY KEY, `id` INT UNSIGNED NOT NULL PRIMARY KEY,
`guild_id` INT UNSIGNED NOT NULL `guild_id` INT UNSIGNED NOT NULL,
FOREIGN KEY(guild_id) REFERENCES Guild(id)
); );
create TABLE `Logs` ( create TABLE `Logs` (
@@ -20,10 +21,13 @@ create TABLE `Logs` (
`message_update` BOOLEAN DEFAULT FALSE, `message_update` BOOLEAN DEFAULT FALSE,
`message_delete` BOOLEAN DEFAULT FALSE, `message_delete` BOOLEAN DEFAULT FALSE,
`voice_join` BOOLEAN DEFAULT FALSE, `voice_join` BOOLEAN DEFAULT FALSE,
`voice_quit` BOOLEAN DEFAULT FALSE `voice_quit` BOOLEAN DEFAULT FALSE,
FOREIGN KEY(guild_id) REFERENCES Guild(id),
FOREIGN KEY(channel_id) REFERENCES Channel(id)
); );
create TABLE `Auto_Channel` ( create TABLE `Auto_Channel` (
`channel_id` INT UNSIGNED NOT NULL PRIMARY KEY, `channel_id` INT UNSIGNED NOT NULL PRIMARY KEY,
`category_id` INT UNSIGNED `category_id` INT UNSIGNED,
FOREIGN KEY(channel_id) REFERENCES User(id)
) )
+2
View File
@@ -1,5 +1,7 @@
use crate::{Context, Error}; use crate::{Context, Error};
/// ️ Display all commands and their uses
///
/// Show this help menu /// Show this help menu
#[poise::command(slash_command)] #[poise::command(slash_command)]
pub async fn help( pub async fn help(
+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);
} }
_ => {} _ => {}
} }
+32 -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)
@@ -68,6 +93,8 @@ async fn main() {
let client = serenity::ClientBuilder::new(token, intents) let client = serenity::ClientBuilder::new(token, intents)
.framework(framework) .framework(framework)
.status(serenity::OnlineStatus::Idle)
.activity(ActivityData::playing("next station ⭐ /help"))
.await; .await;
client.unwrap().start().await.unwrap() client.unwrap().start().await.unwrap()