From 7dac9f7895232ea98983d44a668ed4f00558b81f Mon Sep 17 00:00:00 2001 From: jude Date: Thu, 6 Aug 2020 20:39:05 +0100 Subject: [PATCH] permission_level attribute macro working --- regex_command_attr/src/structures.rs | 18 +++++++++++++++++- src/framework.rs | 19 +++++++++++++++++-- src/main.rs | 2 ++ 3 files changed, 36 insertions(+), 3 deletions(-) diff --git a/regex_command_attr/src/structures.rs b/regex_command_attr/src/structures.rs index 6f8d45d..1540a5c 100644 --- a/regex_command_attr/src/structures.rs +++ b/regex_command_attr/src/structures.rs @@ -209,9 +209,24 @@ impl PermissionLevel { impl ToTokens for PermissionLevel { fn to_tokens(&self, stream: &mut TokenStream2) { let path = quote!(crate::framework::PermissionLevel); + let variant; + + match self { + Self::Unrestricted => { + variant = quote!(Unrestricted); + } + + Self::Managed => { + variant = quote!(Managed); + } + + Self::Restricted => { + variant = quote!(Restricted); + } + } stream.extend(quote! { - #path::Unrestricted + #path::#variant }); } } @@ -229,6 +244,7 @@ impl Options { let mut options = Self::default(); options.can_blacklist = true; + options.supports_dm = true; options } diff --git a/src/framework.rs b/src/framework.rs index 5d85aec..10e6aaf 100644 --- a/src/framework.rs +++ b/src/framework.rs @@ -6,10 +6,14 @@ use serenity::{ model::channel::Message, }; -use std::collections::HashMap; +use std::{ + collections::HashMap, + fmt, +}; use serenity::framework::standard::CommandFn; +#[derive(Debug)] pub enum PermissionLevel { Unrestricted, Managed, @@ -19,11 +23,22 @@ pub enum PermissionLevel { pub struct Command { pub name: &'static str, pub required_perms: PermissionLevel, - pub can_blacklist: bool, pub supports_dm: bool, + pub can_blacklist: bool, pub func: CommandFn, } +impl fmt::Debug for Command { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + f.debug_struct("Command") + .field("name", &self.name) + .field("required_perms", &self.required_perms) + .field("supports_dm", &self.supports_dm) + .field("can_blacklist", &self.can_blacklist) + .finish() + } +} + // create event handler for bot pub struct RegexFramework { commands: HashMap, diff --git a/src/main.rs b/src/main.rs index 223dc00..7acdde2 100644 --- a/src/main.rs +++ b/src/main.rs @@ -52,6 +52,8 @@ static THEME_COLOR: u32 = 0x00e0f3; async fn main() -> Result<(), Box> { dotenv()?; + println!("{:?}", HELP_COMMAND); + let framework = RegexFramework::new() .ignore_bots(true) .default_prefix("$")