Function teloxide::commands_repl

source ·
pub async fn commands_repl<'a, R, Cmd, H, Args>(
    bot: R,
    handler: H,
    cmd: PhantomData<Cmd>
)where
    R: Requester + Clone + Send + Sync + 'static,
    <R as Requester>::GetUpdates: Send,
    H: Injectable<DependencyMap, ResponseResult<()>, Args> + Send + Sync + 'static,
    Cmd: BotCommands + Send + Sync + 'static,
👎Deprecated: Use CommandsRepl::repl instead
Available on crate feature ctrlc_handler only.
Expand description

A REPL for commands.

REPLs are meant only for simple bots and rapid prototyping. If you need to supply dependencies or describe more complex dispatch logic, please use Dispatcher. See also: “Dispatching or REPLs?”.

All errors from the handler and update listener will be logged.

Signature

Don’t be scared by many trait bounds in the signature, in essence they require:

  1. bot is a bot, client for the Telegram bot API. It is represented via the Requester trait.
  2. handler is an async function that takes arguments from DependencyMap (see below) and returns ResponseResult.
  3. cmd is a type hint for your command enumeration MyCommand: just write MyCommand::ty(). Note that MyCommand must implement the BotCommands trait, typically via #[derive(BotCommands)].

All the other requirements are about thread safety and data validity and can be ignored for most of the time.

Handler arguments

teloxide provides the following types to the handler:

  • Message
  • R (type of the bot)
  • Cmd (type of the parsed command)
  • Me

Each of these types can be accepted as a handler parameter. Note that they aren’t all required at the same time: e.g., you can take only the bot and the command without Me and Message.

Stopping

To stop a REPL, simply press Ctrl+C in the terminal where you run the program. Note that graceful shutdown may take some time (we plan to improve this, see #711).

Caution

DO NOT use this function together with Dispatcher and other REPLs, because Telegram disallow multiple requests at the same time from the same bot.