mp3 to minus 3.9 v. bot webapp
PHP'da yozilgan Telegram bot: foydalanuvchi mp3 yuboradi, bot uni vokal va minus (instrumental)ga ajratib beradi. Ichida:
public/webhook.php — asosiy bot (Telegram webhook)public/webapp/ — foydalanuvchi uchun Mini App (trek tarixi, tarif holati)public/admin/ — admin uchun Mini App (statistika, foydalanuvchilar, xabar yuborish)curl, pdo_mysql PHP kengaytmalari yoqilgan bo'lishi kerakffmpeg/ffprobe o'rnatilgan bo'lsin — bu mp3davomiyligini eng aniq hisoblaydi. Bo'lmasa, bot o'zining ichki (taxminiy) hisoblagichidan foydalanadi.
bash
cp .env.example .env
nano .env # BOT_TOKEN, DB_*, SEPARATION_API_*, ADMIN_TELEGRAM_IDS'ni to'ldiring
mysql -u root -p -e "CREATE DATABASE minus_bot CHARACTER SET utf8mb4"
mysql -u root -p minus_bot < database/schema.sqlServerning hujjat ildizi (document root) public/ papkasiga qarashi kerak (masalan Apache VirtualHost yoki Nginx root shu papkaga ko'rsatilsin), shunda config.php, .env, src/, storage/ kabi maxfiy fayllar tashqi dunyoga ochiq bo'lib qolmaydi.
Agar buni sozlay olmasangiz (masalan umumiy hosting'da butun loyiha bitta papkada joylashgan bo'lsa), qo'shilgan .htaccess fayllar .env, config.php va storage/ papkasini to'g'ridan-to'g'ri ochilishdan himoya qiladi — lekin baribir public/ ni alohida domenga chiqarish tavsiya etiladi.
Fayllarni serverga yuklagach, brauzerda bir marta oching:
https://yourdomain.com/set_webhook.php"Webhook o'rnatildi" degan xabarni ko'rgach, shu faylni serverdan o'chirib tashlang (xavfsizlik uchun).
Siz aytganingizdek, sizda tayyor ajratish serveri bor. Uni ulash uchun src/Core/SeparationClient.php faylidagi submit() metodini API'ingizning aniq so'rov/javob formatiga moslang:
vocal_url, instrumental_url, ixtiyoriy lyrics maydonlari kutiladi.
job_id, keyin webhook orqali natija): API sizga job_id qaytarsin, keyin siz .envdagi SEPARATION_CALLBACK_URL manziliga (public/api/separation_callback.php) natijani POST qilib yuborsin.
.env dagi SEPARATION_API_URL va SEPARATION_API_KEYni to'ldiring.
Bot sendInvoice metodida currency=XTR (Telegram Stars) ishlatadi — bunda provider_token shart emas, BotFather orqali ham qo'shimcha sozlash kerak emas. Foydalanuvchi to'laganda Telegram avtomatik successful_payment xabarini yuboradi, bot esa foydalanuvchini Pro qiladi (configdagi PRO_DURATION_DAYS muddatga, standart 30 kun).
Narxni o'zgartirish uchun .envdagi PRO_PRICE_STARSni tahrirlang.
BotFather'da:
/mybots → botingiz → Bot Settings → Menu Button → .envdagi WEBAPP_URL manzilini kiriting (foydalanuvchi Mini App'i).
public/admin/) alohida — uni oddiy havola sifatida faqat ADMIN_TELEGRAM_IDSdagi shaxslarga yuboring (masalan shaxsiy xabar orqali), chunki u BotFather menyusida ko'rsatilmasligi kerak.
Ikkala Mini App ham Telegramning initData orqali foydalanuvchini tekshiradi (src/Core/TelegramAuth.php) — shuning uchun ular faqat Telegram ilovasi ichida ochilganda to'g'ri ishlaydi, oddiy brauzerda emas.
Telegram chat xabarlarida (botning o'zi yozadigan matnlarda) faqat oddiy Unicode emoji ishlatish mumkin — Telegram bot API orqali maxsus ikon-shrift yoki SVG ikonka yuborib bo'lmaydi. Shu sabab bot xabarlarida (masalan "🎤 Vokal", "🎼 Minus") minimal, neytral emoji qoldirildi.
Ammo webapp va admin panelda (haqiqiy veb-sahifalar) so'ragan ikonka uslubi to'liq qo'llanildi — Lucide ikon-kutubxonasi orqali barcha joyda (holat belgilari, menyular, tugmalar) chiroyli chiziqli ikonkalar ishlatilgan, emoji emas.
telegram-minus-bot/
├── .env.example — sozlamalar namunasi
├── config.php — konfiguratsiya yuklovchi
├── database/schema.sql — MySQL sxemasi
├── src/
│ ├── Core/ — Database, User, Track, AudioDuration,
│ │ SeparationClient, TelegramAuth
│ └── Telegram/ — Api.php (Bot API wrapper), Webhook.php (bot logikasi)
├── public/
│ ├── webhook.php — Telegram webhook entrypoint
│ ├── set_webhook.php — bir martalik webhook o'rnatuvchi (keyin o'chiriladi)
│ ├── webapp/ — foydalanuvchi Mini App
│ ├── admin/ — admin Mini App
│ └── api/
│ ├── user.php — webapp uchun REST API
│ ├── admin.php — admin panel uchun REST API
│ └── separation_callback.php — asinxron ajratish natijasini qabul qiluvchi endpoint
├── cron/cleanup.php — eski fayllarni tozalovchi (crontab uchun)
└── storage/ — vaqtinchalik va tayyor audio fayllar processing vazifasi bo'lib, odatda Python (Demucs/Spleeter kabi)da ishlaydi va alohida server sifatida ishga tushiriladi. Ushbu bot faqat sizning tayyor API serveringizga ulanadi (SeparationClient.php).
ffprobe bo'lmasa taxminiy (VBR fayllarda aniqlik pasayishi mumkin) — production uchun serverda ffmpeg o'rnatishni tavsiya qilamiz.
uchun to'liq ishlaydigan qilib yozilgan, lekin real API/hosting muhitida bir marta birgalikda sinovdan o'tkazishni tavsiya qilaman (masalan xato xabarlarini, timeout'larni real sharoitda tekshirish).
0 Comments