You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

89 lines
2.2 KiB
Python

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()