import pyautogui from threading import Thread from time import sleep from .input import KEYMAP, Input, Button, Event class InputHandler: def __init__(self): self.current: Input = {button: False for button in Button} self.previous: Input = {button: False for button in Button} print(f"sanity check: {self.previous=}, {self.current=}") def set(self, input: Input): # MUST NOT BLOCK # to be called from asyncio context self.current = input def get(self) -> list[Event]: events = [] for button in Button: match (self.previous[button], self.current[button]): case (True, False): events.append(Event(button, "up")) case (False, True): events.append(Event(button, "down")) self.previous = self.current return events input = InputHandler() class Runner(Thread): def __init__(self): super().__init__() self.running = True def stop(self): self.running = False def run(self): while self.running: events = input.get() for event in events: print(f"[pag] key{event.direction} {event.button}") if event.direction == "down": pyautogui.keyDown(KEYMAP[event.button]) else: pyautogui.keyUp(KEYMAP[event.button]) sleep(0.05)