-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathtutorial.rs
70 lines (62 loc) · 2.09 KB
/
tutorial.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
use tbot::{
markup::{inline_code, markdown_v2},
prelude::*,
types::{
inline_query::{self, result::Article},
input_message_content::Text,
parameters::Text as ParseMode,
},
Bot,
};
use tokio::sync::Mutex;
#[tokio::main]
async fn main() {
let mut bot =
Bot::from_env("BOT_TOKEN").stateful_event_loop(Mutex::new(0_u32));
bot.text(|context, _| async move {
let calc_result = meval::eval_str(&context.text.value);
let message: ParseMode = if let Ok(answer) = calc_result {
markdown_v2(("= ", inline_code(answer.to_string()))).into()
} else {
markdown_v2("Whops, I couldn't evaluate your expression :(").into()
};
let call_result = context.send_message_in_reply(message).call().await;
if let Err(err) = call_result {
dbg!(err);
}
});
bot.inline(move |context, id| async move {
let calc_result = meval::eval_str(&context.query);
let title;
let message: ParseMode;
let description;
if let Ok(answer) = calc_result {
title = answer.to_string();
message = markdown_v2(inline_code(format!(
"{} = {}",
context.query, answer,
)))
.into();
description = format!("{} = {}", context.query, answer);
} else {
title = "Whops...".into();
message =
markdown_v2("I couldn't evaluate your expression :(").into();
description =
String::from("I couldn't evaluate your expression :(");
};
let id = {
let mut id = id.lock().await;
*id += 1;
id.to_string()
};
let content = Text::new(message);
let article = Article::new(title, content).description(description);
let result = inline_query::Result::new(id, article);
let call_result = context.answer(&[result][..]).call().await;
if let Err(err) = call_result {
dbg!(err);
}
});
bot.polling().start().await.unwrap();
}