File size: 3,241 Bytes
f9ad4ce
b9cccba
27af330
f9ad4ce
 
a211287
af123b0
f9ad4ce
 
a211287
 
f9ad4ce
a211287
f9ad4ce
 
 
 
 
 
 
 
 
 
 
 
 
 
 
35ff080
f9ad4ce
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a211287
 
f9ad4ce
 
 
 
 
 
b9cccba
 
10d4350
b9cccba
 
5528121
f9ad4ce
a3063e5
5528121
 
 
 
 
 
 
f9ad4ce
5528121
 
 
 
f9ad4ce
5528121
 
 
 
 
 
 
 
 
 
f9ad4ce
27af330
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
import logging
import re
from pyrogram import Client, filters
from pyrogram.types import Message, InlineKeyboardMarkup, InlineKeyboardButton
from pyrogram.types import *
from RyuzakiLib import Tiktok
from config import API_ID, API_HASH, BOT_TOKEN
import hashlib

logging.getLogger("pyrogram").setLevel(logging.WARNING)
logging.basicConfig(level=logging.INFO)

TIKTOK_WEB = "https://www.tikwm.com"
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

@client.on_message(filters.command("start") & filters.private)
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
    )

@client.on_callback_query(filters.regex("^audiodownload_"))
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 = await Tiktok.download(TIKTOK_WEB, 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)

def is_tiktok_url(url):
    pattern = r"(https?)://(vt|www)\.tiktok\.com/(\w+)"
    match = re.search(pattern, url)
    return bool(match)

@client.on_message(filters.command(["tt"]) & (filters.private | filters.group))
async def tiktok_downloader(client: Client, message: Message):
    query_url = message.text.split(" ", 1)[1] if len(message.command) > 1 else None
    if not query_url:
        return await message.reply_text("?")
    if not is_tiktok_url(query_url):
        return await message.reply_text("Invalid link")
    callback_data = generate_callback_data(message.from_user.id, query_url)
    keyboard = InlineKeyboardMarkup(
        [
            [
                InlineKeyboardButton(
                    text="Audio Download",
                    callback_data=callback_data
                )
            ]
        ]
    )
    try:
        dll = await message.reply_text("Processing....")
        response = await Tiktok.download(TIKTOK_WEB, query_url)
        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()