Skip to main content

CommandHandler

Struct CommandHandler 

Source
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

Source

pub fn new<Cb, Fut>(command: impl Into<String>, callback: Cb) -> CommandHandler
where Cb: Fn(Arc<Update>, CallbackContext) -> Fut + Send + Sync + 'static, Fut: Future<Output = Result<(), HandlerError>> + Send + 'static,

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);
Source

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}.

Source

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).

Source

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

Source§

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>

Determine whether this handler is interested in update. Read more
Source§

fn handle_update( &self, update: Arc<Update>, match_result: MatchResult, ) -> Pin<Box<dyn Future<Output = HandlerResult> + Send>>

Process the update. Called only when check_update returned Some.
Source§

fn block(&self) -> bool

Whether the application should block on this handler’s future before dispatching to the next handler group.
Source§

fn handle_update_with_context( &self, update: Arc<Update>, match_result: MatchResult, context: CallbackContext, ) -> Pin<Box<dyn Future<Output = HandlerResult> + Send>>

Process the update with an Application-provided CallbackContext. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more