initial commit
This commit is contained in:
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
/target
|
||||||
1496
Cargo.lock
generated
Normal file
1496
Cargo.lock
generated
Normal file
File diff suppressed because it is too large
Load Diff
18
Cargo.toml
Normal file
18
Cargo.toml
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
[package]
|
||||||
|
name = "altherego"
|
||||||
|
version = "0.1.0"
|
||||||
|
authors = ["Aleksandr Trushkin <aleksandr.trushkin@rt.ru>"]
|
||||||
|
edition = "2018"
|
||||||
|
|
||||||
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
teloxide = "0.3"
|
||||||
|
teloxide-macros = "0.3"
|
||||||
|
tokio = {version = "0.2.23", features = ["full"]}
|
||||||
|
reqwest = "0.10.8"
|
||||||
|
serde = "1.0.117"
|
||||||
|
serde_json = "1.0.59"
|
||||||
|
uuid = { version = "0.8.1", features = ["v4"] }
|
||||||
|
log = "0.4"
|
||||||
|
env_logger = "0.8.1"
|
||||||
78
src/main.rs
Normal file
78
src/main.rs
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
use std::env;
|
||||||
|
use teloxide::{prelude::*, utils::command::BotCommand};
|
||||||
|
use log::{debug, info, warn};
|
||||||
|
use env_logger;
|
||||||
|
|
||||||
|
#[tokio::main]
|
||||||
|
async fn main() {
|
||||||
|
env_logger::init();
|
||||||
|
|
||||||
|
// 170515067:AAElDJ8Sq_oIqo9WaL4DKvUr13nSEIdHCYs
|
||||||
|
let token = match env::var("ALTHEREGO_TOKEN") {
|
||||||
|
Ok(token) => token,
|
||||||
|
Err(_) => "170515067:AAElDJ8Sq_oIqo9WaL4DKvUr13nSEIdHCYs".to_string(),
|
||||||
|
};
|
||||||
|
|
||||||
|
let bot = teloxide::Bot::builder().token(token).build();
|
||||||
|
let bot_name = "AltherEgo";
|
||||||
|
|
||||||
|
teloxide::commands_repl(bot, bot_name, handler).await;
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(serde::Deserialize, Debug)]
|
||||||
|
struct Climate {
|
||||||
|
humidity: f32,
|
||||||
|
temperature: f32,
|
||||||
|
}
|
||||||
|
|
||||||
|
const CLIMATE_REQ_URL: &str = "http://127.0.0.1:18081/v1/home/temperature";
|
||||||
|
|
||||||
|
async fn handler(cx: UpdateWithCx<Message>, command: Command) -> ResponseResult<()> {
|
||||||
|
let request_id = uuid::Uuid::new_v4();
|
||||||
|
|
||||||
|
info!("incoming request xreqid={} command={:?}", request_id, command);
|
||||||
|
|
||||||
|
match command {
|
||||||
|
Command::Help => cx.answer(Command::descriptions()).send().await?,
|
||||||
|
Command::RoomTemperature => {
|
||||||
|
let response = match reqwest::get(CLIMATE_REQ_URL).await {
|
||||||
|
Ok(response) => response,
|
||||||
|
Err(err) => {
|
||||||
|
warn!("unable to handle request xreqid={} error={:?}", request_id, err);
|
||||||
|
cx.answer_str(format!("something went wrong, reference to {}", request_id)).await?;
|
||||||
|
|
||||||
|
return Err(RequestError::NetworkError(err));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
let info: Climate = match response.json::<Climate>().await {
|
||||||
|
Ok(result) => result,
|
||||||
|
Err(err) => {
|
||||||
|
warn!("unable to handle request xreqid={} error={:?}", request_id, err);
|
||||||
|
cx.answer_str(format!("something went wrong, reference to {}", request_id)).await?;
|
||||||
|
|
||||||
|
return Err(RequestError::NetworkError(err));
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
debug!("parsed value: {:?}", info);
|
||||||
|
|
||||||
|
cx.answer_str(format!(
|
||||||
|
"your temperature is {:.2} and humidity is {:.2}",
|
||||||
|
info.temperature, info.humidity
|
||||||
|
))
|
||||||
|
.await?
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(BotCommand, Debug)]
|
||||||
|
#[command(rename = "lowercase", description = "These commands are supported:")]
|
||||||
|
enum Command {
|
||||||
|
#[command(description = "display this text.")]
|
||||||
|
Help,
|
||||||
|
#[command(description = "temperature of your room.")]
|
||||||
|
RoomTemperature,
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user