reply/
reply.rs

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}