from evdev import UInput, ecodes as e import time # Create virtual keyboard ui = UInput({ e.EV_KEY: [getattr(e, f"KEY_{chr(c).upper()}") for c in range(ord('a'), ord('z')+1)] + [e.KEY_SPACE, e.KEY_UP, e.KEY_DOWN, e.KEY_LEFT, e.KEY_RIGHT, e.KEY_LEFTSHIFT, e.KEY_TAB, e.KEY_ENTER] }, name="virtual-keyboard") def press(key): ui.write(e.EV_KEY, key, 1) # key down ui.write(e.EV_KEY, key, 0) # key up ui.syn() def home(): print("Sending shift+tab") ui.write(e.EV_KEY, e.KEY_LEFTSHIFT, 1) # Press Ctrl ui.write(e.EV_KEY, e.KEY_TAB, 1) # Press 1 ui.syn() time.sleep(0.1) ui.write(e.EV_KEY, e.KEY_LEFTSHIFT, 0) # Release 1 ui.write(e.EV_KEY, e.KEY_TAB, 0) # Release Ctrl ui.syn() def type_string(text): for ch in text: if ch == ' ': press(e.KEY_SPACE) elif 'a' <= ch <= 'z': key = getattr(e, f"KEY_{ch.upper()}") press(key) else: # ignore unsupported characters continue time.sleep(0.01) def run_a_game(name): home() press(e.KEY_LEFT) press(e.KEY_LEFT) press(e.KEY_DOWN) press(e.KEY_ENTER) time.sleep(0.3) press(e.KEY_UP) press(e.KEY_UP) press(e.KEY_LEFT) press(e.KEY_LEFT) press(e.KEY_LEFT) press(e.KEY_LEFT) time.sleep(0.1) type_string(name.lower()) time.sleep(0.3) press(e.KEY_DOWN) press(e.KEY_DOWN) press(e.KEY_ENTER) time.sleep(0.2) press(e.KEY_ENTER) from http.server import BaseHTTPRequestHandler, HTTPServer from urllib.parse import urlparse, parse_qs class Handler(BaseHTTPRequestHandler): def do_GET(self): # Parse URL parsed = urlparse(self.path) query = parse_qs(parsed.query) # Get parameter (e.g. ?=hello) msg = query.get("game", [""])[0] print(f"Received msg: {msg}") run_a_game(msg) # Send response self.send_response(200) self.send_header("Content-type", "text/plain") self.end_headers() self.wfile.write(f"OK: {msg}".encode()) # Start server port = 8111 server = HTTPServer(("0.0.0.0", port), Handler) print(f"Listening on http://0.0.0.0:{port}") server.serve_forever()