Spaces:
Running
Running
| import logging | |
| import requests | |
| from pyrogram import Client, filters, idle | |
| from pyrogram.types import Message, InlineKeyboardMarkup, InlineKeyboardButton | |
| from pyrogram.types import * | |
| from RyuzakiLib import Tiktok | |
| from config import TIKTOK_WEB as tt, API_ID, API_HASH, BOT_TOKEN, HUGGING_TOKEN | |
| import hashlib | |
| import asyncio | |
| try: | |
| from aiohttp import ClientSession as aiohttp_client | |
| except ImportError: | |
| aiohttp_client = None | |
| logging.getLogger("pyrogram").setLevel(logging.WARNING) | |
| logging.basicConfig(level=logging.INFO) | |
| WELCOME_TEXT = """ | |
| Halo {} | |
| Saya adalah bot untuk mengunduh video tiktok di telegram. | |
| Saya dapat mengunduh video dengan tanda air atau tanpa tanda air dan mengunduh audio dari url. Kirimkan saja saya url tiktok. | |
| """ | |
| client = Client( | |
| "TTK-BOT", | |
| api_id=API_ID, | |
| api_hash=API_HASH, | |
| bot_token=BOT_TOKEN | |
| ) | |
| link_storage = {} | |
| def generate_callback_data(user_id, query): | |
| identifier = hashlib.md5(query.encode()).hexdigest() | |
| callback_data = f"audiodownload_{user_id}_{identifier}" | |
| link_storage[callback_data] = query | |
| return callback_data | |
| async def async_searcher( | |
| url: str, | |
| post: bool = False, | |
| head: bool = False, | |
| headers: dict = None, | |
| evaluate=None, | |
| object: bool = False, | |
| re_json: bool = False, | |
| re_content: bool = False, | |
| *args, | |
| **kwargs, | |
| ): | |
| if aiohttp_client: | |
| async with aiohttp_client(headers=headers) as client: | |
| method = client.head if head else (client.post if post else client.get) | |
| data = await method(url, *args, **kwargs) | |
| if evaluate: | |
| return await evaluate(data) | |
| if re_json: | |
| return await data.json() | |
| if re_content: | |
| return await data.read() | |
| if head or object: | |
| return data | |
| return await data.text() | |
| else: | |
| raise DependencyMissingError("install 'aiohttp' to use this.") | |
| async def hfv(api_url, timeout=10): | |
| try: | |
| headers = { | |
| "Authorization": f"Bearer {HUGGING_TOKEN}", | |
| "Content-Type": "application/json", | |
| } | |
| response = await async_searcher(api_url, headers=headers, re_json=True) | |
| stat = response.get("message", "ded") | |
| return await client.send_message(chat_id=1191668125, text=f"**TɪᴋTᴏᴋ Sᴇʀᴠᴇʀ Sᴛᴀᴛᴜs:** `{stat}`") | |
| except requests.exceptions.RequestException as e: | |
| logging.info("Error occurred:", e) | |
| return await client.send_message(chat_id=1191668125, text=f"**TɪᴋTᴏᴋ Sᴇʀᴠᴇʀ Sᴛᴀᴛᴜs:** `ded`") | |
| async def periodic_hfv(api_url, interval_range): | |
| while True: | |
| result = await hfv(api_url) | |
| if result: | |
| logging.info("Call Complete") | |
| interval = random.randint(*interval_range) | |
| await asyncio.sleep(interval) | |
| async def start_periodic_task(): | |
| interval_range = (2 * 3600, 4 * 3600) # Call the function every 2 to 4 hours | |
| api_url = "https://randydev-ttk-bot.hf.space/status" | |
| asyncio.create_task(periodic_hfv(api_url, interval_range)) | |
| async def welcome_start(client: Client, message: Message): | |
| keyboard = InlineKeyboardMarkup( | |
| [ | |
| [ | |
| InlineKeyboardButton( | |
| text="📢 Saluran Bot", | |
| url="https://t.me/RendyProjects" | |
| ) | |
| ] | |
| ] | |
| ) | |
| await message.reply_text( | |
| WELCOME_TEXT.format(message.from_user.first_name), | |
| reply_markup=keyboard | |
| ) | |
| async def keep_alive(client: Client, message: Message): | |
| await start_periodic_task() | |
| await message.reply_text( | |
| "Now Keeping Alive" | |
| ) | |
| async def callback_button(client: Client, cb: CallbackQuery): | |
| try: | |
| data = cb.data | |
| user_id = cb.from_user.id | |
| query = link_storage.get(data) | |
| if query: | |
| response = Tiktok.download(tt, query) | |
| await client.send_audio(user_id, response[1]) | |
| await cb.answer("Audio sent successfully!") | |
| else: | |
| await cb.answer("Invalid or expired link.", show_alert=True) | |
| except Exception as e: | |
| await cb.answer(f"Error: {str(e)}", show_alert=True) | |
| async def tiktok_downloader(client: Client, message: Message): | |
| if message.text: | |
| query = message.text | |
| callback_data = generate_callback_data(message.from_user.id, query) | |
| keyboard = InlineKeyboardMarkup( | |
| [ | |
| [ | |
| InlineKeyboardButton( | |
| text="Audio Download", | |
| callback_data=callback_data | |
| ) | |
| ] | |
| ] | |
| ) | |
| try: | |
| dll = await message.reply_text("Processing....") | |
| await message.delete() | |
| response = Tiktok.download(tt, query) | |
| await message.reply_video(response[0], reply_markup=keyboard) | |
| await dll.delete() | |
| except Exception as e: | |
| await dll.delete() | |
| await message.reply_text(f"Error: {str(e)}") | |
| client.run() | |