import Hero from "@ulixee/hero"; import * as telegram from 'telegram'; import { sleep } from "telegram/Helpers"; import { AccountInterface } from "./interfaces/databaseInterface"; import { prevTaskInterface } from "./interfaces/otherInterfaces"; import logger from "./logger"; import { waitNewMessages } from "./utils"; import {database as db,settings} from './database' export const vertification=async function (client: telegram.TelegramClient,worker: AccountInterface,hero: Hero,url: string,botEntity: telegram.Api.Chat | telegram.Api.User,idOfLastMessage: number) { await hero.goto(url,{timeoutMs:180_000}); await hero.waitForLoad('AllContentLoaded'); const captchaButton=hero.document.querySelector('button.g-recaptcha.btn.btn-primary'); if (captchaButton!=null){ let verify=hero.document.querySelector('body > section > h2'); while (verify!=null && (await verify.textContent)!.includes('All right!')==false){ const isCaptchaPassed=hero.document.querySelector("input[id='recaptcha-token']"); if (isCaptchaPassed==null || await isCaptchaPassed.$isVisible==false){ await hero.interact({click:{element: captchaButton, verification: 'exactElement'}}); await sleep(5000); verify=hero.document.querySelector('body > section > h2'); } else { logger.error("catpcha detected"); throw new Error("Auhtung captcha detected"); } } } else { throw new Error('Cant find captcha button'); } } export const do_sites_task=async function (client: telegram.TelegramClient,worker: AccountInterface,hero: Hero,botEntity: telegram.Api.Chat | telegram.Api.User,tasksSelector: telegram.Api.Message) { const taskSitesButton=tasksSelector.buttons![1][0]; let prevTask: prevTaskInterface={ task:tasksSelector, lastMessage:tasksSelector }; mainLoop: while (true){ await taskSitesButton.click({sharePhone: false}); await waitNewMessages(client,worker,botEntity,prevTask.lastMessage.id); const task=(await client.getMessages(botEntity,{ minId:prevTask.lastMessage.id, // search: (await settings.botMessages()).tasksSelector, }))[0]; if (task.buttonCount==2){ if (prevTask.task.message==task.message){ logger.warn(`Same tasks detected on ${worker.phoneNumber}...`); } logger.debug(`New ad task | ${worker.phoneNumber}`); prevTask.task=task; const urlButton=task.buttons![0][0]; const skipButton=task.buttons![0][1]; await hero.goto(urlButton.url!.replace("https","http"),{timeoutMs:180_000}); await hero.waitForLoad('AllContentLoaded'); let captchaButton=hero.document.querySelector('button.g-recaptcha.btn.btn-primary'); if (captchaButton!=null && urlButton.url!.includes('hkbots')==true){ if (await captchaButton.$isClickable!=true){ // timer page logger.warn(`Found timer... | ${worker.phoneNumber}`) if (settings.bypassMode==true){ logger.warn(`Bypassing timer... | ${worker.phoneNumber}`) try { await hero.executeJs("document.getElementById('form').setAttribute('style', '')"); } catch (err){ logger.error(`Something went wrong due bypass`); } } else { while (hero.document.querySelector("i[id='timer']")!=null && await captchaButton.$isClickable!=true){ await sleep(1000); } } } while (captchaButton!=null && await hero.activeTab.url==urlButton.url!){ const isCaptchaPassed=hero.document.querySelector("input[id='recaptcha-token']"); if ((isCaptchaPassed==null || await isCaptchaPassed.$isVisible==false) ){ try { await hero.interact({click:{element: captchaButton, verification: 'exactElement'}}); } catch( err){ logger.warn(`Some error due clicking | ${worker.phoneNumber}`); continue mainLoop; } await sleep(5000); captchaButton=hero.document.querySelector('button.g-recaptcha.btn.btn-primary'); } else { logger.error("catpcha detected"); throw new Error("Auhtung captcha detected"); } } await waitNewMessages(client,worker,botEntity,prevTask.task.id); let afterTask:telegram.Api.Message=(await client.getMessages(botEntity,{ minId:prevTask.task.id, // search: settings.botMessages.tasksSelector, }))[0]; if (afterTask!=null){ prevTask.lastMessage=afterTask; if (afterTask.message.includes(settings.botMessages.taskComplete)==true){ logger.debug(`Site task complete | ${worker.phoneNumber}`); continue } } console.log(afterTask,afterTask.message) } } else if (task.message.includes(settings.botMessages.taskOver)==true){ logger.info(`Ad tasks complete | ${worker.phoneNumber}`) break } else { logger.error(`Check out last message of ${worker.phoneNumber}`); throw new Error(`Check out last message of ${worker.phoneNumber}`) } } }