mirror of
https://github.com/flibusta-apps/book_bot.git
synced 2025-12-06 15:35:35 +01:00
Proccess 204 status code from users service
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
use std::str::FromStr;
|
use std::{fmt::Display, str::FromStr};
|
||||||
|
|
||||||
use regex::Regex;
|
use regex::Regex;
|
||||||
|
|
||||||
@@ -37,11 +37,11 @@ impl FromStr for AnnotationCallbackData {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ToString for AnnotationCallbackData {
|
impl Display for AnnotationCallbackData {
|
||||||
fn to_string(&self) -> String {
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||||
match self {
|
match self {
|
||||||
AnnotationCallbackData::Book { id, page } => format!("b_an_{id}_{page}"),
|
AnnotationCallbackData::Book { id, page } => write!(f, "b_an_{}_{}", id, page),
|
||||||
AnnotationCallbackData::Author { id, page } => format!("a_an_{id}_{page}"),
|
AnnotationCallbackData::Author { id, page } => write!(f, "a_an_{}_{}", id, page),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
use std::str::FromStr;
|
use std::{fmt::Display, str::FromStr};
|
||||||
|
|
||||||
use regex::Regex;
|
use regex::Regex;
|
||||||
|
|
||||||
@@ -39,12 +39,12 @@ impl FromStr for BookCallbackData {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ToString for BookCallbackData {
|
impl Display for BookCallbackData {
|
||||||
fn to_string(&self) -> String {
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||||
match self {
|
match self {
|
||||||
BookCallbackData::Author { id, page } => format!("ba_{id}_{page}"),
|
BookCallbackData::Author { id, page } => write!(f, "ba_{}_{}", id, page),
|
||||||
BookCallbackData::Translator { id, page } => format!("bt_{id}_{page}"),
|
BookCallbackData::Translator { id, page } => write!(f, "bt_{}_{}", id, page),
|
||||||
BookCallbackData::Sequence { id, page } => format!("bs_{id}_{page}"),
|
BookCallbackData::Sequence { id, page } => write!(f, "bs_{}_{}", id, page),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
use std::str::FromStr;
|
use std::{fmt::Display, str::FromStr};
|
||||||
|
|
||||||
use regex::Regex;
|
use regex::Regex;
|
||||||
use strum_macros::EnumIter;
|
use strum_macros::EnumIter;
|
||||||
@@ -12,11 +12,11 @@ pub enum DownloadQueryData {
|
|||||||
DownloadData { book_id: u32, file_type: String },
|
DownloadData { book_id: u32, file_type: String },
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ToString for DownloadQueryData {
|
impl Display for DownloadQueryData {
|
||||||
fn to_string(&self) -> String {
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||||
match self {
|
match self {
|
||||||
DownloadQueryData::DownloadData { book_id, file_type } => {
|
DownloadQueryData::DownloadData { book_id, file_type } => {
|
||||||
format!("d_{book_id}_{file_type}")
|
write!(f, "d_{}_{}", book_id, file_type)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -47,15 +47,15 @@ pub enum DownloadArchiveQueryData {
|
|||||||
Translator { id: u32, file_type: String },
|
Translator { id: u32, file_type: String },
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ToString for DownloadArchiveQueryData {
|
impl Display for DownloadArchiveQueryData {
|
||||||
fn to_string(&self) -> String {
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||||
match self {
|
match self {
|
||||||
DownloadArchiveQueryData::Sequence { id, file_type } => {
|
DownloadArchiveQueryData::Sequence { id, file_type } => {
|
||||||
format!("da_s_{id}_{file_type}")
|
write!(f, "da_s_{}_{}", id, file_type)
|
||||||
}
|
}
|
||||||
DownloadArchiveQueryData::Author { id, file_type } => format!("da_a_{id}_{file_type}"),
|
DownloadArchiveQueryData::Author { id, file_type } => write!(f, "da_a_{}_{}", id, file_type),
|
||||||
DownloadArchiveQueryData::Translator { id, file_type } => {
|
DownloadArchiveQueryData::Translator { id, file_type } => {
|
||||||
format!("da_t_{id}_{file_type}")
|
write!(f, "da_t_{}_{}", id, file_type)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -90,9 +90,9 @@ pub struct CheckArchiveStatus {
|
|||||||
pub task_id: String,
|
pub task_id: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ToString for CheckArchiveStatus {
|
impl Display for CheckArchiveStatus {
|
||||||
fn to_string(&self) -> String {
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||||
format!("check_da_{}", self.task_id)
|
write!(f, "check_da_{}", self.task_id)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
use std::fmt::Display;
|
||||||
|
|
||||||
use regex::Regex;
|
use regex::Regex;
|
||||||
use strum_macros::EnumIter;
|
use strum_macros::EnumIter;
|
||||||
|
|
||||||
@@ -10,10 +12,9 @@ pub struct StartDownloadCommand {
|
|||||||
pub id: u32,
|
pub id: u32,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ToString for StartDownloadCommand {
|
impl Display for StartDownloadCommand {
|
||||||
fn to_string(&self) -> String {
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||||
let StartDownloadCommand { id } = self;
|
write!(f, "/d_{}", self.id)
|
||||||
format!("/d_{id}")
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -43,12 +44,12 @@ pub enum DownloadArchiveCommand {
|
|||||||
Translator { id: u32 },
|
Translator { id: u32 },
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ToString for DownloadArchiveCommand {
|
impl Display for DownloadArchiveCommand {
|
||||||
fn to_string(&self) -> String {
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||||
match self {
|
match self {
|
||||||
DownloadArchiveCommand::Sequence { id } => format!("/da_s_{id}"),
|
DownloadArchiveCommand::Sequence { id } => write!(f, "/da_s_{}", id),
|
||||||
DownloadArchiveCommand::Author { id } => format!("/da_a_{id}"),
|
DownloadArchiveCommand::Author { id } => write!(f, "/da_a_{}", id),
|
||||||
DownloadArchiveCommand::Translator { id } => format!("/da_t_{id}"),
|
DownloadArchiveCommand::Translator { id } => write!(f, "/da_t_{}", id),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
use std::str::FromStr;
|
use std::{fmt::Display, str::FromStr};
|
||||||
|
|
||||||
use regex::Regex;
|
use regex::Regex;
|
||||||
use strum_macros::EnumIter;
|
use strum_macros::EnumIter;
|
||||||
@@ -13,13 +13,13 @@ pub enum SearchCallbackData {
|
|||||||
Translators { page: u32 },
|
Translators { page: u32 },
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ToString for SearchCallbackData {
|
impl Display for SearchCallbackData {
|
||||||
fn to_string(&self) -> String {
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||||
match self {
|
match self {
|
||||||
SearchCallbackData::Book { page } => format!("sb_{page}"),
|
SearchCallbackData::Book { page } => write!(f, "sb_{}", page),
|
||||||
SearchCallbackData::Authors { page } => format!("sa_{page}"),
|
SearchCallbackData::Authors { page } => write!(f, "sa_{}", page),
|
||||||
SearchCallbackData::Sequences { page } => format!("ss_{page}"),
|
SearchCallbackData::Sequences { page } => write!(f, "ss_{}", page),
|
||||||
SearchCallbackData::Translators { page } => format!("st_{page}"),
|
SearchCallbackData::Translators { page } => write!(f, "st_{}", page),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
use std::str::FromStr;
|
use std::{fmt::Display, str::FromStr};
|
||||||
|
|
||||||
use regex::Regex;
|
use regex::Regex;
|
||||||
use smartstring::alias::String as SmartString;
|
use smartstring::alias::String as SmartString;
|
||||||
@@ -37,12 +37,12 @@ impl FromStr for SettingsCallbackData {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ToString for SettingsCallbackData {
|
impl Display for SettingsCallbackData {
|
||||||
fn to_string(&self) -> String {
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||||
match self {
|
match self {
|
||||||
SettingsCallbackData::Settings => "lang_settings".to_string(),
|
SettingsCallbackData::Settings => write!(f, "lang_settings"),
|
||||||
SettingsCallbackData::On { code } => format!("lang_on_{code}"),
|
SettingsCallbackData::On { code } => write!(f, "lang_on_{}", code),
|
||||||
SettingsCallbackData::Off { code } => format!("lang_off_{code}"),
|
SettingsCallbackData::Off { code } => write!(f, "lang_off_{}", code),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
use std::str::FromStr;
|
use std::{fmt::Display, str::FromStr};
|
||||||
|
|
||||||
use chrono::NaiveDate;
|
use chrono::NaiveDate;
|
||||||
use dateparser::parse;
|
use dateparser::parse;
|
||||||
@@ -36,15 +36,15 @@ impl FromStr for UpdateLogCallbackData {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ToString for UpdateLogCallbackData {
|
impl Display for UpdateLogCallbackData {
|
||||||
fn to_string(&self) -> String {
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||||
let date_format = "%Y-%m-%d";
|
let date_format = "%Y-%m-%d";
|
||||||
|
|
||||||
let from = self.from.format(date_format);
|
let from = self.from.format(date_format);
|
||||||
let to = self.to.format(date_format);
|
let to = self.to.format(date_format);
|
||||||
let page = self.page;
|
let page = self.page;
|
||||||
|
|
||||||
format!("update_log_{from}_{to}_{page}")
|
write!(f, "update_log_{}_{}_{}", from, to, page)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
use reqwest::StatusCode;
|
||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
use serde_json::json;
|
use serde_json::json;
|
||||||
use smallvec::{smallvec, SmallVec};
|
use smallvec::{smallvec, SmallVec};
|
||||||
@@ -26,7 +27,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<Option<UserSettings>, Box<dyn std::error::Error + Send + Sync>> {
|
||||||
let response = reqwest::Client::new()
|
let response = reqwest::Client::new()
|
||||||
.get(format!(
|
.get(format!(
|
||||||
"{}/users/{}",
|
"{}/users/{}",
|
||||||
@@ -38,7 +39,11 @@ pub async fn get_user_settings(
|
|||||||
.await?
|
.await?
|
||||||
.error_for_status()?;
|
.error_for_status()?;
|
||||||
|
|
||||||
Ok(response.json::<UserSettings>().await?)
|
if response.status() == StatusCode::NO_CONTENT {
|
||||||
|
return Ok(None);
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(Some(response.json::<UserSettings>().await?))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn get_user_or_default_lang_codes(user_id: UserId) -> SmallVec<[SmartString; 3]> {
|
pub async fn get_user_or_default_lang_codes(user_id: UserId) -> SmallVec<[SmartString; 3]> {
|
||||||
@@ -50,8 +55,10 @@ pub async fn get_user_or_default_lang_codes(user_id: UserId) -> SmallVec<[SmartS
|
|||||||
|
|
||||||
match get_user_settings(user_id).await {
|
match get_user_settings(user_id).await {
|
||||||
Ok(v) => {
|
Ok(v) => {
|
||||||
let langs: SmallVec<[SmartString; 3]> =
|
let langs: SmallVec<[SmartString; 3]> = match v {
|
||||||
v.allowed_langs.into_iter().map(|lang| lang.code).collect();
|
Some(v) => v.allowed_langs.into_iter().map(|lang| lang.code).collect(),
|
||||||
|
None => return default_lang_codes,
|
||||||
|
};
|
||||||
USER_LANGS_CACHE.insert(user_id, langs.clone()).await;
|
USER_LANGS_CACHE.insert(user_id, langs.clone()).await;
|
||||||
langs
|
langs
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -65,17 +65,11 @@ pub async fn set_webhook(bot_data: &BotData) -> bool {
|
|||||||
match bot.set_webhook(url.clone()).await {
|
match bot.set_webhook(url.clone()).await {
|
||||||
Ok(_) => true,
|
Ok(_) => true,
|
||||||
Err(err) => {
|
Err(err) => {
|
||||||
match err {
|
if let teloxide::RequestError::Api(ref err) = err {
|
||||||
teloxide::RequestError::Api(ref err) => {
|
if err == &teloxide::ApiError::NotFound {
|
||||||
match err {
|
|
||||||
teloxide::ApiError::NotFound => {
|
|
||||||
let _ = delete_bot(bot_data.id).await;
|
let _ = delete_bot(bot_data.id).await;
|
||||||
},
|
|
||||||
_ => (),
|
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
_ => ()
|
|
||||||
};
|
|
||||||
|
|
||||||
log::error!("Webhook set error: {}", err);
|
log::error!("Webhook set error: {}", err);
|
||||||
false
|
false
|
||||||
|
|||||||
Reference in New Issue
Block a user