Collapse and show the endpoints in the docs
If we remove empty lines between these endpoints, we'll make the code shorter. Additionally, since we do no longer need `AutoSend`, the code is also a bit less convoluted.
//! -- no problem, reuse [`dptree::Handler::filter`], [`dptree::case!`], and
//! other combinators in the same way!
//!
-//! Finally, we define our endpoints via simple `async` functions like this:
-//!
-//! <details>
-//! <summary>Show the endpoints</summary>
+//! Finally, we define our endpoints:
//!
//! ```no_run
//! # use teloxide::Bot;
//! async fn start(bot: Bot, msg: Message, dialogue: MyDialogue) -> HandlerResult {
//! todo!()
//! }
-//!
//! async fn help(bot: Bot, msg: Message) -> HandlerResult {
//! todo!()
//! }
-//!
//! async fn cancel(bot: Bot, msg: Message, dialogue: MyDialogue) -> HandlerResult {
//! todo!()
//! }
-//!
//! async fn invalid_state(bot: Bot, msg: Message) -> HandlerResult {
//! todo!()
//! }
-//!
//! async fn receive_full_name(bot: Bot, msg: Message, dialogue: MyDialogue) -> HandlerResult {
//! todo!()
//! }
-//!
//! async fn receive_product_selection(
//! bot: Bot,
//! q: CallbackQuery,
//! }
//! ```
//!
-//! </details>
-//!
//! Each parameter is supplied as a dependency by teloxide. In particular:
//! - `bot: Bot` comes from the dispatcher (see below)
//! - `msg: Message` comes from [`Update::filter_message`]
