add logging exceptions to file, change ui title and exit script when ui closes
authorauxermen <auxermen@gmail.com>
Sun, 2 May 2021 14:33:04 +0000 (16:33 +0200)
committerauxermen <auxermen@gmail.com>
Sun, 2 May 2021 14:33:04 +0000 (16:33 +0200)
.gitignore
announcer.py [deleted file]
announcer.pyw [new file with mode: 0644]

index b59f7e3a95a4d3f2b168d9c8e330be591fc49a6b..760ae7776c6b7f2bf4616138719a6920f2a5cd64 100644 (file)
@@ -1 +1,6 @@
-test/
\ No newline at end of file
+test/
+build/
+dist/
+__pycache__/
+*.spec
+log.txt
diff --git a/announcer.py b/announcer.py
deleted file mode 100644 (file)
index d8b0db4..0000000
+++ /dev/null
@@ -1,248 +0,0 @@
-import requests
-import time
-import urllib3
-import audioplayer
-from os import path
-import random
-from tkinter import *
-import threading
-
-SOUNDS_FOLDER = path.join(path.dirname(__file__), "sounds/")
-EVENT_SOUNDS = {
-    "Welcome": ["welcometosummonersrift.mp3"],
-    "MinionsSpawningSoon": ["30secondsuntilminionsspawn.mp3"],
-    "MinionsSpawning": ["minionshavespawned.mp3"],
-    "FirstBlood": ["firstblood.mp3"],
-    "PlayerKill": ["youhaveslainanenemy1.mp3", "youhaveslainanenemy2.mp3", "youhaveslainanenemy3.mp3"],
-    "PlayerDeath": ["youhavebeenslain1.mp3", "youhavebeenslain2.mp3"],
-    "AllyDeath": ["anallyhasbeenslain1.mp3", "anallyhasbeenslain2.mp3"],
-    "AllyKill": ["anenemyhasbeenslain1.mp3", "anenemyhasbeenslain2.mp3", "anenemyhasbeenslain3.mp3"],
-    "AllyDoubleKill": ["doublekill1.mp3", "doublekill2.mp3"],
-    "AllyTripleKill": ["triplekill.mp3"],
-    "AllyQuadraKill": ["quadrakill.mp3"],
-    "AllyPentaKill": ["pentakill1.mp3", "pentakill2.mp3"],
-    "EnemyDoubleKill": ["enemydoublekill.mp3"],
-    "EnemyTripleKill": ["enemytriplekill.mp3"],
-    "EnemyQuadraKill": ["enemyquadrakill.mp3"],
-    "EnemyPentaKill": ["enemypentakill.mp3"],
-    "AllyAce": ["allyace.mp3"],
-    "EnemyAce": ["enemyace.mp3"],
-    "Executed": ["executed1.mp3", "executed2.mp3", "executed3.mp3"],
-    "AllyTurretKill": ["yourteamhasdestroyedaturret.mp3"],
-    "EnemyTurretKill": ["yourturrethasbeendestroyed1.mp3", "yourturrethasbeendestroyed2.mp3"],
-    "AllyInhibitorKill": ["yourteamhasdestroyedaninhibitor1.mp3", "yourteamhasdestroyedaninhibitor2.mp3"],
-    "EnemyInhibitorKill": ["yourinhibitorhasbeendestroyed1.mp3", "yourinhibitorhasbeendestroyed2.mp3"],
-    "AllyInhibitorRespawningSoon": ["yourinhibitorisrespawningsoon.mp3"],
-    "EnemyInhibitorRespawningSoon": ["enemyinhibitorisrespawningsoon.mp3"],
-    "AllyInhibitorRespawned": ["yourinhibitorhasrespawned.mp3"],
-    "EnemyInhibitorRespawned": ["enemyinhibitorhasrespawned.mp3"],
-    "Victory": ["victory.mp3"],
-    "Defeat": ["defeat.mp3"],
-}
-volume = 100
-
-def play_event_sound(event):
-    ap = audioplayer.AudioPlayer(SOUNDS_FOLDER + random.choice(EVENT_SOUNDS[event]))
-    ap.volume = volume
-    ap.play(block=True)
-
-# Ignore the Unverified HTTPS request warning.
-urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
-
-previous_game_time = 0
-game_time = 0
-previous_event_count = 0
-event_count = 0
-
-# Get event count so if the program is started in the middle of the match it doesn't play every announcement
-# sound which happened until that point.
-try:
-    # Get all data from the game in JSON format.
-    all_game_data = requests.get('https://127.0.0.1:2999/liveclientdata/allgamedata', verify=False).json()
-    events = all_game_data["events"]["Events"]
-    event_count = len(events)
-    previous_event_count = event_count
-except:
-    pass
-
-def update_volume(v):
-    global volume
-    volume = int(v)
-    
-def play_random_sound():
-    play_event_sound(random.choice(list(EVENT_SOUNDS.keys())))
-
-def announcer_loop():
-    global previous_game_time
-    global game_time
-    global previous_event_count
-    global event_count
-    
-    while True:
-        try:
-            # Get all data from the game in JSON format.
-            all_game_data = requests.get('https://127.0.0.1:2999/liveclientdata/allgamedata', verify=False).json()
-
-            game_time = all_game_data["gameData"]["gameTime"]
-            events = all_game_data["events"]["Events"]
-            # TODO: move some things to only update once per game.
-            player_name = all_game_data["activePlayer"]["summonerName"]
-            player_team = ""
-            team_order_players = []
-            team_chaos_players = []
-            ally_team_players = []
-            enemy_team_players = []
-
-            # Populate team chaos and team order players lists and figure out which team the player is on.
-            for player in all_game_data["allPlayers"]:
-                if player["team"] == "ORDER":
-                    team_order_players.append(player["summonerName"])
-                    if player["summonerName"] == player_name:
-                        player_team = "ORDER"
-                elif player["team"] == "CHAOS":
-                    team_chaos_players.append(player["summonerName"])
-                    if player["summonerName"] == player_name:
-                        player_team = "CHAOS"
-
-            # Populate ally and enemy team player lists.
-            if player_team == "ORDER":
-                ally_team_players = team_order_players
-                enemy_team_players = team_chaos_players
-            elif player_team == "CHAOS":
-                ally_team_players = team_chaos_players
-                enemy_team_players = team_order_players
-
-            # Welcome announcement.
-            if game_time >= 26 and previous_game_time < 26 and game_time < 28:
-                play_event_sound("Welcome")
-            # Minions spawning soon.
-            if game_time >= 36 and previous_game_time < 36 and game_time < 38:
-                play_event_sound("MinionsSpawningSoon")
-
-            event_count = len(events)
-
-            # Loop over all new events.
-            for event_index in range(previous_event_count, event_count):
-                event = events[event_index]
-                event_name = event["EventName"]
-
-                # Someone got first blood.
-                if event_name == "ChampionKill" and event_index < event_count - 1 and events[event_index + 1]["EventName"] == "FirstBlood":
-                    play_event_sound("FirstBlood")
-                    event_index += 1
-                # Someone got a multikill.
-                elif event_name == "ChampionKill" and event_index < event_count - 1 and events[event_index + 1]["EventName"] == "Multikill":
-                    multikill = events[event_index + 1]["KillStreak"]
-                    # Ally got a multikill.
-                    if event["KillerName"] in ally_team_players:
-                        if multikill == 2:
-                            play_event_sound("AllyDoubleKill")
-                        elif multikill == 3:
-                            play_event_sound("AllyTripleKill")
-                        elif multikill == 4:
-                            play_event_sound("AllyQuadraKill")
-                        elif multikill == 5:
-                            play_event_sound("AllyPentaKill")
-                    # Enemy got a multikill.
-                    elif event["KillerName"] in enemy_team_players:
-                        if multikill == 2:
-                            play_event_sound("EnemyDoubleKill")
-                        elif multikill == 3:
-                            play_event_sound("EnemyTripleKill")
-                        elif multikill == 4:
-                            play_event_sound("EnemyQuadraKill")
-                        elif multikill == 5:
-                            play_event_sound("EnemyPentaKill")
-                    event_index += 1
-                # Someone got a kill.
-                elif event_name == "ChampionKill":
-                    # Player got a kill.
-                    if event["KillerName"] == player_name:
-                        play_event_sound("PlayerKill")
-                    # Ally got a kill.
-                    elif event["KillerName"] in ally_team_players:
-                        play_event_sound("AllyKill")
-                    # Enemy got a kill.
-                    elif event["KillerName"] in enemy_team_players:
-                        # Player was killed.
-                        if event["VictimName"] == player_name:
-                            play_event_sound("PlayerDeath")
-                        # Ally was killed.
-                        else:
-                            play_event_sound("AllyDeath")
-                    # Someone got executed.
-                    else:
-                        play_event_sound("Executed")
-                # A team scored an ace.
-                elif event_name == "Ace":
-                    # Ally team scored an ace.
-                    if event["AcingTeam"] == player_team:
-                        play_event_sound("AllyAce")
-                    # Enemy team scored an ace.
-                    else:
-                        play_event_sound("EnemyAce")
-                # A turret was killed.
-                elif event_name == "TurretKilled":
-                    turret_name = event["TurretKilled"]
-                    # Ally team got a turret kill.
-                    if turret_name[7:9] == "T2" and player_team == "ORDER" or turret_name[7:9] == "T1" and player_team == "CHAOS":
-                        play_event_sound("AllyTurretKill")
-                    # Enemy team got a turret kill.
-                    elif turret_name[7:9] == "T1" and player_team == "ORDER" or turret_name[7:9] == "T2" and player_team == "CHAOS":
-                        play_event_sound("EnemyTurretKill")
-                # A turret was killed.
-                elif event_name == "InhibKilled":
-                    inhib_name = event["InhibKilled"]
-                    # Ally team got a turret kill.
-                    if inhib_name[9:11] == "T2" and player_team == "ORDER" or inhib_name[9:11] == "T1" and player_team == "CHAOS":
-                        play_event_sound("AllyInhibitorKill")
-                    # Enemy team got a turret kill.
-                    elif inhib_name[9:11] == "T1" and player_team == "ORDER" or inhib_name[9:11] == "T2" and player_team == "CHAOS":
-                        play_event_sound("EnemyInhibitorKill")
-                # An inhibitor is respawning soon.
-                elif event_name == "InhibRespawningSoon":
-                    inhib_name = event["InhibRespawningSoon"]
-                    # Ally team's inhibitor is respawning soon.
-                    if inhib_name[9:11] == "T1" and player_team == "ORDER" or inhib_name[9:11] == "T2" and player_team == "CHAOS":
-                        play_event_sound("AllyInhibitorRespawningSoon")
-                    # Enemy team's inhibitor is respawning soon.
-                    elif inhib_name[9:11] == "T2" and player_team == "ORDER" or inhib_name[9:11] == "T1" and player_team == "CHAOS":
-                        play_event_sound("EnemyInhibitorRespawningSoon")
-                # An inhibitor has respawned.
-                elif event_name == "InhibRespawned":
-                    inhib_name = event["InhibRespawned"]
-                    # Ally team's inhibitor has respawned.
-                    if inhib_name[9:11] == "T1" and player_team == "ORDER" or inhib_name[9:11] == "T2" and player_team == "CHAOS":
-                        play_event_sound("AllyInhibitorRespawned")
-                    # Enemy team's inhibitor has respawned.
-                    elif inhib_name[9:11] == "T2" and player_team == "ORDER" or inhib_name[9:11] == "T1" and player_team == "CHAOS":
-                        play_event_sound("EnemyInhibitorRespawned")
-                # Minions have spawned.
-                elif event_name == "MinionsSpawning":
-                    play_event_sound("MinionsSpawning")
-                # Game has ended.
-                elif event_name == "GameEnd":
-                    # Victory
-                    if event["Result"] == "Win":
-                        play_event_sound("Victory")
-                    # Defeat
-                    elif event["Result"] == "Lose":
-                        play_event_sound("Defeat")    
-                # TODO: killing streaks
-            previous_game_time = game_time
-            previous_event_count = event_count
-        except Exception as e:
-            # Probably not in game or some other catastrophic error.
-            print(e)
-
-
-# GUI that shows a slider for sound volume control.
-master = Tk()
-volume_slider = Scale(master, from_=0, to=100, orient=HORIZONTAL, command=update_volume)
-volume_slider.set(100)
-volume_slider.pack()
-Button(master, text='Test volume', command=play_random_sound).pack()
-x = threading.Thread(target=announcer_loop)
-x.start()
-mainloop()
-
diff --git a/announcer.pyw b/announcer.pyw
new file mode 100644 (file)
index 0000000..0c1bbc3
--- /dev/null
@@ -0,0 +1,263 @@
+import requests
+import time
+import urllib3
+import audioplayer
+from os import path, _exit
+import random
+from tkinter import *
+import threading
+
+SOUNDS_FOLDER = "sounds/"
+EVENT_SOUNDS = {
+    "Welcome": ["welcometosummonersrift.mp3"],
+    "MinionsSpawningSoon": ["30secondsuntilminionsspawn.mp3"],
+    "MinionsSpawning": ["minionshavespawned.mp3"],
+    "FirstBlood": ["firstblood.mp3"],
+    "PlayerKill": ["youhaveslainanenemy1.mp3", "youhaveslainanenemy2.mp3", "youhaveslainanenemy3.mp3"],
+    "PlayerDeath": ["youhavebeenslain1.mp3", "youhavebeenslain2.mp3"],
+    "AllyDeath": ["anallyhasbeenslain1.mp3", "anallyhasbeenslain2.mp3"],
+    "AllyKill": ["anenemyhasbeenslain1.mp3", "anenemyhasbeenslain2.mp3", "anenemyhasbeenslain3.mp3"],
+    "AllyDoubleKill": ["doublekill1.mp3", "doublekill2.mp3"],
+    "AllyTripleKill": ["triplekill.mp3"],
+    "AllyQuadraKill": ["quadrakill.mp3"],
+    "AllyPentaKill": ["pentakill1.mp3", "pentakill2.mp3"],
+    "EnemyDoubleKill": ["enemydoublekill.mp3"],
+    "EnemyTripleKill": ["enemytriplekill.mp3"],
+    "EnemyQuadraKill": ["enemyquadrakill.mp3"],
+    "EnemyPentaKill": ["enemypentakill.mp3"],
+    "AllyAce": ["allyace.mp3"],
+    "EnemyAce": ["enemyace.mp3"],
+    "Executed": ["executed1.mp3", "executed2.mp3", "executed3.mp3"],
+    "AllyTurretKill": ["yourteamhasdestroyedaturret.mp3"],
+    "EnemyTurretKill": ["yourturrethasbeendestroyed1.mp3", "yourturrethasbeendestroyed2.mp3"],
+    "AllyInhibitorKill": ["yourteamhasdestroyedaninhibitor1.mp3", "yourteamhasdestroyedaninhibitor2.mp3"],
+    "EnemyInhibitorKill": ["yourinhibitorhasbeendestroyed1.mp3", "yourinhibitorhasbeendestroyed2.mp3"],
+    "AllyInhibitorRespawningSoon": ["yourinhibitorisrespawningsoon.mp3"],
+    "EnemyInhibitorRespawningSoon": ["enemyinhibitorisrespawningsoon.mp3"],
+    "AllyInhibitorRespawned": ["yourinhibitorhasrespawned.mp3"],
+    "EnemyInhibitorRespawned": ["enemyinhibitorhasrespawned.mp3"],
+    "Victory": ["victory.mp3"],
+    "Defeat": ["defeat.mp3"],
+}
+volume = 100
+
+def play_event_sound(event):
+    ap = audioplayer.AudioPlayer(SOUNDS_FOLDER + random.choice(EVENT_SOUNDS[event]))
+    ap.volume = volume
+    ap.play(block=True)
+
+def update_volume(v):
+    global volume
+    volume = int(v)
+    
+def play_random_sound():
+    play_event_sound(random.choice(list(EVENT_SOUNDS.keys())))
+    
+def close_script():
+    gui.quit()
+    gui.destroy()
+    _exit(1)
+    
+# Ignore the Unverified HTTPS request warning.
+urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
+
+previous_game_time = 0
+game_time = 0
+previous_event_count = 0
+event_count = 0
+
+# Get event count so if the program is started in the middle of the match it doesn't play every announcement
+# sound which happened until that point.
+try:
+    # Get all data from the game in JSON format.
+    all_game_data = requests.get('https://127.0.0.1:2999/liveclientdata/allgamedata', verify=False).json()
+    events = all_game_data["events"]["Events"]
+    event_count = len(events)
+    previous_event_count = event_count
+except:
+    pass
+
+def announcer_loop():
+    # File for logging exceptions.
+    log_file = open("log.txt", "w")
+    
+    global previous_game_time
+    global game_time
+    global previous_event_count
+    global event_count
+    
+    while True:
+        try:
+            # Get all data from the game in JSON format.
+            all_game_data = requests.get('https://127.0.0.1:2999/liveclientdata/allgamedata', verify=False).json()
+
+            game_time = all_game_data["gameData"]["gameTime"]
+            events = all_game_data["events"]["Events"]
+            # TODO: move some things to only update once per game.
+            player_name = all_game_data["activePlayer"]["summonerName"]
+            player_team = ""
+            team_order_players = []
+            team_chaos_players = []
+            ally_team_players = []
+            enemy_team_players = []
+
+            # Populate team chaos and team order players lists and figure out which team the player is on.
+            for player in all_game_data["allPlayers"]:
+                if player["team"] == "ORDER":
+                    team_order_players.append(player["summonerName"])
+                    if player["summonerName"] == player_name:
+                        player_team = "ORDER"
+                elif player["team"] == "CHAOS":
+                    team_chaos_players.append(player["summonerName"])
+                    if player["summonerName"] == player_name:
+                        player_team = "CHAOS"
+
+            # Populate ally and enemy team player lists.
+            if player_team == "ORDER":
+                ally_team_players = team_order_players
+                enemy_team_players = team_chaos_players
+            elif player_team == "CHAOS":
+                ally_team_players = team_chaos_players
+                enemy_team_players = team_order_players
+
+            # Welcome announcement.
+            if game_time >= 26 and previous_game_time < 26 and game_time < 28:
+                play_event_sound("Welcome")
+            # Minions spawning soon.
+            if game_time >= 36 and previous_game_time < 36 and game_time < 38:
+                play_event_sound("MinionsSpawningSoon")
+
+            event_count = len(events)
+
+            # Loop over all new events.
+            for event_index in range(previous_event_count, event_count):
+                event = events[event_index]
+                event_name = event["EventName"]
+
+                # Someone got first blood.
+                if event_name == "ChampionKill" and event_index < event_count - 1 and events[event_index + 1]["EventName"] == "FirstBlood":
+                    play_event_sound("FirstBlood")
+                    event_index += 1
+                # Someone got a multikill.
+                elif event_name == "ChampionKill" and event_index < event_count - 1 and events[event_index + 1]["EventName"] == "Multikill":
+                    multikill = events[event_index + 1]["KillStreak"]
+                    # Ally got a multikill.
+                    if event["KillerName"] in ally_team_players:
+                        if multikill == 2:
+                            play_event_sound("AllyDoubleKill")
+                        elif multikill == 3:
+                            play_event_sound("AllyTripleKill")
+                        elif multikill == 4:
+                            play_event_sound("AllyQuadraKill")
+                        elif multikill == 5:
+                            play_event_sound("AllyPentaKill")
+                    # Enemy got a multikill.
+                    elif event["KillerName"] in enemy_team_players:
+                        if multikill == 2:
+                            play_event_sound("EnemyDoubleKill")
+                        elif multikill == 3:
+                            play_event_sound("EnemyTripleKill")
+                        elif multikill == 4:
+                            play_event_sound("EnemyQuadraKill")
+                        elif multikill == 5:
+                            play_event_sound("EnemyPentaKill")
+                    event_index += 1
+                # Someone got a kill.
+                elif event_name == "ChampionKill":
+                    # Player got a kill.
+                    if event["KillerName"] == player_name:
+                        play_event_sound("PlayerKill")
+                    # Ally got a kill.
+                    elif event["KillerName"] in ally_team_players:
+                        play_event_sound("AllyKill")
+                    # Enemy got a kill.
+                    elif event["KillerName"] in enemy_team_players:
+                        # Player was killed.
+                        if event["VictimName"] == player_name:
+                            play_event_sound("PlayerDeath")
+                        # Ally was killed.
+                        else:
+                            play_event_sound("AllyDeath")
+                    # Someone got executed.
+                    else:
+                        play_event_sound("Executed")
+                # A team scored an ace.
+                elif event_name == "Ace":
+                    # Ally team scored an ace.
+                    if event["AcingTeam"] == player_team:
+                        play_event_sound("AllyAce")
+                    # Enemy team scored an ace.
+                    else:
+                        play_event_sound("EnemyAce")
+                # A turret was killed.
+                elif event_name == "TurretKilled":
+                    turret_name = event["TurretKilled"]
+                    # Ally team got a turret kill.
+                    if turret_name[7:9] == "T2" and player_team == "ORDER" or turret_name[7:9] == "T1" and player_team == "CHAOS":
+                        play_event_sound("AllyTurretKill")
+                    # Enemy team got a turret kill.
+                    elif turret_name[7:9] == "T1" and player_team == "ORDER" or turret_name[7:9] == "T2" and player_team == "CHAOS":
+                        play_event_sound("EnemyTurretKill")
+                # A turret was killed.
+                elif event_name == "InhibKilled":
+                    inhib_name = event["InhibKilled"]
+                    # Ally team got a turret kill.
+                    if inhib_name[9:11] == "T2" and player_team == "ORDER" or inhib_name[9:11] == "T1" and player_team == "CHAOS":
+                        play_event_sound("AllyInhibitorKill")
+                    # Enemy team got a turret kill.
+                    elif inhib_name[9:11] == "T1" and player_team == "ORDER" or inhib_name[9:11] == "T2" and player_team == "CHAOS":
+                        play_event_sound("EnemyInhibitorKill")
+                # An inhibitor is respawning soon.
+                elif event_name == "InhibRespawningSoon":
+                    inhib_name = event["InhibRespawningSoon"]
+                    # Ally team's inhibitor is respawning soon.
+                    if inhib_name[9:11] == "T1" and player_team == "ORDER" or inhib_name[9:11] == "T2" and player_team == "CHAOS":
+                        play_event_sound("AllyInhibitorRespawningSoon")
+                    # Enemy team's inhibitor is respawning soon.
+                    elif inhib_name[9:11] == "T2" and player_team == "ORDER" or inhib_name[9:11] == "T1" and player_team == "CHAOS":
+                        play_event_sound("EnemyInhibitorRespawningSoon")
+                # An inhibitor has respawned.
+                elif event_name == "InhibRespawned":
+                    inhib_name = event["InhibRespawned"]
+                    # Ally team's inhibitor has respawned.
+                    if inhib_name[9:11] == "T1" and player_team == "ORDER" or inhib_name[9:11] == "T2" and player_team == "CHAOS":
+                        play_event_sound("AllyInhibitorRespawned")
+                    # Enemy team's inhibitor has respawned.
+                    elif inhib_name[9:11] == "T2" and player_team == "ORDER" or inhib_name[9:11] == "T1" and player_team == "CHAOS":
+                        play_event_sound("EnemyInhibitorRespawned")
+                # Minions have spawned.
+                elif event_name == "MinionsSpawning":
+                    play_event_sound("MinionsSpawning")
+                # Game has ended.
+                elif event_name == "GameEnd":
+                    # Victory
+                    if event["Result"] == "Win":
+                        play_event_sound("Victory")
+                    # Defeat
+                    elif event["Result"] == "Lose":
+                        play_event_sound("Defeat")    
+                # TODO: killing streaks
+            previous_game_time = game_time
+            previous_event_count = event_count
+        except Exception as e:
+            # Probably not in game or some other catastrophic error.
+            print(e)
+            log_file.write(repr(e) + "\n")
+            log_file.flush()
+            time.sleep(5)
+            
+
+if __name__ == '__main__':
+    # GUI that shows a slider for sound volume control and a button for testing volume.
+    gui = Tk()
+    gui.geometry("250x100")
+    gui.title("LoL Announcer")
+    gui.protocol("WM_DELETE_WINDOW", close_script)
+    volume_slider = Scale(gui, from_=0, to=100, orient=HORIZONTAL, command=update_volume)
+    volume_slider.set(100)
+    volume_slider.pack()
+    Button(gui, text='Test volume', command=play_random_sound).pack()
+    announcer_thread = threading.Thread(target=announcer_loop)
+    announcer_thread.start()
+    mainloop()
+