pub trait BotCommands: Sized {
// Required methods
fn parse(s: &str, bot_username: &str) -> Result<Self, ParseError>;
fn descriptions() -> CommandDescriptions<'static>;
fn bot_commands() -> Vec<BotCommand>;
}Expand description
An enumeration of bot’s commands.
§Example
use teloxide_ng::utils::command::BotCommands;
type UnitOfTime = u8;
#[derive(BotCommands, PartialEq, Debug)]
#[command(rename_rule = "lowercase", parse_with = "split")]
enum AdminCommand {
Mute(UnitOfTime, char),
Ban(UnitOfTime, char),
}
let command = AdminCommand::parse("/ban 5 h", "bot_name").unwrap();
assert_eq!(command, AdminCommand::Ban(5, 'h'));§Enum attributes
-
#[command(rename_rule = "rule")]Rename all commands byrule. Allowed rules arelowercase,UPPERCASE,PascalCase,camelCase,snake_case,SCREAMING_SNAKE_CASE,kebab-case, andSCREAMING-KEBAB-CASE. -
#[command(prefix = "prefix")]Change a prefix for all commands (the default is/). -
#[command(description = "description")]and/// descriptionAdd a summary description of commands before all commands. -
#[command(parse_with = "parser")]Change the parser of arguments. Possible values:default- the same as the unspecified parser. It only puts all text after the first space into the first argument, which must implementFromStr.
§Example
use teloxide_ng::utils::command::BotCommands;
#[derive(BotCommands, PartialEq, Debug)]
#[command(rename_rule = "lowercase")]
enum Command {
Text(String),
}
let command = Command::parse("/text hello my dear friend!", "").unwrap();
assert_eq!(command, Command::Text("hello my dear friend!".to_string()));split- separates a message by a given separator (the default is the space character) and parses each part into the corresponding arguments, which must implementFromStr.
§Example
use teloxide_ng::utils::command::BotCommands;
#[derive(BotCommands, PartialEq, Debug)]
#[command(rename_rule = "lowercase", parse_with = "split")]
enum Command {
Nums(u8, u16, i32),
}
let command = Command::parse("/nums 1 32 -5", "").unwrap();
assert_eq!(command, Command::Nums(1, 32, -5));#[command(separator = "sep")]Specify separator used by thesplitparser. It will be ignored when accompanied by another type of parsers.
§Example
use teloxide_ng::utils::command::BotCommands;
#[derive(BotCommands, PartialEq, Debug)]
#[command(rename_rule = "lowercase", parse_with = "split", separator = "|")]
enum Command {
Nums(u8, u16, i32),
}
let command = Command::parse("/nums 1|32|5", "").unwrap();
assert_eq!(command, Command::Nums(1, 32, 5));#[command(command_separator = "sep")]Specify separator between command and args. Default is a space character.
§Example
use teloxide_ng::utils::command::BotCommands;
#[derive(BotCommands, PartialEq, Debug)]
#[command(
rename_rule = "lowercase",
parse_with = "split",
separator = "_",
command_separator = "_"
)]
enum Command {
Nums(u8, u16, i32),
}
let command = Command::parse("/nums_1_32_5", "").unwrap();
assert_eq!(command, Command::Nums(1, 32, 5));§Variant attributes
All variant attributes override the corresponding enum attributes.
-
#[command(rename_rule = "rule")]Rename one command by a rule. Allowed rules arelowercase,UPPERCASE,PascalCase,camelCase,snake_case,SCREAMING_SNAKE_CASE,kebab-case,SCREAMING-KEBAB-CASE. -
#[command(rename = "name")]Rename one command toname(literal renaming; do not confuse withrename_rule). -
#[command(description = "description")]and/// descriptionGive your command a description. It will be shown in the help message. -
#[command(parse_with = "parser")]Parse arguments of one command with a given parser.parsermust be a function of the signaturefn(String) -> Result<Tuple, ParseError>, whereTuplecorresponds to the variant’s arguments. -
#[command(hide)]Hide a command from the help message. It will still be parsed. -
#[command(alias = "alias")]Add an alias to a command. It will be shown in the help message. -
#[command(aliases = ["alias1", "alias2"])]Add multiple aliases to a command. They will be shown in the help message. -
#[command(hide_aliases)]Hide all aliases of a command from the help message.
§Example
use teloxide_ng::utils::command::{BotCommands, ParseError};
fn accept_two_digits(input: String) -> Result<(u8,), ParseError> {
match input.len() {
2 => {
let num = input.parse::<u8>().map_err(|e| ParseError::IncorrectFormat(e.into()))?;
Ok((num,))
}
len => Err(ParseError::Custom(format!("Only 2 digits allowed, not {}", len).into())),
}
}
#[derive(BotCommands, PartialEq, Debug)]
#[command(rename_rule = "lowercase")]
enum Command {
#[command(parse_with = accept_two_digits)]
Num(u8),
}
let command = Command::parse("/num 12", "").unwrap();
assert_eq!(command, Command::Num(12));
let command = Command::parse("/num 333", "");
assert!(command.is_err());#[command(prefix = "prefix")]#[command(separator = "sep")]
These attributes just override the corresponding enum attributes for a
specific variant.
Required Methods§
Sourcefn parse(s: &str, bot_username: &str) -> Result<Self, ParseError>
fn parse(s: &str, bot_username: &str) -> Result<Self, ParseError>
Parses a command.
bot_username is required to parse commands like
/cmd@username_of_the_bot.
Sourcefn descriptions() -> CommandDescriptions<'static>
fn descriptions() -> CommandDescriptions<'static>
Returns descriptions of the commands suitable to be shown to the user
(for example when /help command is used).
Sourcefn bot_commands() -> Vec<BotCommand>
fn bot_commands() -> Vec<BotCommand>
Returns a vector of BotCommand that can be used with
set_my_commands.
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.