mirror of
https://github.com/teloxide/teloxide.git
synced 2024-10-24 09:57:18 +02:00
Refactor examples/dialogue_bot
This commit is contained in:
parent
008e8505c5
commit
34633ad57b
4 changed files with 34 additions and 24 deletions
|
@ -14,7 +14,8 @@ futures = "0.3.5"
|
||||||
smart-default = "0.6.0"
|
smart-default = "0.6.0"
|
||||||
derive_more = "0.99.9"
|
derive_more = "0.99.9"
|
||||||
teloxide = { path = "../../" }
|
teloxide = { path = "../../" }
|
||||||
teloxide-macros = { git = "http://github.com/teloxide/teloxide-macros", branch = "master" }
|
teloxide-macros = { path = "../../../teloxide-macros" }
|
||||||
|
#teloxide-macros = { git = "http://github.com/teloxide/teloxide-macros", branch = "master" }
|
||||||
|
|
||||||
[profile.release]
|
[profile.release]
|
||||||
lto = true
|
lto = true
|
|
@ -28,7 +28,6 @@ mod states;
|
||||||
mod transitions;
|
mod transitions;
|
||||||
|
|
||||||
use states::*;
|
use states::*;
|
||||||
use transitions::*;
|
|
||||||
|
|
||||||
use std::convert::Infallible;
|
use std::convert::Infallible;
|
||||||
use teloxide::prelude::*;
|
use teloxide::prelude::*;
|
||||||
|
|
|
@ -1,5 +1,26 @@
|
||||||
use teloxide::prelude::*;
|
use teloxide::prelude::*;
|
||||||
|
|
||||||
|
use super::transitions::{
|
||||||
|
receive_10x5_answer, receive_days_of_week,
|
||||||
|
receive_gandalf_alternative_name, start,
|
||||||
|
};
|
||||||
|
|
||||||
|
#[derive(BotDialogue, SmartDefault, From)]
|
||||||
|
pub enum Dialogue {
|
||||||
|
#[default]
|
||||||
|
#[handler(start)]
|
||||||
|
Start(StartState),
|
||||||
|
|
||||||
|
#[handler(receive_days_of_week)]
|
||||||
|
ReceiveDaysOfWeek(ReceiveDaysOfWeekState),
|
||||||
|
|
||||||
|
#[handler(receive_10x5_answer)]
|
||||||
|
Receive10x5Answer(Receive10x5AnswerState),
|
||||||
|
|
||||||
|
#[handler(receive_gandalf_alternative_name)]
|
||||||
|
ReceiveGandalfAlternativeName(ReceiveGandalfAlternativeNameState),
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Default)]
|
#[derive(Default)]
|
||||||
pub struct StartState;
|
pub struct StartState;
|
||||||
|
|
||||||
|
|
|
@ -1,17 +1,22 @@
|
||||||
|
use crate::states::{
|
||||||
|
Dialogue, Receive10x5AnswerState, ReceiveDaysOfWeekState,
|
||||||
|
ReceiveGandalfAlternativeNameState, StartState,
|
||||||
|
};
|
||||||
use teloxide::prelude::*;
|
use teloxide::prelude::*;
|
||||||
|
|
||||||
use super::states::*;
|
|
||||||
|
|
||||||
pub type Cx = UpdateWithCx<Message>;
|
pub type Cx = UpdateWithCx<Message>;
|
||||||
pub type Out = TransitionOut<Dialogue>;
|
pub type Out = TransitionOut<Dialogue>;
|
||||||
|
|
||||||
async fn start(cx: Cx, state: StartState) -> Out {
|
pub async fn start(cx: Cx, state: StartState) -> Out {
|
||||||
cx.answer_str("Let's start our test! How many days per week are there?")
|
cx.answer_str("Let's start our test! How many days per week are there?")
|
||||||
.await?;
|
.await?;
|
||||||
next(state.up())
|
next(state.up())
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn receive_days_of_week(cx: Cx, state: ReceiveDaysOfWeekState) -> Out {
|
pub async fn receive_days_of_week(
|
||||||
|
cx: Cx,
|
||||||
|
state: ReceiveDaysOfWeekState,
|
||||||
|
) -> Out {
|
||||||
match cx.update.text().map(str::parse) {
|
match cx.update.text().map(str::parse) {
|
||||||
Some(Ok(ans)) if ans == 7 => {
|
Some(Ok(ans)) if ans == 7 => {
|
||||||
cx.answer_str("10*5 = ?").await?;
|
cx.answer_str("10*5 = ?").await?;
|
||||||
|
@ -24,7 +29,7 @@ async fn receive_days_of_week(cx: Cx, state: ReceiveDaysOfWeekState) -> Out {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn receive_10x5_answer(cx: Cx, state: Receive10x5AnswerState) -> Out {
|
pub async fn receive_10x5_answer(cx: Cx, state: Receive10x5AnswerState) -> Out {
|
||||||
match cx.update.text().map(str::parse) {
|
match cx.update.text().map(str::parse) {
|
||||||
Some(Ok(ans)) if ans == 50 => {
|
Some(Ok(ans)) if ans == 50 => {
|
||||||
cx.answer_str("What's an alternative name of Gandalf?").await?;
|
cx.answer_str("What's an alternative name of Gandalf?").await?;
|
||||||
|
@ -37,7 +42,7 @@ async fn receive_10x5_answer(cx: Cx, state: Receive10x5AnswerState) -> Out {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn receive_gandalf_alternative_name(
|
pub async fn receive_gandalf_alternative_name(
|
||||||
cx: Cx,
|
cx: Cx,
|
||||||
state: ReceiveGandalfAlternativeNameState,
|
state: ReceiveGandalfAlternativeNameState,
|
||||||
) -> Out {
|
) -> Out {
|
||||||
|
@ -55,19 +60,3 @@ async fn receive_gandalf_alternative_name(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(BotDialogue, SmartDefault, From)]
|
|
||||||
pub enum Dialogue {
|
|
||||||
#[default]
|
|
||||||
#[handler(start)]
|
|
||||||
Start(StartState),
|
|
||||||
|
|
||||||
#[handler(receive_days_of_week)]
|
|
||||||
ReceiveDaysOfWeek(ReceiveDaysOfWeekState),
|
|
||||||
|
|
||||||
#[handler(receive_10x5_answer)]
|
|
||||||
Receive10x5Answer(Receive10x5AnswerState),
|
|
||||||
|
|
||||||
#[handler(receive_gandalf_alternative_name)]
|
|
||||||
ReceiveGandalfAlternativeName(ReceiveGandalfAlternativeNameState),
|
|
||||||
}
|
|
||||||
|
|
Loading…
Reference in a new issue