def updateTeamsFinalBench(): session = CreateSession() m = session.query(Managers).all() gw = GetGameweek(session) for i in m: fplid = i.fplId r = requests.get( f"https://fantasy.premierleague.com/api/entry/{fplid}/event/{gw}/picks/" ) team = r.json() for p in team['picks']: if p['is_captain']: cap = 1 else: cap = 0 if not BenchBoost(session, i.id, gw): if p['position'] > 11: bench = 1 else: bench = 0 else: bench = 0 plyr = session.query(Teams).filter_by( playerId=p['element']).filter_by(managerId=i.id).filter_by( gameweek=gw).first() plyr.is_bench = bench session.add(plyr) session.commit() session.close()
def populatePlayers(): bootstrapData = GetBootstrapData() playerData = bootstrapData['elements'] session = CreateSession() session.query(Players).delete() for i in playerData: plyr = Players(jfpl=i['id'], event_points=i['event_points'], first_name=i['first_name'], second_name=i['second_name'], web_name=i['web_name'], team=i['team'], team_code=i['team_code'], goals_scored=i['goals_scored'], assists=i['assists'], goals_conceded=i['goals_conceded'], pen_saved=i['penalties_saved'], pen_missed=i['penalties_missed'], yellow_cards=i['yellow_cards'], red_cards=i['red_cards'], saves=i['saves'], element_type=i['element_type']) session.add(plyr) session.commit() session.close()
def WeeklySetup(): updateGameweeks() logger.info('gameweeks updated') session=CreateSession() gw=GetGameweek(session) session.close() if gw == 1: populateFixtures() logger.info('fixtures populated,for first week at least') getNewPlFixtures() logger.info('plfixtures updated') updatePlPlayers() logger.info('plplayers updated') updateTeams() logger.info('Teams updated') updateChips() logger.info('chips updated') checkDrops() logger.info('drops updated') checkReefs() logger.info('reefs updated') CreateMatchCronjobs() CreateWeeklyCronjob() CreateBonusCronjobs() CreateFinalCronjobs() sendMsg("Data updated, the gameweek has begun!")
def updateJanCup(): session = CreateSession() gw = GetJanCupWeek(session) if gw == 3: UpdateSemis() elif gw == 4: UpdateFinal session.close()
def DateToCron(): session = CreateSession() q = session.query(Gameweeks) \ .filter_by(is_next=1) \ .first() dt = datetime.datetime.strptime(q.deadline, '%Y-%m-%dT%H:%M:%SZ') dt = dt.replace(tzinfo=tz.gettz('UTC')) return dt
def populatePlTeams(): bootstrapData = GetBootstrapData() plTeamsData = bootstrapData['teams'] session = CreateSession() session.query(PlTeams).delete() for i in plTeamsData: tm = PlTeams(id=i['id'], name=i['name'], shortname=i['short_name']) session.add(tm) session.commit() session.close()
def updateTeams(): session = CreateSession() m = session.query(Managers).all() gw = GetGameweek(session) for i in m: fplid = i.fplId r = requests.get( f"https://fantasy.premierleague.com/api/entry/{fplid}/event/{gw}/picks/" ) team = r.json() for p in team['picks']: if p['is_captain']: cap = 1 else: cap = 0 if not BenchBoost(session, i.id, gw): if p['position'] > 11: bench = 1 else: bench = 0 else: print("ay") bench = 0 plyr = Teams(gameweek=gw, managerId=i.id, playerId=int(p['element']), points=0, is_captain=cap, is_bench=bench) session.add(plyr) session.commit() session.close()
def CreateFinalCronjobs(): cron = CronTab(user='******') session=CreateSession() gw=GetGameweek(session) q = session.query(PlFixtures.kickoff_time).filter_by(gameweek=gw).all() KO = max([datetime.datetime.strptime(j[0],'%Y-%m-%dT%H:%M:%SZ') for j in q]) FT = KO + datetime.timedelta(hours=2) job = cron.new(command=cronFinalCommand,comment='Final Points') job.setall(FT) cron.write() session.close()
def UpdateSemis(): session = CreateSession() fixtures = session.query(JanCupFixtures).filter_by(isQuarterFinal=1).all() ScoreString = '' for f in fixtures: score1 = getScore(f.managerId) score2 = getScore(f.opponentId) if score1 > score2: x = f.managerId else: x = f.opponentId insertSemiFixture(session,x,f.semiFinalDraw) session.close()
def createFPLClassicoTable(): session = CreateSession() t = session.query(Table, Managers).filter(Table.managerId == Managers.id).all() values = [(i[1].teamName, i[0].score) for i in t] session.close() df = pandas.DataFrame(values, columns=['Team', 'PlayerScore']) df = df.sort_values(['PlayerScore'], ascending=[False]) df = df.reset_index() df.drop('index', axis=1, inplace=True) df['#'] = df.index + 1 df['#'] = df['#'].apply(lambda x: "{}{}".format(x, (' ' * 15))) df = df[['#', 'Team', 'PlayerScore']] render_mpl_table(df, classicoPath)
def updateDeadlines(): bootstrapData = GetBootstrapData() gameweekData = bootstrapData['events'] for i in gameweekData: dbid = i['id'] deadline = i['deadline_time'] session = CreateSession() dl = session.query(Gameweeks).filter_by(id=dbid).first() dl.deadline = deadline session.add(dl) session.commit() session.close()
def createTable(): session = CreateSession() t = session.query(Table, Managers).filter(Table.managerId == Managers.id).all() values = [(i[1].teamName, i[0].score, i[0].points) for i in t] session.close() df = pandas.DataFrame(values, columns=['Team', 'PlayerScore', 'Points']) df = df.sort_values(['Points', 'PlayerScore'], ascending=[False, False]) df = df.reset_index() df.drop('index', axis=1, inplace=True) df['#'] = df.index + 1 df['#'] = df['#'].apply(lambda x: "{}{}".format(x, (' ' * 15))) df = df[['#', 'Team', 'PlayerScore', 'Points']] render_mpl_table( df, '/home/turner_prize/leagueolas/league-site/league-site/data/table.png')
def populateGameweeks(): bootstrapData = GetBootstrapData() gameweekData = bootstrapData['events'] session = CreateSession() session.query(Gameweeks).delete() for i in gameweekData: gw = Gameweeks(id=i['id'], name=i['name'], deadline=i['deadline_time'], is_current=i['is_current'], is_next=i['is_next'], gameweek_start='test', gameweek_end='test') session.add(gw) session.commit() session.close()
def UpdateFinal(): session = CreateSession() fixtures = session.query(JanCupFixtures).filter_by(isSemiFinal=1).all() ScoreString = '' for f in fixtures: score1 = getScore(f.managerId) score2 = getScore(f.opponentId) if score1 > score2: x = f.managerId else: x = f.managerId insertFinalFixture(session,x) session.close() print('complete')
def populatePlFixtures(): session = CreateSession() session.query(PlFixtures).delete() r = requests.get(f"https://fantasy.premierleague.com/api/fixtures") fixtureData = r.json() for i in fixtureData: fxtr = PlFixtures(id=i['id'], kickoff_time=i['kickoff_time'], gameweek=i['event'], away_team=i['team_a'], home_team=i['team_h'], started=i['started'], finished=i['finished']) session.add(fxtr) session.commit() session.close()
def GetFixtures(): session = CreateSession() gw = GetGameweek(session) q = session.query(PlFixtures.kickoff_time) \ .distinct(PlFixtures.kickoff_time) \ .order_by(PlFixtures.kickoff_time) \ .filter_by(gameweek=gw) \ .all() dtRanges = [] for i in q: #timezone is UTC from database, need to change to current TZ KickoffTime = datetime.strptime(i.kickoff_time, '%Y-%m-%dT%H:%M:%SZ') GameEndTime = KickoffTime + timedelta(hours=2) rng = (KickoffTime, GameEndTime) dtRanges.append(rng) session.close() return LoopIt(dtRanges)
def updatedPointshit(gw): session = CreateSession() m = session.query(Managers).all() for i in m: fplid = i.fplId r = requests.get( f"https://fantasy.premierleague.com/api/entry/{fplid}/event/{gw}/picks/" ) team = r.json() hit = team['entry_history']['event_transfers_cost'] x = session.query(Fixtures).filter(Fixtures.managerId == i.id).filter( Fixtures.gameweek == gw).first() x.pointhit = hit session.add(x) session.commit() session.close()
def updatePlFixtures(): session = CreateSession() gw = GetGameweek(session) r = requests.get( f"https://fantasy.premierleague.com/api/fixtures/?event={gw}") fixtureData = r.json() for games in fixtureData: j = session.query(PlFixtures).filter_by( away_team=games['team_a']).filter_by(gameweek=gw).first() if games['started']: j.started = 1 if games['finished_provisional']: j.finished = 1 session.add(j) session.commit() session.close()
def CreateBonusCronjobs(): cron = CronTab(user='******') session = CreateSession() gw = GetGameweek(session) q = session.query(PlFixtures.kickoff_time).filter_by(gameweek=gw).all() gameDays = set([ datetime.datetime.strptime(i[0], '%Y-%m-%dT%H:%M:%SZ').date() for i in q ]) for i in gameDays: KO = max([ datetime.datetime.strptime(j[0], '%Y-%m-%dT%H:%M:%SZ') for j in q if datetime.datetime.strptime(j[0], '%Y-%m-%dT%H:%M:%SZ').date() == i ]) FT = KO + datetime.timedelta(hours=2) job = cron.new( command= '/home/turner_prize/leagueolas/bot-env/bin/python3 /home/turner_prize/leagueolas/league-site/league-site/data/cronBonus.py', comment='Bonus Points') job.setall(FT) cron.write() session.close()
def updateViceCaptain(): session = CreateSession() m = session.query(Managers).all() gw = GetGameweek(session) for i in m: fplid = i.fplId r = requests.get( f"https://fantasy.premierleague.com/api/entry/{fplid}/event/{gw}/picks/" ) team = r.json() for p in team['picks']: if not BenchBoost(session, i.id, gw): if p['is_captain'] and p['multiplier'] in [0, 1]: for q in team['picks']: if q['is_vice_captain']: plyr = session.query(Teams).filter_by( playerId=q['element']).filter_by( managerId=i.id).filter_by( gameweek=gw).first() plyr.is_captain = 1 session.add(plyr) session.commit() session.close()
def getOneScore(TelegramId): session = CreateSession() gw = session.query(Gameweeks.id).filter_by(is_current=1).first() gw = gw[0] manager = session.query(Managers).filter_by(telegramId=TelegramId).first() fixtures = session.query(Fixtures).filter_by(gameweek=gw).filter_by( managerId=manager.id).first() ScoreString = '' ss1 = getScoreString(session, fixtures.managerId, gw) ss2 = getScoreString(session, fixtures.opponentId, gw) ScoreString = f'{ss1} \nvs\n{ss2}' session.close() return ScoreString
def getNewPlFixtures(): session = CreateSession() gw = GetGameweek(session) r = requests.get( f"https://fantasy.premierleague.com/api/fixtures/?event={gw}") fixtureData = r.json() for i in fixtureData: fxtr = PlFixtures(id=i['id'], kickoff_time=i['kickoff_time'], gameweek=i['event'], away_team=i['team_a'], home_team=i['team_h'], started=i['started'], finished=i['finished']) session.add(fxtr) session.commit() session.close()
def GetNextFixtures(): session = CreateSession() gw = GetNextGameweek(session) session.close() session = CreateSession() f = getAllFixtures(session, gw) n = 0 MyString = 'Next gameweeks fixtures:\n\n' for i in f: n = n + 1 if n % 2 == 0: manager1 = GetManagerTeamName(session, i.managerId)[0] manager2 = GetManagerTeamName(session, i.opponentId)[0] if session.query( Managers.KOTM).filter_by(id=i.managerId).first()[0] == 1: manager1 = manager1 + '*' if session.query( Managers.KOTM).filter_by(id=i.opponentId).first()[0] == 1: manager2 = manager2 + '*' MyString = MyString + f"{manager1} v {manager2}\n" session.close() return MyString
def JanCup(): session = CreateSession() gw = GetJanCupWeek(session) if gw > 0 and gw <=5: if gw == 1 or gw == 2: x = JanCupQualification(session) session.close() return x else: x = JanCupScores(session,gw) session.close() return x
def GetMonster(monsterID): r = requests.get(f"http://www.dnd5eapi.co/api/monsters/{monsterID}") monster = r.json() session = CreateSession() x = session.query(Enemy).filter_by(name=monster['name']).first() if not x: if 'actions' in monster: enemiesTable(monster, session) specialAbilitiesTable(monster, session) actionsTextTable(monster, session) actionsTable(monster, session) ledgendaryActionsTable(monster, session) session.commit() session.close() print(f"{monster['name']} added!") else: print(f"{monster['name']} already exists!")
def getScore(id): session = CreateSession() gw = session.query(Gameweeks.id).filter_by(is_current=1).first() gw=gw.id scores = session.query(Teams).filter_by(managerId=id).filter_by(gameweek=gw).filter_by(is_bench=0).all() for i in scores: if i.is_captain==1: if TripleCaptain(session,id,gw): i.points = (i.points * 3) else: i.points = (i.points * 2) scoreList = [x.points for x in scores] points = sum(scoreList) pointhit = session.query(Fixtures).filter_by(managerId=id).filter_by(gameweek=gw).first() if pointhit.pointhit: points = points - pointhit.pointhit session.close() return points
def getAllScores(): session = CreateSession() gw = session.query(Gameweeks.id).filter_by(is_current=1).first() gw = gw[0] fixtures = session.query(Fixtures).filter_by(gameweek=gw).all() fx = [] ScoreString = '' for f in fixtures: manager1 = session.query(Managers).filter_by(id=f.managerId).first() if manager1.id in fx: continue else: ss1 = getScoreString(session, f.managerId, gw) ss2 = getScoreString(session, f.opponentId, gw) fx.append(f.managerId) fx.append(f.opponentId) ScoreString = ScoreString + '\n' + f'{ss1} \nvs\n{ss2}\n---' session.close() return ScoreString
def updateChips(): session = CreateSession() m = session.query(Managers).all() gw = GetGameweek(session) for i in m: fplid = i.fplId r = requests.get( f"https://fantasy.premierleague.com/api/entry/{fplid}/event/{gw}/picks/" ) team = r.json() if team['active_chip'] != 'null': if team['active_chip'] == '3xc': i.TC = gw if team['active_chip'] == 'bboost': i.BB = gw if team['active_chip'] == 'freehit': i.FH = gw if team['active_chip'] == 'wildcard': i.WC1 = gw session.commit() session.close()
def DraftList(pos=None): session = CreateSession() if pos: p = ElementType(pos) manager = session.query(Managers,DraftedPlayers,Players, PlTeams) \ .filter(Managers.id==DraftedPlayers.managerId) \ .filter(Players.jfpl==DraftedPlayers.playerId) \ .filter(Players.team==PlTeams.id) \ .filter(Players.element_type==p) \ .order_by(desc(Managers.id)) \ .order_by(Players.element_type) \ .all() else: manager = session.query(Managers,DraftedPlayers,Players, PlTeams) \ .filter(Managers.id==DraftedPlayers.managerId) \ .filter(Players.jfpl==DraftedPlayers.playerId) \ .filter(Players.team==PlTeams.id) \ .order_by(desc(Managers.id)) \ .order_by(Players.element_type) \ .all() dlist = {} for i in manager: if not i[0].teamName in dlist: dlist[i[0].teamName] = [] pos = GetPos(i[2].element_type) draftString = f'{pos} - {i[2].web_name} - {i[3].shortname}' dlist[i[0].teamName].append(draftString) dString = '' for k, v in dlist.items(): dString = dString + f"\n{k}:" for dl in v: dString = dString + f"\n\t{dl}" dString = dString + f'\n' session.close() return dString
def updateKOTM(): session = CreateSession() k = session.query(Managers).filter_by(KOTM=1).first() gw = GetGameweek(session) kotm = session.query(Fixtures).filter(Fixtures.gameweek == gw).filter( Fixtures.managerId == k.id).first() challenger = session.query(Fixtures).filter( Fixtures.gameweek == gw).filter( Fixtures.managerId == kotm.opponentId).first() if challenger.score > kotm.score: j = session.query(Managers).filter_by(id=kotm.opponentId).first() sendMsg(f'{j.teamName} is the new King of The Mountain!') j.KOTM = 1 k.KOTM = 0 session.add(j) session.add(k) session.commit() else: sendMsg(f'{k.teamName} retains King of The Mountain...for now.') session.close()