hk_bot/automatization.ts
2022-12-04 18:52:54 +03:00

124 lines
No EOL
5.9 KiB
TypeScript

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}`)
}
}
}