aboutsummaryrefslogtreecommitdiff
path: root/src/framework
diff options
context:
space:
mode:
authorUninteresting Account <[email protected]>2018-01-20 20:09:27 +1100
committeralex <[email protected]>2018-01-20 10:09:27 +0100
commite6117760e3c020ed41d643a8b34d7bfeb62d3bfa (patch)
tree7d8abaeaa1ea2d9a952dbe0dac9787a157a9300b /src/framework
parentClarify what functionality was made easy with the framework changes (diff)
downloadserenity-e6117760e3c020ed41d643a8b34d7bfeb62d3bfa.tar.xz
serenity-e6117760e3c020ed41d643a8b34d7bfeb62d3bfa.zip
Fix multibyte character based prefixes (#253)
Diffstat (limited to 'src/framework')
-rw-r--r--src/framework/standard/command.rs15
-rw-r--r--src/framework/standard/mod.rs6
2 files changed, 11 insertions, 10 deletions
diff --git a/src/framework/standard/command.rs b/src/framework/standard/command.rs
index 5138596..541d1b9 100644
--- a/src/framework/standard/command.rs
+++ b/src/framework/standard/command.rs
@@ -325,19 +325,19 @@ pub fn positions(ctx: &mut Context, msg: &Message, conf: &Configuration) -> Opti
} else if let Some(ref func) = conf.dynamic_prefix {
if let Some(x) = func(ctx, msg) {
if msg.content.starts_with(&x) {
- positions.push(x.len());
+ positions.push(x.chars().count());
}
} else {
for n in &conf.prefixes {
if msg.content.starts_with(n) {
- positions.push(n.len());
+ positions.push(n.chars().count());
}
}
}
} else {
for n in &conf.prefixes {
if msg.content.starts_with(n) {
- positions.push(n.len());
+ positions.push(n.chars().count());
}
}
};
@@ -378,11 +378,12 @@ fn find_end_of_prefix_with_whitespace(content: &str, position: usize) -> Option<
let content_len = content.len();
if position >= content_len { return None; }
- let slice = unsafe { content.slice_unchecked(position, content_len) }.as_bytes();
- for i in 0..slice.len() {
- match slice[i] {
+ let mut i = 0;
+ let chars = content.chars().skip(position);
+ for char in chars {
+ match char {
// \t \n \r [space]
- 0x09 | 0x0a | 0x0d | 0x20 => {}
+ '\t' | '\n' | '\r' | ' ' => i += 1,
_ => return if i == 0 { None } else { Some(position + i) }
}
}
diff --git a/src/framework/standard/mod.rs b/src/framework/standard/mod.rs
index 4e43cf8..5f454a9 100644
--- a/src/framework/standard/mod.rs
+++ b/src/framework/standard/mod.rs
@@ -970,10 +970,10 @@ impl Framework for StandardFramework {
};
let mut args = {
- let mut content = message.content[position..].trim();
- content = content[command_length..].trim();
+ let mut content = message.content.chars().skip(position).collect::<String>();
+ content = content[command_length..].trim().to_string();
- Args::new(content, &self.configuration.delimiters)
+ Args::new(&content, &self.configuration.delimiters)
};
let before = self.before.clone();