fixes of fixes

This commit is contained in:
”minicx” 2022-12-09 19:38:09 +03:00
parent 6fa2e3bdf4
commit ec73ec0ce1
6 changed files with 73 additions and 39 deletions

View File

@ -62,6 +62,11 @@ export const doSitesTasks=async function (client: telegram.TelegramClient,worker
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;
logger.warn(`Captcha isnt detected... | ${worker.phoneNumber}`);

View File

@ -11,7 +11,7 @@ export class Database {
}
private json: JsonDB;
constructor (){
this.json=new JsonDB(new Config('db.json',true,true,'/'));
this.json=new JsonDB(new Config('db.json',false,true,'/'));
this.json.getData('/').then((result)=>{
if (Object.keys(result).length==0){
this.json.push('/',this.default,true)
@ -19,6 +19,7 @@ export class Database {
.then(() => {
logger.info('Setting DB to defaults...');
});
this.save();
}
})
}
@ -85,8 +86,13 @@ export class Database {
}
return refferal;
}
async save(){
await this.json.save(true);
}
async updateUser(account:interfacesDB.AccountInterface){
await this.json.push(`/accounts[${ await this.json.getIndex("/accounts", account.phoneNumber)}]`,account,true);
const index=await this.json.getIndex("/accounts", account.phoneNumber,"phoneNumber")
logger.debug(`Index in database is ${index} of ${account.phoneNumber}`)
await this.json.push(`/accounts[${index}]`,account,true);
}
async addUser(account: Omit<interfacesDB.AccountInterface,
'balance' | 'withdraws' | 'completedGroupsTasks' | 'canBeRefferal'
@ -104,6 +110,7 @@ export class Database {
throw new Error('Add new faucet accounts');
}else {
const canBeRefferal: boolean=Math.random() < 0.5;
const _account: interfacesDB.AccountInterface={
phoneNumber:account.phoneNumber,
telegramID:account.telegramID,
@ -121,14 +128,14 @@ export class Database {
}
await this.json.push(`/accounts[]`,_account);
}
await this.save();
}
async getUsers(): Promise<interfacesDB.AccountInterface[]>{
try {
return await this.json.getData('/accounts');
return await this.json.getObject<interfacesDB.AccountInterface[]>('/accounts');
} catch {
return [];
}
@ -163,7 +170,12 @@ export class Settings implements interfacesSettings.settingsInterface {
botLink: '@hkearn_trx_bot',
groupsToJoin: ['@hkearn_transactions', '@hkearn_updates']
},
bypassMode: false
bypassMode: false,
sleepTime: {
afterDoing: [1*3600,2*3600],
betweenSessions: [35,70],
},
shuffleAccounts: true
}
logLevel: "debug" | "info" | "error";
mainCrypto: "TRX";
@ -174,9 +186,14 @@ export class Settings implements interfacesSettings.settingsInterface {
telegramLinks: { botLink: string; groupsToJoin: string[]; };
bypassMode: boolean
pararels: number
sleepTime: {
afterDoing: number[],
betweenSessions: number[],
}
shuffleAccounts: boolean
private json: JsonDB;
constructor (){
this.json=new JsonDB(new Config('settings.json',true,true,'/'));
this.json=new JsonDB(new Config('settings.json',false,true,'/'));
this.json.getObject<interfacesSettings.settingsInterface>('/').then((result) => {
if (Object.keys(result).length==0){
logger.warn('Setup config first...');
@ -191,7 +208,7 @@ export class Settings implements interfacesSettings.settingsInterface {
for (const setting of Object.keys(this.default)){
if (result[setting]===undefined || typeof(result[setting])!=typeof(this.default[setting])){
this[setting]=this.default[setting];
logger.warn(`Setting '${setting}' corrupted. Check out it...`)
logger.warn(`Setting '${setting}' corrupted or undefined. Check out it...`)
} else {
if (typeof(result[setting])=='object'){
for (const attr of Object.keys(this.default[setting])){
@ -208,9 +225,7 @@ export class Settings implements interfacesSettings.settingsInterface {
logger.level=this.logLevel;
}
});
}
}
}

View File

@ -7,7 +7,7 @@ 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 { waitNewMessages, startNewTorDocker, getIP, getMessagesByEntity, isBannedByClient, randomAB } from './utils';
import { connect, tor } from "node-tor-control";
import Miner from '@ulixee/miner';
import Hero from '@ulixee/hero';
@ -193,7 +193,7 @@ const farm: () => Promise<void> = async () => {
name: `${worker.telegramID}`,
connectionToCore: { host: `ws://127.0.0.1:${ports.minerPort}` },
disableDevtools: true, // to bypass hk site
// showChrome:true, // to debug
showChrome:true, // to debug
userAgent: fingerprint.navigator.userAgent,
viewport: fingerprint.screen,
locale: fingerprint.navigator.language,
@ -229,15 +229,17 @@ const farm: () => Promise<void> = async () => {
try {
botEntity = await client.getEntity(settings.telegramLinks.botLink) as telegram.Api.User;
} catch (err) {
if (err instanceof telegram.errors.RPCError) {
if (err instanceof telegram.errors.FloodWaitError) {
switch (err.errorMessage) {
case 'FLOOD':
logger.warn(`Account has flood error,skipping`);
logger.warn(`Account has flood(${err.seconds} secs timeout) error,skipping`);
break;
default:
logger.debug(`Unknown error due getEntity ${err}`)
logger.error(`Unknown error due getEntity ${err}`)
break;
}
} else {
logger.error(`Unknown error due getEntity ${err}`)
}
usedIPs.filter((value) => { return _.isEqual(worker, value.worker) })[0].current = ''
usedIPs.filter((value) => { return _.isEqual(worker, value.worker) })[0].usedIps.pop()
@ -326,7 +328,7 @@ const farm: () => Promise<void> = async () => {
}
}
await sleep(Math.random() * 100_000);
await sleep(Math.random() * 50_000);
if ((await getMessagesByEntity(client, botEntity, botEntity)).length == 0) {
// sending start message
let id: number = -1;
@ -363,18 +365,19 @@ const farm: () => Promise<void> = async () => {
} catch (err){
logger.error(`Some error due doing tasks\n${err}\n${err.stack}`)
}
// db.updateUser(worker);
db.updateUser(worker);
await hero.close();
await sleep(randomAB(settings.sleepTime.betweenSessions[0],settings.sleepTime.betweenSessions[1])*1_000);
}
}
return workers
}
const workers = await db.getUsers();
if (settings.shuffleAccounts){
workers.sort(() => Math.random() - 0.5)
}
let workersGroups: Array<AccountInterface[]> = [];
for (const worker of workers) {
@ -397,7 +400,7 @@ const farm: () => Promise<void> = async () => {
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<AccountInterface[]>[] = [];
let pararels: Promise<void>[] = [];
let _ports = await findFreePorts(workers.length * 3 + 1);
const miner = new Miner();
await miner.listen({ port: _ports[_ports.length - 1] });
@ -442,21 +445,18 @@ const farm: () => Promise<void> = async () => {
for (const result of results) {
if (result.status == 'rejected') {
logger.warn(`Promise is caanceled due ${result.reason}`);
} else{
for (const worker of result.value){
await db.updateUser(worker)
}
}
}
}
logger.debug('Closing opened docker containers ')
for (const container of containers) {
try {
container.kill();
await container.stop();
} catch (err) { }
}
await miner.close();
await db.save()
await miner.close(true);
}
// menu
@ -483,6 +483,9 @@ const farm: () => Promise<void> = async () => {
while (true) {
try {
await farm();
const sleepTime=randomAB(settings.sleepTime.afterDoing[0],settings.sleepTime.afterDoing[1]);
logger.info(`Sleeping for ${sleepTime} secs`);
await sleep(sleepTime*1_000);
} catch (err) {
logger.error(`Unknown error\n${err.stack}\n${typeof err}`);
break;
@ -501,6 +504,9 @@ const farm: () => Promise<void> = async () => {
})();
process.on('SIGINT', function () {
logger.info('Bye bye');
process.exit();
db.save().then(()=>{
logger.info('Bye bye');
process.exit();
})
});

View File

@ -1,5 +1,6 @@
export interface settingsInterface {
logLevel: 'debug' | 'info' | 'error',
pararels: number,
mainCrypto: 'TRX',
@ -25,6 +26,11 @@ export interface settingsInterface {
groupsToJoin: string[]
},
sleepTime: {
afterDoing: number[],
betweenSessions: number[]
},
shuffleAccounts: boolean
bypassMode: boolean
}

View File

@ -1,20 +1,20 @@
{
"dependencies": {
"@ulixee/execute-js-plugin": "^2.0.0-alpha.15",
"@ulixee/hero": "^2.0.0-alpha.15",
"@ulixee/miner": "^2.0.0-alpha.15",
"axios": "^1.2.0",
"@ulixee/execute-js-plugin": "^2.0.0-alpha.16",
"@ulixee/hero": "^2.0.0-alpha.16",
"@ulixee/miner": "^2.0.0-alpha.16",
"axios": "^1.2.1",
"cli-progress": "^3.11.2",
"dockerode": "^3.3.4",
"find-free-ports": "^3.0.0",
"fingerprint-generator": "^2.1.5",
"fingerprint-generator": "^2.1.7",
"lodash": "^4.17.21",
"node-json-db": "^2.1.3",
"node-tor-control": "^0.0.2",
"prompts": "^2.4.2",
"socks5-https-client": "^1.2.1",
"telegram": "^2.14.7",
"typescript": "^4.9.3",
"typescript": "^4.9.4",
"winston": "^3.8.2"
},
"name": "hk_bot",
@ -25,8 +25,8 @@
"@types/cli-progress": "^3.11.0",
"@types/dockerode": "^3.3.14",
"@types/lodash": "^4.14.191",
"@types/node": "^18.11.9",
"@types/prompts": "^2.4.1"
"@types/node": "^18.11.12",
"@types/prompts": "^2.4.2"
},
"scripts": {
"test": "yarn run build && node build/database.js",

View File

@ -9,7 +9,9 @@ import { AccountInterface } from "./interfaces/databaseInterface";
import * as telegram from 'telegram';
import axios from "axios";
import cliProgress from "cli-progress"
export const randomAB=function(a:number,b:number){
return Math.floor(Math.random() * (b - a + 1) + a)
}
export const isBannedByClient=async function(client:telegram.TelegramClient,username: string): Promise<boolean> {
const blockedUsers=(await client.invoke(new telegram.Api.contacts.GetBlocked({limit:2147483647}))).users as telegram.Api.User[];
for (const blockedUser of blockedUsers){