diff options
| author | acdenisSK <[email protected]> | 2017-11-21 16:07:53 +0100 |
|---|---|---|
| committer | acdenisSK <[email protected]> | 2017-11-21 16:07:53 +0100 |
| commit | f61816ca141add5024e36e073764b7c824872ca4 (patch) | |
| tree | 357317f5574698bb67c8a73f633443a50ed20d14 /src/framework | |
| parent | Remove client close handle (diff) | |
| download | serenity-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.rs | 3 | ||||
| -rw-r--r-- | src/framework/standard/create_command.rs | 6 | ||||
| -rw-r--r-- | src/framework/standard/create_group.rs | 6 | ||||
| -rw-r--r-- | src/framework/standard/mod.rs | 10 |
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(); } } |