use poise::serenity_prelude::{ChannelId, GuildId, ReactionType}; use redis_macros::{FromRedisValue, ToRedisArgs}; use serde::{Deserialize, Serialize}; pub const SETTINGS_KEY: &str = "settings-v1"; #[derive(poise::ChoiceParameter)] pub enum Properties { GuildId, PinBoardChannel, PinBoardWatch, PinBoardEnabled, ReactBoardChannel, ReactBoardRequirement, ReactBoardReactions, ReactBoardEnabled, OptionalCommandsEnabled, } #[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize, FromRedisValue, ToRedisArgs)] pub struct Settings { pub guild_id: GuildId, pub pinboard_channel: Option, pub pinboard_watch: Option>, pub pinboard_enabled: bool, pub reactboard_channel: Option, pub reactboard_requirement: Option, pub reactboard_reactions: Option>, pub reactboard_enabled: bool, pub optional_commands_enabled: bool, } impl Settings { pub fn can_use_reaction(&self, reaction: &ReactionType) -> bool { if let Some(reactions) = &self.reactboard_reactions { reactions.iter().any(|r| r == reaction) } else { false } } }