song name

This commit is contained in:
Andrey Kondratev
2025-08-29 22:12:42 +05:00
parent ae658e15e4
commit 07ed434375
5 changed files with 28 additions and 4 deletions

View File

@@ -0,0 +1,22 @@
# Audio File Naming and Caption Improvements
## Changes Made
### 1. Frontend (public/script.ts)
- Added `performer` field to `/api/convert` request
- Now sends artist name along with title and other metadata
### 2. Backend (src/server.ts)
- Updated `/api/convert` endpoint to accept `performer` parameter
- Modified filename generation to include artist name:
- Format: `{artist} - {title}.mp3` (when artist available)
- Fallback: `{title}.mp3` (when no artist)
- Limited artist name to 20 chars, title to 30 chars for safe filenames
### 3. Bot (src/bot.ts)
- Removed "🎵 ..." text from audio message captions
- Changed `caption: \`🎵 ${title}\`` to `caption: undefined`
- Audio files now show clean filename without emoji prefix
## Result
Audio files now have proper names like "Artist Name - Song Title.mp3" and no caption text, making them cleaner in Telegram chats.

View File

@@ -283,6 +283,7 @@ class QuixoticApp {
videoId, videoId,
title, title,
url, url,
performer,
userId: this.tg?.initDataUnsafe?.user?.id || 'demo' userId: this.tg?.initDataUnsafe?.user?.id || 'demo'
}) })
}); });

View File

@@ -263,7 +263,7 @@ export class QuixoticBot {
await this.bot.sendAudio(chatId, audioUrl, { await this.bot.sendAudio(chatId, audioUrl, {
title: title, title: title,
performer: performer || 'SoundCloud', performer: performer || 'SoundCloud',
caption: `🎵 ${title}`, caption: undefined,
thumbnail: thumbnail, thumbnail: thumbnail,
parse_mode: undefined parse_mode: undefined
}); });
@@ -274,7 +274,7 @@ export class QuixoticBot {
// Fallback: try as document // Fallback: try as document
try { try {
await this.bot.sendDocument(chatId, audioUrl, { await this.bot.sendDocument(chatId, audioUrl, {
caption: `🎵 ${title}`, caption: undefined,
parse_mode: undefined parse_mode: undefined
}); });
console.log(`✅ Document sent: ${title}`); console.log(`✅ Document sent: ${title}`);

View File

@@ -90,7 +90,7 @@ app.post('/api/search', async (req: Request, res: Response) => {
// Convert video to MP3 // Convert video to MP3
app.post('/api/convert', async (req: Request, res: Response) => { app.post('/api/convert', async (req: Request, res: Response) => {
try { try {
const { videoId, title, userId, url }: { videoId?: string; title?: string; userId?: string; url?: string } = req.body; const { videoId, title, userId, url, performer }: { videoId?: string; title?: string; userId?: string; url?: string; performer?: string } = req.body;
console.log('Convert request received:', { videoId, title, userId }); console.log('Convert request received:', { videoId, title, userId });
if (!videoId) { if (!videoId) {
@@ -99,7 +99,8 @@ app.post('/api/convert', async (req: Request, res: Response) => {
// Generate safe filename // Generate safe filename
const safeTitle = (title || '').replace(/[^\w\s-]/g, '').replace(/\s+/g, '_').substring(0, 50); const safeTitle = (title || '').replace(/[^\w\s-]/g, '').replace(/\s+/g, '_').substring(0, 50);
const filename = `${videoId}_${safeTitle}.mp3`; const safePerformer = (performer || '').replace(/[^\w\s-]/g, '').replace(/\s+/g, '_').substring(0, 20);
const filename = safePerformer ? `${safePerformer} - ${safeTitle}.mp3` : `${safeTitle}.mp3`;
const outputPath = path.join(downloadsDir, filename); const outputPath = path.join(downloadsDir, filename);
// Check if file already exists // Check if file already exists