UNPKG

fut

Version:
133 lines (114 loc) 4.06 kB
const Fut = require('../src/index') const co = require('co') const Promise = require('bluebird') const moment = require('moment') // const fs = Promise.promisifyAll(require('fs')) const mongoose = require('mongoose') mongoose.Promise = Promise const Bot = require('./bot') mongoose.connect(process.env.FIFA_MONGO) var db = mongoose.connection db.on('error', console.error.bind(console, 'connection error:')) db.once('open', function () { console.log('db ready') }) co(function * () { console.log('miau') const bot = yield Bot.findOne({email: 'szabopanka@vsgmail.com'}) if (!bot) throw new Error('Bot not found!') const fut = createFut(bot.toObject()) try { yield fut.login() } catch (e) { console.log(e.futLoginError) if (e.futLoginError && e.futLoginError.debug.includes('No question is setup for user')) { console.log('No security question error') } throw e } // const api = fut.rawApi.defaults({proxy: 'http://barczag:Gv3sGhumEpXsz8@165.231.105.228'}) // const proxyAnswer = yield fut.rawApi({baseUrl: null, uri: 'https://api.ipify.org?format=json'}) let resp = yield fut.getCredits() let resp2 = yield fut.search({type: 'development', lev: 'gold', cat: 'contract'}) console.log(bot, resp, resp2) }).catch((e) => console.log(e.stack)) const getSecurityCode = co.wrap(function * (botId, start) { start = start || moment() let timeout = 200 let bot = yield Bot.findOne({_id: botId}) let variables = Object.assign({}, bot.variables, {securityCode: null}) yield Bot.update({_id: botId}, {variables}) var delayAndCall = co.wrap(function * () { var diff = moment().diff(start, 'seconds') if (diff > timeout) throw new Error(`No security code found for bot ${botId}`) yield Promise.delay(1000) let bot = yield Bot.findOne({_id: botId}) let variables = bot.variables if (variables.securityCode) return variables.securityCode else return delayAndCall() }) return delayAndCall() }) const createFut = ({_id, email, password, secret, platform, proxy}) => { let fut = new Fut({ email, password, secret, platform, proxy, loginType: process.env.FUT_LOGIN_TYPE || 'mobile', RPM: 50, minDelay: 1500, captchaHandler: (captcha, resolve) => { console.log('captcha') }, preHook: Promise.coroutine(function * () { let limit = yield this.loadVariable('limit') || {} const defaults = { webStarted: null, webCount: 0, mobileStarted: null, mobileCount: 0 } limit = Object.assign({}, defaults, limit) if (!limit[`${this.options.loginType}Started`]) limit[`${this.options.loginType}Started`] = new Date() const currentStart = limit[`${this.options.loginType}Started`] const diff = moment().diff(currentStart, 'minutes') const currentCount = limit[`${this.options.loginType}Count`] if (currentCount > 4900 && diff < 24 * 60) throw new Error('Daily request limit reached') if (diff > 24 * 60) { limit[`${this.options.loginType}Started`] = new Date() limit[`${this.options.loginType}Count`] = 1 } else { limit[`${this.options.loginType}Count`]++ } console.log(77, limit) yield this.saveVariable('limit', limit) console.log('prehook finished') }), tfAuthHandler: async (send) => { console.log('Waiting for security code ...') try { return await getSecurityCode(_id) } catch (e) { console.error(e.stack) process.exit(1) } }, saveVariable: co.wrap(function * (key, val) { let bot = yield Bot.findOne({_id}) console.log(48, bot) let variables = bot.variables variables[key] = val console.log('setting item', key) yield Bot.update({_id}, {variables}) console.log('item saved') }), loadVariable: co.wrap(function * (key) { let bot = yield Bot.findOne({_id}) console.log('getting item', key) return bot.variables[key] || null }) }) return fut }