fixes of fixes
This commit is contained in:
parent
6fa2e3bdf4
commit
ec73ec0ce1
|
@ -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}`);
|
||||
|
|
35
database.ts
35
database.ts
|
@ -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;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
46
index.ts
46
index.ts
|
@ -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();
|
||||
})
|
||||
|
||||
});
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
16
package.json
16
package.json
|
@ -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",
|
||||
|
|
4
utils.ts
4
utils.ts
|
@ -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){
|
||||
|
|
Loading…
Reference in New Issue