Function teloxide::commands_repl_with_listener
source · [−]pub async fn commands_repl_with_listener<'a, R, Cmd, H, L, Args>(
bot: R,
handler: H,
listener: L,
cmd: PhantomData<Cmd>
)where
Cmd: BotCommands + Send + Sync + 'static,
H: Injectable<DependencyMap, ResponseResult<()>, Args> + Send + Sync + 'static,
L: UpdateListener + Send + 'a,
L::Err: Debug + Send + 'a,
R: Requester + Clone + Send + Sync + 'static,ctrlc_handler only.Expand description
A REPL for commands, with a custom UpdateListener.
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:
botis a bot, client for the Telegram bot API. It is represented via theRequestertrait.handleris anasyncfunction that takes arguments fromDependencyMap(see below) and returnsResponseResult.listeneris something that takes updates from a Telegram server and implementsUpdateListener.cmdis a type hint for your command enumerationMyCommand: just writeMyCommand::ty(). Note thatMyCommandmust implement theBotCommandstrait, 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:
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.