Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,4 @@ src/entity.example
/target
.env
.env.deploy
.claude
3 changes: 3 additions & 0 deletions Justfile
Original file line number Diff line number Diff line change
Expand Up @@ -59,3 +59,6 @@ run:

watch:
cargo watch -s 'just run'

lazysql:
lazysql 'postgresql://postgres:example@localhost:5432/postgres?sslmode=disable'
4 changes: 4 additions & 0 deletions locales/errors.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,10 @@ error.general:

<a href="https://github.com/vtvz/rustify/issues/new">Сообщить о проблеме на GitHub</a>

error.inaccessible-message:
en: |-
This message is too old or no longer accessible

error.unhandled-request:
en: |-
<tg-emoji emoji-id="6043973168291384891">😔</tg-emoji> Your request was not handled
Expand Down
17 changes: 3 additions & 14 deletions src/telegram/actions/admin_users/details.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ use crate::telegram::inline_buttons_admin::{
};
use crate::user::UserState;
use crate::utils::DurationPrettyFormat as _;
use crate::utils::teloxide::CallbackQueryExt as _;

#[tracing::instrument(skip_all, fields(user_id = %state.user_id(), target_user_id = %user_id))]
pub async fn handle_command(
Expand Down Expand Up @@ -53,21 +52,14 @@ pub async fn handle_command(
pub async fn handle_inline(
app: &'static App,
state: &UserState,
q: CallbackQuery,
_q: CallbackQuery,
m: Message,
user_id: String,
page: u64,
sort_by: AdminUsersSortBy,
sort_order: AdminUsersSortOrder,
status_filter: Option<UserStatus>,
) -> anyhow::Result<()> {
let Some(message) = q.get_message() else {
app.bot()
.answer_callback_query(q.id.clone())
.text("Inaccessible Message")
.await?;
return Ok(());
};

let text = format_user_details(app, &user_id).await?;

let keyboard = InlineKeyboardMarkup::new(vec![vec![
Expand All @@ -80,10 +72,7 @@ pub async fn handle_inline(
.into_inline_keyboard_button(state.locale()),
]]);

app.bot()
.edit_text(&message, text)
.reply_markup(keyboard)
.await?;
app.bot().edit_text(&m, text).reply_markup(keyboard).await?;

Ok(())
}
Expand Down
19 changes: 4 additions & 15 deletions src/telegram/actions/admin_users/list.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ use crate::telegram::inline_buttons_admin::{
AdminUsersSortOrder,
};
use crate::user::UserState;
use crate::utils::teloxide::CallbackQueryExt as _;

const USERS_PER_PAGE: u64 = 10;

Expand Down Expand Up @@ -45,31 +44,21 @@ pub async fn handle_command(
}

#[tracing::instrument(skip_all, fields(user_id = %state.user_id(), %page, ?sort_by, ?sort_order, ?status_filter))]
#[allow(clippy::too_many_arguments)]
pub async fn handle_inline(
app: &'static App,
state: &UserState,
q: CallbackQuery,
_q: CallbackQuery,
m: Message,
page: u64,
sort_by: AdminUsersSortBy,
sort_order: AdminUsersSortOrder,
status_filter: Option<UserStatus>,
) -> anyhow::Result<()> {
let Some(message) = q.get_message() else {
app.bot()
.answer_callback_query(q.id.clone())
.text("Inaccessible Message")
.await?;

return Ok(());
};

let (text, keyboard) =
build_users_page(app, state, page, sort_by, sort_order, status_filter).await?;

app.bot()
.edit_text(&message, text)
.reply_markup(keyboard)
.await?;
app.bot().edit_text(&m, text).reply_markup(keyboard).await?;

Ok(())
}
Expand Down
20 changes: 4 additions & 16 deletions src/telegram/actions/ai_slop_detection.rs
Original file line number Diff line number Diff line change
@@ -1,16 +1,13 @@
use sea_orm::Iterable as _;
use teloxide::payloads::{
AnswerCallbackQuerySetters as _,
EditMessageReplyMarkupSetters as _,
SendMessageSetters as _,
};
use teloxide::payloads::{EditMessageReplyMarkupSetters as _, SendMessageSetters as _};
use teloxide::prelude::Requester as _;
use teloxide::sugar::bot::BotMessagesExt as _;
use teloxide::types::{
CallbackQuery,
ChatId,
InlineKeyboardButton,
InlineKeyboardMarkup,
Message,
ReplyMarkup,
};

Expand All @@ -20,31 +17,22 @@ use crate::services::UserService;
use crate::telegram::handlers::HandleStatus;
use crate::telegram::inline_buttons::InlineButtons;
use crate::user::UserState;
use crate::utils::teloxide::CallbackQueryExt as _;

#[tracing::instrument(skip_all, fields(user_id = %state.user_id()))]
pub async fn handle_inline(
app: &'static App,
state: &UserState,
q: CallbackQuery,
m: Message,
status: UserAISlopDetection,
) -> anyhow::Result<()> {
let Some(message) = q.get_message() else {
app.bot()
.answer_callback_query(q.id.clone())
.text("Inaccessible Message")
.await?;

return Ok(());
};

app.bot().answer_callback_query(q.id).await?;

if status != state.user().cfg_ai_slop_detection {
UserService::set_cfg_ai_slop_detection(app.db(), state.user_id(), status).await?;

app.bot()
.edit_reply_markup(&message)
.edit_reply_markup(&m)
.reply_markup(InlineKeyboardMarkup::new(get_keyboard(
status,
state.locale(),
Expand Down
22 changes: 5 additions & 17 deletions src/telegram/actions/analyze.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ use teloxide::payloads::{
};
use teloxide::prelude::Requester as _;
use teloxide::sugar::bot::BotMessagesExt as _;
use teloxide::types::{CallbackQuery, InlineKeyboardMarkup};
use teloxide::types::{CallbackQuery, InlineKeyboardMarkup, Message};

use crate::app::{AIConfig, App};
use crate::lyrics::SearchResult as _;
Expand All @@ -31,25 +31,16 @@ use crate::telegram::MESSAGE_MAX_LEN;
use crate::telegram::inline_buttons::InlineButtons;
use crate::telegram::utils::link_preview_small_top;
use crate::user::UserState;
use crate::utils::teloxide::CallbackQueryExt as _;
use crate::utils::{DurationPrettyFormat as _, StringUtils as _};

#[tracing::instrument(skip_all, fields(user_id = %state.user_id(), %track_id))]
pub async fn handle_inline(
app: &'static App,
state: &UserState,
q: CallbackQuery,
m: Message,
track_id: &str,
) -> anyhow::Result<()> {
let Some(message) = q.get_message() else {
app.bot()
.answer_callback_query(q.id.clone())
.text("Inaccessible Message")
.await?;

return Ok(());
};

let Some(config) = app.ai() else {
app.bot()
.answer_callback_query(q.id)
Expand Down Expand Up @@ -91,18 +82,15 @@ pub async fn handle_inline(
.await?
else {
app.bot()
.edit_text(
&message,
t!("analysis.lyrics-not-found", locale = state.locale()),
)
.edit_text(&m, t!("analysis.lyrics-not-found", locale = state.locale()))
.await?;

return Ok(());
};

app.bot()
.edit_text(
&message,
&m,
t!(
"analysis.waiting",
locale = state.locale(),
Expand All @@ -116,7 +104,7 @@ pub async fn handle_inline(
let res = perform(app, state, config, &track, &hit.lyrics()).await;

// I don't care about error
app.bot().delete(&message).await.ok();
app.bot().delete(&m).await.ok();

match res {
Ok(()) => {
Expand Down
15 changes: 3 additions & 12 deletions src/telegram/actions/dislike.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ use crate::telegram::handlers::HandleStatus;
use crate::telegram::utils::link_preview_small_top;
use crate::user::UserState;
use crate::utils::DurationPrettyFormat as _;
use crate::utils::teloxide::CallbackQueryExt as _;

#[tracing::instrument(skip_all, fields(user_id = %state.user_id()))]
pub async fn handle(
Expand Down Expand Up @@ -80,7 +79,8 @@ pub async fn handle(
pub async fn handle_inline(
app: &'static App,
state: &UserState,
q: CallbackQuery,
_q: CallbackQuery,
m: Message,
track_id: &str,
) -> anyhow::Result<()> {
let track = state
Expand All @@ -95,17 +95,8 @@ pub async fn handle_inline(
let keyboard =
InlineButtons::from_track_status(TrackStatus::Disliked, track.id(), state.locale());

let Some(message) = q.get_message() else {
app.bot()
.answer_callback_query(q.id.clone())
.text("Inaccessible Message")
.await?;

return Ok(());
};

app.bot()
.edit_text(&message, compose_message_text(&track, state.locale()))
.edit_text(&m, compose_message_text(&track, state.locale()))
.link_preview_options(link_preview_small_top(track.url()))
.reply_markup(InlineKeyboardMarkup::new(keyboard))
.await?;
Expand Down
15 changes: 3 additions & 12 deletions src/telegram/actions/ignore.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,24 +9,15 @@ use crate::entity::prelude::*;
use crate::services::TrackStatusService;
use crate::telegram::utils::link_preview_small_top;
use crate::user::UserState;
use crate::utils::teloxide::CallbackQueryExt as _;

#[tracing::instrument(skip_all, fields(user_id = %state.user_id(), %track_id))]
pub async fn handle_inline(
app: &'static App,
state: &UserState,
q: CallbackQuery,
_q: CallbackQuery,
m: Message,
track_id: &str,
) -> anyhow::Result<()> {
let Some(message) = q.get_message() else {
app.bot()
.answer_callback_query(q.id.clone())
.text("Inaccessible Message")
.await?;

return Ok(());
};

let track = state
.spotify()
.await
Expand All @@ -41,7 +32,7 @@ pub async fn handle_inline(

app.bot()
.edit_text(
&message,
&m,
t!(
"actions.ignore",
track_link = track.track_tg_link(),
Expand Down
19 changes: 5 additions & 14 deletions src/telegram/actions/magic.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ use teloxide::payloads::{
};
use teloxide::prelude::Requester as _;
use teloxide::sugar::bot::BotMessagesExt as _;
use teloxide::types::{CallbackQuery, ChatId, InlineKeyboardMarkup, ReplyMarkup};
use teloxide::types::{CallbackQuery, ChatId, InlineKeyboardMarkup, Message, ReplyMarkup};

use crate::app::App;
use crate::services::{RateLimitAction, RateLimitOutput, RateLimitService, UserService};
Expand All @@ -20,7 +20,6 @@ use crate::telegram::inline_buttons::InlineButtons;
use crate::telegram::utils::link_preview_small_top;
use crate::user::UserState;
use crate::utils::DurationPrettyFormat as _;
use crate::utils::teloxide::CallbackQueryExt as _;

#[allow(clippy::significant_drop_tightening)]
#[tracing::instrument(skip_all, fields(user_id = %state.user_id()))]
Expand Down Expand Up @@ -66,16 +65,8 @@ pub async fn handle_inline(
app: &'static App,
state: &UserState,
q: CallbackQuery,
m: Message,
) -> anyhow::Result<()> {
let Some(message) = q.get_message() else {
app.bot()
.answer_callback_query(q.id.clone())
.text("Inaccessible Message")
.await?;

return Ok(());
};

if !state.is_spotify_authed().await {
actions::login::send_login_invite(app, state).await?;

Expand Down Expand Up @@ -109,7 +100,7 @@ pub async fn handle_inline(

app.bot()
.edit_text(
&message,
&m,
t!("magic.generating", header = header, locale = state.locale()),
)
.await?;
Expand All @@ -120,7 +111,7 @@ pub async fn handle_inline(
Ok(playlist) => {
app.bot()
.edit_text(
&message,
&m,
t!(
"magic.generated",
header = header,
Expand All @@ -137,7 +128,7 @@ pub async fn handle_inline(
Err(err) => {
app.bot()
.edit_text(
&message,
&m,
t!("magic.failed", header = header, locale = state.locale()),
)
.await?;
Expand Down
Loading
Loading