fut
Version:
fifa 17 web-app api
133 lines (114 loc) • 4.06 kB
JavaScript
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
}