diff --git a/Cargo.toml b/Cargo.toml index cb05e272..a837bb72 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -60,7 +60,7 @@ full = [ teloxide-core = { version = "0.3.3", default-features = false } #teloxide-core = { git = "https://github.com/teloxide/teloxide-core.git", rev = "...", default-features = false } #teloxide-macros = { version = "0.4", optional = true } -teloxide-macros = { git = "https://github.com/teloxide/teloxide-macros", branch = "dispatching2", optional = true } +teloxide-macros = { path = "../teloxide-macros", optional = true } serde_json = "1.0" serde = { version = "1.0", features = ["derive"] } @@ -123,7 +123,7 @@ required-features = ["sqlite-storage", "cbor-serializer", "bincode-serializer"] [[example]] name = "dialogue" -required-features = ["macros", "sqlite-storage"] +required-features = ["macros"] [[example]] name = "sqlite_remember" diff --git a/examples/dialogue.rs b/examples/dialogue.rs index bbdda726..5f38dba5 100644 --- a/examples/dialogue.rs +++ b/examples/dialogue.rs @@ -13,15 +13,11 @@ // Age: 223 // Location: Middle-earth // ``` -use teloxide::{ - dispatching2::dialogue::{serializer::Json, SqliteStorage}, - macros::DialogueState, - prelude2::*, -}; +use teloxide::{dispatching2::dialogue::InMemStorage, macros::DialogueState, prelude2::*}; -type MyDialogue = Dialogue>; +type MyDialogue = Dialogue>; -#[derive(DialogueState, Clone, serde::Serialize, serde::Deserialize)] +#[derive(DialogueState, Clone)] #[handler_out(anyhow::Result<()>)] pub enum State { #[handler(handle_start)] @@ -37,7 +33,7 @@ pub enum State { ReceiveLocation(ReceiveLocation), } -#[derive(Clone, serde::Serialize, serde::Deserialize)] +#[derive(Clone)] pub struct ReceiveLocation { full_name: String, age: u8, @@ -55,15 +51,14 @@ async fn main() { log::info!("Starting dialogue_bot..."); let bot = Bot::from_env().auto_send(); - let storage = SqliteStorage::open("db.sqlite", Json).await.unwrap(); DispatcherBuilder::new( bot, - dptree::entry() - .add_dialogue::, State>() + Update::filter_message() + .add_dialogue::, State>() .dispatch_by::(), ) - .dependencies(dptree::deps![storage]) + .dependencies(dptree::deps![InMemStorage::::new()]) .build() .dispatch() .await; diff --git a/examples/redis_remember.rs b/examples/redis_remember.rs index 8f4d1063..d40b5cb4 100644 --- a/examples/redis_remember.rs +++ b/examples/redis_remember.rs @@ -78,7 +78,7 @@ async fn main() { // or "serializer-bincode" let storage = RedisStorage::open("redis://127.0.0.1:6379", Bincode).await.unwrap(); - let handler = dptree::entry() + let handler = Update::filter_message() .add_dialogue::, DialogueState>() .branch(dptree::endpoint(handle_message)); diff --git a/examples/sqlite_remember.rs b/examples/sqlite_remember.rs index 688dc781..477f1df3 100644 --- a/examples/sqlite_remember.rs +++ b/examples/sqlite_remember.rs @@ -74,7 +74,7 @@ async fn main() { let bot = Bot::from_env().auto_send(); let storage = SqliteStorage::open("db.sqlite", Json).await.unwrap(); - let handler = dptree::entry() + let handler = Update::filter_message() .add_dialogue::, DialogueState>() .branch(dptree::endpoint(handle_message)); diff --git a/src/dispatching2/dialogue/dialogue_handler_ext.rs b/src/dispatching2/dialogue/dialogue_handler_ext.rs index f5e4ffb8..a56ab2f8 100644 --- a/src/dispatching2/dialogue/dialogue_handler_ext.rs +++ b/src/dispatching2/dialogue/dialogue_handler_ext.rs @@ -18,20 +18,17 @@ where { fn add_dialogue(self) -> Self where - // FIXME: some of this requirements are useless. S: Storage + Send + Sync + 'static, >::Error: Send, D: Default + Send + Sync + 'static, Upd: GetChatId + Clone + Send + Sync + 'static, { - self.chain( - dptree::filter_map(|storage: Arc, upd: Upd| async move { - let chat_id = upd.chat_id()?; - Some(Dialogue::new(storage, chat_id)) - }) - .chain(dptree::filter_map(|dialogue: Dialogue| async move { - dialogue.get_or_default().await.ok() - })), - ) + self.chain(dptree::filter_map(|storage: Arc, upd: Upd| async move { + let chat_id = upd.chat_id()?; + Some(Dialogue::new(storage, chat_id)) + })) + .chain(dptree::filter_map(|dialogue: Dialogue| async move { + dialogue.get_or_default().await.ok() + })) } } diff --git a/src/dispatching2/dispatcher.rs b/src/dispatching2/dispatcher.rs index 308acf20..83c7d59b 100644 --- a/src/dispatching2/dispatcher.rs +++ b/src/dispatching2/dispatcher.rs @@ -92,6 +92,7 @@ pub struct Dispatcher { handler: UpdateHandler, default_handler: DefaultHandler, error_handler: Arc>, + // TODO: respect allowed_udpates allowed_updates: HashSet, state: Arc,