use tbot::{
prelude::*,
types::parameters::{
poll::{Answer, AutoClose, Poll, Quiz},
Any,
},
Bot,
};
const QUESTION: &str = "Do you like tbot?";
const OPTIONS: &[&str] =
&["Yes", "Also yes", "I like shooting myself in the foot more"];
const SEND_IN_REPLY_ERROR: &str = "Please send the command in reply to a poll";
const QUIZ_QUESTION: &str = "The best Telegram bot library is...";
const QUIZ_OPTIONS: &[&str] = &["aiogram", "tbot", "python-telegram-bot"];
const QUIZ_CORRECT_OPTION: usize = 1;
const QUIZ_EXPLANATION: &str =
"Why would you want to use something else than tbot for writing bots?";
#[tokio::main]
async fn main() {
let mut bot = Bot::from_env("BOT_TOKEN").event_loop();
let regular = Any::new(QUESTION, OPTIONS, Poll::new(Answer::Single))
.auto_close(AutoClose::OpenPeriod(60));
let quiz = Any::new(
QUIZ_QUESTION,
QUIZ_OPTIONS,
Quiz::new(QUIZ_CORRECT_OPTION).explanation(QUIZ_EXPLANATION),
)
.is_anonymous(false);
bot.command("poll", move |context| async move {
let call_result = context.send_poll(®ular).call().await;
if let Err(err) = call_result {
dbg!(err);
}
});
bot.command("quiz", move |context| async move {
let call_result = context.send_poll(&quiz).call().await;
if let Err(err) = call_result {
dbg!(err);
}
});
bot.command("close", |context| async move {
let err = if let Some(message) = &context.reply_to {
let chat_id = context.chat.id;
let call_result =
context.bot.stop_poll(chat_id, message.id).call().await;
call_result.err()
} else {
context.send_message(SEND_IN_REPLY_ERROR).call().await.err()
};
if let Some(err) = err {
dbg!(err);
}
});
bot.poll(|context| {
println!("Someone sent a poll: {:#?}", context.poll);
async {}
});
bot.updated_poll(|context| {
println!("New update on my poll: {:#?}", context.poll);
async {}
});
bot.poll_answer(|context| {
println!("New answer in my poll: {:#?}", context.answer);
async {}
});
bot.polling().start().await.unwrap();
}