#[macro_use]
extern crate log;
use std::env;
use mobot::*;
#[derive(Clone, Default, BotState)]
struct ChatState {
counter: usize,
}
async fn handle_chat_event(e: Event, state: State<ChatState>) -> Result<Action, anyhow::Error> {
let message = e.update.get_new()?;
let mut state = state.get().write().await;
state.counter += 1;
Ok(Action::ReplyText(format!(
"Pong {}: {}",
state.counter,
message.text.as_ref().unwrap()
)))
}
#[tokio::main]
async fn main() {
mobot::init_logger();
info!("Starting pingbot...");
let client = Client::new(env::var("TELEGRAM_TOKEN").unwrap());
Router::new(client)
.add_route(
Route::Message(Matcher::Regex("[Pp][iI][nN][gG]".into())),
handle_chat_event,
)
.add_route(
Route::Message(Matcher::Exact("pong".into())),
handle_chat_event,
)
.add_route(Route::Default, handlers::log_handler)
.start()
.await;
}