song name
This commit is contained in:
Binary file not shown.
22
.serena/memories/audio_filename_improvements.md
Normal file
22
.serena/memories/audio_filename_improvements.md
Normal 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.
|
||||||
@@ -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'
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -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}`);
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user