From d796c69242fc04d4fafd489b4ee056d8e8050a83 Mon Sep 17 00:00:00 2001 From: Stefano Pigozzi Date: Tue, 8 Nov 2016 19:37:39 +0100 Subject: [PATCH] Added opendota.com support --- main.py | 40 ++++++++++++++++++++++++++++++++++++++-- opendota.py | 12 ++++++++++++ strings.py | 5 ++++- 3 files changed, 54 insertions(+), 3 deletions(-) create mode 100644 opendota.py diff --git a/main.py b/main.py index 40b221ab..641e0004 100644 --- a/main.py +++ b/main.py @@ -1,8 +1,11 @@ import asyncio import discord import json + +import opendota import overwatch import league +import steam import strings as s import telegram import bs4 @@ -215,7 +218,7 @@ async def brawlhalla_update_mmr(timeout): # Compare the mmr with the value saved in the database if mmr != old_mmr: # Send a message - loop.create_task(send_event(s.brawlhalla_new_mmr, player, mmr=mmr, oldmmr=old_mmr)) + loop.create_task(send_event(s.brawlhalla_new_mmr, player=player, mmr=mmr, oldmmr=old_mmr)) # Update database db[player]["brawlhalla"]["mmr"] = mmr f = open("db.json", "w") @@ -229,6 +232,40 @@ async def brawlhalla_update_mmr(timeout): else: await asyncio.sleep(1) +# Every timeout seconds, report the last match +async def opendota_last_match(timeout): + while True: + if discord_is_ready: + print("[OpenDota] Starting last match check...") + # Check for new dota match for every player in the database + for player in db: + try: + # TODO: Se uno non ha mai giocato a dota, cosa succede? Aggiungere handling + r = await opendota.get_latest_match(steam.convert_sid_1_3(db[player]["steam"]["steamid"])) + except KeyError: + continue + else: + try: + old_last = db[player]["dota"]["lastmatch"] + except KeyError: + old_last = 0 + last = r["match_id"] + if last > old_last: + # Send a message + loop.create_task(send_event(s.dota_new_match, player=player, k=r["kills"], d=r["deaths"], a=r["assists"])) + # Update database + db[player]["dota"]["lastmatch"] = last + f = open("db.json", "w") + json.dump(db, f) + f.close() + finally: + await asyncio.sleep(2) + print("[OpenDota] Check successful.") + await asyncio.sleep(timeout) + else: + await asyncio.sleep(1) + + # Send a new event to both Discord and Telegram async def send_event(eventmsg: str, player: str, **kwargs): # Create arguments dict @@ -251,7 +288,6 @@ async def send_event(eventmsg: str, player: str, **kwargs): # Send the message loop.create_task(telegram.send_message(msg, -2141322)) - loop.create_task(overwatch_status_change(600)) print("[Overwatch] Added level up check to the queue.") diff --git a/opendota.py b/opendota.py new file mode 100644 index 00000000..43ead964 --- /dev/null +++ b/opendota.py @@ -0,0 +1,12 @@ +import asyncio +import requests +loop = asyncio.get_event_loop() + +async def get_latest_match(steamidtre: int): + print("[OpenDota] Getting latest match for: {steamid}".format(steamid=steamidtre)) + r = await loop.run_in_executor(None, requests.get, 'https://api.opendota.com/api/players/{steamidtre}/matches?limit=1'.format(steamidtre=steamidtre)) + if r.status_code == 200: + pj = r.json() + return pj[0] + else: + raise Exception("OpenDota request error") diff --git a/strings.py b/strings.py index 39d7bd7b..bc97c19b 100644 --- a/strings.py +++ b/strings.py @@ -39,4 +39,7 @@ league_roman_list = ["I", league_level_up = "{player} è salito al livello **{level}** su _League of Legends_!" # Brawlhalla: new MMR -brawlhalla_new_mmr = "{player} è passato da {oldmmr} MMR a **{mmr}** MMR su _Brawlhalla_!" \ No newline at end of file +brawlhalla_new_mmr = "{player} è passato da {oldmmr} MMR a **{mmr}** MMR su _Brawlhalla_!" + +# Dota: new match +dota_new_match = "{player} ha finito una partita a _Dota 2_ con {k}/{d}/{a}!" \ No newline at end of file