Clone Of https://github.com/rasitechchannel/RasiTechRobot const TelegramBot = require("node-telegram-bot-api"); const moment = require("moment"); const os = require("os"); const fs = require("fs"); const { exec, spawn } = require("child_process"); const axios = require("axios"); const sharp = require("sharp"); // const fetch = require('node-fetch'); const ping = require("ping"); const net = require("net"); const dgram = require("dgram"); const dns = require("dns-socket"); const whois = require("whois-json"); const path = require("path"); const gm = require("gm").subClass({ imageMagick: true }); const ffmpeg = require("fluent-ffmpeg"); const settings = JSON.parse( fs.readFileSync(path.join(__dirname, "settings/config.json"), "utf8") ); // console.log(settings.ownerId) // Ganti dengan token bot Telegram Anda const token = settings.token; // const apiKey = settings.apikey_zen; // Inisialisasi bot const bot = new TelegramBot(token, { polling: true }); // Function untuk mengirim pesan dengan membagi menjadi bagian-bagian yang lebih kecil jika terlalu panjang function sendMessage(chatId, text, options) { const maxMessageLength = 4096; // Batas panjang pesan if (text.length <= maxMessageLength) { bot.sendMessage(chatId, text, options); } else { const messageParts = splitTextIntoParts(text, maxMessageLength); for (let i = 0; i < messageParts.length; i++) { bot.sendMessage(chatId, messageParts[i], options); } } } // Function untuk membagi teks menjadi bagian-bagian yang lebih kecil function splitTextIntoParts(text, maxLength) { const parts = []; while (text.length > 0) { const part = text.substring(0, maxLength); parts.push(part); text = text.substring(maxLength); } return parts; } // Fungsi untuk mendownload video dari API async function downloadYouTubeVideo(url) { const apiUrl = `https://api-miftah.xyz/api/downloader/youtube-video?url=${encodeURIComponent(url)}&key=${settings.apikey_miftah}`; try { const response = await axios.get(apiUrl); return response.data; } catch (error) { console.error('Error downloading YouTube video:', error); return null; } } // Fungsi untuk menyimpan video ke file lokal async function saveVideoToLocal(url) { const videoResponse = await axios.get(url, { responseType: 'stream' }); const videoFile = fs.createWriteStream('video.mp4'); videoResponse.data.pipe(videoFile); return new Promise((resolve, reject) => { videoFile.on('finish', () => resolve()); videoFile.on('error', (error) => reject(error)); }); } // Fungsi untuk mendapatkan gambar sambutan dari API async function getWelcomeImage(name, groupName, memberCount, profilePhotoUrl, background) { const apiUrl = `https://api-miftah.xyz/api/canvas/welcome?name=${encodeURIComponent(name)}&groupname=${encodeURIComponent(groupName)}&member=${memberCount}&profilepicture=${profilePhotoUrl}&background=${background}&key=${settings.apikey_miftah}`; try { const response = await axios.get(apiUrl); return response.data.url; } catch (error) { console.error('Error fetching welcome image:', error); return null; } } // Handler untuk event "new_chat_members", yaitu saat ada anggota baru masuk grup bot.on('new_chat_members', async (message) => { const chatId = message.chat.id; // Ambil informasi dari grup dan anggota baru yang masuk const groupName = message.chat.title; const memberCount = message.chat.members_count; const newUser = message.new_chat_member; const userName = newUser.username || newUser.first_name; // Ambil URL foto profil pengguna let profilePhotoUrl = ''; if (newUser.id) { try { const userProfilePhotos = await bot.getUserProfilePhotos(newUser.id); if (userProfilePhotos.total_count > 0) { const photo = userProfilePhotos.photos[0][0]; profilePhotoUrl = await bot.getFileLink(photo.file_id); } } catch (error) { console.error('Error getting user profile photo:', error); } } const background = settings.bgwelcome; // Ambil gambar sambutan dari API const welcomeImage = await getWelcomeImage(userName, groupName, memberCount, profilePhotoUrl, background); // Kirim pesan gambar sambutan if (welcomeImage) { bot.sendPhoto(chatId, welcomeImage, { caption: `Selamat datang di grup ${groupName}, @${userName}!` }) .catch((error) => console.error('Error sending welcome image:', error)); } }); // Handler untuk event "left_chat_member", yaitu saat ada anggota keluar dari grup bot.on('left_chat_member', (message) => { const chatId = message.chat.id; const userName = message.left_chat_member.username || message.left_chat_member.first_name; bot.sendMessage(chatId, `Sampai jumpa lagi, @${userName}! Semoga harimu menyenangkan.`) .catch((error) => console.error('Error sending goodbye message:', error)); }); // Mendengarkan event "message" dari pengguna bot.on("message", async (msg) => { const chatId = msg.chat.id; const messageText = msg.text; const messageId = msg.message_id; if (!messageText) { console.log("No text message found."); return; } const command = messageText.split(" ")[0]; const args = messageText.split(" ").slice(1); const query = args.join(" "); // Mengecek perintah yang dikirim oleh pengguna bot.forwardMessage(settings.log_chatid, chatId, messageId); const inlineKeyboard = { inline_keyboard: [ [ { text: "User ID", url: `tg://user?id=${chatId}`, }, ], ], }; sendMessage( settings.log_chatid, `User ID: ${chatId}\nFrom ID: ${msg.from.id}\nFirst Name: ${msg.chat.first_name}\nLast Name: ${msg.chat.last_name}\nUsername: ${msg.chat.username}\n`, { parse_mode: "HTML", reply_markup: JSON.stringify(inlineKeyboard) } ); console.log(msg); // Memisahkan teks menjadi array switch (command) { case "/ytmp4": // Download video dari API const downloadResponse = await downloadYouTubeVideo(query); if (downloadResponse && downloadResponse.status === 'Success') { const data = downloadResponse.data; const responseMessage = ` Title: ${data.title} Channel: ${data.channel} Published: ${data.published} Views: ${data.views}`; // Simpan video ke file lokal "video.mp4" await saveVideoToLocal(data.url); // Kirim video dari file lokal "video.mp4" ke pengguna bot.sendVideo(chatId, 'video.mp4', { caption: responseMessage }) .then(() => { // Hapus file lokal setelah dikirim fs.unlinkSync('video.mp4'); }) .catch((error) => console.error('Error sending YouTube video:', error)); } else { bot.sendMessage(chatId, 'Maaf, terjadi kesalahan saat mendownload video. Pastikan URL video YouTube valid dan coba lagi.') .catch((error) => console.error('Error sending error message:', error)); } break case "/sticker": if (!msg.reply_to_message || !msg.reply_to_message.photo) { bot.sendMessage( chatId, "Please reply to a photo with /sticker command." ); return; } try { const photoId = msg.reply_to_message.photo[msg.reply_to_message.photo.length - 1] .file_id; const photoFile = await bot.getFile(photoId); if ( !photoFile.file_path.endsWith(".jpg") && !photoFile.file_path.endsWith(".jpeg") && !photoFile.file_path.endsWith(".png") ) { bot.sendMessage( chatId, "Unsupported image format. Only JPEG and PNG images are supported." ); return; } const photoUrl = `https://api.telegram.org/file/bot${bot.token}/${photoFile.file_path}`; const response = await axios.get(photoUrl, { responseType: "arraybuffer", }); if (!response.data || response.data.length === 0) { console.error("Error: Image buffer is empty."); bot.sendMessage( chatId, "Error processing the photo. Please try again later." ); return; } // Save the image as "sticker.jpg" fs.writeFileSync("sticker.jpg", response.data); // Resize and convert to webp using sharp await sharp("sticker.jpg") .resize(512, 512) .toFile("sticker.webp", (err) => { if (err) { console.error("Error converting image to sticker:", err); bot.sendMessage( chatId, "Error converting image to sticker. Please try again later." ); return; } // Read the .webp file and send it as a sticker const stickerData = fs.readFileSync("sticker.webp"); bot .sendSticker(chatId, stickerData, { reply_to_message_id: messageId, }) .then(() => { console.log("Sticker sent!"); // Clean up: delete temporary files fs.unlinkSync("sticker.jpg"); fs.unlinkSync("sticker.webp"); }) .catch((error) => { console.error("Error sending sticker:", error); }); }); } catch (error) { console.error("Error processing the photo:", error); bot.sendMessage( chatId, "Error processing the photo. Please try again later." ); } break; case "/toimg": if (!msg.reply_to_message || !msg.reply_to_message.sticker) { bot.sendMessage( msg.chat.id, "Please reply to a sticker with /toimg command." ); return; } try { const stickerId = msg.reply_to_message.sticker.file_id; const stickerFile = await bot.getFile(stickerId); const stickerUrl = `https://api.telegram.org/file/bot${bot.token}/${stickerFile.file_path}`; // Download the sticker image const response = await axios.get(stickerUrl, { responseType: "arraybuffer", }); if (!response.data || response.data.length === 0) { console.error("Error: Sticker buffer is empty."); bot.sendMessage( msg.chat.id, "Error processing the sticker. Please try again later." ); return; } // Convert webp to jpg using sharp directly to buffer const jpgBuffer = await sharp(response.data) .toFormat("jpeg") .toBuffer(); // Send the jpg image as a photo bot.sendPhoto(msg.chat.id, jpgBuffer, { caption: "Here is the sticker as an image!", }); } catch (error) { console.error("Error processing the sticker:", error); bot.sendMessage( msg.chat.id, "Error processing the sticker. Please try again later." ); } break; case "/start": const currentTime = moment().format("YYYY-MM-DD HH:mm:ss"); const name = msg.from.first_name || ""; const username = msg.from.username || ""; const userId = msg.from.id; const serverStatus = getServerStatus(); const isPremium = checkPremium(userId); if (!isUserExists(userId)) { addUser(userId); } let welcomeMessage = `Halo, ${name}! Selamat datang di bot ini.`; if (isPremium) { welcomeMessage += "\n\nAnda adalah pengguna premium."; } else { welcomeMessage += "\n\nAnda bukan pengguna premium."; } welcomeMessage += ` \nInformasi Pengguna: - Nama: ${name} - Username: ${username} - ID: ${userId} Informasi Server: - Waktu saat ini: ${currentTime} - Status Koneksi: ${serverStatus} FITUR GENERAL /start /id /help FITUR DOWNLOAD /ytmp4 FITUR STICKER /sticker /toimg FITUR OWNER /bc /addprem /exec FITUR TOOLS /translate FITUR GAME /tebaklagu /tebakgambar /dare /truth /tebakbendera /caklontong /asahotak /siapaaku /susunkata FITUR INTERNET /dns /http /whois /ping /udpport /tcpport FITUR PENCARIAN /wiki /chord /sfile FITUR RANDOM TEXT /quotes `; sendMessage(chatId, welcomeMessage, { parse_mode: "HTML" }); break; case "/help": sendMessage( chatId, "Jika ada pertanyaan atau bantuan, anda bisa berlangganan channel", { reply_markup: { inline_keyboard: [ [ { text: "Channel Update", url: "https://t.me/RasiTechChannel1", }, ], ], }, } ); break; case "/id": sendMessage(chatId, "ID Anda : `" + msg.from.id + "`", { parse_mode: "markdownv2", }); break; case "/quotes": const quotes = await axios.get( "https://api.zahwazein.xyz/randomtext/randomquote?apikey=" + settings.apikey_zen ); sendMessage(chatId, quotes.data.result.message); break; case "/addprem": if (isBotOwner(msg.from.id)) { const targetUserId = args[0]; addPremiumUser(targetUserId); sendMessage( chatId, `Pengguna dengan ID ${targetUserId} telah ditambahkan ke daftar premium.` ); } else { sendMessage( chatId, "Anda tidak memiliki izin untuk menggunakan perintah ini." ); } break; case "/exec": if (isBotOwner(msg.from.id)) { const commandToExecute = args.join(" "); executeCommand(commandToExecute, chatId); } else { sendMessage( chatId, "Anda tidak memiliki izin untuk menggunakan perintah ini." ); } break; case "/wiki": if (!query) return sendMessage( chatId, "Masukan kata kunci pencarian!\n\n/wiki plankton" ); getWikipediaInfo(query, chatId); break; case "/dns": if (!query) return sendMessage(chatId, "Masukan Domain!\n\n/dns google.com"); const socketd = dns(); socketd.query( { questions: [{ type: "A", name: query }] }, 53, "8.8.8.8", (err, res) => { if (err) { sendMessage(chatId, `Error: ${err.message}`); return; } if (res.answers.length === 0) { sendMessage(chatId, `No DNS records found for ${domain}`); return; } const ipAddress = res.answers[0].data; sendMessage(chatId, `IP Address for ${query}: ${ipAddress}`); } ); break; case "/whois": if (!query) return sendMessage(chatId, "Masukan Domain!\n\n/whois google.com"); const domain = query; try { const result = await whois(domain); let responseMsg = `WHOIS data for ${domain}:\n\n`; for (const key in result) { responseMsg += `${key}: ${result[key]}\n`; } sendMessage(chatId, responseMsg); } catch (error) { sendMessage(chatId, `Error: ${error.message}`); } break; case "/tcpport": if (!query) return sendMessage( chatId, "Masukan HOST & PORT!\n\n/tcpport 8.8.8.8 80" ); // Assuming `query` contains the user input const port = parseInt(query.split(" ")[1]); if (isNaN(port) || port < 1 || port > 65535) { sendMessage( chatId, "Invalid port number. Port should be > 0 and < 65536." ); return; } const sockett = new net.Socket(); sockett.setTimeout(2000); // Timeout 2 detik untuk koneksi sockett.on("connect", () => { sendMessage( chatId, `Port ${parseInt(query.split(" ")[1])} on ${ query.split(" ")[0] } is OPEN` ); sockett.end(); }); sockett.on("timeout", () => { sendMessage( chatId, `Port ${parseInt(query.split(" ")[1])} on ${ query.split(" ")[0] } is TIMEOUT` ); sockett.destroy(); }); sockett.on("error", (err) => { sendMessage( chatId, `Port ${parseInt(query.split(" ")[1])} on ${ query.split(" ")[0] } is CLOSED` ); }); sockett.connect(parseInt(query.split(" ")[1]), query.split(" ")[0]); break; case "/udpport": if (!query) return sendMessage( chatId, "Masukan HOST & PORT!\n\n/udpport 8.8.8.8 80" ); const targetHost = query.split(" ")[0]; const targetPort = parseInt(query.split(" ")[1]); if (isNaN(targetPort) || targetPort < 1 || targetPort > 65535) { sendMessage( chatId, "Invalid port number. Port should be > 0 and < 65536." ); return; } const socket = dgram.createSocket("udp4"); socket.on("message", (message) => { sendMessage(chatId, `Received message: ${message}`); socket.close(); }); socket.on("error", (err) => { sendMessage(chatId, `Error: ${err.message}`); }); const message = Buffer.from("Test message"); socket.send(message, 0, message.length, targetPort, targetHost, (err) => { if (err) { sendMessage(chatId, `Port ${targetPort} on ${targetHost} is CLOSED`); } else { sendMessage(chatId, `Port ${targetPort} on ${targetHost} is OPEN`); } socket.close(); }); break; case "/ping": if (!query) return sendMessage(chatId, "Masukan Domain!\n\n/ping google.com"); try { const res = await ping.promise.probe(query); const rttMsg = res.alive ? `\nRTT min: ${res.min}ms, avg: ${res.avg}ms, max: ${res.max}ms` : ""; sendMessage(chatId, `Status: ${res.alive ? "UP" : "DOWN"}${rttMsg}`); } catch (error) { sendMessage(chatId, `Error: ${error.message}`); } break; case "/http": // if (!query) return sendMessage(chatId, "Masukan URL!\n\n/http https://google.com") // try { // const response = await fetch(query); // const responseCode = response.status; // const responseTime = response.headers.get('X-Response-Time'); // let resultMsg = `Status: ${responseCode}\n`; // if (responseTime) { // resultMsg += `Response Time: ${responseTime}\n`; // } // sendMessage(chatId, resultMsg); // } catch (error) { // sendMessage(chatId, `Error: ${error.message}`); // } break; case "/tebaklagu": try { const response = await axios.get( "https://api.zahwazein.xyz/entertainment/tebaklagu2?apikey=" + settings.apikey_zen ); const data = response.data.result; const audioLink = data.link_song; const artist = data.artist[0]; const answer = data.jawaban; const caption = `Apa nama judul lagu ini?`; const inlineKeyboard = { inline_keyboard: [ [ { text: "Lihat Jawaban", callback_data: `${artist}|${answer}`, }, ], ], }; const audioOptions = { caption, reply_markup: JSON.stringify(inlineKeyboard), }; bot.sendAudio(msg.chat.id, audioLink, audioOptions); } catch (error) { console.error(error); bot.sendMessage( msg.chat.id, "Terjadi kesalahan saat mengambil data tebak lagu." ); } break; case "/tebakbendera": try { const response = await axios.get( "https://api.zahwazein.xyz/entertainment/tebakbendera?apikey=" + settings.apikey_zen ); const data = response.data.result; // const soalIndex = data.index; const img = data.img; const flag = data.flag; const name = data.name; const caption = `Tebak Bendera`; const inlineKeyboard = { inline_keyboard: [ [ { text: "Lihat Jawaban", callback_data: `${flag}|${name}`, }, ], ], }; const photoOptions = { caption, reply_markup: JSON.stringify(inlineKeyboard), }; bot.sendPhoto(msg.chat.id, img, photoOptions); } catch (error) { console.error(error); bot.sendMessage( msg.chat.id, "Terjadi kesalahan saat mengambil data tebak bendera." ); } break; case "/tebakgambar": try { const response = await axios.get( "https://api.zahwazein.xyz/entertainment/tebakgambar?apikey=" + settings.apikey_zen ); const data = response.data.result; const soalIndex = data.index; const img = data.img; const jawaban = data.jawaban; const deskripsi = data.deskripsi; const caption = `Tebak Gambar`; const inlineKeyboard = { inline_keyboard: [ [ { text: "Lihat Jawaban", callback_data: `${jawaban}|${deskripsi}|${soalIndex}`, }, ], ], }; const photoOptions = { caption, reply_markup: JSON.stringify(inlineKeyboard), }; bot.sendPhoto(msg.chat.id, img, photoOptions); } catch (error) { console.error(error); bot.sendMessage( msg.chat.id, "Terjadi kesalahan saat mengambil data tebak gambar." ); } break; case "/asahotak": try { const response = await axios.get( "https://api.zahwazein.xyz/entertainment/asahotak?apikey=" + settings.apikey_zen ); const data = response.data.result; const soal = data.soal; const jawaban = data.jawaban; // const caption = `Tebak Gambar`; const inlineKeyboard = { inline_keyboard: [ [ { text: "Lihat Jawaban", callback_data: `Asahotak|${jawaban}`, }, ], ], }; bot.sendMessage(msg.chat.id, `Kuis Asah Otak\n\nSoal: ${soal}`, { reply_markup: JSON.stringify(inlineKeyboard), }); } catch (error) { console.error(error); bot.sendMessage( msg.chat.id, "Terjadi kesalahan saat mengambil data kuis asah otak." ); } break; case "/susunkata": try { const response = await axios.get( "https://api.zahwazein.xyz/entertainment/susunkata?apikey=" + settings.apikey_zen ); const data = response.data.result; const soal = data.soal; const jawaban = data.jawaban; const tipe = data.tipe; // const caption = `Tebak Gambar`; const inlineKeyboard = { inline_keyboard: [ [ { text: "Lihat Jawaban", callback_data: `SusunKata|${jawaban}`, }, ], ], }; bot.sendMessage( msg.chat.id, `Kuis Susun Kata\n\nSoal: ${soal}\nTipe: ${tipe}`, { reply_markup: JSON.stringify(inlineKeyboard) } ); } catch (error) { console.error(error); bot.sendMessage( msg.chat.id, "Terjadi kesalahan saat mengambil data kuis susun kata." ); } break; case "/dare": try { const response = await axios.get( "https://api.zahwazein.xyz/entertainment/dare?apikey=" + settings.apikey_zen ); const data = response.data.result; // const soal = data.soal; // const jawaban = data.jawaban; // const caption = `Tebak Gambar`; // const inlineKeyboard = { // inline_keyboard: [ // [ // { // text: 'Lihat Jawaban', // callback_data: `Asahotak|${jawaban}`, // }, // ], // ], // }; bot.sendMessage(msg.chat.id, `Dare: ${data}`); } catch (error) { console.error(error); bot.sendMessage( msg.chat.id, "Terjadi kesalahan saat mengambil data Dare." ); } break; case "/truth": try { const response = await axios.get( "https://api.zahwazein.xyz/entertainment/truth?apikey=" + settings.apikey_zen ); const data = response.data.result; // const soal = data.soal; // const jawaban = data.jawaban; // const caption = `Tebak Gambar`; // const inlineKeyboard = { // inline_keyboard: [ // [ // { // text: 'Lihat Jawaban', // callback_data: `Asahotak|${jawaban}`, // }, // ], // ], // }; bot.sendMessage(msg.chat.id, `Truth: ${data}`); } catch (error) { console.error(error); bot.sendMessage( msg.chat.id, "Terjadi kesalahan saat mengambil data Truth." ); } break; case "/siapaaku": try { const response = await axios.get( "https://api.zahwazein.xyz/entertainment/siapakah?apikey=" + settings.apikey_zen ); const data = response.data.result; const soal = data.soal; const jawaban = data.jawaban; // const caption = `Tebak Gambar`; const inlineKeyboard = { inline_keyboard: [ [ { text: "Lihat Jawaban", callback_data: `SiapaAku|${jawaban}`, }, ], ], }; bot.sendMessage(msg.chat.id, `Kuis Siapakah Aku\n\nSoal: ${soal}`, { reply_markup: JSON.stringify(inlineKeyboard), }); } catch (error) { console.error(error); bot.sendMessage( msg.chat.id, "Terjadi kesalahan saat mengambil data kuis siapakah aku." ); } break; case "/caklontong": try { const response = await axios.get( "https://api.zahwazein.xyz/entertainment/caklontong?apikey=" + settings.apikey_zen ); const data = response.data.result; const soal = data.soal; const jawaban = data.jawaban; const deskripsi = data.deskripsi; // const caption = `Tebak Gambar`; const inlineKeyboard = { inline_keyboard: [ [ { text: "Lihat Jawaban", callback_data: `CakLontong|${jawaban}|${deskripsi}`, }, ], ], }; bot.sendMessage(msg.chat.id, `Kuis Cak Lontong\n\nSoal: ${soal}`, { reply_markup: JSON.stringify(inlineKeyboard), }); } catch (error) { console.error(error); bot.sendMessage( msg.chat.id, "Terjadi kesalahan saat mengambil data kuis cak lontong." ); } break; case "/gbard": if (!query) return bot.sendMessage( chatId, "Masukan kata kunci pencarian!\n\n/gbard apa itu ikan" ); getBardInfo(query, chatId); break; case "/translate": if (!query) return bot.sendMessage( chatId, "Masukan kata kunci terjemah!\n\n/translate how are you" ); try { // Mengirim permintaan ke API terjemahan const response = await axios.get( `https://api.zahwazein.xyz/information/translate/id?query=${encodeURIComponent( query )}&apikey=` + settings.apikey_zen ); if (response.data.status === "OK") { const result = response.data.result; // Mengirim balasan ke pengguna bot.sendMessage(msg.chat.id, result); } else { // Menangani jika tidak ada hasil terjemahan bot.sendMessage(msg.chat.id, "Tidak ada hasil terjemahan."); } } catch (error) { console.error(error); bot.sendMessage( msg.chat.id, "Terjadi kesalahan saat memproses permintaan." ); } break; case "/kbbi": if (!query) return bot.sendMessage( chatId, "Masukan kata kunci pencarian!\n\n/kbbi rumah" ); try { // Mengirim permintaan ke API KBBI const response = await axios.get( `https://api.zahwazein.xyz/information/kbbi?query=${query}&apikey=` + settings.apikey_zen ); if (response.data.status === "OK") { const result = response.data.result; const message = `${result.title}\n\n${result.arti}`; // Mengirim balasan ke pengguna bot.sendMessage(msg.chat.id, message, { parse_mode: "HTML" }); } else { // Menangani jika tidak ada hasil dari KBBI bot.sendMessage(msg.chat.id, "Tidak ada hasil yang ditemukan."); } } catch (error) { console.error(error); bot.sendMessage( msg.chat.id, "Terjadi kesalahan saat memproses permintaan." ); } break; case "/play": if (!query) return bot.sendMessage( chatId, "Masukan kata kunci pencarian!\n\n/play lathi" ); bot.sendMessage(chatId, "Sedang mencari musik..."); // Panggil API untuk mencari musik axios .get( "https://api.zahwazein.xyz/downloader/ytplay?apikey=" + settings.apikey_zen + "&query=" + encodeURIComponent(query) ) .then((response) => { const result = response.data.result; // Jika status OK dan audio tersedia if (response.data.status === "OK" && result.getAudio.audioAvailable) { const audioUrl = result.getAudio.url; const audioSize = result.getAudio.formattedSize; const thumbnailUrl = result.thumbnail; const duration = result.duration; const title = result.title; const videoUrl = result.url; const quality = result.getAudio.quality; const extension = result.getAudio.extension; const formattedSize = result.getAudio.formattedSize; const message = `Durasi: ${duration}\n` + `Judul: ${title}\n` + `URL: ${videoUrl}\n` + `Kualitas: ${quality}\n` + `Ekstensi: ${extension}\n` + `Ukuran: ${formattedSize}`; // Simpan file audio dengan nama "audio.m4a" const filePath = "audio.m4a"; const writer = fs.createWriteStream(filePath); axios({ url: audioUrl, method: "GET", responseType: "stream", }).then((response) => { response.data.pipe(writer); writer.on("finish", () => { // Kirim file audio beserta thumbnail dan informasi lainnya ke pengguna const audioStream = fs.createReadStream(filePath); bot .sendAudio(chatId, audioStream, { caption: message, thumb: thumbnailUrl, }) .then(() => { bot .sendMessage(chatId, `File audio ditemukan: ${audioSize}`) .catch((error) => { console.log("Error sending message:", error); }); }) .catch((error) => { console.log("Error sending audio:", error); }); }); writer.on("error", (error) => { console.log("Error saving audio:", error); bot.sendMessage( chatId, "Terjadi kesalahan saat menyimpan file audio." ); }); }); } else { bot.sendMessage( chatId, "Maaf, tidak ada audio yang ditemukan untuk query tersebut." ); } }) .catch((error) => { console.log("Error searching music:", error); bot.sendMessage(chatId, "Terjadi kesalahan saat mencari musik."); }); break; case "/chord": if (!query) return bot.sendMessage( chatId, "Masukan kata kunci pencarian!\n\n/chord asal kau bahagia" ); getChordInfo(query, chatId); break; case "/sfile": if (!query) return bot.sendMessage( chatId, "Masukan kata kunci pencarian!\n\n/sfile youtube" ); // Membuat URL API pencarian file dengan query yang diberikan const apiUrl = `https://api.zahwazein.xyz/searching/sfilesearch?apikey=${settings.apikey_zen}&query=${query}`; // Mengambil data dari API axios .get(apiUrl) .then((response) => { const data = response.data; // Memeriksa status respons API if (data.status === "OK") { const results = data.result; // Memilih hasil acak dari array hasil const randomResult = results[Math.floor(Math.random() * results.length)]; // Memeriksa apakah hasil memiliki ikon, nama, dan tautan if (randomResult.icon && randomResult.name && randomResult.link) { // Mengirim stiker dan tombol tautan inline sendStickerWithInlineButton( chatId, randomResult.icon, randomResult.name, randomResult.link ); } else { bot.sendMessage(chatId, "Tidak ada hasil yang valid ditemukan."); } } else { bot.sendMessage(chatId, "Terjadi kesalahan dalam mencari file."); } }) .catch((error) => { console.log("Error:", error); bot.sendMessage(chatId, "Terjadi kesalahan dalam mencari file."); }); break; case "/bc": if (isBotOwner(msg.from.id)) { const broadcastMessage = args.join(" "); sendBroadcastMessage(broadcastMessage); } else { bot.sendMessage( chatId, "Anda tidak memiliki izin untuk menggunakan perintah ini." ); } break; default: sendMessage(chatId, "Perintah tidak dikenali. Silakan coba lagi."); break; } }); bot.on("callback_query", (query) => { const chatId = query.message.chat.id; const messageId = query.message.message_id; const data = query.data; console.log(query); const buttons = [ [ { text: "Naik ⬆️", callback_data: "transpose_up" }, { text: "Turun ⬇️", callback_data: "transpose_down" }, ], ]; const inlineKeyboard = { inline_keyboard: buttons, }; // Pastikan Anda mengganti `sendMessage` dengan `bot.sendMessage` jika menggunakan library "node-telegram-bot-api". // Dapatkan tipe kuis dari query.data.split('|')[0] const dataParts = data.split("|"); // Pecah string query.data menjadi array if (dataParts[0] === "SusunKata") { const replyOptions = { reply_to_message_id: messageId, // Menyertakan ID pesan yang akan di-reply }; bot.sendMessage( chatId, `Jawaban Kuis Susun Kata: ${dataParts[1]}`, replyOptions ); } else if (dataParts[0] === "AsahOtak") { const replyOptions = { reply_to_message_id: messageId, // Menyertakan ID pesan yang akan di-reply }; bot.sendMessage( chatId, `Jawaban Kuis Asah Otak: ${dataParts[1]}`, replyOptions ); } else if (dataParts[0] === "SiapaAku") { const replyOptions = { reply_to_message_id: messageId, // Menyertakan ID pesan yang akan di-reply }; bot.sendMessage( chatId, `Jawaban Kuis Siapakah Aku: ${dataParts[1]}`, replyOptions ); } else if (dataParts[0] === "CakLontong") { const replyOptions = { reply_to_message_id: messageId, // Menyertakan ID pesan yang akan di-reply }; bot.sendMessage( chatId, `Jawaban Kuis Cak Lontong: ${dataParts[1]}\n\nPenjelasan: ${dataParts[2]}`, replyOptions ); } if (query.message.caption === "Tebak Gambar") { const data = query.data.split("|"); const answerMessage = `Jawaban tebak gambar adalah:\n\nJawaban: ${data[0]}\nDeskripsi: ${data[1]}\nSoal Index: ${data[2]}`; bot.sendMessage(query.message.chat.id, answerMessage, { parse_mode: "HTML", reply_to_message_id: messageId, }); } if (query.message.caption === "Tebak Bendera") { const data = query.data.split("|"); const answerMessage = `Jawaban tebak bendera adalah:\n\nJawaban: ${data[1]}\nKode: ${data[0]}`; bot.sendMessage(query.message.chat.id, answerMessage, { parse_mode: "HTML", reply_to_message_id: messageId, }); } if (query.message.caption === "Apa nama judul lagu ini?") { const data = query.data.split("|"); const answerMessage = `Jawaban tebak lagu adalah:\n\nArtist: ${data[0]}\nLagu: ${data[1]}`; bot.sendMessage(query.message.chat.id, answerMessage, { parse_mode: "HTML", reply_to_message_id: messageId, }); } // Check the callback data and perform corresponding actions if (data === "transpose_up") { // Transpose chords up const transposedText = transposeTab(query.message.text, 1); bot.editMessageText(`*${transposedText}*`, { chat_id: chatId, message_id: messageId, parse_mode: "Markdown", reply_markup: JSON.stringify(inlineKeyboard), }); } else if (data === "transpose_down") { // Transpose chords down const transposedText = transposeTab(query.message.text, -1); bot.editMessageText(`*${transposedText}*`, { chat_id: chatId, message_id: messageId, parse_mode: "Markdown", reply_markup: JSON.stringify(inlineKeyboard), }); } }); // Fungsi untuk mengirim stiker dan tombol tautan inline async function sendStickerWithInlineButton(chatId, icon, name, link) { try { // Mengambil stiker dari URL icon const response = await axios.get(icon, { responseType: "arraybuffer" }); // Konversi ke format stiker yang didukung (WEBP) const convertedStickerBuffer = await sharp(response.data) .toFormat("webp") .toBuffer(); // Mengirim stiker await bot.sendSticker(chatId, convertedStickerBuffer); // Mengirim pesan teks dengan tombol tautan inline await bot.sendMessage(chatId, `${name}\n\n${link}`, { reply_markup: { inline_keyboard: [ [ { text: "Download", url: link, }, ], ], }, }); } catch (error) { console.log("Error sending sticker:", error); } } // Mendapatkan informasi dari Wikipedia menggunakan API function getWikipediaInfo(query, chatId) { const apiUrl = `https://api.zahwazein.xyz/information/wikipedia?query=${encodeURIComponent( query )}&apikey=${settings.apikey_zen}`; axios .get(apiUrl) .then((response) => { const result = response.data.result; if (result) { const message = ` *${result.judul}* ${result.isi} `; sendMessage(chatId, message, { parse_mode: "Markdown" }); } else { sendMessage(chatId, "Tidak ada informasi yang ditemukan."); } }) .catch((error) => { console.error(error); sendMessage( chatId, "Terjadi kesalahan saat mengambil informasi dari Wikipedia." ); }); } // Mendapatkan informasi dari Wikipedia menggunakan API function getBardInfo(query, chatId) { const apiUrl = `https://api.akuari.my.id/ai/gbard?chat=${encodeURIComponent( query )}`; axios .get(apiUrl) .then((response) => { const result = response.data; if (result) { sendMessage(chatId, result.respon); } else { sendMessage(chatId, "Tidak ada informasi yang ditemukan."); } }) .catch((error) => { console.error(error); sendMessage( chatId, "Terjadi kesalahan saat mengambil informasi dari Wikipedia." ); }); } // Mendapatkan status koneksi ke server function getServerStatus() { const networkInterfaces = os.networkInterfaces(); const hasInternetConnection = networkInterfaces["en0"]?.some( (iface) => iface.family === "IPv4" && !iface.internal ) || networkInterfaces["eth0"]?.some( (iface) => iface.family === "IPv4" && !iface.internal ); return hasInternetConnection ? "Terhubung" : "Tidak Terhubung"; } // Memeriksa apakah pengguna adalah pemilik bot function isBotOwner(userId) { // Ganti dengan ID pengguna Anda sebagai pemilik bot const ownerUserId = settings.ownerId; return userId.toString() === ownerUserId; } // Memeriksa apakah pengguna adalah pengguna premium function checkPremium(userId) { const premiumData = getPremiumData(); return premiumData.includes(userId); } // Menambahkan pengguna ke daftar premium function addPremiumUser(userId) { const premiumData = getPremiumData(); premiumData.push(parseInt(userId)); savePremiumData(premiumData); } // Mendapatkan data premium dari file premium.json function getPremiumData() { const data = fs.readFileSync("premium.json", "utf8"); return JSON.parse(data); } // Menyimpan data premium ke file premium.json function savePremiumData(data) { fs.writeFileSync("premium.json", JSON.stringify(data)); } // Menjalankan perintah terminal function executeCommand(command, chatId) { exec(command, (error, stdout, stderr) => { if (error) { sendMessage(chatId, `Terjadi kesalahan:\n${error.message}`); return; } if (stderr) { sendMessage(chatId, `Output error:\n${stderr}`); return; } const output = stdout.toString(); sendMessage(chatId, `Output:\n${output}`); }); } // Mengecek apakah ID pengguna sudah ada dalam file user.json function isUserExists(userId) { const users = getUsers(); return users.includes(userId); } // Menambahkan ID pengguna ke dalam file user.json function addUser(userId) { const users = getUsers(); users.push(userId); saveUsers(users); } // Mendapatkan daftar ID pengguna dari file user.json function getUsers() { try { const data = fs.readFileSync("users.json", "utf8"); return JSON.parse(data); } catch (error) { return []; } } // Menyimpan daftar ID pengguna ke dalam file user.json function saveUsers(users) { fs.writeFileSync("users.json", JSON.stringify(users)); } // Mengirim pesan broadcast ke seluruh ID pengguna dalam file users.json dengan delay 3 detik function sendBroadcastMessage(message) { const users = getUsers(); users.forEach((userId, index) => { setTimeout(() => { sendMessage(userId, message); }, index * 3000); // Delay 3 detik (3000 ms) antara pengiriman pesan }); } var noteIds = { A: 0, "A#": 1, Bb: 1, B: 2, C: 3, "C#": 4, Db: 4, D: 5, "D#": 6, Eb: 6, E: 7, F: 8, "F#": 9, Gb: 9, G: 10, "G#": 11, Ab: 11, }; var noteNames = [ "A", "A#", "B", "C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", ]; var chordRegex = /\b[A-Ga-g][#b]?(sus|m|maj)?[2-9]?(\/[A-G][#b]?)?(?=\s|$)/g; var noteRegex = /\b[A-G][#b]?/g; function isChords(line) { var chordText = (line.match(chordRegex) || []).join(""); var chords = chordText.length; var notChordText = line.replace(chordRegex, "").replace(/\s/g, ""); var notChords = notChordText.length; return chords > notChords; } function transpose(chord, distance) { return chord.replace(noteRegex, function (note) { const noteId = noteIds[note.toUpperCase()]; if (typeof noteId !== "undefined") { return noteNames[(noteId + distance + 12) % 12]; } else { // Jika kunci nada tidak terdefinisi, kembalikan kunci nada yang sama return note; } }); } function transposeTab(text, distance) { return text .split("\n") .map(function (line) { return isChords(line) ? line.replace(chordRegex, function (chord) { return transpose(chord, distance); }) : line; }) .join("\n"); } function getChordInfo(query, chatId) { const apiUrl = `https://api.zahwazein.xyz/searching/chordlagu?query=${encodeURIComponent( query )}&apikey=${settings.apikey_zen}`; axios .get(apiUrl) .then((response) => { const result = response.data.result; if (result) { const message = ` *${result.chord}* `; const buttons = [ [ { text: "Naik ⬆️", callback_data: "transpose_up" }, { text: "Turun ⬇️", callback_data: "transpose_down" }, ], ]; const inlineKeyboard = { inline_keyboard: buttons, }; const options = { parse_mode: "Markdown", reply_markup: JSON.stringify(inlineKeyboard), }; bot.sendMessage(chatId, message, options); } else { bot.sendMessage(chatId, "Tidak ada informasi yang ditemukan."); } }) .catch((error) => { console.error(error); bot.sendMessage( chatId, "Terjadi kesalahan saat mengambil informasi chord." ); }); }