pub struct CommandHandler { /* private fields */ }Expand description
Handler for Telegram bot commands (messages starting with /).
The handler will only trigger on messages where the first entity is a
bot_command at offset 0. It validates the command text against the
provided set of commands (case-insensitive) and optionally checks the
argument count.
§Ergonomic constructor
use rust_tg_bot_ext::prelude::*;
async fn start(update: Update, context: Context) -> HandlerResult {
context.reply_text(&update, "Hello!").await?;
Ok(())
}
CommandHandler::new("start", start);§Full-control constructor
use rust_tg_bot_ext::handlers::command::CommandHandler;
use rust_tg_bot_ext::handlers::base::*;
use std::sync::Arc;
let handler = CommandHandler::with_options(
vec!["start".into(), "help".into()],
Arc::new(|update, match_result| Box::pin(async move {
HandlerResult::Continue
})),
None, // has_args
true, // block
);Implementations§
Source§impl CommandHandler
impl CommandHandler
Sourcepub fn new<Cb, Fut>(command: impl Into<String>, callback: Cb) -> CommandHandler
pub fn new<Cb, Fut>(command: impl Into<String>, callback: Cb) -> CommandHandler
Ergonomic constructor matching python-telegram-bot’s
CommandHandler("cmd", callback).
Accepts a single command name (string) and an async handler function
with signature async fn(Update, Context) -> HandlerResult.
§Example
use rust_tg_bot_ext::prelude::*;
async fn start(update: Update, context: Context) -> HandlerResult {
context.reply_text(&update, "Hello!").await?;
Ok(())
}
CommandHandler::new("start", start);Sourcepub fn with_options(
commands: Vec<String>,
callback: Arc<dyn Fn(Arc<Update>, MatchResult) -> Pin<Box<dyn Future<Output = HandlerResult> + Send>> + Sync + Send>,
has_args: Option<HasArgs>,
block: bool,
) -> CommandHandler
pub fn with_options( commands: Vec<String>, callback: Arc<dyn Fn(Arc<Update>, MatchResult) -> Pin<Box<dyn Future<Output = HandlerResult> + Send>> + Sync + Send>, has_args: Option<HasArgs>, block: bool, ) -> CommandHandler
Full-control constructor for advanced use cases.
§Panics
Panics if any command string does not match [a-z0-9_]{1,32}.
Sourcepub fn with_bot_username(self, username: impl Into<String>) -> CommandHandler
pub fn with_bot_username(self, username: impl Into<String>) -> CommandHandler
Set the bot username for @botname validation (C1).
When a command like /start@MyBot is received, the @MyBot suffix
will be compared case-insensitively against this value. If they do not
match the update is rejected.
If no bot username is configured, the @ suffix is silently ignored
(backwards compatible).
Sourcepub fn with_filter(
self,
filter: Arc<dyn Fn(&Update) -> bool + Sync + Send>,
) -> CommandHandler
pub fn with_filter( self, filter: Arc<dyn Fn(&Update) -> bool + Sync + Send>, ) -> CommandHandler
Set a custom update filter (C2).
The filter runs before any command matching. If it returns false
the update is immediately rejected.
When no custom filter is supplied the default behaviour is to accept
message-like updates via Update::message.
Trait Implementations§
Source§impl Handler for CommandHandler
impl Handler for CommandHandler
Source§fn collect_additional_context(
&self,
context: &mut CallbackContext,
match_result: &MatchResult,
)
fn collect_additional_context( &self, context: &mut CallbackContext, match_result: &MatchResult, )
Merge command arguments into context.args.
Mirrors Python’s CommandHandler.collect_additional_context which
populates context.args from the parsed argument list produced by
check_update.
Source§fn check_update(&self, update: &Update) -> Option<MatchResult>
fn check_update(&self, update: &Update) -> Option<MatchResult>
update. Read moreSource§fn handle_update(
&self,
update: Arc<Update>,
match_result: MatchResult,
) -> Pin<Box<dyn Future<Output = HandlerResult> + Send>>
fn handle_update( &self, update: Arc<Update>, match_result: MatchResult, ) -> Pin<Box<dyn Future<Output = HandlerResult> + Send>>
check_update
returned Some.Source§fn block(&self) -> bool
fn block(&self) -> bool
Source§fn handle_update_with_context(
&self,
update: Arc<Update>,
match_result: MatchResult,
context: CallbackContext,
) -> Pin<Box<dyn Future<Output = HandlerResult> + Send>>
fn handle_update_with_context( &self, update: Arc<Update>, match_result: MatchResult, context: CallbackContext, ) -> Pin<Box<dyn Future<Output = HandlerResult> + Send>>
CallbackContext. Read more