diff --git a/src/emergency_report.rs b/src/emergency_report.rs index d1b36ff..11f30bf 100644 --- a/src/emergency_report.rs +++ b/src/emergency_report.rs @@ -1,20 +1,38 @@ -use serenity::all::{ChannelId, Colour, Command, CommandId, Context, CreateCommand, CreateEmbed, CreateEmbedAuthor, CreateInputText, CreateInteractionResponse, CreateInteractionResponseFollowup, CreateInteractionResponseMessage, CreateMessage, CreateQuickModal, EventHandler, InputTextStyle, Interaction, Message, Ready, Timestamp}; -use serenity::all::Change::Color; +use serenity::all::{ChannelId, Colour, Command, CommandId, Context, CreateCommand, CreateEmbed, CreateEmbedAuthor, CreateInputText, CreateInteractionResponse, CreateInteractionResponseMessage, CreateMessage, CreateQuickModal, EventHandler, InputTextStyle, Interaction, Ready, Timestamp}; use serenity::async_trait; use tokio::sync::OnceCell; +use std::env; -#[derive(Default)] -pub struct EmergencyReportHandler{ - command_id: OnceCell +pub struct EmergencyReportHandler { + command_id: OnceCell, + emergency_channel_id: ChannelId, +} + +impl Default for EmergencyReportHandler { + fn default() -> Self { + let channel_str = env::var("EMERGENCY_CHANNEL_ID") + .expect("EMERGENCY_CHANNEL_ID must be set in .env"); + + let id: u64 = channel_str + .parse() + .expect("EMERGENCY_CHANNEL_ID must be a valid u64"); + + Self { + command_id: OnceCell::new(), + emergency_channel_id: ChannelId::new(id), + } + } } #[async_trait] impl EventHandler for EmergencyReportHandler { - async fn ready(&self, ctx: Context, data_about_bot: Ready) { + async fn ready(&self, ctx: Context, _data_about_bot: Ready) { let command = CreateCommand::new("emergency-report") .description("Report an emergency (e.g. server down) ONLY if its happening for everyone not if its just for you."); - let cmd = Command::create_global_command(&ctx.http, command).await.expect("unable to register command"); + let cmd = Command::create_global_command(&ctx.http, command) + .await + .expect("unable to register command"); self.command_id.set(cmd.id).ok(); } @@ -28,7 +46,7 @@ impl EventHandler for EmergencyReportHandler { return; }; - if cmd.data.id != *id{ + if cmd.data.id != *id { return; } @@ -41,13 +59,13 @@ impl EventHandler for EmergencyReportHandler { let modal = CreateQuickModal::new("Emergency Report Form") .field(main_field); - let response = match cmd.quick_modal(&ctx, modal).await{ + let response = match cmd.quick_modal(&ctx, modal).await { Ok(v) => v, - Err(e) => { eprintln!("{}", e); return } + Err(e) => { eprintln!("Modal error: {}", e); return } }; let Some(response) = response else { - return + return; }; response.interaction.create_response(&ctx.http, CreateInteractionResponse::Message( @@ -57,10 +75,7 @@ impl EventHandler for EmergencyReportHandler { )).await.ok(); let text = &response.inputs[0]; - - let emergency_channel = ChannelId::new(1379768148420591666); - - let mut author = CreateEmbedAuthor::from(response.interaction.user); + let author = CreateEmbedAuthor::from(response.interaction.user.clone()); let embed = CreateEmbed::new() .title("AN EMERGENCY HAS BEEN REPORTED") @@ -73,6 +88,6 @@ impl EventHandler for EmergencyReportHandler { .content("@everyone") .add_embed(embed); - emergency_channel.send_message(&ctx.http, message).await.ok(); + self.emergency_channel_id.send_message(&ctx.http, message).await.ok(); } } \ No newline at end of file