Files
my-botty/src/main.py
T

100 lines
3.9 KiB
Python

import keyboard
import os
from beautifultable import BeautifulTable
import logging
import traceback
from game_controller import GameController
from utils.misc import restore_d2r_window_visibility
from version import __version__
from utils.graphic_debugger import GraphicDebuggerController
from utils.auto_settings import adjust_settings, backup_settings, restore_settings_from_backup
from config import Config
from logger import Logger
# Will be initialized in the __main__() function
config = None
game_controller = None
debugger_controller = None
def start_or_pause_bot():
global game_controller
global debugger_controller
if GameController.is_running:
game_controller.toggle_pause_bot()
else:
# Kill the debugger if we invoke botty
debugger_controller.stop()
game_controller.start()
def start_or_stop_graphic_debugger():
global game_controller
global debugger_controller
if GraphicDebuggerController.is_running:
debugger_controller.stop()
else:
# Kill botty if we invoke the debugger
game_controller.stop()
debugger_controller.start()
def on_exit(config: Config):
Logger.info(f'Force Exit')
if config.advanced_options['d2r_windows_always_on_top']:
restore_d2r_window_visibility()
os._exit(1)
def main():
if config.general["logg_lvl"] == "info":
Logger.init(logging.INFO)
elif config.general["logg_lvl"] == "debug":
Logger.init(logging.DEBUG)
else:
print(f"ERROR: Unkown logg_lvl {config.general['logg_lvl']}. Must be one of [info, debug]")
# Create folder for debug screenshots if they dont exist yet
if not os.path.exists("stats"):
os.system("mkdir stats")
if not os.path.exists("info_screenshots") and (config.general["info_screenshots"] or config.general["message_api_type"] == "discord"):
os.system("mkdir info_screenshots")
if not os.path.exists("loot_screenshots") and (config.general["loot_screenshots"] or config.general["message_api_type"] == "discord"):
os.system("mkdir loot_screenshots")
print(f"============ Botty {__version__} [name: {config.general['name']}] ============")
print("\nFor gettings started and documentation\nplease read https://github.com/aeon0/botty\n")
table = BeautifulTable()
table.rows.append([config.general['restore_settings_from_backup_key'], "Restore D2R settings from backup"])
table.rows.append([config.general['settings_backup_key'], "Backup D2R current settings"])
table.rows.append([config.general['auto_settings_key'], "Adjust D2R settings"])
table.rows.append([config.general['graphic_debugger_key'], "Start / Stop Graphic debugger"])
table.rows.append([config.general['resume_key'], "Start / Pause Botty"])
table.rows.append([config.general['exit_key'], "Stop bot"])
table.columns.header = ["hotkey", "action"]
print(table)
print("\n")
keyboard.add_hotkey(config.general['auto_settings_key'], lambda: adjust_settings(config))
keyboard.add_hotkey(config.general['graphic_debugger_key'], lambda: start_or_stop_graphic_debugger())
keyboard.add_hotkey(config.general['restore_settings_from_backup_key'], lambda: restore_settings_from_backup(config))
keyboard.add_hotkey(config.general['settings_backup_key'], lambda: backup_settings(config))
keyboard.add_hotkey(config.general['resume_key'], lambda c: start_or_pause_bot(), args=[config])
keyboard.add_hotkey(config.general["exit_key"], lambda: on_exit(config))
keyboard.wait()
if __name__ == "__main__":
# To avoid cmd just closing down, except any errors and add a input() to the end
try:
config = Config(print_warnings=True)
game_controller = GameController(config)
debugger_controller = GraphicDebuggerController(config)
main()
except:
traceback.print_exc()
print("Press Enter to exit ...")
input()