Add bot registration limit

This commit is contained in:
2024-01-07 22:18:58 +01:00
parent fc8a7d4d89
commit e3038ca6c5
3 changed files with 33 additions and 12 deletions

View File

@@ -22,8 +22,9 @@ pub async fn message_handler(
let message_text = match result { let message_text = match result {
register::RegisterStatus::Success { ref username } => format_registered_message(username), register::RegisterStatus::Success { ref username } => format_registered_message(username),
register::RegisterStatus::WrongToken => strings::ERROR_MESSAGE.to_string(),
register::RegisterStatus::RegisterFail => strings::ALREADY_REGISTERED.to_string(), register::RegisterStatus::RegisterFail => strings::ALREADY_REGISTERED.to_string(),
register::RegisterStatus::LimitExtended => strings::LIMIT_EXTENDED_MESSAGE.to_string(),
register::RegisterStatus::WrongToken => strings::ERROR_MESSAGE.to_string(),
}; };
bot.send_message(message.chat.id, message_text) bot.send_message(message.chat.id, message_text)

View File

@@ -11,6 +11,14 @@ pub enum RegisterStatus {
Success { username: String }, Success { username: String },
WrongToken, WrongToken,
RegisterFail, RegisterFail,
LimitExtended,
}
#[derive(Debug)]
pub enum RegisterRequestStatus {
Success,
LimitExtended,
UnknownError { status_code: u16 },
} }
async fn get_bot_username(token: &str) -> Option<String> { async fn get_bot_username(token: &str) -> Option<String> {
@@ -27,7 +35,7 @@ async fn make_register_request(
user_id: UserId, user_id: UserId,
username: &str, username: &str,
token: &str, token: &str,
) -> Result<(), Box<dyn Error + Send + Sync>> { ) -> Result<RegisterRequestStatus, Box<dyn Error + Send + Sync>> {
let body = json!({ let body = json!({
"token": token, "token": token,
"user": user_id, "user": user_id,
@@ -36,16 +44,19 @@ async fn make_register_request(
"username": username, "username": username,
}); });
reqwest::Client::new() let result = reqwest::Client::new()
.post(config::CONFIG.manager_url.clone()) .post(config::CONFIG.manager_url.clone())
.body(body.to_string()) .body(body.to_string())
.header("Authorization", config::CONFIG.manager_api_key.clone()) .header("Authorization", config::CONFIG.manager_api_key.clone())
.header("Content-Type", "application/json") .header("Content-Type", "application/json")
.send() .send()
.await? .await?;
.error_for_status()?;
Ok(()) Ok(match result.status().as_u16() {
200 => RegisterRequestStatus::Success,
402 => RegisterRequestStatus::LimitExtended,
status_code => RegisterRequestStatus::UnknownError { status_code },
})
} }
pub async fn register(user_id: UserId, message_text: &str) -> RegisterStatus { pub async fn register(user_id: UserId, message_text: &str) -> RegisterStatus {
@@ -58,13 +69,20 @@ pub async fn register(user_id: UserId, message_text: &str) -> RegisterStatus {
let register_request_status = make_register_request(user_id, &bot_username, token).await; let register_request_status = make_register_request(user_id, &bot_username, token).await;
if let Err(err) = register_request_status { let result = match register_request_status {
log::error!("Bot reg error: {:?}", err); Ok(v) => v,
Err(err) => {
log::error!("Bot reg error: {:?}", err);
return RegisterStatus::RegisterFail; return RegisterStatus::RegisterFail;
} }
};
RegisterStatus::Success { match result {
username: bot_username, RegisterRequestStatus::Success => RegisterStatus::Success {
username: bot_username,
},
RegisterRequestStatus::LimitExtended => RegisterStatus::LimitExtended,
RegisterRequestStatus::UnknownError { .. } => RegisterStatus::RegisterFail,
} }
} }

View File

@@ -8,3 +8,5 @@ pub fn format_registered_message(username: &str) -> String {
pub const ALREADY_REGISTERED: &str = "Ошибка! Возможно бот уже зарегистрирован!"; pub const ALREADY_REGISTERED: &str = "Ошибка! Возможно бот уже зарегистрирован!";
pub const ERROR_MESSAGE: &str = "Ошибка! Что-то не так с ботом!"; pub const ERROR_MESSAGE: &str = "Ошибка! Что-то не так с ботом!";
pub const LIMIT_EXTENDED_MESSAGE: &str = "Вы достигли максимального количества ботов!";