aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLake Lezz <[email protected]>2018-08-06 23:46:39 +0200
committerLake Lezz <[email protected]>2018-08-06 23:46:39 +0200
commit817dc66e432b556f5ff18b0e53f6873f4df05cb9 (patch)
tree8714b50802bd01253c4a7f1413c1fee1f4e878b7 /src
parentPrevent sub-group-prefixes to picked. (diff)
downloadserenity-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.rs29
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;
}
}