Closure-RI commited on
Commit
63d1f46
Β·
verified Β·
1 Parent(s): f57e5b7

Update index.js

Browse files
Files changed (1) hide show
  1. index.js +139 -0
index.js CHANGED
@@ -34,6 +34,8 @@ const { exec } = require('child_process');
34
  const writeFileAsync = promisify(fs.writeFile);
35
  const execPromise = promisify(exec);
36
  const youtube = google.youtube({ version: 'v3', auth: 'AIzaSyBPkpdJEGtAHebbaP3_CcA1_urfMFfeLLg' });
 
 
37
 
38
 
39
 
@@ -986,6 +988,143 @@ app.post("/cobalt", async (req, res) => {
986
  ┗┛┗━┛┗━━━┛┗┛┗┛┗┛┗━━┛┗┛┗━┛┗━━━┛
987
  *********************/
988
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
989
  // Fungsi untuk ping website
990
  async function pingWebsite() {
991
  const browser = await puppeteer.launch({
 
34
  const writeFileAsync = promisify(fs.writeFile);
35
  const execPromise = promisify(exec);
36
  const youtube = google.youtube({ version: 'v3', auth: 'AIzaSyBPkpdJEGtAHebbaP3_CcA1_urfMFfeLLg' });
37
+ const bodyParser = require('body-parser');
38
+ app.use(bodyParser.json());
39
 
40
 
41
 
 
988
  ┗┛┗━┛┗━━━┛┗┛┗┛┗┛┗━━┛┗┛┗━┛┗━━━┛
989
  *********************/
990
 
991
+
992
+
993
+
994
+ async function downloadImageTw(url) {
995
+ const randomFilename = generateRandomName(10) + '.png';
996
+ const tmpFilePath = path.join(tempDir, randomFilename);
997
+ const writer = fs.createWriteStream(tmpFilePath);
998
+ const response = await axios({
999
+ url,
1000
+ method: 'GET',
1001
+ responseType: 'stream',
1002
+ });
1003
+ response.data.pipe(writer);
1004
+ return new Promise((resolve, reject) => {
1005
+ writer.on('finish', () => resolve(tmpFilePath));
1006
+ writer.on('error', reject);
1007
+ });
1008
+ }
1009
+ const delay = (ms) => new Promise(resolve => setTimeout(resolve, ms));
1010
+
1011
+
1012
+ async function generateFakeTweet(inputData) {
1013
+ const browser = await puppeteer.launch({
1014
+ headless: true,
1015
+ args: ['--no-sandbox', '--disable-setuid-sandbox']
1016
+ });
1017
+ const page = await browser.newPage();
1018
+ await page.setUserAgent("Mozilla/5.0 (Linux; Android 10; SM-G965U Build/QP1A.190711.020; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/114.0.5735.141 Mobile Safari/537.36 [FB_IAB/FB4A;FBAV/420.0.0.32.61;]");
1019
+
1020
+ // Navigate to the target website
1021
+ await page.goto('https://tweethunter.io/fake-tweet-generator', { waitUntil: 'domcontentloaded' });
1022
+
1023
+ // Input tweet body
1024
+ await page.type('#__next > main > div.css-1a1quzv > div.css-rgogwv > div > div.css-1x69bgs > div.css-1c0llw > div > div > div.css-79elbk > div > textarea', inputData.body);
1025
+
1026
+ // Upload profile picture (example, replace with your file path)
1027
+ const profilePicInput = await page.$('#__next > main > div.css-1a1quzv > div.css-rgogwv > div > div.css-1x69bgs > div.css-1c0llw > div > div > div.css-k008qs > div.css-x7nhqj > input[type=file]');
1028
+ if (inputData.profilePic) {
1029
+ let pp = await downloadImageTw(inputData.profilePic)
1030
+ await profilePicInput.uploadFile(pp);
1031
+ await delay(3000);
1032
+ await fs.unlinkSync(pp);
1033
+ }
1034
+
1035
+ // Input name
1036
+ await page.type('#__next > main > div.css-1a1quzv > div.css-rgogwv > div > div.css-1x69bgs > div.css-1c0llw > div > div > div.css-k008qs > div.css-6vtjga > div.chakra-editable.css-9bb4dk > div.css-126r5rm > input', inputData.name);
1037
+
1038
+ // Input username
1039
+ await page.type('#__next > main > div.css-1a1quzv > div.css-rgogwv > div > div.css-1x69bgs > div.css-1c0llw > div > div > div.css-k008qs > div.css-6vtjga > div.chakra-editable.css-94sw6d > div.css-t5wett > input', inputData.username);
1040
+
1041
+ // Upload optional image (replace with file path)
1042
+ const optionalImageInput = await page.$('#__next > main > div.css-1a1quzv > div.css-rgogwv > div > div.css-1x69bgs > div.css-1c0llw > div > div > div.css-13jo6jh > input[type=file]');
1043
+ if (inputData.optionalImage) {
1044
+ let opsi = await downloadImageTw(inputData.optionalImage)
1045
+ await optionalImageInput.uploadFile(opsi);
1046
+ await delay(3000)
1047
+ await fs.unlinkSync(opsi)
1048
+ }
1049
+
1050
+ // Input date
1051
+ await page.type('#__next > main > div.css-1a1quzv > div.css-rgogwv > div > div.css-1x69bgs > div.css-1c0llw > div > div > div.css-154a0dp > div.chakra-editable.css-1r4ohtm > div > input', inputData.date);
1052
+
1053
+ // Input views
1054
+ await page.type('#__next > main > div.css-1a1quzv > div.css-rgogwv > div > div.css-1x69bgs > div.css-1c0llw > div > div > div.css-154a0dp > div.css-100478 > div > div > input', inputData.views);
1055
+
1056
+ // Input retweets
1057
+ await page.type('#__next > main > div.css-1a1quzv > div.css-rgogwv > div > div.css-1x69bgs > div.css-1c0llw > div > div > div.chakra-wrap.css-8ywm5v > ul > div:nth-child(1) > div > input', inputData.retweets);
1058
+
1059
+ // Input quotes
1060
+ await page.type('#__next > main > div.css-1a1quzv > div.css-rgogwv > div > div.css-1x69bgs > div.css-1c0llw > div > div > div.chakra-wrap.css-8ywm5v > ul > div:nth-child(2) > div > input', inputData.quotes);
1061
+
1062
+ // Input likes
1063
+ await page.type('#__next > main > div.css-1a1quzv > div.css-rgogwv > div > div.css-1x69bgs > div.css-1c0llw > div > div > div.chakra-wrap.css-8ywm5v > ul > div:nth-child(3) > div > input', inputData.likes);
1064
+
1065
+ // Input bookmarks
1066
+ await page.type('#__next > main > div.css-1a1quzv > div.css-rgogwv > div > div.css-1x69bgs > div.css-1c0llw > div > div > div.chakra-wrap.css-8ywm5v > ul > div:nth-child(4) > div > input', inputData.bookmarks);
1067
+
1068
+ // Deselect SVG centang (for checkbox)
1069
+ await page.evaluate(() => {
1070
+ const centang = document.querySelector('#menu-button-\\:ro\\: > svg');
1071
+ if (centang) {
1072
+ centang.remove();
1073
+ }
1074
+ });
1075
+
1076
+ // Select theme (e.g., Light)
1077
+ await page.click(`#radio-\\:${inputData.theme}\\:`); // Dynamic theme selection
1078
+
1079
+ // Wait for the result image to appear
1080
+ await page.waitForSelector('#__next > main > div.css-1a1quzv > div.css-rgogwv > div > div.css-1x69bgs > div.css-0 > div > div > img');
1081
+
1082
+ // Get the result image as base64
1083
+ const resultBase64 = await page.$eval('#__next > main > div.css-1a1quzv > div.css-rgogwv > div > div.css-1x69bgs > div.css-0 > div > div > img', (img) => {
1084
+ return img.src;
1085
+ });
1086
+
1087
+
1088
+
1089
+ // Close the browser
1090
+ await browser.close();
1091
+
1092
+
1093
+ return resultBase64; // Return the base64 string of the image
1094
+ }
1095
+
1096
+
1097
+ // Rute untuk menerima data melalui query string (GET)
1098
+ app.get('/faketw', async (req, res) => {
1099
+ const inputData = {
1100
+ body: req.query.body || 'This is a fake tweet body!',
1101
+ profilePic: req.query.profilePic || 'https://raw.githubusercontent.com/LingMoen/COLAB/refs/heads/main/SKABIDI/SKADI_003.jpg',
1102
+ name: req.query.name || 'Skadi 🚽',
1103
+ username: req.query.username || '@Skabidi',
1104
+ optionalImage: req.query.optionalImage || 'https://raw.githubusercontent.com/LingMoen/COLAB/refs/heads/main/SKABIDI/SKADI_008.jpg',
1105
+ date: req.query.date || '2024-11-19T06:27',
1106
+ views: req.query.views || '1000',
1107
+ retweets: req.query.retweets || '200',
1108
+ quotes: req.query.quotes || '50',
1109
+ likes: req.query.likes || '1500',
1110
+ bookmarks: req.query.bookmarks || '500',
1111
+ theme: req.query.theme || 'r7' // Light theme
1112
+ };
1113
+
1114
+ try {
1115
+ const base64Result = await generateFakeTweet(inputData);
1116
+ res.setHeader('Content-Type', 'image/png');
1117
+ const imageData = base64Result.split(',')[1]; // Pisahkan data base64 dari headernya
1118
+ const buffer = Buffer.from(imageData, 'base64'); // Convert ke buffer
1119
+ res.send(buffer); // Mengirimkan buffer gambar sebagai respons
1120
+ } catch (error) {
1121
+ res.status(500).send('Error generating fake tweet: ' + error.message);
1122
+ }
1123
+ });
1124
+
1125
+
1126
+
1127
+ /*******************************/
1128
  // Fungsi untuk ping website
1129
  async function pingWebsite() {
1130
  const browser = await puppeteer.launch({