aboutsummaryrefslogtreecommitdiff
path: root/src/framework
diff options
context:
space:
mode:
Diffstat (limited to 'src/framework')
-rw-r--r--src/framework/standard/args.rs149
-rw-r--r--src/framework/standard/command.rs23
-rw-r--r--src/framework/standard/configuration.rs24
-rw-r--r--src/framework/standard/create_command.rs21
-rw-r--r--src/framework/standard/create_group.rs8
-rw-r--r--src/framework/standard/help_commands.rs31
-rw-r--r--src/framework/standard/mod.rs43
7 files changed, 146 insertions, 153 deletions
diff --git a/src/framework/standard/args.rs b/src/framework/standard/args.rs
index 7fb82e4..fab27a5 100644
--- a/src/framework/standard/args.rs
+++ b/src/framework/standard/args.rs
@@ -64,7 +64,12 @@ pub struct Args {
}
impl Args {
- pub fn new(message: &str, delimiter: &str) -> Self {
+ pub fn new(message: &str, possible_delimiters: Vec<String>) -> Self {
+ let delimiter = possible_delimiters
+ .iter()
+ .find(|&d| message.contains(d))
+ .map_or(possible_delimiters[0].as_str(), |s| s.as_str());
+
let split = if message.trim().is_empty() {
Vec::new()
} else {
@@ -78,14 +83,14 @@ impl Args {
}
/// Removes the first element, parses it to a specific type if necessary, returns.
- ///
+ ///
/// # Examples
- ///
+ ///
/// ```rust
/// use serenity::framework::standard::Args;
- ///
- /// let mut args = Args::new("42 69", " ");
- ///
+ ///
+ /// let mut args = Args::new("42 69", vec![" ".to_owned()]);
+ ///
/// assert_eq!(args.single::<i32>().unwrap(), 42);
/// assert_eq!(args, ["69"]);
/// ```
@@ -107,18 +112,18 @@ impl Args {
///
/// [`single`]: #method.single
/// [`FromStrZc`]: trait.FromStrZc.html
- pub fn single_zc<'a, T: FromStrZc<'a> + 'a>(&'a mut self) -> Result<T, T::Err>
+ pub fn single_zc<'a, T: FromStrZc<'a> + 'a>(&'a mut self) -> Result<T, T::Err>
where T::Err: StdError {
-
+
// This is a hack as to mitigate some nasty lifetime errors.
//
// (Culprit `Vec::remove`s return type)
fn get_and_remove(b: &mut Vec<String>) -> Option<&str> {
struct GetThenRemove<'a>(&'a mut Vec<String>);
-
+
impl<'a> Drop for GetThenRemove<'a> {
fn drop(&mut self) {
- if !self.0.is_empty() {
+ if !self.0.is_empty() {
self.0.remove(0);
}
}
@@ -134,16 +139,16 @@ impl Args {
/// Like [`single`], but doesn't remove the element.
///
/// # Examples
- ///
+ ///
/// ```rust
/// use serenity::framework::standard::Args;
- ///
- /// let args = Args::new("42 69", " ");
- ///
+ ///
+ /// let args = Args::new("42 69", vec![" ".to_owned()]);
+ ///
/// assert_eq!(args.single_n::<i32>().unwrap(), 42);
/// assert_eq!(args, ["42", "69"]);
/// ```
- ///
+ ///
/// [`single`]: #method.single
pub fn single_n<T: FromStr>(&self) -> Result<T, T::Err>
where T::Err: StdError {
@@ -158,14 +163,14 @@ impl Args {
}
/// Skips if there's a first element, but also returns it.
- ///
+ ///
/// # Examples
- ///
+ ///
/// ```rust
/// use serenity::framework::standard::Args;
- ///
- /// let mut args = Args::new("42 69", " ");
- ///
+ ///
+ /// let mut args = Args::new("42 69", vec![" ".to_owned()]);
+ ///
/// assert_eq!(args.skip().unwrap(), "42");
/// assert_eq!(args, ["69"]);
/// ```
@@ -176,13 +181,13 @@ impl Args {
/// # Examples
/// ```rust
/// use serenity::framework::standard::Args;
- ///
- /// let mut args = Args::new("42 69 88 99", " ");
- ///
+ ///
+ /// let mut args = Args::new("42 69 88 99", vec![" ".to_owned()]);
+ ///
/// assert_eq!(*args.skip_for(3).unwrap(), ["42".to_string(), "69".to_string(), "88".to_string()]);
/// assert_eq!(args, ["99"]);
/// ```
- ///
+ ///
/// [`skip`]: #method.skip
pub fn skip_for(&mut self, i: u32) -> Option<Vec<String>> {
let mut vec = Vec::with_capacity(i as usize);
@@ -195,18 +200,18 @@ impl Args {
}
/// Like [`single`], but takes quotes into account.
- ///
+ ///
/// # Examples
- ///
+ ///
/// ```rust
/// use serenity::framework::standard::Args;
- ///
- /// let mut args = Args::new(r#""42"#, " ");
- ///
+ ///
+ /// let mut args = Args::new(r#""42"#, vec![" ".to_owned()]);
+ ///
/// assert_eq!(args.single_quoted::<i32>().unwrap(), 42);
/// assert!(args.is_empty());
/// ```
- ///
+ ///
/// [`single`]: #method.single
pub fn single_quoted<T: FromStr>(&mut self) -> Result<T, T::Err>
where T::Err: StdError {
@@ -241,30 +246,30 @@ impl Args {
}
/// Empty outs the internal vector while parsing (if necessary) and returning them
- ///
+ ///
/// # Examples
- ///
+ ///
/// ```rust
/// use serenity::framework::standard::Args;
- ///
- /// let mut args = Args::new("42 69", " ");
- ///
+ ///
+ /// let mut args = Args::new("42 69", vec![" ".to_owned()]);
+ ///
/// assert_eq!(*args.list::<i32>().unwrap(), [42, 69]);
- /// ```
+ /// ```
pub fn list<T: FromStr>(mut self) -> Result<Vec<T>, T::Err>
where T::Err: StdError {
Iter::<T>::new(&mut self).collect()
}
/// Provides an iterator of items: (`T: FromStr`) `Result<T, T::Err>`.
- ///
+ ///
/// # Examples
- ///
+ ///
/// ```rust
/// use serenity::framework::standard::Args;
- ///
- /// let mut args = Args::new("3 4", " ");
- ///
+ ///
+ /// let mut args = Args::new("3 4", vec![" ".to_owned()]);
+ ///
/// assert_eq!(*args.iter::<i32>().map(|num| num.unwrap().pow(2)).collect::<Vec<_>>(), [9, 16]);
/// assert!(args.is_empty());
/// ```
@@ -273,27 +278,27 @@ impl Args {
}
/// This method is just `internal_vector.join(delimiter)`
- ///
+ ///
/// # Examples
- ///
+ ///
/// ```rust
/// use serenity::framework::standard::Args;
- ///
- /// let mut args = Args::new("42 69", " ");
- ///
+ ///
+ /// let mut args = Args::new("42 69", vec![" ".to_owned()]);
+ ///
/// assert_eq!(args.full(), "42 69");
/// ```
pub fn full(&self) -> String { self.delimiter_split.join(&self.delimiter) }
/// Returns the first argument that can be converted and removes it from the list.
- ///
+ ///
/// # Examples
- ///
+ ///
/// ```rust
/// use serenity::framework::standard::Args;
- ///
- /// let mut args = Args::new("c47 69", " ");
- ///
+ ///
+ /// let mut args = Args::new("c47 69", vec![" ".to_owned()]);
+ ///
/// assert_eq!(args.find::<i32>().unwrap(), 69);
/// assert_eq!(args, ["c47"]);
/// ```
@@ -322,14 +327,14 @@ impl Args {
}
/// Returns the first argument that can be converted and does not remove it from the list.
- ///
+ ///
/// # Examples
- ///
+ ///
/// ```rust
/// use serenity::framework::standard::Args;
- ///
- /// let args = Args::new("c47 69", " ");
- ///
+ ///
+ /// let args = Args::new("c47 69", vec![" ".to_owned()]);
+ ///
/// assert_eq!(args.find_n::<i32>().unwrap(), 69);
/// assert_eq!(args, ["c47", "69"]);
/// ```
@@ -348,29 +353,29 @@ impl Args {
}
/// A version of `FromStr` that allows for "zero-copy" parsing.
-///
+///
/// # Examples
-///
+///
/// ```rust,ignore
/// use serenity::framework::standard::{Args, FromStrZc};
/// use std::fmt;
-///
+///
/// struct NameDiscrim<'a>(&'a str, Option<&'a str>);
-///
+///
/// #[derive(Debug)]
/// struct Error(&'static str);
-///
+///
/// impl std::error::Error for Error {
/// fn description(&self) -> &str { self.0 }
/// }
-///
+///
/// impl fmt::Display for Error {
/// fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { write!(f, "{}", self.0) }
/// }
-///
+///
/// impl<'a> FromStrZc<'a> for NameDiscrim<'a> {
/// type Err = Error;
-///
+///
/// fn from_str(s: &'a str) -> Result<NameDiscrim<'a>, Error> {
/// let mut it = s.split("#");
/// let name = it.next().ok_or(Error("name must be specified"))?;
@@ -378,16 +383,16 @@ impl Args {
/// Ok(NameDiscrim(name, discrim))
/// }
/// }
-///
-/// let mut args = Args::new("abc#1234", " ");
+///
+/// let mut args = Args::new("abc#1234", vec![" ".to_owned()]);
/// let NameDiscrim(name, discrim) = args.single_zc::<NameDiscrim>().unwrap();
-///
+///
/// assert_eq!(name, "abc");
/// assert_eq!(discrim, Some("1234"));
-/// ```
+/// ```
pub trait FromStrZc<'a>: Sized {
type Err;
-
+
fn from_str(s: &'a str) -> ::std::result::Result<Self, Self::Err>;
}
@@ -408,14 +413,14 @@ impl ::std::ops::Deref for Args {
impl<'a> PartialEq<[&'a str]> for Args {
fn eq(&self, other: &[&str]) -> bool {
let mut b = true;
-
+
for (s, o) in self.delimiter_split.iter().zip(other.iter()) {
if s != o {
b = false;
break;
}
}
-
+
b
}
}
@@ -427,7 +432,7 @@ macro_rules! impl_slices {
self.delimiter_split.is_empty()
}
}
-
+
$(
impl<'a> PartialEq<[&'a str; $num]> for Args {
fn eq(&self, other: &[&str; $num]) -> bool {
diff --git a/src/framework/standard/command.rs b/src/framework/standard/command.rs
index b53ed90..be7ec2a 100644
--- a/src/framework/standard/command.rs
+++ b/src/framework/standard/command.rs
@@ -9,12 +9,9 @@ pub type Check = Fn(&mut Context, &Message, &mut Args, &Arc<Command>) -> bool
+ Send
+ Sync
+ 'static;
-pub type Exec = Fn(&mut Context, &Message, Args) -> Result<(), Error> + Send + Sync + 'static;
-pub type Help = Fn(&mut Context, &Message, HashMap<String, Arc<CommandGroup>>, Args)
- -> Result<(), Error>
- + Send
- + Sync
- + 'static;
+pub type Exec = fn(&mut Context, &Message, Args) -> Result<(), Error>;
+pub type Help = fn(&mut Context, &Message, HashMap<String, Arc<CommandGroup>>, Args)
+ -> Result<(), Error>;
pub type BeforeHook = Fn(&mut Context, &Message, &str) -> bool + Send + Sync + 'static;
pub type AfterHook = Fn(&mut Context, &Message, &str, Result<(), Error>) + Send + Sync + 'static;
pub(crate) type InternalCommand = Arc<Command>;
@@ -40,8 +37,8 @@ impl<D: fmt::Display> From<D> for Error {
/// your commands.
pub enum CommandType {
StringResponse(String),
- Basic(Box<Exec>),
- WithCommands(Box<Help>),
+ Basic(Exec),
+ WithCommands(Help),
}
pub struct CommandGroup {
@@ -88,14 +85,14 @@ pub struct Command {
pub guild_only: bool,
/// Whether command can only be used by owners or not.
pub owners_only: bool,
- pub(crate) aliases: Vec<String>,
+ /// Other names that can be used to call this command instead.
+ pub aliases: Vec<String>,
}
impl Command {
- pub fn new<F>(f: F) -> Self
- where F: Fn(&mut Context, &Message, Args) -> Result<(), Error> + Send + Sync + 'static {
+ pub fn new(f: fn(&mut Context, &Message, Args) -> Result<(), Error>) -> Self {
Command {
- exec: CommandType::Basic(Box::new(f)),
+ exec: CommandType::Basic(f),
..Command::default()
}
}
@@ -106,7 +103,7 @@ impl Default for Command {
Command {
aliases: Vec::new(),
checks: Vec::default(),
- exec: CommandType::Basic(Box::new(|_, _, _| Ok(()))),
+ exec: CommandType::Basic(|_, _, _| Ok(())),
desc: None,
usage: None,
example: None,
diff --git a/src/framework/standard/configuration.rs b/src/framework/standard/configuration.rs
index c731d31..6cb5767 100644
--- a/src/framework/standard/configuration.rs
+++ b/src/framework/standard/configuration.rs
@@ -20,11 +20,13 @@ use model::{GuildId, Message, UserId};
/// struct Handler;
///
/// impl EventHandler for Handler {}
+///
/// use serenity::Client;
/// use std::env;
/// use serenity::framework::StandardFramework;
///
-/// let mut client = Client::new(&env::var("DISCORD_TOKEN").unwrap(), Handler);
+/// let token = env::var("DISCORD_BOT_TOKEN").unwrap();
+/// let mut client = Client::new(&token, Handler).unwrap();
///
/// client.with_framework(StandardFramework::new()
/// .configure(|c| c.on_mention(true).prefix("~")));
@@ -98,7 +100,7 @@ impl Configuration {
/// # struct Handler;
/// #
/// # impl EventHandler for Handler {}
- /// # let mut client = Client::new("token", Handler);
+ /// # let mut client = Client::new("token", Handler).unwrap();
/// use serenity::model::GuildId;
/// use serenity::framework::StandardFramework;
///
@@ -123,7 +125,7 @@ impl Configuration {
/// # struct Handler;
/// #
/// # impl EventHandler for Handler {}
- /// # let mut client = Client::new("token", Handler);
+ /// # let mut client = Client::new("token", Handler).unwrap();
/// use serenity::model::UserId;
/// use serenity::framework::StandardFramework;
///
@@ -161,7 +163,7 @@ impl Configuration {
/// # struct Handler;
/// #
/// # impl EventHandler for Handler {}
- /// # let mut client = Client::new("token", Handler);
+ /// # let mut client = Client::new("token", Handler).unwrap();
/// use serenity::framework::StandardFramework;
///
/// let disabled = vec!["ping"].into_iter().map(|x| x.to_string()).collect();
@@ -191,7 +193,7 @@ impl Configuration {
/// # struct Handler;
/// #
/// # impl EventHandler for Handler {}
- /// # let mut client = Client::new("token", Handler);
+ /// # let mut client = Client::new("token", Handler).unwrap();
/// use serenity::framework::StandardFramework;
///
/// client.with_framework(StandardFramework::new()
@@ -276,7 +278,7 @@ impl Configuration {
/// # struct Handler;
/// #
/// # impl EventHandler for Handler {}
- /// # let mut client = Client::new("token", Handler);
+ /// # let mut client = Client::new("token", Handler).unwrap();
/// use serenity::model::UserId;
/// use serenity::framework::StandardFramework;
///
@@ -291,7 +293,7 @@ impl Configuration {
/// # struct Handler;
/// #
/// # impl EventHandler for Handler {}
- /// # let mut client = Client::new("token", Handler);
+ /// # let mut client = Client::new("token", Handler).unwrap();
/// use serenity::model::UserId;
/// use std::collections::HashSet;
/// use serenity::framework::StandardFramework;
@@ -320,7 +322,7 @@ impl Configuration {
/// # struct Handler;
/// #
/// # impl EventHandler for Handler {}
- /// # let mut client = Client::new("token", Handler);
+ /// # let mut client = Client::new("token", Handler).unwrap();
/// #
/// use serenity::framework::StandardFramework;
///
@@ -345,7 +347,7 @@ impl Configuration {
/// # struct Handler;
/// #
/// # impl EventHandler for Handler {}
- /// # let mut client = Client::new("token", Handler);
+ /// # let mut client = Client::new("token", Handler).unwrap();
/// #
/// use serenity::framework::StandardFramework;
///
@@ -369,7 +371,7 @@ impl Configuration {
/// # struct Handler;
/// #
/// # impl EventHandler for Handler {}
- /// # let mut client = Client::new("token", Handler);
+ /// # let mut client = Client::new("token", Handler).unwrap();
/// #
/// use serenity::framework::StandardFramework;
///
@@ -394,7 +396,7 @@ impl Configuration {
/// # struct Handler;
/// #
/// # impl EventHandler for Handler {}
- /// # let mut client = Client::new("token", Handler);
+ /// # let mut client = Client::new("token", Handler).unwrap();
/// #
/// use serenity::framework::StandardFramework;
///
diff --git a/src/framework/standard/create_command.rs b/src/framework/standard/create_command.rs
index 9df9c82..c1558ce 100644
--- a/src/framework/standard/create_command.rs
+++ b/src/framework/standard/create_command.rs
@@ -47,7 +47,8 @@ impl CreateCommand {
/// use std::env;
/// use std::sync::Arc;
///
- /// let mut client = Client::new(&env::var("DISCORD_TOKEN").unwrap(), Handler);
+ /// let token = env::var("DISCORD_TOKEN").unwrap();
+ /// let mut client = Client::new(&token, Handler).unwrap();
///
/// client.with_framework(StandardFramework::new()
/// .configure(|c| c.prefix("~"))
@@ -106,9 +107,8 @@ impl CreateCommand {
/// See [`exec_str`] if you _only_ need to return a string on command use.
///
/// [`exec_str`]: #method.exec_str
- pub fn exec<F>(mut self, func: F) -> Self
- where F: Fn(&mut Context, &Message, Args) -> Result<(), CommandError> + Send + Sync + 'static {
- self.0.exec = CommandType::Basic(Box::new(func));
+ pub fn exec(mut self, func: fn(&mut Context, &Message, Args) -> Result<(), CommandError>) -> Self {
+ self.0.exec = CommandType::Basic(func);
self
}
@@ -117,14 +117,11 @@ impl CreateCommand {
/// the internal HashMap of commands, used specifically for creating a help
/// command.
///
- /// You can return `Err(Custom(string))` if there's an error.
- pub fn exec_help<F>(mut self, f: F) -> Self
- where F: Fn(&mut Context, &Message, HashMap<String, Arc<CommandGroup>>, Args)
- -> Result<(), CommandError>
- + Send
- + Sync
- + 'static {
- self.0.exec = CommandType::WithCommands(Box::new(f));
+ /// You can return `Err(From::from(string))` if there's an error.
+ pub fn exec_help(mut self, f:
+ fn(&mut Context, &Message, HashMap<String, Arc<CommandGroup>>, Args)
+ -> Result<(), CommandError>) -> Self {
+ self.0.exec = CommandType::WithCommands(f);
self
}
diff --git a/src/framework/standard/create_group.rs b/src/framework/standard/create_group.rs
index 911d2ea..39fbcc6 100644
--- a/src/framework/standard/create_group.rs
+++ b/src/framework/standard/create_group.rs
@@ -70,14 +70,14 @@ impl CreateGroup {
}
/// Adds a command to group with simplified API.
- /// You can return Err(string) if there's an error.
- pub fn on<F>(mut self, command_name: &str, f: F) -> Self
- where F: Fn(&mut Context, &Message, Args) -> Result<(), CommandError> + Send + Sync + 'static {
+ /// You can return Err(From::from(string)) if there's an error.
+ pub fn on(mut self, name: &str,
+ f: fn(&mut Context, &Message, Args) -> Result<(), CommandError>) -> Self {
let cmd = Arc::new(Command::new(f));
self.0
.commands
- .insert(command_name.to_string(), CommandOrAlias::Command(cmd));
+ .insert(name.to_string(), CommandOrAlias::Command(cmd));
self
}
diff --git a/src/framework/standard/help_commands.rs b/src/framework/standard/help_commands.rs
index 6b85239..8cbcb21 100644
--- a/src/framework/standard/help_commands.rs
+++ b/src/framework/standard/help_commands.rs
@@ -55,7 +55,7 @@ fn remove_aliases(cmds: &HashMap<String, CommandOrAlias>) -> HashMap<&String, &I
/// and given the required permissions.
pub fn has_all_requirements(cmd: &Command, msg: &Message) -> bool {
if let Some(guild) = msg.guild() {
- let guild = guild.read().unwrap();
+ let guild = guild.read();
if let Some(member) = guild.members.get(&msg.author.id) {
@@ -69,7 +69,7 @@ pub fn has_all_requirements(cmd: &Command, msg: &Message) -> bool {
}
}
}
- false
+ !cmd.guild_only
}
/// Posts an embed showing each individual command group and its commands.
@@ -83,7 +83,7 @@ pub fn has_all_requirements(cmd: &Command, msg: &Message) -> bool {
/// # struct Handler;
/// #
/// # impl EventHandler for Handler {}
-/// # let mut client = Client::new("token", Handler);
+/// # let mut client = Client::new("token", Handler).unwrap();
/// #
/// use serenity::framework::standard::{StandardFramework, help_commands};
///
@@ -155,26 +155,25 @@ pub fn with_embeds(_: &mut Context,
}
if let Some(ref usage) = command.usage {
- embed = embed.field(|f| {
- f.name("Usage")
- .value(&format!("`{} {}`", command_name, usage))
- });
+ let value = format!("`{} {}`", command_name, usage);
+
+ embed = embed.field("Usage", value, true);
}
if let Some(ref example) = command.example {
- embed = embed.field(|f| {
- f.name("Sample usage")
- .value(&format!("`{} {}`", command_name, example))
- });
+ let value = format!("`{} {}`", command_name, example);
+
+ embed = embed.field("Sample usage", value, true);
}
if group_name != "Ungrouped" {
- embed = embed.field(|f| f.name("Group").value(&group_name));
+ embed = embed.field("Group", group_name, true);
}
if !command.aliases.is_empty() {
let aliases = command.aliases.join(", ");
- embed = embed.field(|f| f.name("Aliases").value(&aliases));
+
+ embed = embed.field("Aliases", aliases, true);
}
let available = if command.dm_only {
@@ -185,7 +184,7 @@ pub fn with_embeds(_: &mut Context,
"In DM and guilds"
};
- embed = embed.field(|f| f.name("Available").value(available));
+ embed = embed.field("Available", available, true);
embed
})
@@ -235,7 +234,7 @@ pub fn with_embeds(_: &mut Context,
}
if has_commands {
- e = e.field(|f| f.name(group_name).value(&desc));
+ e = e.field(&group_name[..], &desc[..], true);
}
}
e
@@ -256,7 +255,7 @@ pub fn with_embeds(_: &mut Context,
/// # struct Handler;
/// #
/// # impl EventHandler for Handler {}
-/// # let mut client = Client::new("token", Handler);
+/// # let mut client = Client::new("token", Handler).unwrap();
/// #
/// use serenity::framework::standard::{StandardFramework, help_commands};
///
diff --git a/src/framework/standard/mod.rs b/src/framework/standard/mod.rs
index a806817..fdab3a8 100644
--- a/src/framework/standard/mod.rs
+++ b/src/framework/standard/mod.rs
@@ -218,7 +218,8 @@ impl StandardFramework {
/// use serenity::framework::StandardFramework;
/// use std::env;
///
- /// let mut client = Client::new(&env::var("DISCORD_TOKEN").unwrap(), Handler);
+ /// let token = env::var("DISCORD_TOKEN").unwrap();
+ /// let mut client = Client::new(&token, Handler).unwrap();
/// client.with_framework(StandardFramework::new()
/// .configure(|c| c
/// .depth(3)
@@ -251,7 +252,7 @@ impl StandardFramework {
/// # struct Handler;
/// #
/// # impl EventHandler for Handler {}
- /// # let mut client = Client::new("token", Handler);
+ /// # let mut client = Client::new("token", Handler).unwrap();
/// #
/// use serenity::framework::StandardFramework;
///
@@ -287,7 +288,7 @@ impl StandardFramework {
/// # struct Handler;
/// #
/// # impl EventHandler for Handler {}
- /// # let mut client = Client::new("token", Handler);
+ /// # let mut client = Client::new("token", Handler).unwrap();
/// #
/// use serenity::framework::StandardFramework;
///
@@ -396,7 +397,7 @@ impl StandardFramework {
/// # struct Handler;
/// #
/// # impl EventHandler for Handler {}
- /// # let mut client = Client::new("token", Handler);
+ /// # let mut client = Client::new("token", Handler).unwrap();
/// #
/// use serenity::framework::StandardFramework;
///
@@ -425,7 +426,7 @@ impl StandardFramework {
#[cfg(feature = "cache")]
fn is_blocked_guild(&self, message: &Message) -> bool {
- if let Some(Channel::Guild(channel)) = CACHE.read().unwrap().channel(message.channel_id) {
+ if let Some(Channel::Guild(channel)) = CACHE.read().channel(message.channel_id) {
let guild_id = channel.with(|g| g.guild_id);
if self.configuration.blocked_guilds.contains(&guild_id) {
return true;
@@ -536,7 +537,7 @@ impl StandardFramework {
} else {
if !command.allowed_roles.is_empty() {
if let Some(guild) = message.guild() {
- let guild = guild.read().unwrap();
+ let guild = guild.read();
if let Some(member) = guild.members.get(&message.author.id) {
if let Ok(permissions) = member.permissions() {
@@ -592,7 +593,7 @@ impl StandardFramework {
/// # struct Handler;
/// #
/// # impl EventHandler for Handler {}
- /// # let mut client = Client::new("token", Handler);
+ /// # let mut client = Client::new("token", Handler).unwrap();
/// #
/// use serenity::framework::StandardFramework;
///
@@ -603,20 +604,18 @@ impl StandardFramework {
/// });
/// # }
/// ```
- pub fn on<F, S>(mut self, command_name: S, f: F) -> Self
- where F: Fn(&mut Context, &Message, Args) -> Result<(), CommandError> + Send + Sync + 'static,
- S: Into<String> {
+ pub fn on(mut self, name: &str,
+ f: fn(&mut Context, &Message, Args)
+ -> Result<(), CommandError>) -> Self {
{
let ungrouped = self.groups
.entry("Ungrouped".to_string())
.or_insert_with(|| Arc::new(CommandGroup::default()));
if let Some(ref mut group) = Arc::get_mut(ungrouped) {
- let name = command_name.into();
-
group
.commands
- .insert(name, CommandOrAlias::Command(Arc::new(Command::new(f))));
+ .insert(name.to_string(), CommandOrAlias::Command(Arc::new(Command::new(f))));
}
}
@@ -686,7 +685,7 @@ impl StandardFramework {
/// # struct Handler;
/// #
/// # impl EventHandler for Handler {}
- /// # let mut client = Client::new("token", Handler);
+ /// # let mut client = Client::new("token", Handler).unwrap();
/// #
/// use serenity::framework::StandardFramework;
///
@@ -719,7 +718,7 @@ impl StandardFramework {
/// # struct Handler;
/// #
/// # impl EventHandler for Handler {}
- /// # let mut client = Client::new("token", Handler);
+ /// # let mut client = Client::new("token", Handler).unwrap();
/// use serenity::framework::standard::DispatchError::{NotEnoughArguments,
/// TooManyArguments};
/// use serenity::framework::StandardFramework;
@@ -760,7 +759,7 @@ impl StandardFramework {
/// # struct Handler;
/// #
/// # impl EventHandler for Handler {}
- /// # let mut client = Client::new("token", Handler);
+ /// # let mut client = Client::new("token", Handler).unwrap();
/// #
/// use serenity::framework::StandardFramework;
///
@@ -778,7 +777,7 @@ impl StandardFramework {
/// # struct Handler;
/// #
/// # impl EventHandler for Handler {}
- /// # let mut client = Client::new("token", Handler);
+ /// # let mut client = Client::new("token", Handler).unwrap();
/// #
/// use serenity::framework::StandardFramework;
///
@@ -816,7 +815,7 @@ impl StandardFramework {
/// # struct Handler;
/// #
/// # impl EventHandler for Handler {}
- /// # let mut client = Client::new("token", Handler);
+ /// # let mut client = Client::new("token", Handler).unwrap();
/// #
/// use serenity::framework::StandardFramework;
///
@@ -910,13 +909,7 @@ impl Framework for StandardFramework {
let mut content = message.content[position..].trim();
content = content[command_length..].trim();
- let delimiter = self.configuration
- .delimiters
- .iter()
- .find(|&d| content.contains(d))
- .map_or(" ", |s| s.as_str());
-
- Args::new(content, delimiter)
+ Args::new(&content, self.configuration.delimiters.clone())
};
if let Some(error) = self.should_fail(