mirror of
https://github.com/flibusta-apps/book_bot.git
synced 2025-12-06 07:25:36 +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;
|
||||
|
||||
@@ -37,11 +37,11 @@ impl FromStr for AnnotationCallbackData {
|
||||
}
|
||||
}
|
||||
|
||||
impl ToString for AnnotationCallbackData {
|
||||
fn to_string(&self) -> String {
|
||||
impl Display for AnnotationCallbackData {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
match self {
|
||||
AnnotationCallbackData::Book { id, page } => format!("b_an_{id}_{page}"),
|
||||
AnnotationCallbackData::Author { id, page } => format!("a_an_{id}_{page}"),
|
||||
AnnotationCallbackData::Book { id, page } => write!(f, "b_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;
|
||||
|
||||
@@ -39,12 +39,12 @@ impl FromStr for BookCallbackData {
|
||||
}
|
||||
}
|
||||
|
||||
impl ToString for BookCallbackData {
|
||||
fn to_string(&self) -> String {
|
||||
impl Display for BookCallbackData {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
match self {
|
||||
BookCallbackData::Author { id, page } => format!("ba_{id}_{page}"),
|
||||
BookCallbackData::Translator { id, page } => format!("bt_{id}_{page}"),
|
||||
BookCallbackData::Sequence { id, page } => format!("bs_{id}_{page}"),
|
||||
BookCallbackData::Author { id, page } => write!(f, "ba_{}_{}", id, page),
|
||||
BookCallbackData::Translator { id, page } => write!(f, "bt_{}_{}", 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 strum_macros::EnumIter;
|
||||
@@ -12,11 +12,11 @@ pub enum DownloadQueryData {
|
||||
DownloadData { book_id: u32, file_type: String },
|
||||
}
|
||||
|
||||
impl ToString for DownloadQueryData {
|
||||
fn to_string(&self) -> String {
|
||||
impl Display for DownloadQueryData {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
match self {
|
||||
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 },
|
||||
}
|
||||
|
||||
impl ToString for DownloadArchiveQueryData {
|
||||
fn to_string(&self) -> String {
|
||||
impl Display for DownloadArchiveQueryData {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
match self {
|
||||
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 } => {
|
||||
format!("da_t_{id}_{file_type}")
|
||||
write!(f, "da_t_{}_{}", id, file_type)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -90,9 +90,9 @@ pub struct CheckArchiveStatus {
|
||||
pub task_id: String,
|
||||
}
|
||||
|
||||
impl ToString for CheckArchiveStatus {
|
||||
fn to_string(&self) -> String {
|
||||
format!("check_da_{}", self.task_id)
|
||||
impl Display for CheckArchiveStatus {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
write!(f, "check_da_{}", self.task_id)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
use std::fmt::Display;
|
||||
|
||||
use regex::Regex;
|
||||
use strum_macros::EnumIter;
|
||||
|
||||
@@ -10,10 +12,9 @@ pub struct StartDownloadCommand {
|
||||
pub id: u32,
|
||||
}
|
||||
|
||||
impl ToString for StartDownloadCommand {
|
||||
fn to_string(&self) -> String {
|
||||
let StartDownloadCommand { id } = self;
|
||||
format!("/d_{id}")
|
||||
impl Display for StartDownloadCommand {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
write!(f, "/d_{}", self.id)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -43,12 +44,12 @@ pub enum DownloadArchiveCommand {
|
||||
Translator { id: u32 },
|
||||
}
|
||||
|
||||
impl ToString for DownloadArchiveCommand {
|
||||
fn to_string(&self) -> String {
|
||||
impl Display for DownloadArchiveCommand {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
match self {
|
||||
DownloadArchiveCommand::Sequence { id } => format!("/da_s_{id}"),
|
||||
DownloadArchiveCommand::Author { id } => format!("/da_a_{id}"),
|
||||
DownloadArchiveCommand::Translator { id } => format!("/da_t_{id}"),
|
||||
DownloadArchiveCommand::Sequence { id } => write!(f, "/da_s_{}", id),
|
||||
DownloadArchiveCommand::Author { id } => write!(f, "/da_a_{}", 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 strum_macros::EnumIter;
|
||||
@@ -13,13 +13,13 @@ pub enum SearchCallbackData {
|
||||
Translators { page: u32 },
|
||||
}
|
||||
|
||||
impl ToString for SearchCallbackData {
|
||||
fn to_string(&self) -> String {
|
||||
impl Display for SearchCallbackData {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
match self {
|
||||
SearchCallbackData::Book { page } => format!("sb_{page}"),
|
||||
SearchCallbackData::Authors { page } => format!("sa_{page}"),
|
||||
SearchCallbackData::Sequences { page } => format!("ss_{page}"),
|
||||
SearchCallbackData::Translators { page } => format!("st_{page}"),
|
||||
SearchCallbackData::Book { page } => write!(f, "sb_{}", page),
|
||||
SearchCallbackData::Authors { page } => write!(f, "sa_{}", page),
|
||||
SearchCallbackData::Sequences { page } => write!(f, "ss_{}", 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 smartstring::alias::String as SmartString;
|
||||
@@ -37,12 +37,12 @@ impl FromStr for SettingsCallbackData {
|
||||
}
|
||||
}
|
||||
|
||||
impl ToString for SettingsCallbackData {
|
||||
fn to_string(&self) -> String {
|
||||
impl Display for SettingsCallbackData {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
match self {
|
||||
SettingsCallbackData::Settings => "lang_settings".to_string(),
|
||||
SettingsCallbackData::On { code } => format!("lang_on_{code}"),
|
||||
SettingsCallbackData::Off { code } => format!("lang_off_{code}"),
|
||||
SettingsCallbackData::Settings => write!(f, "lang_settings"),
|
||||
SettingsCallbackData::On { code } => write!(f, "lang_on_{}", 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 dateparser::parse;
|
||||
@@ -36,15 +36,15 @@ impl FromStr for UpdateLogCallbackData {
|
||||
}
|
||||
}
|
||||
|
||||
impl ToString for UpdateLogCallbackData {
|
||||
fn to_string(&self) -> String {
|
||||
impl Display for UpdateLogCallbackData {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
let date_format = "%Y-%m-%d";
|
||||
|
||||
let from = self.from.format(date_format);
|
||||
let to = self.to.format(date_format);
|
||||
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_json::json;
|
||||
use smallvec::{smallvec, SmallVec};
|
||||
@@ -26,7 +27,7 @@ pub struct UserSettings {
|
||||
|
||||
pub async fn get_user_settings(
|
||||
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()
|
||||
.get(format!(
|
||||
"{}/users/{}",
|
||||
@@ -38,7 +39,11 @@ pub async fn get_user_settings(
|
||||
.await?
|
||||
.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]> {
|
||||
@@ -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 {
|
||||
Ok(v) => {
|
||||
let langs: SmallVec<[SmartString; 3]> =
|
||||
v.allowed_langs.into_iter().map(|lang| lang.code).collect();
|
||||
let langs: SmallVec<[SmartString; 3]> = match v {
|
||||
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;
|
||||
langs
|
||||
}
|
||||
|
||||
@@ -65,17 +65,11 @@ pub async fn set_webhook(bot_data: &BotData) -> bool {
|
||||
match bot.set_webhook(url.clone()).await {
|
||||
Ok(_) => true,
|
||||
Err(err) => {
|
||||
match err {
|
||||
teloxide::RequestError::Api(ref err) => {
|
||||
match err {
|
||||
teloxide::ApiError::NotFound => {
|
||||
if let teloxide::RequestError::Api(ref err) = err {
|
||||
if err == &teloxide::ApiError::NotFound {
|
||||
let _ = delete_bot(bot_data.id).await;
|
||||
},
|
||||
_ => (),
|
||||
}
|
||||
},
|
||||
_ => ()
|
||||
};
|
||||
}
|
||||
|
||||
log::error!("Webhook set error: {}", err);
|
||||
false
|
||||
|
||||
Reference in New Issue
Block a user