Zavier Optima
import axios from 'axios'
const handler = async (m, { text, usedPrefix, command, conn }) => {
const tiktokRegex = /(https?:\/\/(www\.)?(tiktok\.com|vm\.tiktok\.com|vt\.tiktok\.com)\/[^\s]+)/
const match = text.match(tiktokRegex)
if (!match) return m.reply(`Contoh penggunaan: ${usedPrefix + command} https://vt.tiktok.com/example`)
const url = match[0]
try {
m.reply(wait)
const res = await tiktok(url)
const { data, stats, music_info, author, title, id } = res
let no = 1
if (data.some(d => d.type === "photo")) {
conn.reply(m.chat, '*_Foto telah terkirim di private chat!_*', m)
for (const img of data.filter(d => d.type === "photo")) {
await conn.sendFile(m.sender, img.url, '', `*乂 TikTok Slide - Downloader*\n\nImage Slide *(${no++}/${data.length})*\n\n*─ Author:* ${author.nickname}`, m)
await conn.delay(500)
}
} else {
const video = data.find(d => d.type === "nowatermark") || data.find(d => d.type === "nowatermark_hd")
if (video) {
const reyz = await conn.sendFile(m.chat, video.url, '', `*乂 TikTok Video - Downloader*\n\n*• Author :* ${author.nickname}\n*• Title :* ${title}\n*• ID :* [ ${id} ]\n*• Views :* ${stats.views}\n*• Like :* ${stats.likes}\n*• Comment :* ${stats.comment}\n*• Share :* ${stats.share}\n*• Profile :* https://tiktok.com/@${author.fullname}`, m)
await conn.sendMessage(m.chat, {
audio: {
url: music_info.url
},
mimetype: 'audio/mpeg',
fileName: `${music_info.url}.mp3`,
}, { quoted: reyz })
} else {
throw new Error('Video tidak ditemukan')
}
}
} catch (e) {
console.error(e)
m.reply('Terjadi kesalahan: ' + e.message)
}
}
handler.help = ['tiktok']
handler.tags = ['downloader']
handler.command = /^(tt|tiktok|ttdl)$/i
handler.limit = true
export default handler
async function tiktok(url) {
return new Promise(async (resolve) => {
try {
function formatNumber(integer) {
let numb = parseInt(integer)
return Number(numb).toLocaleString().replace(/,/g, ".")
}
function formatDate(n, locale = "id") {
let d = new Date(n * 1000)
return d.toLocaleDateString(locale, {
weekday: "long",
day: "numeric",
month: "long",
year: "numeric",
hour: "numeric",
minute: "numeric",
second: "numeric"
})
}
let domain = "https://www.tikwm.com/api/"
let res = await (
await axios.post(
domain, {}, {
headers: {
Accept: "application/json, text/javascript, */*; q=0.01",
"Accept-Language": "id-ID,id;q=0.9,en-US;q=0.8,en;q=0.7",
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
Origin: "https://www.tikwm.com",
Referer: "https://www.tikwm.com/",
"Sec-Ch-Ua": '"Not)A;Brand";v="24", "Chromium";v="116"',
"Sec-Ch-Ua-Mobile": "?1",
"Sec-Ch-Ua-Platform": "Android",
"Sec-Fetch-Dest": "empty",
"Sec-Fetch-Mode": "cors",
"Sec-Fetch-Site": "same-origin",
"User-Agent": "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Mobile Safari/537.36",
"X-Requested-With": "XMLHttpRequest"
},
params: {
url: url,
count: 12,
cursor: 0,
web: 1,
hd: 1
}
}
)
).data.data
if (!res.play)
return resolve({ status: false })
let data = []
if (!res.size) {
res.images.map((v) => {
data.push({ type: "photo", url: v })
})
} else {
data.push(
{ type: "watermark", url: "https://www.tikwm.com" + res.wmplay },
{ type: "nowatermark", url: "https://www.tikwm.com" + res.play },
{ type: "nowatermark_hd", url: "https://www.tikwm.com" + res.hdplay }
)
}
let json = {
status: true,
title: res.title,
taken_at: formatDate(res.create_time),
region: res.region,
id: res.id,
duration: res.duration + " detik",
cover: "https://www.tikwm.com" + res.cover,
data: data,
music_info: {
id: res.music_info.id,
title: res.music_info.title,
author: res.music_info.author,
album: res.music_info.album ? res.music_info.album : "Tidak diketahui",
url: "https://www.tikwm.com" + res.music || res.music_info.play
},
stats: {
views: formatNumber(res.play_count),
likes: formatNumber(res.digg_count),
comment: formatNumber(res.comment_count),
share: formatNumber(res.share_count),
download: formatNumber(res.download_count)
},
author: {
id: res.author.id,
fullname: res.author.unique_id,
nickname: res.author.nickname,
avatar: "https://www.tikwm.com" + res.author.avatar
}
}
return resolve(json)
} catch (e) {
console.log(e)
return resolve({ status: false, msg: e.message })
}
})
}
© 2024 ZavierOptima Archive.