Fix add_conf

This commit is contained in:
AB
2020-12-10 16:54:39 +03:00
parent cfe510029e
commit 72a35058a8
4 changed files with 123 additions and 114 deletions

View File

@ -32,7 +32,7 @@ pub(crate) fn update_scheme() -> Result<()> {
conn.execute(t, params![])?; conn.execute(t, params![])?;
} }
} }
info!("Scheme updated."); info!("Database schema updated.");
Ok(()) Ok(())
} }
@ -162,7 +162,7 @@ pub(crate) async fn add_conf(message: Message) -> Result<(), Error> {
id = :id", id = :id",
)?; )?;
stmt.execute_named(&[(":id", &update.id.to_string()), (":title", &update.title)])?; stmt.execute_named(&[(":id", &update.id.to_string()), (":title", &update.title)])?;
//println!("Conf {:?} updated: {:?}", update.title, get_conf(update.id)); info!("Conf {:?} updated: {:?}", update.title, get_conf(update.id));
} }
Err(_) => { Err(_) => {
let update = Conf { let update = Conf {
@ -173,7 +173,7 @@ pub(crate) async fn add_conf(message: Message) -> Result<(), Error> {
let unix_time = utils::unixtime().await; let unix_time = utils::unixtime().await;
let mut stmt = conn.prepare_cached( let mut stmt = conn.prepare_cached(
"UPDATE conf "INSERT OR IGNORE INTO conf
SET SET
title = :title, title = :title,
date = :date date = :date

113
src/handlers.rs Normal file
View File

@ -0,0 +1,113 @@
use telegram_bot::*;
use crate::mystem::MyStem;
use crate::errors;
use crate::db;
use crate::commands;
use crate::utils;
pub async fn handler(
api: Api,
message: Message,
token: String,
mystem: &mut MyStem,
me: User,
) -> Result<(), errors::Error> {
match message.kind {
MessageKind::Text { ref data, .. } => {
let title = utils::get_title(&message);
info!(
"<{}({})>[{}({})]: {}",
&message.chat.id(),
title,
&message.from.id,
&message.from.first_name,
data
);
db::add_sentence(&message, mystem).await?;
match data.as_str() {
"/here" => commands::here(api, message).await?,
"/top" => commands::top(api, message).await?,
"/stat" => commands::top(api, message).await?,
"/markov_all" => commands::markov_all(api, message).await?,
_ => (),
}
}
MessageKind::Photo { ref caption, .. } => {
let title = utils::get_title(&message);
info!(
"<{}({})>[{}({})]: *PHOTO* {}",
&message.chat.id(),
title,
&message.from.id,
&message.from.first_name,
caption.clone().unwrap_or("NO_TITLE".to_string())
);
utils::get_files(api, message, token).await?;
}
MessageKind::Document { ref caption, .. } => {
let title = utils::get_title(&message);
info!(
"<{}({})>[{}({})]: *DOCUMENT* {}",
&message.chat.id(),
title,
&message.from.id,
&message.from.first_name,
caption.clone().unwrap_or("NO_TITLE".to_string())
);
utils::get_files(api, message, token).await?;
}
MessageKind::Sticker { .. } => {
let title = utils::get_title(&message);
info!(
"<{}({})>[{}({})]: *STICKER*",
&message.chat.id(),
title,
&message.from.id,
&message.from.first_name,
);
utils::get_files(api, message, token).await?;
}
MessageKind::Voice { .. } => {
let title = utils::get_title(&message);
info!(
"<{}({})>[{}({})]: *VOICE*",
&message.chat.id(),
title,
&message.from.id,
&message.from.first_name,
);
utils::get_files(api, message, token).await?;
}
MessageKind::Video { .. } => {
let title = utils::get_title(&message);
info!(
"<{}({})>[{}({})]: *VIDEO*",
&message.chat.id(),
title,
&message.from.id,
&message.from.first_name,
);
utils::get_files(api, message, token).await?;
}
MessageKind::VideoNote { .. } => {
let title = utils::get_title(&message);
info!(
"<{}({})>[{}({})]: *VIDEO_NOTE*",
&message.chat.id(),
title,
&message.from.id,
&message.from.first_name,
);
utils::get_files(api, message, token).await?;
}
_ => (),
};
Ok(())
}

View File

@ -11,112 +11,10 @@ mod db;
mod errors; mod errors;
mod mystem; mod mystem;
mod utils; mod utils;
mod handlers;
use mystem::MyStem; use mystem::MyStem;
async fn handler(
api: Api,
message: Message,
token: String,
mystem: &mut MyStem,
) -> Result<(), errors::Error> {
match message.kind {
MessageKind::Text { ref data, .. } => {
let title = utils::get_title(&message);
info!(
"<{}({})>[{}({})]: {}",
&message.chat.id(),
title,
&message.from.id,
&message.from.first_name,
data
);
db::add_sentence(&message, mystem).await?;
match data.as_str() {
"/here" => commands::here(api, message).await?,
"/top" => commands::top(api, message).await?,
"/stat" => commands::top(api, message).await?,
"/markov_all" => commands::markov_all(api, message).await?,
_ => (),
}
}
MessageKind::Photo { ref caption, .. } => {
let title = utils::get_title(&message);
info!(
"<{}({})>[{}({})]: *PHOTO* {}",
&message.chat.id(),
title,
&message.from.id,
&message.from.first_name,
caption.clone().unwrap_or("NO_TITLE".to_string())
);
utils::get_files(api, message, token).await?;
}
MessageKind::Document { ref caption, .. } => {
let title = utils::get_title(&message);
info!(
"<{}({})>[{}({})]: *DOCUMENT* {}",
&message.chat.id(),
title,
&message.from.id,
&message.from.first_name,
caption.clone().unwrap_or("NO_TITLE".to_string())
);
utils::get_files(api, message, token).await?;
}
MessageKind::Sticker { .. } => {
let title = utils::get_title(&message);
info!(
"<{}({})>[{}({})]: *STICKER*",
&message.chat.id(),
title,
&message.from.id,
&message.from.first_name,
);
utils::get_files(api, message, token).await?;
}
MessageKind::Voice { .. } => {
let title = utils::get_title(&message);
info!(
"<{}({})>[{}({})]: *VOICE*",
&message.chat.id(),
title,
&message.from.id,
&message.from.first_name,
);
utils::get_files(api, message, token).await?;
}
MessageKind::Video { .. } => {
let title = utils::get_title(&message);
info!(
"<{}({})>[{}({})]: *VIDEO*",
&message.chat.id(),
title,
&message.from.id,
&message.from.first_name,
);
utils::get_files(api, message, token).await?;
}
MessageKind::VideoNote { .. } => {
let title = utils::get_title(&message);
info!(
"<{}({})>[{}({})]: *VIDEO_NOTE*",
&message.chat.id(),
title,
&message.from.id,
&message.from.first_name,
);
utils::get_files(api, message, token).await?;
}
_ => (),
};
Ok(())
}
#[tokio::main] #[tokio::main]
async fn main() -> Result<(), errors::Error> { async fn main() -> Result<(), errors::Error> {
env_logger::from_env(Env::default().default_filter_or("info")).init(); env_logger::from_env(Env::default().default_filter_or("info")).init();
@ -133,15 +31,15 @@ async fn main() -> Result<(), errors::Error> {
} }
}; };
let api = Api::new(token.clone()); let api = Api::new(token.clone());
// Fetch new updates via long poll method
let mut stream = api.stream(); let mut stream = api.stream();
let me = api.send(GetMe).await?;
info!("GetMe result: Username: {}, First Name: {}, ID {}", me.username.as_ref().unwrap(), me.first_name, me.id);
while let Some(update) = stream.next().await { while let Some(update) = stream.next().await {
// If the received update contains a new message...
let update = update?; let update = update?;
if let UpdateKind::Message(message) = update.kind { if let UpdateKind::Message(message) = update.kind {
db::add_user(message.clone()).await?;
db::add_conf(message.clone()).await?; db::add_conf(message.clone()).await?;
handler(api.clone(), message, token.clone(), &mut mystem).await?; db::add_user(message.clone()).await?;
handlers::handler(api.clone(), message, token.clone(), &mut mystem, me.clone()).await?;
} }
} }
Ok(()) Ok(())

View File

@ -1,8 +1,6 @@
use crate::errors; use crate::errors;
use serde_json::Value; use serde_json::Value;
use std::io::prelude::*; use std::io::{Error, Write, BufReader, prelude::*};
use std::io::BufReader;
use std::io::{Error, Write};
use subprocess::{Popen, PopenConfig, PopenError, Redirection}; use subprocess::{Popen, PopenConfig, PopenError, Redirection};
pub struct MyStem { pub struct MyStem {