use crate::core::consts::*; use crate::core::consts::DB as db; use crate::core::utils::*; use serenity::framework::standard::{ Args, Command, CommandError, CommandOptions }; use serenity::model::channel::Message; use serenity::model::Permissions; use serenity::prelude::Context; use std::sync::Arc; pub struct PRegisterMember; impl Command for PRegisterMember { fn options(&self) -> Arc { let default = CommandOptions::default(); let options = CommandOptions { desc: Some("Set the member role used by register. This role is automatically either after cooldown, if cooldown is set, or right away.".to_string()), usage: Some("".to_string()), example: Some("member".to_string()), aliases: vec!["reg_m", "reg_member"].iter().map(|e| e.to_string()).collect(), required_permissions: Permissions::MANAGE_GUILD, ..default }; Arc::new(options) } fn execute(&self, _: &mut Context, message: &Message, args: Args) -> Result<(), CommandError> { if let Some(guild_id) = message.guild_id { let mut settings = db.get_premium(guild_id.0 as i64)?; if let Some((role_id, role)) = parse_role(args.full().to_string(), guild_id) { settings.register_member_role = Some(role_id.0 as i64); db.update_premium(guild_id.0 as i64, settings)?; message.channel_id.say(format!("Set member role to {}", role.name))?; } } else { failed!(GUILDID_FAIL); } Ok(()) } } pub struct PRegisterCooldown; impl Command for PRegisterCooldown { fn options(&self) -> Arc { let default = CommandOptions::default(); let options = CommandOptions { desc: Some("Set the cooldown role used by register. This is applied automatically before member and removed after cooldown_duration".to_string()), usage: Some("".to_string()), example: Some("cooldown".to_string()), aliases: vec!["reg_c", "reg_cooldown"].iter().map(|e| e.to_string()).collect(), required_permissions: Permissions::MANAGE_GUILD, ..default }; Arc::new(options) } fn execute(&self, _: &mut Context, message: &Message, args: Args) -> Result<(), CommandError> { if let Some(guild_id) = message.guild_id { let mut settings = db.get_premium(guild_id.0 as i64)?; if let Some((role_id, role)) = parse_role(args.full().to_string(), guild_id) { settings.register_cooldown_role = Some(role_id.0 as i64); db.update_premium(guild_id.0 as i64, settings)?; message.channel_id.say(format!("Set cooldown role to {}", role.name))?; } } else { failed!(GUILDID_FAIL); } Ok(()) } } pub struct PRegisterDuration; impl Command for PRegisterDuration { fn options(&self) -> Arc { let default = CommandOptions::default(); let options = CommandOptions { desc: Some("Set the duration cooldown is applied for. Default value is 24 hours.".to_string()), usage: Some("".to_string()), example: Some("24h".to_string()), aliases: vec!["reg_dur", "reg_duration"].iter().map(|e| e.to_string()).collect(), required_permissions: Permissions::MANAGE_GUILD, ..default }; Arc::new(options) } fn execute(&self, _: &mut Context, message: &Message, args: Args) -> Result<(), CommandError> { if let Some(guild_id) = message.guild_id { let mut settings = db.get_premium(guild_id.0 as i64)?; if let Ok(dur) = args.full().parse::() { let dur = hrtime_to_seconds(dur); settings.register_cooldown_duration = Some(dur as i32); db.update_premium(guild_id.0 as i64, settings)?; message.channel_id.say(format!("Set duration of cooldown to {}", seconds_to_hrtime(dur as usize)))?; } } else { failed!(GUILDID_FAIL); } Ok(()) } } pub struct PRegisterRestrictions; impl Command for PRegisterRestrictions { fn options(&self) -> Arc { let default = CommandOptions::default(); let options = CommandOptions { desc: Some("Manage the roles people on cooldown cannot self-assign. These are also ignored in register command usage. Valid options: `add`, `remove`, `set`".to_string()), usage: Some("