This commit is contained in:
2023-05-19 01:35:12 +02:00
parent 38bd097b35
commit 5acf9b8e1d
9 changed files with 92 additions and 238 deletions

View File

@@ -124,15 +124,12 @@ where
(Some(chat_id), Some(query), Some(message_id)) => { (Some(chat_id), Some(query), Some(message_id)) => {
(chat_id, query, message_id) (chat_id, query, message_id)
} }
(Some(chat_id), _, _) => {
bot.send_message(chat_id, "Повторите поиск сначала").send().await?;
return Ok(());
}
_ => { _ => {
return match chat_id { return Ok(());
Some(v) => match bot.send_message(v, "Повторите поиск сначала").send().await
{
Ok(_) => Ok(()),
Err(err) => Err(Box::new(err)),
},
None => return Ok(()),
}
} }
}; };
@@ -148,14 +145,11 @@ where
let mut items_page = match items_getter(query.clone(), page, allowed_langs.clone()).await { let mut items_page = match items_getter(query.clone(), page, allowed_langs.clone()).await {
Ok(v) => v, Ok(v) => v,
Err(err) => { Err(err) => {
match bot bot
.send_message(chat_id, "Ошибка! Попробуйте позже :(") .send_message(chat_id, "Ошибка! Попробуйте позже :(")
.send() .send()
.await .await?;
{
Ok(_) => (),
Err(err) => log::error!("{:?}", err),
}
return Err(err); return Err(err);
} }
}; };
@@ -168,10 +162,8 @@ where
SearchCallbackData::Translators { .. } => "Переводчики не найдены!", SearchCallbackData::Translators { .. } => "Переводчики не найдены!",
}; };
return match bot.send_message(chat_id, message_text).send().await { bot.send_message(chat_id, message_text).send().await?;
Ok(_) => Ok(()), return Ok(());
Err(err) => Err(Box::new(err)),
};
}; };
if page > items_page.total_pages { if page > items_page.total_pages {
@@ -184,14 +176,11 @@ where
{ {
Ok(v) => v, Ok(v) => v,
Err(err) => { Err(err) => {
match bot bot
.send_message(chat_id, "Ошибка! Попробуйте позже :(") .send_message(chat_id, "Ошибка! Попробуйте позже :(")
.send() .send()
.await .await?;
{
Ok(_) => (),
Err(err) => log::error!("{:?}", err),
}
return Err(err); return Err(err);
} }
}; };
@@ -206,15 +195,13 @@ where
let keyboard = generic_get_pagination_keyboard(page, total_pages, search_data, true); let keyboard = generic_get_pagination_keyboard(page, total_pages, search_data, true);
match bot bot
.edit_message_text(chat_id, message_id, message_text) .edit_message_text(chat_id, message_id, message_text)
.reply_markup(keyboard) .reply_markup(keyboard)
.send() .send()
.await .await?;
{
Ok(_) => Ok(()), Ok(())
Err(err) => Err(Box::new(err)),
}
} }
pub async fn message_handler(message: Message, bot: CacheMe<Throttle<Bot>>) -> BotHandlerInternal { pub async fn message_handler(message: Message, bot: CacheMe<Throttle<Bot>>) -> BotHandlerInternal {
@@ -249,16 +236,14 @@ pub async fn message_handler(message: Message, bot: CacheMe<Throttle<Bot>>) -> B
], ],
}; };
match bot bot
.send_message(message.chat.id, message_text) .send_message(message.chat.id, message_text)
.reply_to_message_id(message.id) .reply_to_message_id(message.id)
.reply_markup(keyboard) .reply_markup(keyboard)
.send() .send()
.await .await?;
{
Ok(_) => Ok(()), Ok(())
Err(err) => Err(Box::new(err)),
}
} }
pub fn get_search_handler() -> crate::bots::BotHandler { pub fn get_search_handler() -> crate::bots::BotHandler {

View File

@@ -77,15 +77,13 @@ async fn settings_handler(message: Message, bot: CacheMe<Throttle<Bot>>) -> BotH
}]], }]],
}; };
match bot bot
.send_message(message.chat.id, "Настройки") .send_message(message.chat.id, "Настройки")
.reply_markup(keyboard) .reply_markup(keyboard)
.send() .send()
.await .await?;
{
Ok(_) => Ok(()), Ok(())
Err(err) => Err(Box::new(err)),
}
} }
fn get_lang_keyboard(all_langs: Vec<Lang>, allowed_langs: HashSet<String>) -> InlineKeyboardMarkup { fn get_lang_keyboard(all_langs: Vec<Lang>, allowed_langs: HashSet<String>) -> InlineKeyboardMarkup {
@@ -124,10 +122,8 @@ async fn settings_callback_handler(
let message = match cq.message { let message = match cq.message {
Some(v) => v, Some(v) => v,
None => { None => {
#[allow(unused_must_use)] { bot.send_message(cq.from.id, "Ошибка! Попробуйте заново(").send().await?;
bot.send_message(cq.from.id, "Ошибка! Попробуйте заново(").send().await; return Ok(());
}
return Ok(())
}, },
}; };
@@ -151,19 +147,17 @@ async fn settings_callback_handler(
}; };
if allowed_langs_set.is_empty() { if allowed_langs_set.is_empty() {
return match bot bot
.answer_callback_query(cq.id) .answer_callback_query(cq.id)
.text("Должен быть активен, хотя бы один язык!") .text("Должен быть активен, хотя бы один язык!")
.show_alert(true) .show_alert(true)
.send() .send()
.await .await?;
{
Ok(_) => Ok(()), return Ok(())
Err(err) => Err(Box::new(err)),
};
} }
match create_or_update_user_settings( if let Err(err) = create_or_update_user_settings(
user.id, user.id,
user.last_name.clone().unwrap_or("".to_string()), user.last_name.clone().unwrap_or("".to_string()),
user.first_name.clone(), user.first_name.clone(),
@@ -171,38 +165,28 @@ async fn settings_callback_handler(
me.username.clone().unwrap(), me.username.clone().unwrap(),
allowed_langs_set.clone().into_iter().collect(), allowed_langs_set.clone().into_iter().collect(),
) )
.await .await {
{ bot.send_message(user.id, "Ошибка! Попробуйте заново(").send().await?;
Ok(_) => (), return Err(err);
Err(err) => { }
#[allow(unused_must_use)] {
bot.send_message(user.id, "Ошибка! Попробуйте заново(").send().await;
}
return Err(err)
},
};
let all_langs = match get_langs().await { let all_langs = match get_langs().await {
Ok(v) => v, Ok(v) => v,
Err(err) => { Err(err) => {
#[allow(unused_must_use)] { bot.send_message(user.id, "Ошибка! Попробуйте заново(").send().await?;
bot.send_message(user.id, "Ошибка! Попробуйте заново(").send().await;
}
return Err(err) return Err(err)
}, },
}; };
let keyboard = get_lang_keyboard(all_langs, allowed_langs_set); let keyboard = get_lang_keyboard(all_langs, allowed_langs_set);
match bot bot
.edit_message_reply_markup(message.chat.id, message.id) .edit_message_reply_markup(message.chat.id, message.id)
.reply_markup(keyboard) .reply_markup(keyboard)
.send() .send()
.await .await?;
{
Ok(_) => Ok(()), Ok(())
Err(err) => Err(Box::new(err)),
}
} }
pub fn get_settings_handler() -> crate::bots::BotHandler { pub fn get_settings_handler() -> crate::bots::BotHandler {

View File

@@ -28,15 +28,13 @@ pub async fn support_command_handler(message: Message, bot: CacheMe<Throttle<Bot
}]], }]],
}; };
match bot bot
.send_message(message.chat.id, MESSAGE_TEXT) .send_message(message.chat.id, MESSAGE_TEXT)
.parse_mode(teloxide::types::ParseMode::MarkdownV2) .parse_mode(teloxide::types::ParseMode::MarkdownV2)
.reply_markup(keyboard) .reply_markup(keyboard)
.await .await?;
{
Ok(_) => Ok(()), Ok(())
Err(err) => Err(Box::new(err)),
}
} }
pub fn get_support_handler() -> crate::bots::BotHandler { pub fn get_support_handler() -> crate::bots::BotHandler {

View File

@@ -140,10 +140,7 @@ async fn update_log_pagination_handler(
let message = match cq.message { let message = match cq.message {
Some(v) => v, Some(v) => v,
None => { None => {
#[allow(unused_must_use)] { bot.send_message(cq.from.id, "Ошибка! Попробуйте заново(").send().await?;
bot.send_message(cq.from.id, "Ошибка! Попробуйте заново(").send().await;
}
return Ok(()) return Ok(())
}, },
}; };
@@ -153,39 +150,27 @@ async fn update_log_pagination_handler(
let header = format!("Обновление каталога ({from} - {to}):\n\n"); let header = format!("Обновление каталога ({from} - {to}):\n\n");
let mut items_page = match get_uploaded_books( let mut items_page = get_uploaded_books(
update_callback_data.page, update_callback_data.page,
update_callback_data.from.format("%Y-%m-%d").to_string(), update_callback_data.from.format("%Y-%m-%d").to_string(),
update_callback_data.to.format("%Y-%m-%d").to_string(), update_callback_data.to.format("%Y-%m-%d").to_string(),
) )
.await .await?;
{
Ok(v) => v,
Err(err) => return Err(err),
};
if items_page.total_pages == 0 { if items_page.total_pages == 0 {
return match bot bot
.send_message(message.chat.id, "Нет новых книг за этот период.") .send_message(message.chat.id, "Нет новых книг за этот период.")
.send() .send()
.await .await?;
{ return Ok(());
Ok(_) => Ok(()),
Err(err) => Err(Box::new(err)),
};
} }
if update_callback_data.page > items_page.total_pages { if update_callback_data.page > items_page.total_pages {
items_page = match get_uploaded_books( items_page = get_uploaded_books(
items_page.total_pages, items_page.total_pages,
update_callback_data.from.format("%Y-%m-%d").to_string(), update_callback_data.from.format("%Y-%m-%d").to_string(),
update_callback_data.to.format("%Y-%m-%d").to_string(), update_callback_data.to.format("%Y-%m-%d").to_string(),
) ).await?;
.await
{
Ok(v) => v,
Err(err) => return Err(err),
};
} }
let formated_items = items_page.format_items(); let formated_items = items_page.format_items();
@@ -197,15 +182,13 @@ async fn update_log_pagination_handler(
let message_text = format!("{header}{formated_items}{footer}"); let message_text = format!("{header}{formated_items}{footer}");
let keyboard = generic_get_pagination_keyboard(page, total_pages, update_callback_data, true); let keyboard = generic_get_pagination_keyboard(page, total_pages, update_callback_data, true);
match bot bot
.edit_message_text(message.chat.id, message.id, message_text) .edit_message_text(message.chat.id, message.id, message_text)
.reply_markup(keyboard) .reply_markup(keyboard)
.send() .send()
.await .await?;
{
Ok(_) => Ok(()), Ok(())
Err(err) => Err(Box::new(err)),
}
} }
pub fn get_update_log_handler() -> crate::bots::BotHandler { pub fn get_update_log_handler() -> crate::bots::BotHandler {

View File

@@ -33,17 +33,8 @@ pub async fn get_cached_message(
)) ))
.header("Authorization", &config::CONFIG.cache_server_api_key) .header("Authorization", &config::CONFIG.cache_server_api_key)
.send() .send()
.await; .await?
.error_for_status()?;
let response = match response {
Ok(v) => v,
Err(err) => return Err(Box::new(err)),
};
let response = match response.error_for_status() {
Ok(v) => v,
Err(err) => return Err(Box::new(err)),
};
if response.status() != StatusCode::OK { if response.status() != StatusCode::OK {
return Err(Box::new(DownloadError { return Err(Box::new(DownloadError {
@@ -51,10 +42,7 @@ pub async fn get_cached_message(
})); }));
}; };
match response.json::<CachedMessage>().await { Ok(response.json::<CachedMessage>().await?)
Ok(v) => Ok(v),
Err(err) => Err(Box::new(err)),
}
} }
pub async fn download_file( pub async fn download_file(
@@ -62,25 +50,15 @@ pub async fn download_file(
) -> Result<DownloadFile, Box<dyn std::error::Error + Send + Sync>> { ) -> Result<DownloadFile, Box<dyn std::error::Error + Send + Sync>> {
let DownloadData { format, id } = download_data; let DownloadData { format, id } = download_data;
let client = reqwest::Client::new(); let response = reqwest::Client::new()
let response = client
.get(format!( .get(format!(
"{}/api/v1/download/{id}/{format}", "{}/api/v1/download/{id}/{format}",
&config::CONFIG.cache_server_url &config::CONFIG.cache_server_url
)) ))
.header("Authorization", &config::CONFIG.cache_server_api_key) .header("Authorization", &config::CONFIG.cache_server_api_key)
.send() .send()
.await; .await?
.error_for_status()?;
let response = match response {
Ok(v) => v,
Err(err) => return Err(Box::new(err)),
};
let response = match response.error_for_status() {
Ok(response) => response,
Err(err) => return Err(Box::new(err)),
};
if response.status() != StatusCode::OK { if response.status() != StatusCode::OK {
return Err(Box::new(DownloadError { return Err(Box::new(DownloadError {
@@ -90,8 +68,6 @@ pub async fn download_file(
let headers = response.headers(); let headers = response.headers();
log::info!("{:?}", headers);
let filename = let filename =
std::str::from_utf8(&base64::decode(headers.get("x-filename-b64").unwrap()).unwrap()) std::str::from_utf8(&base64::decode(headers.get("x-filename-b64").unwrap()).unwrap())
.unwrap() .unwrap()

View File

@@ -19,28 +19,15 @@ async fn _make_request<T>(
where where
T: DeserializeOwned, T: DeserializeOwned,
{ {
let client = reqwest::Client::new(); let response = reqwest::Client::new()
let response = client
.get(format!("{}{}", &config::CONFIG.book_server_url, url)) .get(format!("{}{}", &config::CONFIG.book_server_url, url))
.query(&params) .query(&params)
.header("Authorization", &config::CONFIG.book_server_api_key) .header("Authorization", &config::CONFIG.book_server_api_key)
.send() .send()
.await; .await?
.error_for_status()?;
let response = match response { Ok(response.json::<T>().await?)
Ok(v) => v,
Err(err) => return Err(Box::new(err)),
};
let response = match response.error_for_status() {
Ok(v) => v,
Err(err) => return Err(Box::new(err)),
};
match response.json::<T>().await {
Ok(v) => Ok(v),
Err(err) => Err(Box::new(err)),
}
} }
pub async fn get_random_book_by_genre( pub async fn get_random_book_by_genre(

View File

@@ -24,8 +24,7 @@ pub struct UserSettings {
pub async fn get_user_settings( pub async fn get_user_settings(
user_id: UserId, user_id: UserId,
) -> Result<UserSettings, Box<dyn std::error::Error + Send + Sync>> { ) -> Result<UserSettings, Box<dyn std::error::Error + Send + Sync>> {
let client = reqwest::Client::new(); let response = reqwest::Client::new()
let response = client
.get(format!( .get(format!(
"{}/users/{}", "{}/users/{}",
&config::CONFIG.user_settings_url, &config::CONFIG.user_settings_url,
@@ -33,22 +32,10 @@ pub async fn get_user_settings(
)) ))
.header("Authorization", &config::CONFIG.user_settings_api_key) .header("Authorization", &config::CONFIG.user_settings_api_key)
.send() .send()
.await; .await?
.error_for_status()?;
let response = match response { Ok(response.json::<UserSettings>().await?)
Ok(v) => v,
Err(err) => return Err(Box::new(err)),
};
let response = match response.error_for_status() {
Ok(v) => v,
Err(err) => return Err(Box::new(err)),
};
match response.json::<UserSettings>().await {
Ok(v) => Ok(v),
Err(err) => Err(Box::new(err)),
}
} }
pub async fn get_user_or_default_lang_codes(user_id: UserId) -> Vec<String> { pub async fn get_user_or_default_lang_codes(user_id: UserId) -> Vec<String> {
@@ -77,71 +64,37 @@ pub async fn create_or_update_user_settings(
"allowed_langs": allowed_langs "allowed_langs": allowed_langs
}); });
let client = reqwest::Client::new(); let response = reqwest::Client::new()
let response = client
.post(format!("{}/users/", &config::CONFIG.user_settings_url)) .post(format!("{}/users/", &config::CONFIG.user_settings_url))
.body(body.to_string()) .body(body.to_string())
.header("Authorization", &config::CONFIG.user_settings_api_key) .header("Authorization", &config::CONFIG.user_settings_api_key)
.send() .send()
.await; .await?
.error_for_status()?;
let response = match response { Ok(response.json::<UserSettings>().await?)
Ok(v) => v,
Err(err) => return Err(Box::new(err)),
};
let response = match response.error_for_status() {
Ok(v) => v,
Err(err) => return Err(Box::new(err)),
};
match response.json::<UserSettings>().await {
Ok(v) => Ok(v),
Err(err) => Err(Box::new(err)),
}
} }
pub async fn get_langs() -> Result<Vec<Lang>, Box<dyn std::error::Error + Send + Sync>> { pub async fn get_langs() -> Result<Vec<Lang>, Box<dyn std::error::Error + Send + Sync>> {
let client = reqwest::Client::new(); let response = reqwest::Client::new()
let response = client
.get(format!("{}/languages/", &config::CONFIG.user_settings_url)) .get(format!("{}/languages/", &config::CONFIG.user_settings_url))
.header("Authorization", &config::CONFIG.user_settings_api_key) .header("Authorization", &config::CONFIG.user_settings_api_key)
.send() .send()
.await; .await?
.error_for_status()?;
let response = match response { Ok(response.json::<Vec<Lang>>().await?)
Ok(v) => v,
Err(err) => return Err(Box::new(err)),
};
let response = match response.error_for_status() {
Ok(v) => v,
Err(err) => return Err(Box::new(err)),
};
match response.json::<Vec<Lang>>().await {
Ok(v) => Ok(v),
Err(err) => Err(Box::new(err)),
}
} }
pub async fn update_user_activity( pub async fn update_user_activity(
user_id: UserId, user_id: UserId,
) -> Result<(), Box<dyn std::error::Error + Send + Sync>> { ) -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
let client = reqwest::Client::new(); reqwest::Client::new()
let response = client
.post(format!("{}/users/{user_id}/update_activity", &config::CONFIG.user_settings_url)) .post(format!("{}/users/{user_id}/update_activity", &config::CONFIG.user_settings_url))
.header("Authorization", &config::CONFIG.user_settings_api_key) .header("Authorization", &config::CONFIG.user_settings_api_key)
.send() .send()
.await; .await?
.error_for_status()?;
let response = match response { Ok(())
Ok(v) => v,
Err(err) => return Err(Box::new(err)),
};
match response.error_for_status() {
Ok(_) => Ok(()),
Err(err) => Err(Box::new(err)),
}
} }

View File

@@ -23,12 +23,10 @@ pub async fn message_handler(
register::RegisterStatus::RegisterFail => strings::ALREADY_REGISTERED.to_string(), register::RegisterStatus::RegisterFail => strings::ALREADY_REGISTERED.to_string(),
}; };
#[allow(unused_must_use)]
{ bot.send_message(message.chat.id, message_text)
bot.send_message(message.chat.id, message_text) .reply_to_message_id(message.id)
.reply_to_message_id(message.id) .await?;
.await;
}
Ok(()) Ok(())
} }

View File

@@ -1,3 +1,5 @@
use std::error::Error;
use std::collections::HashMap; use std::collections::HashMap;
use teloxide::prelude::*; use teloxide::prelude::*;
@@ -20,7 +22,7 @@ async fn get_bot_username(token: &str) -> Option<String> {
} }
} }
async fn make_register_request(user_id: UserId, username: &str, token: &str) -> Result<(), ()> { async fn make_register_request(user_id: UserId, username: &str, token: &str) -> Result<(), Box<dyn Error + Send + Sync>> {
let user_id = &user_id.to_string(); let user_id = &user_id.to_string();
let data = HashMap::from([ let data = HashMap::from([
@@ -31,24 +33,12 @@ async fn make_register_request(user_id: UserId, username: &str, token: &str) ->
("cache", "no_cache") ("cache", "no_cache")
]); ]);
let client = reqwest::Client::new(); reqwest::Client::new()
let response = client
.post(config::CONFIG.manager_url.clone()) .post(config::CONFIG.manager_url.clone())
.header("Authorization", config::CONFIG.manager_api_key.clone()) .header("Authorization", config::CONFIG.manager_api_key.clone())
.json(&data) .json(&data)
.send() .send()
.await; .await?;
let status_code = match response {
Ok(v) => v.status(),
Err(_) => return Err(()),
};
log::debug!("make_register_request status_code={}", status_code);
if status_code != 200 {
return Err(());
}
Ok(()) Ok(())
} }