Полнофункциональный Telegram бот для поиска, скачивания и распознавания музыки с YouTube Music
Общая информация о боте и его возможностях
| Параметр | Значение |
|---|---|
| Название | UspMusicFinder Bot |
| Bot Username | @UspMusicFinder_bot |
| Bot ID | 8409655187 |
| Канал | @TopMusicToday |
| Сервер | 31.44.7.144 |
| Язык | Python 3.11+ |
| Framework | aiogram 3.15 |
Free пользователи: 10 скачиваний/день. Premium: безлимит + распознавание музыки + x2 реферальные бонусы.
Все функции бота с подробным описанием
Пользователь отправляет название песни или исполнителя, бот ищет треки через YouTube Music API и возвращает до 20 результатов с пагинацией.
🎵 Результаты поиска: "Queen"
Найдено: 20 треков
🥇 Queen
🎤 Bohemian Rhapsody
⏱️ 5:55
🥈 Queen
🎤 We Will Rock You
⏱️ 2:02
Процесс скачивания трека:
Проверка дневного лимита и премиум статуса пользователя
Скачивание аудио с YouTube в лучшем качестве
Конвертация в MP3 формат с битрейтом 192 kbps
Заполнение тегов: исполнитель, название, обложка
Отправка готового MP3 файла пользователю
Макс. размер: 50 MB | Макс. длительность: 60 мин | Free лимит: 10 треков/день
Команда /top показывает самые популярные треки за выбранный период.
Топ треков за текущий день
Топ за последние 7 дней
Топ за последние 30 дней
Общий топ за все время
Команда /recommendations генерирует персональные рекомендации на основе истории пользователя.
Команда /recognize позволяет определить песню по аудиозаписи.
Запись через микрофон Telegram
MP3, WAV и другие форматы
Круглые видео (кружки)
Humming recognition
Free: 5 распознаваний в день | Premium: безлимит
Команда /referral для приглашения друзей и получения бонусов.
| Действие | Награда |
|---|---|
| Друг присоединился по ссылке | +5 скачиваний |
| Друг скачал 5 треков | +10 скачиваний |
Формат ссылки: https://t.me/UspMusicFinder_bot?start=ref_USER_ID
Команда /premium для покупки премиум подписки.
| План | Цена | Срок |
|---|---|---|
| Месяц | 50 ⭐ | 30 дней |
| Квартал | 120 ⭐ | 90 дней |
| Год | 360 ⭐ | 365 дней |
Команда /lang для смены языка интерфейса.
Язык по умолчанию
Full translation
To'liq tarjima
Технологии и инструменты проекта
| Технология | Версия | Назначение |
|---|---|---|
| Python | 3.11+ | Язык программирования |
| aiogram | 3.15 | Telegram Bot Framework |
| aiosqlite | 0.19+ | Асинхронный SQLite |
| yt-dlp | Latest | Загрузка медиа |
| mutagen | 1.47+ | Метаданные аудио |
| pydantic | 2.0+ | Валидация данных |
Поиск треков через ytmusicapi
Распознавание музыки по аудио
Криптовалютные платежи
Мониторинг ошибок
Контейнеризация приложения
Оркестрация сервисов
CI/CD pipeline
Unit тестирование
aiogram>=3.15.0 aiosqlite>=0.19.0 aiohttp>=3.9.0 yt-dlp>=2024.1.0 mutagen>=1.47.0 pydantic>=2.0.0 python-dotenv>=1.0.0 aiocryptopay>=0.4.0 sentry-sdk>=1.39.0 ytmusicapi>=1.3.0
SQLite схема и структура таблиц
СУБД: SQLite | Библиотека: aiosqlite | Pattern: Repository
CREATE TABLE users ( id INTEGER PRIMARY KEY, -- Telegram user ID username TEXT, -- @username first_name TEXT, -- Имя language TEXT DEFAULT 'ru', -- Язык интерфейса is_premium INTEGER DEFAULT 0, -- Премиум статус premium_until TIMESTAMP, -- Дата окончания referral_code TEXT UNIQUE, -- Реферальный код referred_by INTEGER, -- Кто пригласил bonus_downloads INTEGER DEFAULT 0,-- Бонусы searches INTEGER DEFAULT 0, -- Кол-во поисков downloads INTEGER DEFAULT 0, -- Кол-во скачиваний created_at TIMESTAMP, last_seen TIMESTAMP );
CREATE TABLE downloads ( id INTEGER PRIMARY KEY AUTOINCREMENT, user_id INTEGER NOT NULL, track_id TEXT NOT NULL, title TEXT NOT NULL, artist TEXT, duration INTEGER, downloaded_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (user_id) REFERENCES users(id) );
CREATE TABLE favorites ( id INTEGER PRIMARY KEY AUTOINCREMENT, user_id INTEGER NOT NULL, track_id TEXT NOT NULL, title TEXT NOT NULL, artist TEXT, duration INTEGER, added_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, UNIQUE(user_id, track_id) );
CREATE TABLE track_stats ( track_id TEXT PRIMARY KEY, title TEXT NOT NULL, artist TEXT, duration INTEGER, download_count INTEGER DEFAULT 0, last_downloaded TIMESTAMP );
CREATE TABLE payments ( id INTEGER PRIMARY KEY AUTOINCREMENT, user_id INTEGER NOT NULL, amount REAL NOT NULL, currency TEXT DEFAULT 'XTR', payment_type TEXT, -- premium/donate payment_system TEXT, -- stars/cryptobot status TEXT DEFAULT 'pending', payload TEXT, created_at TIMESTAMP, completed_at TIMESTAMP );
Мультиязычная поддержка бота
# Использование в коде from src.locales import _ # Получить перевод для пользователя message = _("welcome", user_id=12345) # С параметрами message = _("downloading", user_id=12345, title="Song", artist="Artist")
| Код | Язык | Файл |
|---|---|---|
ru |
🇷🇺 Русский | locales/ru.py |
en |
🇬🇧 English | locales/en.py |
uz |
🇺🇿 O'zbek | locales/uz.py |
Интегрированные способы оплаты
Встроенная валюта Telegram для платежей внутри ботов. Мгновенная активация премиума.
Криптовалютные платежи через @CryptoBot. Поддержка USDT, TON, BTC, ETH.
Банковские карты через ЮKassa (Сбербанк, Тинькофф, Альфа и др.). Для пользователей из РФ.
Оплата через кошелёк ЮMoney (бывший Яндекс.Деньги). Быстро и удобно.
Интеграция с другими Telegram ботами
/api <query> <chat_id>
# Пример:
/api Bohemian Rhapsody -1001234567890
Ищет трек и отправляет его в указанный чат.
/api_search <query>
# Возвращает список треков с video ID
/api_download <video_id> <chat_id>
Команды для управления ботом
| Команда | Описание |
|---|---|
/admin |
Главное меню админ-панели |
/stats |
Детальная статистика бота |
/users |
Топ пользователей по скачиваниям |
/setpremium <user_id> <days> |
Выдать премиум пользователю |
/mailing <text> |
Массовая рассылка всем пользователям |
/post_top |
Опубликовать топ треков в канал |
Docker, CI/CD и развертывание
# docker-compose.yml version: '3.8' services: bot: build: . container_name: uspmusic-bot restart: unless-stopped volumes: - ./data:/app/data - ./logs:/app/logs dashboard: build: dockerfile: Dockerfile.dashboard ports: - "8080:8080" redis: image: redis:alpine backup: image: alpine # Ежедневный бэкап БД
# GitHub Actions jobs: lint: # flake8, black test: # pytest build: # Docker build deploy: # SSH deploy to server
# Создать бэкап ./scripts/backup.sh # Восстановить из бэкапа ./scripts/restore.sh backup_20241221_120000.db.gz
Меры защиты и безопасности
Все секреты хранятся в переменных окружения
5 запросов в минуту на пользователя
Проверка всех входных данных
Max 50MB, 60 минут
Удаление временных файлов
Запись всех действий + Sentry