Command API

Command は、マクロが NyX の実行環境へ操作を依頼するための公開 API です。コントローラー操作、待機、キャプチャ、画像入出力、通知、ログは Command 経由で行います。

入力と待機

API 説明
cmd.press(*keys, dur=0.1, wait=0.1) 指定したキーを押し、dur 秒後に離し、必要に応じて wait 秒待ちます。
cmd.hold(*keys) 現在の入力状態を指定キーの押下状態へ変更します。
cmd.release(*keys) 指定キーを離します。引数なしの場合は全解除として扱います。
cmd.wait(sec) 中断要求を確認しながら待機します。長い待機では time.sleep() ではなくこちらを使います。
cmd.stop() マクロの協調キャンセルを要求します。
cmd.press(Button.A, dur=0.06, wait=0.08)
cmd.hold(Button.L, Button.R)
cmd.wait(1.0)
cmd.release()

キャプチャ

frame = cmd.capture()
cmd.save_artifact_img("snapshot.png", frame)

cmd.capture(crop_region=None, grayscale=False) は、最新フレームを 1280x720 へリサイズして返します。crop_region(x, y, width, height) です。範囲外の crop は ValueError になります。フレームがまだ取得できない場合は FrameNotReadyError を送出します。

3DS の HD キャプチャでは、画面本体を THREEDS_HD_CONTENT = (340, 0, 600, 720)、下画面を THREEDS_HD_BOTTOM_SCREEN = (400, 360, 480, 360) として扱います。

画像入出力と成果物

API 説明
cmd.load_img(name, grayscale=False) resources/<macro_id>/assets を優先して画像 asset を読み込みます。
cmd.load_blob(name) resources/<macro_id>/assets から任意 bytes asset を読み込みます。
cmd.save_artifact_img(name, image) resources/<macro_id>/artifacts/<artifact_dir_name> へ画像 artifact を保存します。
cmd.save_artifact_blob(name, data) resources/<macro_id>/artifacts/<artifact_dir_name> へ任意 bytes artifact を保存します。
cmd.load_artifact_img(ref_or_name) 保存済み画像 artifact を読み戻します。
cmd.load_artifact_blob(ref_or_name) 保存済み bytes artifact を読み戻します。

name は assets root または artifact scope からの相対パスです。固定して再利用したい生成物は scope=ArtifactScope.STABLE を指定して resources/<macro_id>/artifacts/stable に保存します。設定ファイルに保存するパス表記では / を使います。

画像入出力の失敗は ResourceError 系で送出されます。安全でない path は ResourcePathError、資材や artifact が見つからない場合は ResourceNotFoundError、画像や bytes として読み込めない場合は ResourceReadError、artifact を書き込めない場合は ResourceWriteError です。

ログと通知

cmd.log("search started", level="INFO")
cmd.notify("macro completed")
cmd.notify("macro completed with image", frame)

cmd.log() はユーザ向けログを出します。level には DEBUG, INFO, WARNING, ERROR, CRITICAL を指定できます。cmd.notify() は設定済みの外部通知へ送信します。img=None は画像添付なしの正常な通知です。

キーボード入力

API 説明
cmd.keyboard(text) 英数字テキストを送信します。
cmd.type(key) KeyCode または SpecialKeyCode を 1 キー送信します。

3DS 向け追加操作

API 説明
cmd.touch(x, y, dur=0.1, wait=0.1) 3DS touch 対応プロトコルで touch down / wait / touch up を行います。
cmd.touch_down(x, y) 指定座標を押し続けます。
cmd.touch_up() touch 入力を離します。
cmd.disable_sleep(enabled=True) 対応プロトコルでスリープ制御を切り替えます。

対応していないプロトコルでは NotImplementedError が送出されます。