1use safe_vk::{Method, Methods, SafeVkBot};
2use std::time::{SystemTime, UNIX_EPOCH};
3use std::{env, sync::Arc};
4
5async fn help(ctx: Arc<Methods>) {
6 ctx.reply(
7 "Commands:\n`$hi`: will greet you\n`$number`: sends a random number between 0 and 10",
8 )
9 .await;
10}
11
12async fn hi(ctx: Arc<Methods>) {
13 let context = ctx.context().await;
14 let user_id = context.updates[0].object.message.as_ref().unwrap().from_id;
15 let user = ctx.get_users(&[user_id]).await.unwrap();
16
17 ctx.reply(&format!(
18 "@id{}(Hello {} {}!)",
19 user_id, user[0].first_name, user[0].last_name
20 ))
21 .await;
22}
23
24async fn random(ctx: Arc<Methods>) {
25 let now = SystemTime::now();
26 let since_the_epoch = now.duration_since(UNIX_EPOCH).expect("Time went backwards");
27 let in_ms = since_the_epoch.as_millis();
28
29 ctx.reply(&(in_ms % 11).to_string()).await
30}
31
32#[tokio::main]
33async fn main() {
34 let group_id: u32 = env::var("GROUP_ID")
35 .unwrap_or_else(|_| "0".into())
36 .parse()
37 .expect("GROUP_ID must be a valid u32");
38
39 let token = env::var("TOKEN").expect("TOKEN environment variable not set");
40
41 let bot = SafeVkBot::create(&token);
42
43 bot.command("$help", help)
44 .command("$hi", hi)
45 .command("$number", random)
46 .start_polling(group_id)
47 .await;
48}