diff --git a/data/locale/ar.json b/data/locale/ar.json index c63610e..120bfbb 100644 --- a/data/locale/ar.json +++ b/data/locale/ar.json @@ -1,7 +1,10 @@ { "lang_name": "العربية🇸🇦", - "error": "حدث خطأ ما🥲\nهل يمكنك المحاولة مرة أخرى؟…", - "link_error": "ربما يوجد خطأ في الرابط الذي أرسلته🥲", + "error": "عفوًا! حدث خطأ ما 😅\nيرجى المحاولة مرة أخرى بعد قليل.", + "link_error": "هممم، لم أتمكن من التعرف على هذا الرابط 🤔\nتأكد من أنه رابط فيديو TikTok صالح!", + "video_upload_hint": "يمكنني فقط إزالة العلامات المائية من روابط TikTok، وليس من الفيديوهات المرفوعة 🎬\n\nيرجى إرسال رابط فيديو TikTok بدلاً من ذلك!", + "non_tiktok_link": "هذا البوت يعمل فقط مع روابط TikTok 🔗\n\nيرجى إرسال رابط من TikTok (tiktok.com أو vm.tiktok.com)", + "send_link_prompt": "أرسل لي رابط فيديو TikTok لتنزيله بدون علامة مائية! 🎥", "lang_start": "تم تعيين اللغة إلى العربية🇸🇦.\nيمكن تغييرها باستخدام الأمر /lang", "lang": "تم تعيين اللغة إلى العربية🇸🇦", "start": "لقد قمت بتشغيل No Watermark TikTok🤖\n\nيدعم هذا البوت تنزيل:\n📹الفيديو، 🖼الصور و 🔈الصوت\nمن TikTok بدون علامة مائية\n\nيمكنك أيضًا الاشتراك في قناتنا للحصول على آخر الأخبار حول حالة البوت والتحديثات والإعلانات!\n@ttgrab\n\nأرسل رابط الفيديو للبدء", @@ -38,10 +41,11 @@ "error_deleted": "تم حذف هذا الفيديو من قبل المنشئ.", "error_private": "هذا الفيديو خاص ولا يمكن الوصول إليه.", "error_region": "هذا الفيديو غير متوفر في منطقتك.", - "error_network": "حدث خطأ في الشبكة.\nيرجى المحاولة مرة أخرى.", - "error_rate_limit": "طلبات كثيرة جدًا.\nيرجى الانتظار قليلاً والمحاولة مرة أخرى.", + "error_network": "مشكلة في الاتصال 📡\nيرجى المحاولة مرة أخرى بعد قليل.", + "error_rate_limit": "تمهل قليلاً! 🐢\nيرجى الانتظار قليلاً والمحاولة مرة أخرى.", "error_too_long": "هذا الفيديو طويل جدًا.\nالحد الأقصى المسموح به هو 30 دقيقة.", "error_queue_full": "يرجى الانتظار!\nلديك بالفعل {0} فيديوهات قيد المعالجة. حاول مرة أخرى بعد قليل.", "try_again_button": "حاول مرة أخرى", - "inline_retry_attempt": "🔄 المحاولة {0} من {1}..." + "inline_retry_attempt": "🔄 المحاولة {0} من {1}...", + "tiktok_links_only": "هذا البوت يدعم فقط روابط TikTok 🔗\n\nيرجى إرسال رابط فيديو TikTok لتنزيله بدون علامة مائية!" } diff --git a/data/locale/en.json b/data/locale/en.json index ec370c4..cdc3f2c 100644 --- a/data/locale/en.json +++ b/data/locale/en.json @@ -1,7 +1,10 @@ { "lang_name": "English🇺🇸", - "error": "Something went wrong🥲\nCould you please try again?…", - "link_error": "Probably something wrong with your link🥲", + "error": "Oops! Something went wrong 😅\nPlease try again in a moment.", + "link_error": "Hmm, I couldn't recognize this link 🤔\nMake sure it's a valid TikTok video link!", + "video_upload_hint": "I can only remove watermarks from TikTok links, not from uploaded videos 🎬\n\nPlease send me a TikTok video link instead!", + "non_tiktok_link": "This bot only works with TikTok links 🔗\n\nPlease send a link from TikTok (tiktok.com or vm.tiktok.com)", + "send_link_prompt": "Send me a TikTok video link to download it without watermark! 🎥", "lang_start": "The language is set to English🇺🇸.\nIt can be changed with the /lang command", "lang": "The language is set to English🇺🇸", "start": "You have launched No Watermark TikTok🤖\n\nThis bot supports download of:\n📹Video, 🖼Images and 🔈Audio\nfrom TikTok without watermark\n\nYou can also subscribe to our channel to get the latest news about bot status, updates and news!\n@ttgrab\n\nSend video link to get started", @@ -38,10 +41,11 @@ "error_deleted": "This video has been deleted by the creator.", "error_private": "This video is private and cannot be accessed.", "error_region": "This video is not available in your region.", - "error_network": "Network error occurred.\nPlease try again.", - "error_rate_limit": "Too many requests.\nPlease wait a moment and try again.", + "error_network": "Connection issue 📡\nPlease try again in a moment.", + "error_rate_limit": "Whoa, slow down! 🐢\nPlease wait a moment and try again.", "error_too_long": "This video is too long.\nMaximum allowed duration is 30 minutes.", "error_queue_full": "Please wait!\nYou already have {0} videos processing. Try again in a moment.", "try_again_button": "Try Again", - "inline_retry_attempt": "🔄 Attempt {0} of {1}..." + "inline_retry_attempt": "🔄 Attempt {0} of {1}...", + "tiktok_links_only": "This bot only supports TikTok links 🔗\n\nPlease send a TikTok video link to download it without watermark!" } diff --git a/data/locale/hi.json b/data/locale/hi.json index d9c8729..720bf7b 100644 --- a/data/locale/hi.json +++ b/data/locale/hi.json @@ -1,7 +1,10 @@ { "lang_name": "हिन्दी🇮🇳", - "error": "कुछ गलत हो गया🥲\nक्या आप फिर से कोशिश कर सकते हैं?…", - "link_error": "शायद आपकी लिंक में कुछ गड़बड़ है🥲", + "error": "उफ़! कुछ गलत हो गया 😅\nकृपया थोड़ी देर बाद फिर से प्रयास करें।", + "link_error": "हम्म, मैं इस लिंक को नहीं पहचान पा रहा 🤔\nसुनिश्चित करें कि यह एक वैध TikTok वीडियो लिंक है!", + "video_upload_hint": "मैं केवल TikTok लिंक से वॉटरमार्क हटा सकता हूं, अपलोड किए गए वीडियो से नहीं 🎬\n\nकृपया मुझे TikTok वीडियो लिंक भेजें!", + "non_tiktok_link": "यह बॉट केवल TikTok लिंक के साथ काम करता है 🔗\n\nकृपया TikTok (tiktok.com या vm.tiktok.com) से लिंक भेजें", + "send_link_prompt": "मुझे TikTok वीडियो लिंक भेजें ताकि इसे बिना वॉटरमार्क के डाउनलोड किया जा सके! 🎥", "lang_start": "भाषा हिन्दी🇮🇳 पर सेट कर दी गई है।\nइसे /lang कमांड से बदला जा सकता है", "lang": "भाषा हिन्दी🇮🇳 पर सेट है", "start": "आपने No Watermark TikTok🤖 शुरू किया है\n\nयह बॉट TikTok से बिना वॉटरमार्क:\n📹वीडियो, 🖼छवियाँ और 🔈ऑडियो\nडाउनलोड करने का समर्थन करता है\n\nआप बॉट की स्थिति, अपडेट और खबरों के लिए हमारे चैनल को भी सब्सक्राइब कर सकते हैं!\n@ttgrab\n\nशुरू करने के लिए वीडियो लिंक भेजें", @@ -38,10 +41,11 @@ "error_deleted": "यह वीडियो निर्माता द्वारा हटा दिया गया है।", "error_private": "यह वीडियो निजी है और एक्सेस नहीं किया जा सकता।", "error_region": "यह वीडियो आपके क्षेत्र में उपलब्ध नहीं है।", - "error_network": "नेटवर्क त्रुटि हुई।\nकृपया फिर से प्रयास करें।", - "error_rate_limit": "बहुत अधिक अनुरोध।\nकृपया कुछ देर प्रतीक्षा करें और फिर से प्रयास करें।", + "error_network": "कनेक्शन समस्या 📡\nकृपया थोड़ी देर बाद फिर से प्रयास करें।", + "error_rate_limit": "अरे, धीरे चलो! 🐢\nकृपया कुछ देर प्रतीक्षा करें और फिर से प्रयास करें।", "error_too_long": "यह वीडियो बहुत लंबा है।\nअधिकतम अनुमत अवधि 30 मिनट है।", "error_queue_full": "कृपया प्रतीक्षा करें!\nआपके पास पहले से {0} वीडियो प्रोसेस हो रहे हैं। कुछ देर बाद फिर से प्रयास करें।", "try_again_button": "फिर से प्रयास करें", - "inline_retry_attempt": "🔄 प्रयास {0} में से {1}..." + "inline_retry_attempt": "🔄 प्रयास {0} में से {1}...", + "tiktok_links_only": "यह बॉट केवल TikTok लिंक का समर्थन करता है 🔗\n\nकृपया वॉटरमार्क के बिना डाउनलोड करने के लिए TikTok वीडियो लिंक भेजें!" } diff --git a/data/locale/id.json b/data/locale/id.json index 6097c29..20113e3 100644 --- a/data/locale/id.json +++ b/data/locale/id.json @@ -1,7 +1,10 @@ { "lang_name": "Bahasa Indonesia🇮🇩", - "error": "Terjadi kesalahan🥲\nBisa coba lagi?…", - "link_error": "Mungkin ada yang salah dengan tautanmu🥲", + "error": "Ups! Terjadi kesalahan 😅\nSilakan coba lagi sebentar.", + "link_error": "Hmm, saya tidak bisa mengenali tautan ini 🤔\nPastikan ini adalah tautan video TikTok yang valid!", + "video_upload_hint": "Saya hanya bisa menghapus watermark dari tautan TikTok, bukan dari video yang diunggah 🎬\n\nSilakan kirim tautan video TikTok!", + "non_tiktok_link": "Bot ini hanya bekerja dengan tautan TikTok 🔗\n\nSilakan kirim tautan dari TikTok (tiktok.com atau vm.tiktok.com)", + "send_link_prompt": "Kirim tautan video TikTok untuk mengunduhnya tanpa watermark! 🎥", "lang_start": "Bahasa disetel ke Bahasa Indonesia🇮🇩.\nBisa diubah dengan perintah /lang", "lang": "Bahasa disetel ke Bahasa Indonesia🇮🇩", "start": "Kamu telah menjalankan No Watermark TikTok🤖\n\nBot ini mendukung unduhan:\n📹Video, 🖼Gambar, dan 🔈Audio\ndari TikTok tanpa watermark\n\nKamu juga bisa berlangganan channel kami untuk mendapatkan kabar terbaru tentang status bot, pembaruan, dan berita!\n@ttgrab\n\nKirim tautan video untuk memulai", @@ -38,10 +41,11 @@ "error_deleted": "Video ini sudah dihapus oleh pembuatnya.", "error_private": "Video ini privat dan tidak bisa diakses.", "error_region": "Video ini tidak tersedia di wilayahmu.", - "error_network": "Terjadi kesalahan jaringan.\nSilakan coba lagi.", - "error_rate_limit": "Terlalu banyak permintaan.\nSilakan tunggu sebentar dan coba lagi.", + "error_network": "Masalah koneksi 📡\nSilakan coba lagi sebentar.", + "error_rate_limit": "Pelan-pelan! 🐢\nSilakan tunggu sebentar dan coba lagi.", "error_too_long": "Video ini terlalu panjang.\nDurasi maksimum yang diizinkan adalah 30 menit.", "error_queue_full": "Mohon tunggu!\nKamu sudah memiliki {0} video yang sedang diproses. Coba lagi sebentar.", "try_again_button": "Coba Lagi", - "inline_retry_attempt": "🔄 Percobaan {0} dari {1}..." + "inline_retry_attempt": "🔄 Percobaan {0} dari {1}...", + "tiktok_links_only": "Bot ini hanya mendukung tautan TikTok 🔗\n\nSilakan kirim tautan video TikTok untuk mengunduhnya tanpa watermark!" } diff --git a/data/locale/ru.json b/data/locale/ru.json index 3c27903..64c192d 100644 --- a/data/locale/ru.json +++ b/data/locale/ru.json @@ -1,7 +1,10 @@ { "lang_name": "Русский🇷🇺", - "error": "Что-то пошло не так🥲\nНе могли бы вы попробовать еще раз?…", - "link_error": "Возможно что-то не так с вашей ссылкой🥲", + "error": "Упс! Что-то пошло не так 😅\nПожалуйста, попробуйте через мгновение.", + "link_error": "Хм, не могу распознать эту ссылку 🤔\nУбедитесь, что это действительная ссылка на видео TikTok!", + "video_upload_hint": "Я могу удалять водяные знаки только по ссылкам TikTok, а не из загруженных видео 🎬\n\nПожалуйста, отправьте мне ссылку на видео TikTok!", + "non_tiktok_link": "Этот бот работает только со ссылками TikTok 🔗\n\nПожалуйста, отправьте ссылку с TikTok (tiktok.com или vm.tiktok.com)", + "send_link_prompt": "Отправьте мне ссылку на видео TikTok, чтобы скачать его без водяного знака! 🎥", "lang_start": "Установлен язык Русский🇷🇺.\nЕго можно изменить командой /lang", "lang": "Установлен язык Русский🇷🇺", "start": "Вы запустили No Watermark TikTok🤖\n\nЭтот бот поддерживает загрузку:\n📹Видео, 🖼Изображений и 🔈Аудио\nс TikTok без водяного знака\n\nВы также можете подписаться на наш канал, чтобы получать последние новости о статусе бота, обновлениях и новостях!\n@ttgrab\n\nОтправьте ссылку на видео, чтобы начать", @@ -38,10 +41,11 @@ "error_deleted": "Это видео было удалено автором.", "error_private": "Это видео приватное и недоступно.", "error_region": "Это видео недоступно в вашем регионе.", - "error_network": "Произошла сетевая ошибка.\nПожалуйста, попробуйте снова.", - "error_rate_limit": "Слишком много запросов.\nПожалуйста, подождите немного и попробуйте снова.", + "error_network": "Проблемы с соединением 📡\nПожалуйста, попробуйте через мгновение.", + "error_rate_limit": "Полегче! 🐢\nПожалуйста, подождите немного и попробуйте снова.", "error_too_long": "Это видео слишком длинное.\nМаксимальная продолжительность — 30 минут.", "error_queue_full": "Пожалуйста, подождите!\nУ вас уже {0} видео в обработке. Попробуйте через мгновение.", "try_again_button": "Попробовать снова", - "inline_retry_attempt": "🔄 Попытка {0} из {1}..." + "inline_retry_attempt": "🔄 Попытка {0} из {1}...", + "tiktok_links_only": "Этот бот поддерживает только ссылки TikTok 🔗\n\nПожалуйста, отправьте ссылку на видео TikTok, чтобы скачать его без водяного знака!" } diff --git a/data/locale/so.json b/data/locale/so.json index 5c2e242..4a2aa72 100644 --- a/data/locale/so.json +++ b/data/locale/so.json @@ -1,7 +1,10 @@ { "lang_name": "Soomaali🇸🇴", - "error": "Waxbaa qaldamay🥲\nFadlan mar kale isku day?…", - "link_error": "Malaha waxbaa ka qaldan link-gaaga🥲", + "error": "Waxyaabaa qaldamay 😅\nFadlan isku day mar kale.", + "link_error": "Hmm, ma garan karo link-kan 🤔\nHubi in ay tahay link fiidiyow TikTok oo sax ah!", + "video_upload_hint": "Waxaan kaliya ka saari karaa watermark-a link-yada TikTok, ma aha fiidiyowyada la soo dhigay 🎬\n\nFadlan ii soo dir link fiidiyow TikTok!", + "non_tiktok_link": "Bot-kan waxa uu la shaqeeyaa oo keliya link-yada TikTok 🔗\n\nFadlan soo dir link ka TikTok (tiktok.com ama vm.tiktok.com)", + "send_link_prompt": "Ii soo dir link fiidiyow TikTok si aad u soo dejiso isagoon watermark lahayn! 🎥", "lang_start": "Luqadda waxaa loo dejiyey Soomaali🇸🇴.\nWaxaad ku beddeli kartaa amarka /lang", "lang": "Luqadda waxaa loo dejiyey Soomaali🇸🇴", "start": "Waxaad bilowday No Watermark TikTok🤖\n\nBot-kan wuxuu taageeraa soo dejinta:\n📹Fiidiyow, 🖼Sawirro iyo 🔈Cod\nTikTok aan watermark lahayn\n\nWaxaad sidoo kale raaci kartaa kanaalkeenna si aad u hesho wararkii ugu dambeeyay ee xaaladda bot-ka, cusboonaysiinta iyo wararka!\n@ttgrab\n\nDir link-ga fiidiyowga si aad u bilowdo", @@ -38,10 +41,11 @@ "error_deleted": "Fiidiyowgan waxaa tirtiray abuurahiisa.", "error_private": "Fiidiyowgan waa qarsoon yahay mana la heli karo.", "error_region": "Fiidiyowgan laguma heli karo aagaaga.", - "error_network": "Khalad shabakad ayaa dhacay.\nFadlan isku day mar kale.", - "error_rate_limit": "Codsiyo badan ayaa la sameeyay.\nFadlan sug wakhti yar oo isku day mar kale.", + "error_network": "Dhibaato isku xirka 📡\nFadlan isku day mar kale.", + "error_rate_limit": "Hoos u dhig! 🐢\nFadlan sug wakhti yar oo isku day mar kale.", "error_too_long": "Fiidiyowgan waa dheer yahay.\nMudda ugu badan ee la ogol yahay waa 30 daqiiqo.", "error_queue_full": "Fadlan sug!\nWaxaad horeba u leedahay {0} fiidiyow oo la hawlgalayo. Isku day mar kale.", "try_again_button": "Isku day mar kale", - "inline_retry_attempt": "🔄 Isku day {0} ee {1}..." + "inline_retry_attempt": "🔄 Isku day {0} ee {1}...", + "tiktok_links_only": "Bot-kan waxa uu taageeraa oo keliya link-yada TikTok 🔗\n\nFadlan soo dir link fiidiyow TikTok si aad u soo dejiso isagoon watermark lahayn!" } diff --git a/data/locale/uk.json b/data/locale/uk.json index c68e610..3940e4e 100644 --- a/data/locale/uk.json +++ b/data/locale/uk.json @@ -1,7 +1,10 @@ { "lang_name": "Українська🇺🇦", - "error": "Щось пішло не так 🥲\nНе могли б ви спробувати ще раз?…", - "link_error": "Можливо, щось не так з вашим посиланням🥲", + "error": "Ой! Щось пішло не так 😅\nБудь ласка, спробуйте через мить.", + "link_error": "Хм, не можу розпізнати це посилання 🤔\nПереконайтеся, що це дійсне посилання на відео TikTok!", + "video_upload_hint": "Я можу видаляти водяні знаки лише з посилань TikTok, а не із завантажених відео 🎬\n\nБудь ласка, надішліть мені посилання на відео TikTok!", + "non_tiktok_link": "Цей бот працює лише з посиланнями TikTok 🔗\n\nБудь ласка, надішліть посилання з TikTok (tiktok.com або vm.tiktok.com)", + "send_link_prompt": "Надішліть мені посилання на відео TikTok, щоб завантажити його без водяного знака! 🎥", "lang_start": "Встановлено мову Українська🇺🇦.\nЇї можна змінити командою /lang", "lang": "Встановлено мову Українська🇺🇦", "start": "Ви запустили No Watermark TikTok🤖\n\nЦей бот підтримує завантаження:\n📹Відео, 🖼Зображень та 🔈Аудіо\nз TikTok без водяного знака\n\nВи також можете підписатися на наш канал, щоб отримувати останні новини про статус бота, оновлення та новини!\n@ttgrab\n\nНадішліть посилання на відео, щоб почати", @@ -38,10 +41,11 @@ "error_deleted": "Це відео було видалено автором.", "error_private": "Це відео приватне і недоступне.", "error_region": "Це відео недоступне у вашому регіоні.", - "error_network": "Сталася мережева помилка.\nБудь ласка, спробуйте ще раз.", - "error_rate_limit": "Занадто багато запитів.\nБудь ласка, зачекайте трохи і спробуйте знову.", + "error_network": "Проблеми з з'єднанням 📡\nБудь ласка, спробуйте через мить.", + "error_rate_limit": "Полегше! 🐢\nБудь ласка, зачекайте трохи і спробуйте знову.", "error_too_long": "Це відео занадто довге.\nМаксимальна тривалість — 30 хвилин.", "error_queue_full": "Будь ласка, зачекайте!\nУ вас вже {0} відео в обробці. Спробуйте через мить.", "try_again_button": "Спробувати знову", - "inline_retry_attempt": "🔄 Спроба {0} з {1}..." + "inline_retry_attempt": "🔄 Спроба {0} з {1}...", + "tiktok_links_only": "Цей бот підтримує лише посилання TikTok 🔗\n\nБудь ласка, надішліть посилання на відео TikTok, щоб завантажити його без водяного знака!" } diff --git a/data/locale/vi.json b/data/locale/vi.json index dfc3864..fa5f3b3 100644 --- a/data/locale/vi.json +++ b/data/locale/vi.json @@ -1,7 +1,10 @@ { "lang_name": "Tiếng Việt🇻🇳", - "error": "Có lỗi xảy ra🥲\nBạn có thể thử lại không?…", - "link_error": "Có lẽ liên kết của bạn có vấn đề🥲", + "error": "Ôi! Có lỗi xảy ra 😅\nVui lòng thử lại sau một chút.", + "link_error": "Hmm, tôi không thể nhận diện liên kết này 🤔\nHãy chắc chắn đây là liên kết video TikTok hợp lệ!", + "video_upload_hint": "Tôi chỉ có thể xóa watermark từ liên kết TikTok, không phải từ video đã tải lên 🎬\n\nVui lòng gửi cho tôi liên kết video TikTok!", + "non_tiktok_link": "Bot này chỉ hoạt động với liên kết TikTok 🔗\n\nVui lòng gửi liên kết từ TikTok (tiktok.com hoặc vm.tiktok.com)", + "send_link_prompt": "Gửi cho tôi liên kết video TikTok để tải xuống không có watermark! 🎥", "lang_start": "Đã đặt ngôn ngữ là Tiếng Việt🇻🇳.\nBạn có thể đổi bằng lệnh /lang", "lang": "Ngôn ngữ hiện tại: Tiếng Việt🇻🇳", "start": "Bạn đã khởi chạy No Watermark TikTok🤖\n\nBot này hỗ trợ tải:\n📹Video, 🖼Hình ảnh và 🔈Âm thanh\ntừ TikTok không có watermark\n\nBạn cũng có thể theo dõi kênh của chúng tôi để nhận tin mới nhất về trạng thái bot, cập nhật và thông báo!\n@ttgrab\n\nGửi liên kết video để bắt đầu", @@ -38,10 +41,11 @@ "error_deleted": "Video này đã bị người tạo xóa.", "error_private": "Video này ở chế độ riêng tư và không thể truy cập.", "error_region": "Video này không khả dụng ở khu vực của bạn.", - "error_network": "Đã xảy ra lỗi mạng.\nVui lòng thử lại.", - "error_rate_limit": "Quá nhiều yêu cầu.\nVui lòng đợi một chút và thử lại.", + "error_network": "Vấn đề kết nối 📡\nVui lòng thử lại sau một chút.", + "error_rate_limit": "Từ từ thôi! 🐢\nVui lòng đợi một chút và thử lại.", "error_too_long": "Video này quá dài.\nThời lượng tối đa cho phép là 30 phút.", "error_queue_full": "Vui lòng đợi!\nBạn đang có {0} video đang xử lý. Hãy thử lại sau một chút.", "try_again_button": "Thử lại", - "inline_retry_attempt": "🔄 Lần thử {0} trên {1}..." + "inline_retry_attempt": "🔄 Lần thử {0} trên {1}...", + "tiktok_links_only": "Bot này chỉ hỗ trợ liên kết TikTok 🔗\n\nVui lòng gửi liên kết video TikTok để tải xuống không có watermark!" } diff --git a/handlers/get_video.py b/handlers/get_video.py index 47cb205..749e6b2 100644 --- a/handlers/get_video.py +++ b/handlers/get_video.py @@ -39,6 +39,51 @@ def try_again_button(lang: str): return keyb.as_markup() +@video_router.message(F.video | F.video_note) +async def handle_video_upload(message: Message): + """Inform users that we need links, not video uploads (private chats only).""" + if message.chat.type != "private": + return + + settings = await get_user_settings(message.chat.id) + if settings: + lang = settings[0] + else: + lang = await lang_func(message.chat.id, message.from_user.language_code, True) + + await message.reply(locale[lang]["video_upload_hint"]) + + +@video_router.message(F.photo) +async def handle_image_upload(message: Message): + """Inform users that we only support TikTok links, not images (private chats only).""" + if message.chat.type != "private": + return + + settings = await get_user_settings(message.chat.id) + if settings: + lang = settings[0] + else: + lang = await lang_func(message.chat.id, message.from_user.language_code, True) + + await message.reply(locale[lang]["tiktok_links_only"]) + + +@video_router.message(F.voice | F.audio) +async def handle_voice_upload(message: Message): + """Inform users that we only support TikTok links, not voice messages (private chats only).""" + if message.chat.type != "private": + return + + settings = await get_user_settings(message.chat.id) + if settings: + lang = settings[0] + else: + lang = await lang_func(message.chat.id, message.from_user.language_code, True) + + await message.reply(locale[lang]["tiktok_links_only"]) + + @video_router.message(F.text) async def send_tiktok_video(message: Message): # Api init with proxy support @@ -70,9 +115,16 @@ async def send_tiktok_video(message: Message): video_link, is_mobile = await api.regex_check(message.text) # If not valid if video_link is None: - # Send error message, if not in group chat + # Send appropriate error message in private chats only if not group_chat: - await message.reply(locale[lang]["link_error"]) + # Check if message contains URL entities (non-TikTok link) + has_url = message.entities and any( + e.type in ("url", "text_link") for e in message.entities + ) + if has_url: + await message.reply(locale[lang]["non_tiktok_link"]) + else: + await message.reply(locale[lang]["send_link_prompt"]) return # Check per-user queue limit before proceeding (0 = no limit) @@ -183,7 +235,7 @@ async def send_tiktok_video(message: Message): else: if not status_message: try: - await message.react([]) + await message.react([ReactionTypeEmoji(emoji="😢")]) except TelegramBadRequest: pass except Exception as e: @@ -198,7 +250,7 @@ async def send_tiktok_video(message: Message): else: if not status_message: try: - await message.react([]) + await message.react([ReactionTypeEmoji(emoji="😢")]) except TelegramBadRequest: pass was_processed = False # Videos are not processed @@ -260,7 +312,7 @@ async def send_tiktok_video(message: Message): await message.react([ReactionTypeEmoji(emoji="😢")]) else: if not status_message: - await message.react([]) + await message.react([ReactionTypeEmoji(emoji="😢")]) except TelegramBadRequest: logging.debug("Failed to update UI during error cleanup") except Exception as cleanup_err: @@ -294,3 +346,18 @@ async def handle_retry_callback(callback: CallbackQuery): # Re-process the original message await send_tiktok_video(original_message) + + +@video_router.message() +async def handle_unsupported_content(message: Message): + """Catch-all for any unsupported content types (private chats only).""" + if message.chat.type != "private": + return + + settings = await get_user_settings(message.chat.id) + if settings: + lang = settings[0] + else: + lang = await lang_func(message.chat.id, message.from_user.language_code, True) + + await message.reply(locale[lang]["tiktok_links_only"])