diff options
| author | Lake Lezz <[email protected]> | 2018-08-06 23:46:39 +0200 |
|---|---|---|
| committer | Lake Lezz <[email protected]> | 2018-08-06 23:46:39 +0200 |
| commit | 817dc66e432b556f5ff18b0e53f6873f4df05cb9 (patch) | |
| tree | 8714b50802bd01253c4a7f1413c1fee1f4e878b7 /src | |
| parent | Prevent sub-group-prefixes to picked. (diff) | |
| download | serenity-817dc66e432b556f5ff18b0e53f6873f4df05cb9.tar.xz serenity-817dc66e432b556f5ff18b0e53f6873f4df05cb9.zip | |
Create `Args` only when needed.
Modify `Args` accordingly upon failed sub-command.
Diffstat (limited to 'src')
| -rw-r--r-- | src/framework/standard/mod.rs | 29 |
1 files changed, 20 insertions, 9 deletions
diff --git a/src/framework/standard/mod.rs b/src/framework/standard/mod.rs index dfaff3c..c448c89 100644 --- a/src/framework/standard/mod.rs +++ b/src/framework/standard/mod.rs @@ -1065,13 +1065,6 @@ impl Framework for StandardFramework { built.clone() }; - let mut args = { - let content = message.content.chars().skip(position).skip_while(|x| x.is_whitespace()) - .skip(command_length).collect::<String>(); - - Args::new(&content.trim(), &self.configuration.delimiters) - }; - let before = self.before.clone(); let after = self.after.clone(); @@ -1080,6 +1073,13 @@ impl Framework for StandardFramework { if let Some(help) = help { let groups = self.groups.clone(); + let mut args = { + let content = message.content.chars().skip(position).skip_while(|x| x.is_whitespace()) + .skip(command_length).collect::<String>(); + + Args::new(&content.trim(), &self.configuration.delimiters) + }; + threadpool.execute(move || { if let Some(before) = before { @@ -1099,13 +1099,19 @@ impl Framework for StandardFramework { } } - if !to_check.is_empty() { if let Some(&CommandOrAlias::Command(ref command)) = group.commands.get(&to_check) { let command = Arc::clone(command); + let mut args = { + let content = message.content.chars().skip(position).skip_while(|x| x.is_whitespace()) + .skip(command_length).collect::<String>(); + + Args::new(&content.trim(), &self.configuration.delimiters) + }; + if let Some(error) = self.should_fail( &mut context, &message, @@ -1150,10 +1156,15 @@ impl Framework for StandardFramework { if let &Some(CommandOrAlias::Command(ref command)) = &group.default_command { let command = Arc::clone(command); + let mut args = { + let content = to_check; + + Args::new(&content.trim(), &self.configuration.delimiters) + }; threadpool.execute(move || { if let Some(before) = before { - if !(before)(&mut context, &message, &to_check) { + if !(before)(&mut context, &message, &args.full()) { return; } } |