aboutsummaryrefslogtreecommitdiff
path: root/src/framework
diff options
context:
space:
mode:
authoracdenisSK <[email protected]>2017-11-21 16:07:53 +0100
committeracdenisSK <[email protected]>2017-11-21 16:07:53 +0100
commitf61816ca141add5024e36e073764b7c824872ca4 (patch)
tree357317f5574698bb67c8a73f633443a50ed20d14 /src/framework
parentRemove client close handle (diff)
downloadserenity-f61816ca141add5024e36e073764b7c824872ca4.tar.xz
serenity-f61816ca141add5024e36e073764b7c824872ca4.zip
Add a way to execute code when a command is registered
Diffstat (limited to 'src/framework')
-rw-r--r--src/framework/standard/command.rs3
-rw-r--r--src/framework/standard/create_command.rs6
-rw-r--r--src/framework/standard/create_group.rs6
-rw-r--r--src/framework/standard/mod.rs10
4 files changed, 20 insertions, 5 deletions
diff --git a/src/framework/standard/command.rs b/src/framework/standard/command.rs
index 5633fd6..4ace064 100644
--- a/src/framework/standard/command.rs
+++ b/src/framework/standard/command.rs
@@ -128,6 +128,9 @@ pub trait Command: Send + Sync + 'static {
fn options(&self) -> Arc<CommandOptions> {
Arc::clone(&DEFAULT_OPTIONS)
}
+
+ /// Called when the command gets registered.
+ fn init(&self) {}
}
impl Command for Arc<Command> {
diff --git a/src/framework/standard/create_command.rs b/src/framework/standard/create_command.rs
index 4137b91..3a6601f 100644
--- a/src/framework/standard/create_command.rs
+++ b/src/framework/standard/create_command.rs
@@ -212,7 +212,11 @@ impl CreateCommand {
Arc::new(A(Arc::new(options), func))
},
- FnOrCommand::Command(cmd) => cmd,
+ FnOrCommand::Command(cmd) => {
+ cmd.init();
+
+ cmd
+ },
}
}
}
diff --git a/src/framework/standard/create_group.rs b/src/framework/standard/create_group.rs
index abdfdc8..25279ca 100644
--- a/src/framework/standard/create_group.rs
+++ b/src/framework/standard/create_group.rs
@@ -79,11 +79,13 @@ impl CreateGroup {
///
/// [`on`]: #method.on
pub fn cmd<C: Command + 'static>(mut self, name: &str, c: C) -> Self {
- let cmd = Arc::new(c);
+ let cmd: Arc<Command> = Arc::new(c);
self.0
.commands
- .insert(name.to_string(), CommandOrAlias::Command(cmd));
+ .insert(name.to_string(), CommandOrAlias::Command(Arc::clone(&cmd)));
+
+ cmd.init();
self
}
diff --git a/src/framework/standard/mod.rs b/src/framework/standard/mod.rs
index 55d6a7e..1660c44 100644
--- a/src/framework/standard/mod.rs
+++ b/src/framework/standard/mod.rs
@@ -648,9 +648,13 @@ impl StandardFramework {
.or_insert_with(|| Arc::new(CommandGroup::default()));
if let Some(ref mut group) = Arc::get_mut(ungrouped) {
+ let cmd: Arc<Command> = Arc::new(c);
+
group
.commands
- .insert(name.to_string(), CommandOrAlias::Command(Arc::new(c)));
+ .insert(name.to_string(), CommandOrAlias::Command(Arc::clone(&cmd)));
+
+ cmd.init();
}
}
@@ -698,7 +702,9 @@ impl StandardFramework {
group
.commands
- .insert(name, CommandOrAlias::Command(cmd));
+ .insert(name, CommandOrAlias::Command(Arc::clone(&cmd)));
+
+ cmd.init();
}
}