Download Game! Currently 96 players. Last logged in:SerkeiiLysanderOmrilBaroque

Blitzer's Blog >> 72579

Back to blogs index
Posted: 19 Sep 2026 17:46 [ permalink ]
Toteutetaan makrotallennin, joka sitoo pynput-kirjaston kuuntelijat
nC$ytC6nkaappaukseen. Joka kerta kun hiirtC$ klikataan, skripti tallentaa
ympC$rC6ivC$n alueen (esim. 60x60 pikseliC$) kuvatiedostoksi ja kirjaa
tapahtuman JSON-taulukkoon. TC$mC$ JSON-taulukko on suoraan yhteensopiva
olemassa olevan X11-Vision-APIn meta_run-moottorisi kanssa.
Tarvitset pynput- ja mss-kirjastot (toimii erittC$in nopeasti
X11-ympC$ristC6ssC$):
pip install pynput mss
Makrotallennin: bot_recorder.py
import json
import time
import os
from pynput import mouse, keyboard
from mss import mss

# Asetukset
CROP_SIZE = 60  # Kaapattavan alueen leveys ja korkeus pikseleinC$
OUTPUT_DIR = "/tmp/bot_templates"
OUTPUT_JSON = "/tmp/bot_macro.json"

os.makedirs(OUTPUT_DIR, exist_ok=True)
sct = mss()
actions = []
last_action_time = time.time()

def add_wait_action():
    """Laskee viiveen edellisestC$ tapahtumasta ja lisC$C$ wait-askeleen."""
    global last_action_time
    now = time.time()
    delay = round(now - last_action_time, 2)
    if delay > 0.1:
        actions.append({"action": "wait", "time": delay})
    last_action_time = now

def on_click(x, y, button, pressed):
    if pressed:
        add_wait_action()
        
        # MC$C$ritetC$C$n bounding box hiiren ympC$rille
        monitor = {
            "top": int(y - CROP_SIZE // 2),
            "left": int(x - CROP_SIZE // 2),
            "width": CROP_SIZE,
            "height": CROP_SIZE
        }
        
        filename = f"template_{int(time.time()*100)}.png"
        filepath = os.path.join(OUTPUT_DIR, filename)
        
        # Ota kuva ja tallenna
        sct_img = sct.grab(monitor)
        mss.tools.to_png(sct_img.rgb, sct_img.size, output=filepath)
        
        print(f"[KLIKKAUS] Tallennettu: {filepath} koordinaateissa ({x},
{y})")
        
        actions.append({
            "action": "vision_click",
            "template": filepath,
            "original_x": x,
            "original_y": y
        })

def on_press(key):
    add_wait_action()
    try:
        char = key.char
        if char:
            print(f"[KIRJAIMET] Tyyppi: {char}")
            actions.append({"action": "type", "text": char})
    except AttributeError:
        # ErikoisnC$ppC$imet (esim. enter, tab)
        key_name = str(key).replace("Key.", "")
        
        # PysC$ytysmekanismi: ESC lopettaa nauhoituksen
        if key == keyboard.Key.esc:
            print("
[Lopetetaan nauhoitus...]")
            with open(OUTPUT_JSON, 'w') as f:
                json.dump(actions, f, indent=4)
            print(f"Botin ohjelma tallennettu: {OUTPUT_JSON}")
            
            # PysC$ytetC$C$n kuuntelijat
            mouse_listener.stop()
            return False
            
        print(f"[NCPPCIN] Painettu: {key_name}")
        actions.append({"action": "key", "key": key_name})

print("Aloitetaan nauhoitus. Tee haluamasi toiminnot.")
print("PAINA ESC LOPETTAAKSESI JA TALLENTAAKSESI BOTIN OHJELMAN.")

# KC$ynnistetC$C$n kuuntelijat
mouse_listener = mouse.Listener(on_click=on_click)
mouse_listener.start()

with keyboard.Listener(on_press=on_press) as keyboard_listener:
    keyboard_listener.join()

Miten tC$mC$ integroituu arkkitehtuuriisi
 * Visuaalinen ankkurointi: Skripti ei tallenna pelkkiC$ hard_click
-koordinaatteja, vaan luo suoraan vision_click -tapahtumia. Kun ajat JSONin
meta_run -moottorissa, botti etsii ruudulta /tmp/bot_templates/ -kansiossa
olevan kuvaleikkeen (OpenCV-templatella) ja klikkaa sitC$, vaikka ikkuna olisi
siirtynyt.
 * Dynaamiset viiveet: Koodi laskee todellisen ajan (wait), joka kuluu
klikkausten ja nC$ppC$inpainallusten vC$lillC$, jotta botin toisto vastaa
ihmisen nopeutta.
 * Ketjuttaminen tekstinsyC6ttC6C6n: Tavalliset merkit menevC$t type-komentona
(jolloin API voi syC6ttC$C$ ne xdotool type -komennolla) ja erikoismerkit
(kuten Enter tai Tab) tallentuvat key-komentona.
TC$mC$ tuottaa suoraan valmiin JSON-rakenteen, jonka voit syC6ttC$C$ portissa
7711 pyC6rivC$lle X11-Vision-API:lle. Voidaanko tC$hC$n lisC$tC$ OCR-tunnistus
(jolloin kuvaleikkeen ottamisen lisC$ksi alueelta luetaan teksti Tesseractilla
fallbackia varten), vai riittC$C$kC6 pelkkC$ pikselikohtainen
templatetunnistus?