diff --git a/main.py b/main.py index 40b221ab..c3d461d0 100644 --- a/main.py +++ b/main.py @@ -1,6 +1,8 @@ import asyncio import discord import json + +import opendota import overwatch import league import strings as s @@ -215,7 +217,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 +231,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(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 +287,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.") @@ -264,6 +299,8 @@ print("[League] Added level change check to the queue.") loop.create_task(brawlhalla_update_mmr(7200)) print("[Brawlhalla] Added mmr change check to the queue.") +#loop.create_task(opendota_last_match(600)) +#print("[OpenDota] Added last match check to the queue.") try: loop.run_until_complete(d_client.start(token)) diff --git a/opendota.py b/opendota.py new file mode 100644 index 00000000..85415126 --- /dev/null +++ b/opendota.py @@ -0,0 +1,13 @@ +import asyncio +import requests +loop = asyncio.get_event_loop() + +async def get_latest_match(steamidtre: str): + steamidtre = steamidtre[1:-1].split(":")[2] + 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/steam.py b/steam.py deleted file mode 100644 index be68b1a2..00000000 --- a/steam.py +++ /dev/null @@ -1,9 +0,0 @@ -def convert_sid_1_3(steamid: int, group=False): - """Convert SteamID1 to SteamID3""" - accuniverse = steamid % 2 - if group: - acctype = 0x0170000000000000 - else: - acctype = 0x0110000100000000 - accid = (steamid - acctype - accuniverse) / 2 - return accid 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