Files
desubot/src/main.rs

79 lines
2.2 KiB
Rust
Raw Normal View History

2021-08-19 18:08:19 +03:00
#![allow(unreachable_code)]
2020-12-06 23:55:09 +03:00
use std::{env, process};
2021-08-20 20:38:13 +03:00
use tokio::time::{delay_for, Duration};
2020-11-28 17:31:08 +03:00
use futures::StreamExt;
use telegram_bot::*;
2020-12-05 15:57:11 +03:00
#[macro_use]
extern crate log;
use env_logger::Env;
2020-11-28 17:31:08 +03:00
mod commands;
mod db;
2020-11-29 16:23:27 +03:00
mod errors;
2020-12-10 16:54:39 +03:00
mod handlers;
mod utils;
2020-12-05 15:57:11 +03:00
2020-12-10 16:54:39 +03:00
use mystem::MyStem;
2020-11-28 17:31:08 +03:00
#[tokio::main]
2020-11-29 16:23:27 +03:00
async fn main() -> Result<(), errors::Error> {
2021-08-19 18:08:19 +03:00
env_logger::Builder::from_env(Env::default().default_filter_or("info")).init();
2020-12-16 19:15:20 +03:00
let mut mystem = match MyStem::new() {
Ok(mystem) => mystem,
Err(e) => {
error!("MyStem init error. {:?}", e);
process::exit(0x0002);
}
};
2020-12-07 15:55:25 +03:00
match db::update_scheme() {
2020-12-07 17:41:12 +03:00
Ok(_) => {}
Err(e) => panic!("Database error: {:?}", e),
2020-12-07 15:55:25 +03:00
}
2020-12-05 15:57:11 +03:00
let token = match env::var("TELEGRAM_BOT_TOKEN") {
Ok(token) => token,
Err(_) => {
error!("TELEGRAM_BOT_TOKEN not set");
process::exit(0x0001);
2020-12-06 23:55:09 +03:00
}
2020-12-05 15:57:11 +03:00
};
let api = Api::new(token.clone());
2020-11-28 17:31:08 +03:00
let mut stream = api.stream();
2020-12-10 16:54:39 +03:00
let me = api.send(GetMe).await?;
info!(
"GetMe result: Username: {}, First Name: {}, ID {}",
me.username.as_ref().unwrap(),
me.first_name,
me.id
);
2021-08-19 18:08:19 +03:00
loop {
while let Some(update) = stream.next().await {
2021-08-20 20:38:13 +03:00
match update {
Ok(u) => {
if let UpdateKind::Message(message) = u.kind {
db::add_conf(message.clone()).await?;
db::add_user(message.clone()).await?;
match handlers::handler(
api.clone(),
message,
token.clone(),
&mut mystem,
me.clone(),
)
.await
{
Ok(_) => {}
Err(e) => warn!("An error occurred handling command. {:?}", e),
}
}
2021-08-19 18:08:19 +03:00
}
2021-08-20 20:38:13 +03:00
Err(e) => {
warn!("Telegram API Error: {:?}", e);
}
};
2020-11-28 17:31:08 +03:00
}
2021-08-20 20:38:13 +03:00
delay_for(Duration::from_secs(2)).await;
2020-11-28 17:31:08 +03:00
}
Ok(())
}