1.Fixed database issue of overwriting accounts?
2.Fixed issue with unblocking hkbot 3.Fixed logic of getting messages modified: automatization.ts modified: database.ts modified: index.ts modified: interfaces/databaseInterface.d.ts modified: utils.ts
This commit is contained in:
parent
ffee0370aa
commit
59036799cf
|
@ -5,14 +5,13 @@ 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'
|
||||
import BigInteger from "big-integer";
|
||||
import {settings} from './database'
|
||||
import { isNull } from "lodash";
|
||||
|
||||
|
||||
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',{timeoutMs:180_000});
|
||||
await hero.goto(url,{timeoutMs:1300_000});
|
||||
await hero.waitForLoad('AllContentLoaded',{timeoutMs:1180_000});
|
||||
const captchaButton=hero.document.querySelector('button.g-recaptcha.btn.btn-primary');
|
||||
if (captchaButton!=null){
|
||||
let verify=hero.document.querySelector('body > section > h2');
|
||||
|
@ -55,8 +54,8 @@ export const doSitesTasks=async function (client: telegram.TelegramClient,worker
|
|||
|
||||
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',{timeoutMs:180_000});
|
||||
await hero.goto(urlButton.url!,{timeoutMs:1300_000});
|
||||
await hero.waitForLoad('AllContentLoaded',{timeoutMs:1180_000});
|
||||
|
||||
let captchaButton=hero.document.querySelector('button.g-recaptcha.btn.btn-primary');
|
||||
if (isNull(captchaButton)){
|
||||
|
@ -89,37 +88,56 @@ export const doSitesTasks=async function (client: telegram.TelegramClient,worker
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
const now=new Date();
|
||||
while (await hero.activeTab.url==urlButton.url!){
|
||||
const isCaptchaPassed=hero.document.querySelector("input[id='recaptcha-token']");
|
||||
if ((isCaptchaPassed==null || await isCaptchaPassed.$isVisible==false) ){
|
||||
if (await captchaButton.$isClickable){
|
||||
try {
|
||||
await hero.interact({click:{element: captchaButton, verification: 'exactElement'}});
|
||||
} catch( err){
|
||||
if ((+(new Date())-+now)/1000>2*60){
|
||||
if ( (await captchaButton.$isClickable)==false){
|
||||
await skipButton.click({sharePhone: false});
|
||||
await waitNewMessages(client,worker,botEntity,task.id);
|
||||
prevTask.task=task;
|
||||
prevTask.lastMessage=(await client.getMessages(botEntity,{
|
||||
minId:task.id
|
||||
}))[0];
|
||||
continue mainLoop;
|
||||
|
||||
}
|
||||
|
||||
logger.warn(`Anomaly activity in browser. Please checkout`);
|
||||
await hero.reload();
|
||||
}
|
||||
const isCaptchaPassed=hero.document.querySelector("input[id='recaptcha-token']");
|
||||
|
||||
if ((isCaptchaPassed==null || await isCaptchaPassed.$isVisible==false) ){
|
||||
if (await captchaButton.$isClickable){
|
||||
try {
|
||||
await hero.interact({click:{element: captchaButton, verification: 'exactElement'}});
|
||||
} catch( err){
|
||||
|
||||
logger.warn(`Some error due clicking | ${worker.phoneNumber}`);
|
||||
continue mainLoop;
|
||||
}
|
||||
logger.warn(`Some error due clicking | ${worker.phoneNumber}`);
|
||||
continue mainLoop;
|
||||
}
|
||||
await sleep(1000);
|
||||
captchaButton=hero.document.querySelector('button.g-recaptcha.btn.btn-primary');
|
||||
} else {
|
||||
}
|
||||
await sleep(1000);
|
||||
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,
|
||||
reverse: true
|
||||
// search: settings.botMessages.tasksSelector,
|
||||
await waitNewMessages(client,worker,botEntity,task.id);
|
||||
|
||||
const afterTask:telegram.Api.Message=(await client.getMessages(botEntity,{
|
||||
minId:task.id,
|
||||
reverse:true,
|
||||
limit:100
|
||||
})).filter((value)=>{return value.message.includes(settings.botMessages.taskComplete)})[0];
|
||||
prevTask.lastMessage=(await client.getMessages(botEntity,{
|
||||
minId:task.id
|
||||
}))[0];
|
||||
if (afterTask!=null){
|
||||
prevTask.lastMessage=afterTask;
|
||||
if (afterTask.message.includes(settings.botMessages.taskComplete)==true){
|
||||
logger.debug(`Site task complete | ${worker.phoneNumber}`);
|
||||
continue
|
||||
|
@ -129,7 +147,7 @@ export const doSitesTasks=async function (client: telegram.TelegramClient,worker
|
|||
}
|
||||
|
||||
} else if (task.message.includes(settings.botMessages.taskOver)==true){
|
||||
logger.info(`Ad tasks completed | ${worker.phoneNumber}`)
|
||||
logger.info(`Ad tasks completed | ${worker.phoneNumber}`);
|
||||
break
|
||||
} else {
|
||||
logger.error(`Check out last message of ${worker.phoneNumber}`);
|
||||
|
@ -166,21 +184,42 @@ export const doChatsTasks=async function (client: telegram.TelegramClient,worker
|
|||
|
||||
let groupLink='';
|
||||
if (urlButton.url?.includes('hkbot')==true){
|
||||
await hero.goto(urlButton.url.replace("https","http"),{timeoutMs:180_000});
|
||||
await hero.waitForLoad('AllContentLoaded',{timeoutMs:180_000});
|
||||
await hero.goto(urlButton.url,{timeoutMs:1300_000});
|
||||
await hero.waitForLoad('AllContentLoaded',{timeoutMs:1180_000});
|
||||
let captchaButton=hero.document.querySelector('button.g-recaptcha.btn.btn-primary');
|
||||
if (isNull(captchaButton)){
|
||||
if (prevTask.task.message==task.message){
|
||||
logger.warn(`Same tasks detected on ${worker.phoneNumber}... Skipping due captcha isnt detected......`);
|
||||
await skipButton.click({sharePhone: false});
|
||||
await waitNewMessages(client,worker,botEntity,task.id);
|
||||
prevTask.task=task;
|
||||
prevTask.lastMessage=(await client.getMessages(botEntity,{
|
||||
minId:task.id
|
||||
}))[0];
|
||||
} else {
|
||||
prevTask.task=task;
|
||||
prevTask.lastMessage=task;
|
||||
logger.warn(`Captcha isnt detected... | ${worker.phoneNumber}`);
|
||||
}
|
||||
|
||||
continue mainLoop;
|
||||
}
|
||||
const now=new Date()
|
||||
while (captchaButton!=null && await hero.activeTab.url==urlButton.url!){
|
||||
if ((+(new Date())-+now)/1000>2*60){
|
||||
if ( (await captchaButton.$isClickable)==false){
|
||||
await skipButton.click({sharePhone: false});
|
||||
await waitNewMessages(client,worker,botEntity,task.id);
|
||||
prevTask.task=task;
|
||||
prevTask.lastMessage=(await client.getMessages(botEntity,{
|
||||
minId:task.id
|
||||
}))[0];
|
||||
continue mainLoop;
|
||||
|
||||
}
|
||||
|
||||
logger.warn(`Anomaly activity in browser. Please checkout`);
|
||||
await hero.reload();
|
||||
}
|
||||
const isCaptchaPassed=hero.document.querySelector("input[id='recaptcha-token']");
|
||||
if ((isCaptchaPassed==null || await isCaptchaPassed.$isVisible==false) ){
|
||||
if (await captchaButton.$isClickable){
|
||||
|
@ -234,14 +273,11 @@ export const doChatsTasks=async function (client: telegram.TelegramClient,worker
|
|||
default:
|
||||
logger.warn(`Something wrong with chat ${err.errorMessage} | ${worker.phoneNumber}`)
|
||||
await skipButton.click({sharePhone: false});
|
||||
prevTask.task=task;
|
||||
await waitNewMessages(client,worker,botEntity,task.id);
|
||||
const afterTask=(await client.getMessages(botEntity,{
|
||||
minId:task.id,
|
||||
reverse: true
|
||||
// search: (await settings.botMessages()).tasksSelector,
|
||||
}));
|
||||
prevTask.lastMessage=afterTask[afterTask.length-1];
|
||||
prevTask.task=task;
|
||||
prevTask.lastMessage=(await client.getMessages(botEntity,{
|
||||
minId:task.id
|
||||
}))[0];
|
||||
continue mainLoop;
|
||||
|
||||
}
|
||||
|
@ -274,14 +310,11 @@ export const doChatsTasks=async function (client: telegram.TelegramClient,worker
|
|||
default:
|
||||
logger.warn(`Something wrong with chat ${err.errorMessage} | ${worker.phoneNumber}`)
|
||||
await skipButton.click({sharePhone: false});
|
||||
prevTask.task=task;
|
||||
await waitNewMessages(client,worker,botEntity,task.id);
|
||||
const afterTask=(await client.getMessages(botEntity,{
|
||||
minId:task.id,
|
||||
reverse: true
|
||||
// search: (await settings.botMessages()).tasksSelector,
|
||||
}));
|
||||
prevTask.lastMessage=afterTask[afterTask.length-1];
|
||||
prevTask.task=task;
|
||||
prevTask.lastMessage=(await client.getMessages(botEntity,{
|
||||
minId:task.id
|
||||
}))[0];
|
||||
continue mainLoop;
|
||||
|
||||
}
|
||||
|
@ -290,42 +323,51 @@ export const doChatsTasks=async function (client: telegram.TelegramClient,worker
|
|||
}
|
||||
|
||||
await confirmButton.click({sharePhone: false});
|
||||
await waitNewMessages(client,worker,botEntity,prevTask.task.id);
|
||||
let afterTask:telegram.Api.Message=(await client.getMessages(botEntity,{
|
||||
minId: prevTask.task.id,
|
||||
reverse: true
|
||||
|
||||
}))[0];
|
||||
if (afterTask!=null && group){
|
||||
prevTask.task=task;
|
||||
prevTask.lastMessage=afterTask;
|
||||
if (afterTask.message.includes(settings.botMessages.taskComplete)==true){
|
||||
worker.completedGroupsTasks.push(
|
||||
{
|
||||
timeToLeave: +(new Date())+Number(afterTask.message.replace(/\D/g,''))*3600*1_000,
|
||||
groupID:BigInteger(`-100${group.id}`)
|
||||
}
|
||||
)
|
||||
logger.debug(`Chat task complete | ${worker.phoneNumber}`);
|
||||
continue
|
||||
|
||||
} else if (afterTask.message.includes(settings.botMessages.notInGroup)==true){
|
||||
logger.warn(`User joined but hk says not. Skipping...`)
|
||||
await skipButton.click({sharePhone: false});
|
||||
prevTask.task=task;
|
||||
await waitNewMessages(client,worker,botEntity,task.id);
|
||||
const afterTask=(await client.getMessages(botEntity,{
|
||||
minId:task.id,
|
||||
reverse: true
|
||||
// search: (await settings.botMessages()).tasksSelector,
|
||||
}));
|
||||
prevTask.lastMessage=afterTask[afterTask.length-1];
|
||||
await waitNewMessages(client,worker,botEntity,task.id);
|
||||
const afterTask=(await client.getMessages(botEntity,{
|
||||
minId: task.id,
|
||||
reverse:true,
|
||||
limit:100
|
||||
})).filter((value)=>{
|
||||
if (value.message.includes(settings.botMessages.notInGroup) || value.message.includes(settings.botMessages.taskComplete)){
|
||||
return true
|
||||
} else {
|
||||
logger.debug(`Anomaly | ${worker.phoneNumber}`);
|
||||
logger.debug(task.message);
|
||||
return false
|
||||
}
|
||||
})[0];
|
||||
const lastMessage=(await client.getMessages(botEntity,{
|
||||
minId: task.id
|
||||
}))[0];
|
||||
prevTask.task=task;
|
||||
prevTask.lastMessage=(lastMessage!==undefined) ? lastMessage: afterTask ;
|
||||
if (afterTask.message.includes(settings.botMessages.taskComplete)==true){
|
||||
worker.completedGroupsTasks.push(
|
||||
{
|
||||
timeToLeave: +(new Date())+Number(afterTask.message.replace(/\D/g,''))*3600*1_000,
|
||||
groupID:(await client.getPeerId(group!))
|
||||
}
|
||||
);
|
||||
logger.debug(`Chat task complete | ${worker.phoneNumber}`);
|
||||
continue;
|
||||
} else if (afterTask.message.includes(settings.botMessages.notInGroup)==true){
|
||||
logger.warn(`User joined but hk says not. Skipping...`)
|
||||
await skipButton.click({sharePhone: false});
|
||||
await waitNewMessages(client,worker,botEntity,task.id);
|
||||
prevTask.task=task;
|
||||
prevTask.lastMessage=(await client.getMessages(botEntity,{
|
||||
minId:task.id,
|
||||
// search: (await settings.botMessages()).tasksSelector,
|
||||
}))[0];
|
||||
worker.completedGroupsTasks.push(
|
||||
{
|
||||
timeToLeave: 1,
|
||||
groupID:(await client.getPeerId(group!))
|
||||
}
|
||||
);
|
||||
} else {
|
||||
logger.debug(`Anomaly | ${worker.phoneNumber}`);
|
||||
logger.debug(task.message);
|
||||
}
|
||||
|
||||
}else if (task.message.includes(settings.botMessages.taskOver)==true){
|
||||
logger.info(`Chats tasks completed | ${worker.phoneNumber}`)
|
||||
break
|
||||
|
|
|
@ -179,10 +179,10 @@ export class Settings implements interfacesSettings.settingsInterface {
|
|||
this.json=new JsonDB(new Config('settings.json',true,true,'/'));
|
||||
this.json.getObject<interfacesSettings.settingsInterface>('/').then((result) => {
|
||||
if (Object.keys(result).length==0){
|
||||
console.log('Setup config first...');
|
||||
logger.warn('Setup config first...');
|
||||
|
||||
this.json.push('/',this.default,true)
|
||||
.catch((err)=> console.log(`${err} due setting defaults`))
|
||||
.catch((err)=> logger.error(`${err} due setting defaults`))
|
||||
.then(()=>{
|
||||
throw new Error("Config doesn't setup");
|
||||
});
|
||||
|
@ -190,7 +190,6 @@ export class Settings implements interfacesSettings.settingsInterface {
|
|||
mainLoop:
|
||||
for (const setting of Object.keys(this.default)){
|
||||
if (result[setting]===undefined || typeof(result[setting])!=typeof(this.default[setting])){
|
||||
console.log(result[setting],this.default[setting],result[setting]!==this.default[setting])
|
||||
this[setting]=this.default[setting];
|
||||
logger.warn(`Setting '${setting}' corrupted. Check out it...`)
|
||||
} else {
|
||||
|
|
481
index.ts
481
index.ts
|
@ -1,5 +1,5 @@
|
|||
import fs = require('fs');
|
||||
import {database, database as db,settings} from './database'
|
||||
import { database, database as db, settings } from './database'
|
||||
import prompt from 'prompts';
|
||||
import logger from "./logger"
|
||||
import * as telegram from 'telegram';
|
||||
|
@ -7,11 +7,11 @@ import { LogLevel } from 'telegram/extensions/Logger';
|
|||
import { AccountInterface } from './interfaces/databaseInterface';
|
||||
import { sleep } from 'telegram/Helpers';
|
||||
import findFreePorts from 'find-free-ports';
|
||||
import { waitNewMessages, startNewTorDocker, getIP,getMessagesByEntity,isBannedByClient} from './utils';
|
||||
import {connect, disconnect, tor} from "node-tor-control";
|
||||
import { waitNewMessages, startNewTorDocker, getIP, getMessagesByEntity, isBannedByClient } from './utils';
|
||||
import { connect, disconnect, tor } from "node-tor-control";
|
||||
import Miner from '@ulixee/miner';
|
||||
import Hero from '@ulixee/hero';
|
||||
import {portsInterface, usedIPInterface} from "./interfaces/otherInterfaces"
|
||||
import { portsInterface, usedIPInterface } from "./interfaces/otherInterfaces"
|
||||
import { doSitesTasks, vertification, doChatsTasks } from './automatization';
|
||||
import ExecuteJsPlugin from '@ulixee/execute-js-plugin';
|
||||
import _ from 'lodash';
|
||||
|
@ -21,50 +21,50 @@ import { isAxiosError } from 'axios';
|
|||
import BigInteger from "big-integer";
|
||||
import { EntityLike } from 'telegram/define';
|
||||
|
||||
const addAccounts: ()=>Promise<void>=async ()=>{
|
||||
let apiId: number=0
|
||||
let apiHash: string= '';
|
||||
let accounts=await db.getUsers();
|
||||
if (accounts.length!=0){
|
||||
const usePrevData=await prompt({
|
||||
const addAccounts: () => Promise<void> = async () => {
|
||||
let apiId: number = 0
|
||||
let apiHash: string = '';
|
||||
let accounts = await db.getUsers();
|
||||
if (accounts.length != 0) {
|
||||
const usePrevData = await prompt({
|
||||
type: 'confirm',
|
||||
name: 'confirmed',
|
||||
message: 'Use apiId and apiHash from last added account?'
|
||||
});
|
||||
if (usePrevData.confirmed==true){
|
||||
apiId=accounts[accounts.length-1].apiID;
|
||||
apiHash=accounts[accounts.length-1].apiHash;
|
||||
if (usePrevData.confirmed == true) {
|
||||
apiId = accounts[accounts.length - 1].apiID;
|
||||
apiHash = accounts[accounts.length - 1].apiHash;
|
||||
}
|
||||
}
|
||||
if (apiId==0 && apiHash==''){
|
||||
const api=await prompt([
|
||||
if (apiId == 0 && apiHash == '') {
|
||||
const api = await prompt([
|
||||
{
|
||||
type:'number',
|
||||
name:'apiId',
|
||||
message:'ApiId?'
|
||||
type: 'number',
|
||||
name: 'apiId',
|
||||
message: 'ApiId?'
|
||||
},
|
||||
{
|
||||
type:'text',
|
||||
name:'apiHash',
|
||||
message:'ApiHash?'
|
||||
type: 'text',
|
||||
name: 'apiHash',
|
||||
message: 'ApiHash?'
|
||||
}
|
||||
]);
|
||||
apiId=Number(api.apiId);
|
||||
apiHash=api.apiHash;
|
||||
apiId = Number(api.apiId);
|
||||
apiHash = api.apiHash;
|
||||
}
|
||||
let jsonFiles: prompt.Choice[]=[];
|
||||
fs.readdirSync("./").forEach((file)=>{
|
||||
if (file.search('.json')!=-1 && file!='db.json' && file!='settings.json'){
|
||||
let jsonFiles: prompt.Choice[] = [];
|
||||
fs.readdirSync("./").forEach((file) => {
|
||||
if (file.search('.json') != -1 && file != 'db.json' && file != 'settings.json') {
|
||||
jsonFiles.push(
|
||||
{
|
||||
title: file,
|
||||
description:'json file',
|
||||
value:file,
|
||||
title: file,
|
||||
description: 'json file',
|
||||
value: file,
|
||||
}
|
||||
);
|
||||
}
|
||||
});
|
||||
const walletsFile=(await prompt({
|
||||
const walletsFile = (await prompt({
|
||||
type: 'select',
|
||||
name: 'file',
|
||||
message: 'Choose wallets json file',
|
||||
|
@ -72,48 +72,48 @@ const addAccounts: ()=>Promise<void>=async ()=>{
|
|||
})).file
|
||||
await db.findWallet(walletsFile);
|
||||
|
||||
|
||||
|
||||
|
||||
mainLoop:
|
||||
while (true){
|
||||
accounts=await db.getUsers();
|
||||
const answers=await prompt([
|
||||
while (true) {
|
||||
accounts = await db.getUsers();
|
||||
const answers = await prompt([
|
||||
{
|
||||
type:'text',
|
||||
name:'number',
|
||||
message:'Phone number?'
|
||||
type: 'text',
|
||||
name: 'number',
|
||||
message: 'Phone number?'
|
||||
},
|
||||
{
|
||||
type:'text',
|
||||
name:'password',
|
||||
message:'2FA Password?'
|
||||
type: 'text',
|
||||
name: 'password',
|
||||
message: '2FA Password?'
|
||||
}
|
||||
]);
|
||||
for (const account of accounts){
|
||||
if (account.phoneNumber==answers.number){
|
||||
for (const account of accounts) {
|
||||
if (account.phoneNumber == answers.number) {
|
||||
logger.warn('You already added this number');
|
||||
continue mainLoop;
|
||||
}
|
||||
}
|
||||
const session=new telegram.sessions.StringSession('');
|
||||
const client=new telegram.TelegramClient(session,apiId,apiHash,{deviceModel:'Samsung SM-G980',connectionRetries: 5,systemVersion: '10'});
|
||||
const session = new telegram.sessions.StringSession('');
|
||||
const client = new telegram.TelegramClient(session, apiId, apiHash, { deviceModel: 'Samsung SM-G980', connectionRetries: 5, systemVersion: '10' });
|
||||
client.setLogLevel(LogLevel.ERROR);
|
||||
await client.start({
|
||||
phoneNumber: async ()=>answers.number.replace(/ /g, ""),
|
||||
password: async ()=>answers.password.replace(/ /g, ""),
|
||||
phoneNumber: async () => answers.number.replace(/ /g, ""),
|
||||
password: async () => answers.password.replace(/ /g, ""),
|
||||
phoneCode: async () => (await prompt({
|
||||
type:'number',
|
||||
name:'code',
|
||||
message:'Enter recieved code'
|
||||
type: 'number',
|
||||
name: 'code',
|
||||
message: 'Enter recieved code'
|
||||
})).code.toString(),
|
||||
onError: (err) => {
|
||||
logger.error(`Error due singning into telegram account\n${err}`);
|
||||
throw err
|
||||
},
|
||||
});
|
||||
if ((await client.isUserAuthorized())==true){
|
||||
const account: telegram.Api.User | telegram.Api.InputPeerUser=(await client.getMe(false));
|
||||
if (account instanceof telegram.Api.User ){
|
||||
if ((await client.isUserAuthorized()) == true) {
|
||||
const account: telegram.Api.User | telegram.Api.InputPeerUser = (await client.getMe(false));
|
||||
if (account instanceof telegram.Api.User) {
|
||||
await db.addUser({
|
||||
password: answers.password,
|
||||
phoneNumber: answers.number,
|
||||
|
@ -122,11 +122,11 @@ const addAccounts: ()=>Promise<void>=async ()=>{
|
|||
apiID: apiId,
|
||||
stringSession: String(client.session.save()),
|
||||
refferal: await db.findRefferal(settings.maxRefferals)
|
||||
},walletsFile)
|
||||
}, walletsFile)
|
||||
} else {
|
||||
logger.error("Wrong type of account?");
|
||||
}
|
||||
|
||||
|
||||
} else {
|
||||
logger.error('Client not authorized');
|
||||
}
|
||||
|
@ -134,93 +134,93 @@ const addAccounts: ()=>Promise<void>=async ()=>{
|
|||
type: 'confirm',
|
||||
name: 'continue',
|
||||
message: 'continue?'
|
||||
})).continue!=true){
|
||||
})).continue != true) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
const farm: ()=>Promise<void>=async ()=>{
|
||||
let usedIPs:usedIPInterface[]=[];
|
||||
const proccesGroup=async (workersGroups:AccountInterface[],ports: portsInterface)=>{
|
||||
|
||||
|
||||
const farm: () => Promise<void> = async () => {
|
||||
let usedIPs: usedIPInterface[] = [];
|
||||
const proccesGroup = async (workersGroups: AccountInterface[], ports: portsInterface) => {
|
||||
|
||||
|
||||
workersLoop:
|
||||
for (const worker of workersGroups){
|
||||
for (const worker of workersGroups) {
|
||||
logger.debug(`Current worker:${worker.phoneNumber}\nBalance:${worker.balance}`);
|
||||
|
||||
|
||||
{
|
||||
const torConnection = await connect({
|
||||
host: '127.0.0.1',
|
||||
port:ports.control,
|
||||
password: 'qwerty',
|
||||
port: ports.control,
|
||||
password: 'qwerty',
|
||||
});
|
||||
function isFree(currentIP: string){
|
||||
for (const usedIP of usedIPs){
|
||||
|
||||
if (usedIP.usedIps.indexOf(currentIP)!=-1 || usedIP.current==currentIP){
|
||||
return false;
|
||||
function isFree(currentIP: string) {
|
||||
for (const usedIP of usedIPs) {
|
||||
|
||||
if (usedIP.usedIps.indexOf(currentIP) != -1 || usedIP.current == currentIP) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
return true;
|
||||
}
|
||||
while (true){
|
||||
const currentIP=await getIP(ports.http);
|
||||
if (currentIP!=null){
|
||||
if (isFree(currentIP)){
|
||||
usedIPs.filter((value)=>{return _.isEqual(worker,value.worker)})[0].current=currentIP;
|
||||
usedIPs.filter((value)=>{return _.isEqual(worker,value.worker)})[0].usedIps.push(currentIP);
|
||||
while (true) {
|
||||
const currentIP = await getIP(ports.http);
|
||||
if (currentIP != null) {
|
||||
if (isFree(currentIP)) {
|
||||
usedIPs.filter((value) => { return _.isEqual(worker, value.worker) })[0].current = currentIP;
|
||||
usedIPs.filter((value) => { return _.isEqual(worker, value.worker) })[0].usedIps.push(currentIP);
|
||||
break;
|
||||
} else {
|
||||
await tor.signalNewNYM(torConnection);
|
||||
await sleep(3_000);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
const fingerprint=worker.browserFingerprint
|
||||
const fingerprint = worker.browserFingerprint
|
||||
let hero: Hero;
|
||||
while (true){
|
||||
|
||||
while (true) {
|
||||
|
||||
hero = new Hero({
|
||||
userProfile:{
|
||||
deviceProfile: {
|
||||
deviceMemory:fingerprint.navigator.deviceMemory,
|
||||
}
|
||||
},
|
||||
name:`${worker.telegramID}`,
|
||||
connectionToCore: { host:`ws://127.0.0.1:${ports.minerPort}` },
|
||||
disableDevtools: true, // to bypass hk site
|
||||
showChrome:true, // to debug
|
||||
userAgent:fingerprint.navigator.userAgent,
|
||||
viewport:fingerprint.screen,
|
||||
locale:fingerprint.navigator.language,
|
||||
upstreamProxyUrl:`socks5://127.0.0.1:${ports.socks}`,
|
||||
|
||||
});
|
||||
userProfile: {
|
||||
deviceProfile: {
|
||||
deviceMemory: fingerprint.navigator.deviceMemory,
|
||||
}
|
||||
},
|
||||
name: `${worker.telegramID}`,
|
||||
connectionToCore: { host: `ws://127.0.0.1:${ports.minerPort}` },
|
||||
disableDevtools: true, // to bypass hk site
|
||||
// showChrome:true, // to debug
|
||||
userAgent: fingerprint.navigator.userAgent,
|
||||
viewport: fingerprint.screen,
|
||||
locale: fingerprint.navigator.language,
|
||||
upstreamProxyUrl: `socks5://127.0.0.1:${ports.socks}`,
|
||||
|
||||
});
|
||||
hero.use(ExecuteJsPlugin);
|
||||
try{
|
||||
await hero;
|
||||
} catch (err){
|
||||
try {
|
||||
await hero.goto('https://www.google.com');
|
||||
} catch (err) {
|
||||
await hero.close();
|
||||
logger.warn(`Some error due openning Hero. Trying again...\n${err}`);
|
||||
continue
|
||||
}
|
||||
break;
|
||||
}
|
||||
const client=new telegram.TelegramClient(
|
||||
const client = new telegram.TelegramClient(
|
||||
new telegram.sessions.StringSession(worker.stringSession),
|
||||
worker.apiID,
|
||||
worker.apiHash,
|
||||
{deviceModel:'Samsung SM-G980',connectionRetries: 5,systemVersion: '10'}
|
||||
{ deviceModel: 'Samsung SM-G980', connectionRetries: 5, systemVersion: '10' }
|
||||
);
|
||||
client.setLogLevel(LogLevel.ERROR);
|
||||
client.setLogLevel(LogLevel.NONE);
|
||||
await client.connect();
|
||||
if ((await client.checkAuthorization())==false){
|
||||
if ((await client.checkAuthorization()) == false) {
|
||||
logger.error(`Account ${worker.phoneNumber} is not authorizated`);
|
||||
continue
|
||||
} else {
|
||||
|
@ -228,46 +228,68 @@ const farm: ()=>Promise<void>=async ()=>{
|
|||
// https://gram.js.org/beta/modules/Api.channels.html
|
||||
// https://gram.js.org/beta/classes/Api.messages.DeleteChat.html
|
||||
let botEntity: telegram.Api.User;
|
||||
try{
|
||||
botEntity=await client.getEntity(settings.telegramLinks.botLink) as telegram.Api.User;
|
||||
} catch (err){
|
||||
if (err instanceof telegram.errors.RPCError){
|
||||
try {
|
||||
botEntity = await client.getEntity(settings.telegramLinks.botLink) as telegram.Api.User;
|
||||
} catch (err) {
|
||||
if (err instanceof telegram.errors.RPCError) {
|
||||
switch (err.errorMessage) {
|
||||
case 'FLOOD':
|
||||
logger.warn(`Account has flood error,skipping`);
|
||||
usedIPs.filter((value)=>{return _.isEqual(worker,value.worker)})[0].current=''
|
||||
usedIPs.filter((value)=>{return _.isEqual(worker,value.worker)})[0].usedIps.pop()
|
||||
break;
|
||||
default:
|
||||
logger.debug(`Unknown error due getEntity ${err}`)
|
||||
break;
|
||||
}
|
||||
}
|
||||
usedIPs.filter((value) => { return _.isEqual(worker, value.worker) })[0].current = ''
|
||||
usedIPs.filter((value) => { return _.isEqual(worker, value.worker) })[0].usedIps.pop()
|
||||
await hero.close()
|
||||
continue
|
||||
}
|
||||
|
||||
|
||||
// leaving old groups
|
||||
{
|
||||
const now=new Date();
|
||||
worker.completedGroupsTasks=worker.completedGroupsTasks.filter(async (oldGroup)=>{
|
||||
if (+now>oldGroup.timeToLeave){
|
||||
const olderGroups=worker.completedGroupsTasks.filter((value)=>{
|
||||
if (value.groupID==oldGroup.groupID && value.timeToLeave>oldGroup.timeToLeave){
|
||||
{
|
||||
const now = new Date();
|
||||
worker.completedGroupsTasks = worker.completedGroupsTasks.filter(async (oldGroup) => {
|
||||
if (+now > oldGroup.timeToLeave) {
|
||||
const olderGroups = worker.completedGroupsTasks.filter((value) => {
|
||||
if (value.groupID == oldGroup.groupID && value.timeToLeave > oldGroup.timeToLeave) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
});
|
||||
if (olderGroups.length==0){
|
||||
const channel=await client.getEntity(BigInteger(oldGroup.groupID));
|
||||
await client.invoke(
|
||||
new telegram.Api.channels.LeaveChannel({
|
||||
channel: channel
|
||||
})
|
||||
);
|
||||
if (olderGroups.length == 0) {
|
||||
let peerChannel: string | number | BigInteger.BigInteger | telegram.Api.PeerUser | telegram.Api.PeerChat | telegram.Api.PeerChannel | telegram.Api.InputPeerEmpty | telegram.Api.InputPeerSelf | telegram.Api.InputPeerChat | telegram.Api.InputPeerUser | telegram.Api.InputPeerChannel | telegram.Api.InputPeerUserFromMessage | telegram.Api.InputPeerChannelFromMessage | telegram.Api.User | telegram.Api.Chat | telegram.Api.Channel | telegram.Api.UserEmpty | telegram.Api.ChatEmpty | telegram.Api.ChatForbidden | telegram.Api.ChannelForbidden | telegram.Api.UserFull | telegram.Api.messages.ChatFull | telegram.Api.ChatFull | telegram.Api.ChannelFull | telegram.Api.InputChannelEmpty | telegram.Api.InputChannel | telegram.Api.InputChannelFromMessage | telegram.Api.InputUserEmpty | telegram.Api.InputUserSelf | telegram.Api.InputUser | telegram.Api.InputUserFromMessage;
|
||||
try{
|
||||
peerChannel = await client.getInputEntity(BigInteger(oldGroup.groupID));
|
||||
}
|
||||
catch (err){
|
||||
return false
|
||||
}
|
||||
try {
|
||||
await client.invoke(new telegram.Api.channels.GetParticipant({ channel: peerChannel, participant: 'me' }));
|
||||
} catch (err) {
|
||||
if (err.code == 400) {
|
||||
return false
|
||||
} else {
|
||||
logger.error(`Unknown error due GetParticipant | ${worker.phoneNumber}`)
|
||||
return true
|
||||
}
|
||||
}
|
||||
try {
|
||||
await client.invoke(
|
||||
new telegram.Api.channels.LeaveChannel({
|
||||
channel: peerChannel
|
||||
})
|
||||
);
|
||||
} catch (err){
|
||||
logger.debug(`Cant leave channel | ${worker.phoneNumber}`);
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
return false;
|
||||
} else {
|
||||
return true
|
||||
|
@ -275,15 +297,15 @@ const farm: ()=>Promise<void>=async ()=>{
|
|||
})
|
||||
}
|
||||
//
|
||||
|
||||
|
||||
for (const chat of settings.telegramLinks.groupsToJoin){
|
||||
try{
|
||||
await client.invoke(new telegram.Api.channels.GetParticipant({channel:chat,participant:'me'}));
|
||||
} catch(err){
|
||||
if (err.code==400){
|
||||
await client.invoke(new telegram.Api.channels.JoinChannel({channel:chat}));
|
||||
} else{
|
||||
|
||||
|
||||
for (const chat of settings.telegramLinks.groupsToJoin) {
|
||||
try {
|
||||
await client.invoke(new telegram.Api.channels.GetParticipant({ channel: chat, participant: 'me' }));
|
||||
} catch (err) {
|
||||
if (err.code == 400) {
|
||||
await client.invoke(new telegram.Api.channels.JoinChannel({ channel: chat }));
|
||||
} else {
|
||||
logger.error(`Unknown error due GetParticipant | ${worker.phoneNumber}`)
|
||||
throw err;
|
||||
}
|
||||
|
@ -291,73 +313,73 @@ const farm: ()=>Promise<void>=async ()=>{
|
|||
}
|
||||
{
|
||||
// unblock hkbot
|
||||
if (await isBannedByClient(client,settings.telegramLinks.botLink)){
|
||||
const result=await client.invoke(
|
||||
if (await isBannedByClient(client, settings.telegramLinks.botLink)) {
|
||||
|
||||
const result = await client.invoke(
|
||||
new telegram.Api.contacts.Unblock({
|
||||
id: settings.telegramLinks.botLink
|
||||
id: settings.telegramLinks.botLink
|
||||
}));
|
||||
if (result!=true){
|
||||
if (result != true) {
|
||||
logger.error(`Cant unblock ${settings.telegramLinks.botLink} | ${worker.phoneNumber}`);
|
||||
continue workersLoop;
|
||||
} else {
|
||||
logger.info(`HK bot unblocked | ${worker.phoneNumber}`)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
await sleep(Math.random()*1000);
|
||||
if ((await getMessagesByEntity(client,botEntity,botEntity)).length==0){
|
||||
await sleep(Math.random() * 100_000);
|
||||
if ((await getMessagesByEntity(client, botEntity, botEntity)).length == 0) {
|
||||
// sending start message
|
||||
let id: number=-1;
|
||||
if (worker.refferal!==null){
|
||||
id=(await client.sendMessage(botEntity,{message:`/start ${worker.refferal}`})).id;
|
||||
let id: number = -1;
|
||||
if (worker.refferal !== null) {
|
||||
id = (await client.sendMessage(botEntity, { message: `/start ${worker.refferal}` })).id;
|
||||
logger.debug(`First start of ${botEntity.username} via refferal link of ${worker.refferal} | ${worker.phoneNumber}`);
|
||||
}else {
|
||||
id=(await client.sendMessage(botEntity,{message:`/start`})).id;
|
||||
} else {
|
||||
id = (await client.sendMessage(botEntity, { message: `/start` })).id;
|
||||
logger.debug(`First start of ${botEntity.username} | ${worker.phoneNumber}`);
|
||||
}
|
||||
await waitNewMessages(client,worker,botEntity,id)
|
||||
await waitNewMessages(client, worker, botEntity, id)
|
||||
}
|
||||
logger.info(`Sending earn message... | ${worker.phoneNumber}`);
|
||||
const requestTasksMessage=await client.sendMessage(botEntity,{message:settings.botButtons.earn});
|
||||
await waitNewMessages(client,worker,botEntity,requestTasksMessage.id)
|
||||
let tasksSelector:telegram.Api.Message=(await client.getMessages(botEntity,{
|
||||
minId:requestTasksMessage.id,
|
||||
const requestTasksMessage = await client.sendMessage(botEntity, { message: settings.botButtons.earn });
|
||||
await waitNewMessages(client, worker, botEntity, requestTasksMessage.id)
|
||||
let tasksSelector: telegram.Api.Message = (await client.getMessages(botEntity, {
|
||||
minId: requestTasksMessage.id,
|
||||
}))[0];
|
||||
if (tasksSelector.message.includes(settings.botMessages.verification)==true){
|
||||
if (tasksSelector.message.includes(settings.botMessages.verification) == true) {
|
||||
// vertification
|
||||
logger.warn(`Account ${worker.phoneNumber} is unvertificated`)
|
||||
const url: string=tasksSelector.buttons![0][0].url!;
|
||||
await vertification(client,worker,hero,url,botEntity,tasksSelector.id);
|
||||
const requestTasksMessage=await client.sendMessage(botEntity,{message:settings.botButtons.earn});
|
||||
await waitNewMessages(client,worker,botEntity,requestTasksMessage.id)
|
||||
tasksSelector=(await client.getMessages(botEntity,{
|
||||
minId:requestTasksMessage.id,
|
||||
const url: string = tasksSelector.buttons![0][0].url!;
|
||||
await vertification(client, worker, hero, url, botEntity, tasksSelector.id);
|
||||
const requestTasksMessage = await client.sendMessage(botEntity, { message: settings.botButtons.earn });
|
||||
await waitNewMessages(client, worker, botEntity, requestTasksMessage.id)
|
||||
tasksSelector = (await client.getMessages(botEntity, {
|
||||
minId: requestTasksMessage.id,
|
||||
}))[0];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
await doSitesTasks(client,worker,hero,botEntity,tasksSelector);
|
||||
await doChatsTasks(client,worker,hero,botEntity,tasksSelector);
|
||||
|
||||
|
||||
await database.updateUser(worker);
|
||||
|
||||
|
||||
|
||||
|
||||
try{
|
||||
await doSitesTasks(client,worker,hero,botEntity,tasksSelector);
|
||||
await doChatsTasks(client, worker, hero, botEntity, tasksSelector);
|
||||
} catch (err){
|
||||
logger.error(`Some error due doing tasks\n${err}\n${err.stack}`)
|
||||
}
|
||||
database.updateUser(worker);
|
||||
await hero.close();
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
const workers=await db.getUsers();
|
||||
let workersGroups: Array<AccountInterface[]>=[];
|
||||
|
||||
for (const worker of workers){
|
||||
const workers = await db.getUsers();
|
||||
let workersGroups: Array<AccountInterface[]> = [];
|
||||
|
||||
for (const worker of workers) {
|
||||
usedIPs.push({
|
||||
worker: worker,
|
||||
usedIps: [],
|
||||
|
@ -365,89 +387,90 @@ const farm: ()=>Promise<void>=async ()=>{
|
|||
})
|
||||
}
|
||||
|
||||
for (let i=0;i!=workers.length+1;i+=settings.pararels){
|
||||
const _workers=workers.slice(i,i+settings.pararels);
|
||||
if (_workers.length!=0){
|
||||
for (let i = 0; i != workers.length + 1; i += settings.pararels) {
|
||||
const _workers = workers.slice(i, i + settings.pararels);
|
||||
if (_workers.length != 0) {
|
||||
workersGroups.push(_workers);
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
if (workersGroups.length!=Math.ceil(workers.length/settings.pararels)){
|
||||
logger.warn(`There is strange thing with workersGroups\n${workersGroups.length} ${Math.ceil(workers.length/settings.pararels)}`);
|
||||
if (workersGroups.length != Math.ceil(workers.length / settings.pararels)) {
|
||||
logger.warn(`There is strange thing with workersGroups\n${workersGroups.length} ${Math.ceil(workers.length / settings.pararels)}`);
|
||||
}
|
||||
let pararels: Promise<void>[] =[];
|
||||
let _ports=await findFreePorts(workers.length*3+1);
|
||||
let pararels: Promise<void>[] = [];
|
||||
let _ports = await findFreePorts(workers.length * 3 + 1);
|
||||
const miner = new Miner();
|
||||
await miner.listen({port: _ports[_ports.length-1]});
|
||||
|
||||
let containers: Docker.Container[]=[];
|
||||
await miner.listen({ port: _ports[_ports.length - 1] });
|
||||
|
||||
let containers: Docker.Container[] = [];
|
||||
|
||||
{
|
||||
const multibar = new cliProgress.MultiBar({
|
||||
hideCursor: true,
|
||||
barsize:50,
|
||||
barCompleteChar:'❌',
|
||||
barIncompleteChar:'✔️',
|
||||
barsize: 50,
|
||||
barCompleteChar: '❌',
|
||||
barIncompleteChar: '✔️',
|
||||
clearOnComplete: true,
|
||||
format: `{status} | {bar} | {value}/{total}sec timeout`,
|
||||
|
||||
});
|
||||
let _containers: Promise<Docker.Container>[]=[];
|
||||
for (let i=0;i!=workersGroups.length;i++){
|
||||
|
||||
});
|
||||
let _containers: Promise<Docker.Container>[] = [];
|
||||
for (let i = 0; i != workersGroups.length; i++) {
|
||||
_containers.push(
|
||||
startNewTorDocker(_ports[i*3],_ports[i*3+1],_ports[i*3+2],multibar)
|
||||
startNewTorDocker(_ports[i * 3], _ports[i * 3 + 1], _ports[i * 3 + 2], multibar)
|
||||
);
|
||||
}
|
||||
containers=(await Promise.allSettled(_containers)).map((value)=>{return (value as PromiseFulfilledResult<Docker.Container>).value});
|
||||
containers = (await Promise.allSettled(_containers)).map((value) => { return (value as PromiseFulfilledResult<Docker.Container>).value });
|
||||
multibar.stop();
|
||||
}
|
||||
|
||||
|
||||
|
||||
for (let i=0;i!=workersGroups.length;i++){
|
||||
|
||||
pararels.push(proccesGroup(workersGroups[i],{
|
||||
http: _ports[i*3],
|
||||
socks: _ports[i*3+1],
|
||||
control:_ports[i*3+2],
|
||||
|
||||
for (let i = 0; i != workersGroups.length; i++) {
|
||||
|
||||
pararels.push(proccesGroup(workersGroups[i], {
|
||||
http: _ports[i * 3],
|
||||
socks: _ports[i * 3 + 1],
|
||||
control: _ports[i * 3 + 2],
|
||||
minerPort: await miner.port
|
||||
|
||||
}
|
||||
));
|
||||
}
|
||||
|
||||
const results=await Promise.allSettled(pararels);
|
||||
for (const result of results){
|
||||
if (result.status=='rejected'){
|
||||
|
||||
const results = await Promise.allSettled(pararels);
|
||||
for (const result of results) {
|
||||
if (result.status == 'rejected') {
|
||||
logger.warn(`Promise is caanceled due ${result.reason}`);
|
||||
}
|
||||
}
|
||||
for (const container of containers){
|
||||
try{
|
||||
container.kill();
|
||||
} catch (err){}
|
||||
logger.debug('Closing opened docker containers ')
|
||||
for (const container of containers) {
|
||||
|
||||
try {
|
||||
container.kill();
|
||||
} catch (err) { }
|
||||
|
||||
}
|
||||
await miner.close();
|
||||
}
|
||||
|
||||
// menu
|
||||
(async ()=> {
|
||||
mainLoop:
|
||||
while (true){
|
||||
|
||||
const answer=await prompt({
|
||||
(async () => {
|
||||
while (true) {
|
||||
|
||||
const answer = await prompt({
|
||||
type: 'select',
|
||||
name: 'menu',
|
||||
message: 'Choose action',
|
||||
choices: [
|
||||
((await db.getUsers()).length>0) ? { title: 'Start',description: 'Starting farm', value: 'start' } : { title: 'Start',description: 'Add accounts first...', value: 'start' ,disabled: true},
|
||||
{ title: 'Add accounts', description: 'Adds accounts', value: 'addAccounts' },
|
||||
((await db.getUsers()).length > 0) ? { title: 'Start', description: 'Starting farm', value: 'start' } : { title: 'Start', description: 'Add accounts first...', value: 'start', disabled: true },
|
||||
{ title: 'Add accounts', description: 'Add accounts to database', value: 'addAccounts' },
|
||||
{ title: 'Check balances', value: 'checkBalances', disabled: true },
|
||||
{ title: 'Withdraw', value: 'withdraw', disabled: true },
|
||||
{ title: 'Exit',description: 'You realy dont know what it mean?'}
|
||||
{ title: 'Exit', description: 'You realy dont know what it mean?' }
|
||||
]
|
||||
})
|
||||
switch (answer.menu) {
|
||||
|
@ -455,27 +478,27 @@ const farm: ()=>Promise<void>=async ()=>{
|
|||
await addAccounts();
|
||||
break;
|
||||
case 'start':
|
||||
while (true){
|
||||
try{
|
||||
while (true) {
|
||||
try {
|
||||
await farm();
|
||||
} catch (err){
|
||||
} catch (err) {
|
||||
logger.error(`Unknown error\n${err.stack}\n${typeof err}`);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
|
||||
|
||||
default:
|
||||
logger.info('Bye bye');
|
||||
process.exit();
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
})();
|
||||
|
||||
process.on('SIGINT', function() {
|
||||
process.on('SIGINT', function () {
|
||||
logger.info('Bye bye');
|
||||
process.exit();
|
||||
});
|
||||
});
|
|
@ -11,7 +11,7 @@ export interface faucetMailInterface {
|
|||
}
|
||||
export interface AccountCompletedGroupsTasksInterface {
|
||||
timeToLeave: number,
|
||||
groupID: bigInt.BigInteger
|
||||
groupID: string
|
||||
}
|
||||
|
||||
export interface AccountWithdrawInterface {
|
||||
|
|
11
utils.ts
11
utils.ts
|
@ -11,7 +11,7 @@ import axios from "axios";
|
|||
import cliProgress from "cli-progress"
|
||||
|
||||
export const isBannedByClient=async function(client:telegram.TelegramClient,username: string): Promise<boolean> {
|
||||
const blockedUsers=(await client.invoke(new telegram.Api.contacts.GetBlocked({}))).users as telegram.Api.User[];
|
||||
const blockedUsers=(await client.invoke(new telegram.Api.contacts.GetBlocked({limit:2147483647}))).users as telegram.Api.User[];
|
||||
for (const blockedUser of blockedUsers){
|
||||
if (blockedUser.username!==undefined && blockedUser.username==username.replace('@','')){
|
||||
return true;
|
||||
|
@ -59,7 +59,7 @@ export const getIP=async function (proxyPort: number): Promise<string | null> {
|
|||
export const waitNewMessages=async function(client: telegram.TelegramClient,worker: AccountInterface,chatEntity: telegram.Api.Chat | telegram.Api.User,idOfLastMessage: number,timeout: number=20): Promise<void>{
|
||||
|
||||
const start_time=new Date();
|
||||
while ((await client.getMessages(chatEntity,{minId:idOfLastMessage})).length==0){
|
||||
while ((await client.getMessages(chatEntity,{minId:idOfLastMessage,limit:2147483647})).length==0){
|
||||
if ((+(new Date())-+start_time)/1000>=timeout){
|
||||
logger.error(`${worker.phoneNumber} | Bot didnt answer for ${timeout}s`);
|
||||
throw new Error('Is bot working?');
|
||||
|
@ -122,7 +122,7 @@ export const startNewTorDocker=async function(proxyPort: number,socksPort: numbe
|
|||
|
||||
await container.start();
|
||||
|
||||
const progressBar=mainProgressBar.create(timeout/2, 0,{status:'Starting'});
|
||||
const progressBar=mainProgressBar.create(timeout/2, 0,{status:`Starting docker${(settings.logLevel=='debug') ? ` ${proxyPort} ${socksPort} ${controlPort}` : ''}`});
|
||||
while ((await container.inspect())!.State.Health!.Status!='healthy'){
|
||||
const state=(await container.inspect())!.State.Health!.Status
|
||||
if (progressBar.getProgress()>=timeout){
|
||||
|
@ -133,12 +133,11 @@ export const startNewTorDocker=async function(proxyPort: number,socksPort: numbe
|
|||
}
|
||||
if (state=='unhealthy'){
|
||||
await container.kill();
|
||||
progressBar.update(timeout/2,{status:'Failed'})
|
||||
progressBar.update(timeout/2,{status:'Docker is unhealthy...'})
|
||||
progressBar.stop();
|
||||
logger.warn(`Docker ${container.id} is unhealthy.Recreating...`);
|
||||
return await startNewTorDocker(proxyPort,socksPort,controlPort,mainProgressBar,timeout/2);
|
||||
}
|
||||
progressBar.increment({status: "Starting"});;
|
||||
progressBar.increment();
|
||||
await sleep(2000);
|
||||
}
|
||||
progressBar.update(0,{status:'Started'})
|
||||
|
|
Loading…
Reference in New Issue